aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/X86
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-08-24 15:55:12 +0000
committerDan Gohman <gohman@apple.com>2010-08-24 15:55:12 +0000
commit92b651fb199557b9e54c7263e83c34ab39eb644f (patch)
tree72b6e581c96f5da87956a442876bb09e85fc5388 /lib/Target/X86
parent2426668562623cf94809309c93b41ecea856b19d (diff)
downloadexternal_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.cpp4
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;
}