Skip to content

Commit 0215d2c

Browse files
committed
arm64_32: extend @llvm.stackguard call to in-DAG 64-bits before handing off
Pointers are 64-bits in the DAG, so we need to extend the result of loading the cookie when building the DAG.
1 parent da04f30 commit 0215d2c

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6956,11 +6956,12 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
69566956
case Intrinsic::stackguard: {
69576957
MachineFunction &MF = DAG.getMachineFunction();
69586958
const Module &M = *MF.getFunction().getParent();
6959+
EVT PtrTy = TLI.getValueType(DAG.getDataLayout(), I.getType());
69596960
SDValue Chain = getRoot();
69606961
if (TLI.useLoadStackGuardNode()) {
69616962
Res = getLoadStackGuard(DAG, sdl, Chain);
6963+
Res = DAG.getPtrExtOrTrunc(Res, sdl, PtrTy);
69626964
} else {
6963-
EVT PtrTy = TLI.getValueType(DAG.getDataLayout(), I.getType());
69646965
const Value *Global = TLI.getSDagStackGuard(M);
69656966
Align Align = DAG.getDataLayout().getPrefTypeAlign(Global->getType());
69666967
Res = DAG.getLoad(PtrTy, sdl, Chain, getValue(Global),

llvm/test/CodeGen/AArch64/arm64_32.ll

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,5 +759,19 @@ define void @test_bzero(i64 %in) {
759759

760760
declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1)
761761

762+
define i1 @test_stackguard(ptr %p1) {
763+
; CHECK-LABEL: test_stackguard:
764+
; CHECK: adrp x[[TMP:[0-9]+]], ___stack_chk_guard@GOTPAGE
765+
; CHECK: ldr [[GUARD:w[0-9]+]], [x[[TMP]], ___stack_chk_guard@GOTPAGEOFF]
766+
; CHECK: cmp [[GUARD]], w
767+
768+
%p2 = call ptr @llvm.stackguard()
769+
%res = icmp ne ptr %p2, %p1
770+
ret i1 %res
771+
}
772+
declare ptr @llvm.stackguard()
773+
@__stack_chk_guard = external global i32
774+
775+
762776
!llvm.module.flags = !{!0}
763777
!0 = !{i32 7, !"PIC Level", i32 2}

0 commit comments

Comments
 (0)