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 | c88fda477ae914777b0b676c4efad8281d838cc1 (patch) | |
tree | ac914e45ad807b05002a69ea4b28c9f5abf40764 /llvm/lib/Target | |
parent | cd87859346c20d02c38884867010c6a67103989d (diff) | |
download | bcm5719-llvm-c88fda477ae914777b0b676c4efad8281d838cc1.tar.gz bcm5719-llvm-c88fda477ae914777b0b676c4efad8281d838cc1.zip |
Fix X86's isLegalAddressingMode to recognize that static addresses
need not be RIP-relative in small mode.
llvm-svn: 111917
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index e186058aa5c..ff884a62a24 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/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; } |