summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86Subtarget.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-03-28 21:40:47 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-03-28 21:40:47 +0000
commitf3e8b0575d9eacc388bd4e1107828e30a15dc2d9 (patch)
treeb20cf582c20d363e47a68641027d8f6897960adb /lib/Target/X86/X86Subtarget.cpp
parent8a21cb2433bcda50fb0434e5377d6bf54fcf16b7 (diff)
downloadllvm-f3e8b0575d9eacc388bd4e1107828e30a15dc2d9.tar.gz
llvm-f3e8b0575d9eacc388bd4e1107828e30a15dc2d9.tar.bz2
llvm-f3e8b0575d9eacc388bd4e1107828e30a15dc2d9.tar.xz
X86: Disable IsLegalToCallImmediateAddr for Win32
WinCOFF cannot form PC relative relocations to support absolute MCValues. We should reenable this once WinCOFF supports emission of IMAGE_REL_I386_REL32 relocations. This fixes PR19272. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205058 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86Subtarget.cpp')
-rw-r--r--lib/Target/X86/X86Subtarget.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp
index 16161cfbd8..207d0baa50 100644
--- a/lib/Target/X86/X86Subtarget.cpp
+++ b/lib/Target/X86/X86Subtarget.cpp
@@ -165,7 +165,10 @@ bool X86Subtarget::hasSinCos() const {
/// IsLegalToCallImmediateAddr - Return true if the subtarget allows calls
/// to immediate address.
bool X86Subtarget::IsLegalToCallImmediateAddr(const TargetMachine &TM) const {
- if (In64BitMode)
+ // FIXME: I386 PE/COFF supports PC relative calls using IMAGE_REL_I386_REL32
+ // but WinCOFFObjectWriter::RecordRelocation cannot emit them. Once it does,
+ // the following check for Win32 should be removed.
+ if (In64BitMode || isTargetWin32())
return false;
return isTargetELF() || TM.getRelocationModel() == Reloc::Static;
}