forked from OSchip/llvm-project
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:
parent
d26d85c1f5
commit
2f3b3f3182
|
@ -20609,8 +20609,10 @@ X86TargetLowering::EmitLoweredWinAlloca(MachineInstr *MI,
|
||||||
.addReg(X86::RAX);
|
.addReg(X86::RAX);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const char *StackProbeSymbol =
|
const char *StackProbeSymbol = (Subtarget->isTargetKnownWindowsMSVC() ||
|
||||||
Subtarget->isTargetKnownWindowsMSVC() ? "_chkstk" : "_alloca";
|
Subtarget->isTargetWindowsItanium())
|
||||||
|
? "_chkstk"
|
||||||
|
: "_alloca";
|
||||||
|
|
||||||
BuildMI(*BB, MI, DL, TII->get(X86::CALLpcrel32))
|
BuildMI(*BB, MI, DL, TII->get(X86::CALLpcrel32))
|
||||||
.addExternalSymbol(StackProbeSymbol)
|
.addExternalSymbol(StackProbeSymbol)
|
||||||
|
|
|
@ -426,6 +426,10 @@ public:
|
||||||
return TargetTriple.isWindowsGNUEnvironment();
|
return TargetTriple.isWindowsGNUEnvironment();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isTargetWindowsItanium() const {
|
||||||
|
return TargetTriple.isWindowsItaniumEnvironment();
|
||||||
|
}
|
||||||
|
|
||||||
bool isTargetCygMing() const { return TargetTriple.isOSCygMing(); }
|
bool isTargetCygMing() const { return TargetTriple.isOSCygMing(); }
|
||||||
|
|
||||||
bool isOSWindows() const { return TargetTriple.isOSWindows(); }
|
bool isOSWindows() const { return TargetTriple.isOSWindows(); }
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue