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 | e334b9ceb739cf5bf51edd2faf327ccfaab3ded1 (patch) | |
| tree | 72b6e581c96f5da87956a442876bb09e85fc5388 /lib/Target | |
| parent | 094b2bb4ea19db217fe2bc3a8ed4c0743e42e0d7 (diff) | |
| download | external_llvm-e334b9ceb739cf5bf51edd2faf327ccfaab3ded1.zip external_llvm-e334b9ceb739cf5bf51edd2faf327ccfaab3ded1.tar.gz external_llvm-e334b9ceb739cf5bf51edd2faf327ccfaab3ded1.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')
| -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; } |
