[mips] do not use FastISel when -mxgot is present
The clang compiler by default uses FastISel when invoked with -O0, which is also the default. In that case, passing of -mxgot does not get honored, i.e. the code path that is to deal with large got is not taken. Clang produces same output regardless of -mxgot being present or not. This change checks whether -mxgot is passed as an option, and turns off FastISel if it is. Patch by Stefan Maksimovic. Differential Revision: https://reviews.llvm.org/D33593 llvm-svn: 304906
This commit is contained in:
parent
28a61d64e2
commit
3c039d968e
|
@ -470,8 +470,9 @@ MipsTargetLowering::createFastISel(FunctionLoweringInfo &funcInfo,
|
|||
!Subtarget.hasMips32r6() && !Subtarget.inMips16Mode() &&
|
||||
!Subtarget.inMicroMipsMode();
|
||||
|
||||
// Disable if we don't generate PIC or the ABI isn't O32.
|
||||
if (!TM.isPositionIndependent() || !TM.getABI().IsO32())
|
||||
// Disable if either of the following is true:
|
||||
// We do not generate PIC, the ABI is not O32, LargeGOT is being used.
|
||||
if (!TM.isPositionIndependent() || !TM.getABI().IsO32() || LargeGOT)
|
||||
UseFastISel = false;
|
||||
|
||||
return UseFastISel ? Mips::createFastISel(funcInfo, libInfo) : nullptr;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
; RUN: llc -march=mipsel -mxgot -relocation-model=pic < %s | FileCheck %s -check-prefix=O32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mxgot -relocation-model=pic < %s | \
|
||||
; RUN: FileCheck %s -check-prefix=N64
|
||||
; RUN: llc -march=mipsel -mxgot -relocation-model=pic -fast-isel < %s | FileCheck %s -check-prefix=O32
|
||||
; RUN: llc -march=mips64el -mcpu=mips64r2 -mxgot -relocation-model=pic -fast-isel < %s | \
|
||||
; RUN: FileCheck %s -check-prefix=N64
|
||||
|
||||
@v0 = external global i32
|
||||
|
||||
|
|
Loading…
Reference in New Issue