diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-03-28 21:40:47 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-03-28 21:40:47 +0000 |
commit | 02f2188bb90a8480888706db59218602b8d9d78b (patch) | |
tree | 70086464222e75890252fc72f5bb4f7bb054ec4e | |
parent | bc69bce7de5d110b5ca5903b0bfd862d05656ac8 (diff) | |
download | bcm5719-llvm-02f2188bb90a8480888706db59218602b8d9d78b.tar.gz bcm5719-llvm-02f2188bb90a8480888706db59218602b8d9d78b.zip |
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.
llvm-svn: 205058
-rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.cpp | 5 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/call-imm.ll | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86Subtarget.cpp b/llvm/lib/Target/X86/X86Subtarget.cpp index 16161cfbd8f..207d0baa50a 100644 --- a/llvm/lib/Target/X86/X86Subtarget.cpp +++ b/llvm/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; } diff --git a/llvm/test/CodeGen/X86/call-imm.ll b/llvm/test/CodeGen/X86/call-imm.ll index 8753594df10..898b4ec203a 100644 --- a/llvm/test/CodeGen/X86/call-imm.ll +++ b/llvm/test/CodeGen/X86/call-imm.ll @@ -1,6 +1,7 @@ ; RUN: llc < %s -mtriple=i386-apple-darwin -relocation-model=static | FileCheck -check-prefix X86STA %s ; RUN: llc < %s -mtriple=i386-apple-darwin -relocation-model=pic | FileCheck -check-prefix X86PIC %s ; RUN: llc < %s -mtriple=i386-pc-linux -relocation-model=dynamic-no-pic | FileCheck -check-prefix X86DYN %s +; RUN: llc < %s -mtriple=i386-pc-win32 -relocation-model=static | FileCheck -check-prefix X86WINSTA %s ; Call to immediate is not safe on x86-64 unless we *know* that the ; call will be within 32-bits pcrel from the dest immediate. @@ -20,4 +21,5 @@ entry: ; X86STA: {{call.*12345678}} ; X86PIC-NOT: {{call.*12345678}} ; X86DYN: {{call.*12345678}} +; X86WINSTA: {{call.*[*]%eax}} ; X64: {{call.*[*]%rax}} |