diff options
author | Dan Gohman <gohman@apple.com> | 2010-08-24 15:55:12 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-08-24 15:55:12 +0000 |
commit | 92b651fb199557b9e54c7263e83c34ab39eb644f (patch) | |
tree | 72b6e581c96f5da87956a442876bb09e85fc5388 /lib/Target/X86 | |
parent | 2426668562623cf94809309c93b41ecea856b19d (diff) | |
download | external_llvm-92b651fb199557b9e54c7263e83c34ab39eb644f.zip external_llvm-92b651fb199557b9e54c7263e83c34ab39eb644f.tar.gz external_llvm-92b651fb199557b9e54c7263e83c34ab39eb644f.tar.bz2 |
Fix X86's isLegalAddressingMode to recognize that static addresses
need not be RIP-relative in small mode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111917 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86')
-rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index e186058..ff884a6 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -8171,6 +8171,7 @@ bool X86TargetLowering::isLegalAddressingMode(const AddrMode &AM, const Type *Ty) const { // X86 supports extremely general addressing modes. CodeModel::Model M = getTargetMachine().getCodeModel(); + Reloc::Model R = getTargetMachine().getRelocationModel(); // X86 allows a sign-extended 32-bit immediate field as a displacement. if (!X86::isOffsetSuitableForCodeModel(AM.BaseOffs, M, AM.BaseGV != NULL)) @@ -8190,7 +8191,8 @@ bool X86TargetLowering::isLegalAddressingMode(const AddrMode &AM, return false; // If lower 4G is not available, then we must use rip-relative addressing. - if (Subtarget->is64Bit() && (AM.BaseOffs || AM.Scale > 1)) + if ((M != CodeModel::Small || R != Reloc::Static) && + Subtarget->is64Bit() && (AM.BaseOffs || AM.Scale > 1)) return false; } |