X86: use the correct alloca symbol for Windows Itanium

Windows itanium targets the MSVCRT, and the stack probe symbol is provided by
MSVCRT.  This corrects the emission of stack probes on i686-windows-itanium.

llvm-svn: 222439
This commit is contained in:
Saleem Abdulrasool 2014-11-20 18:01:26 +00:00
parent d26d85c1f5
commit 2f3b3f3182
3 changed files with 24 additions and 2 deletions

View File

@ -20609,8 +20609,10 @@ X86TargetLowering::EmitLoweredWinAlloca(MachineInstr *MI,
.addReg(X86::RAX);
}
} else {
const char *StackProbeSymbol =
Subtarget->isTargetKnownWindowsMSVC() ? "_chkstk" : "_alloca";
const char *StackProbeSymbol = (Subtarget->isTargetKnownWindowsMSVC() ||
Subtarget->isTargetWindowsItanium())
? "_chkstk"
: "_alloca";
BuildMI(*BB, MI, DL, TII->get(X86::CALLpcrel32))
.addExternalSymbol(StackProbeSymbol)

View File

@ -426,6 +426,10 @@ public:
return TargetTriple.isWindowsGNUEnvironment();
}
bool isTargetWindowsItanium() const {
return TargetTriple.isWindowsItaniumEnvironment();
}
bool isTargetCygMing() const { return TargetTriple.isOSCygMing(); }
bool isOSWindows() const { return TargetTriple.isOSWindows(); }

View File

@ -0,0 +1,16 @@
; RUN: llc -mtriple i686-windows-itanium -filetype asm -o - %s | FileCheck %s
target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32"
target triple = "i686--windows-itanium"
declare void @external(i8*)
define dllexport void @alloca(i32 %sz) {
entry:
%vla = alloca i8, i32 %sz, align 1
call void @external(i8* %vla)
ret void
}
; CHECK: __chkstk