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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222439 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Saleem Abdulrasool 2014-11-20 18:01:26 +00:00
parent 12385e603f
commit e6c1fc9a44
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