[llvm] 0215d2c - arm64_32: extend @llvm.stackguard call to in-DAG 64-bits before handing off
Tim Northover via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 19 02:32:34 PST 2024
Author: Tim Northover
Date: 2024-02-19T10:32:29Z
New Revision: 0215d2c58bfaae40332075cca566d83e152330a6
URL: https://github.com/llvm/llvm-project/commit/0215d2c58bfaae40332075cca566d83e152330a6
DIFF: https://github.com/llvm/llvm-project/commit/0215d2c58bfaae40332075cca566d83e152330a6.diff
LOG: 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.
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/test/CodeGen/AArch64/arm64_32.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 28664b2ed9052d..b2782cbdc73e86 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -6956,11 +6956,12 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
case Intrinsic::stackguard: {
MachineFunction &MF = DAG.getMachineFunction();
const Module &M = *MF.getFunction().getParent();
+ EVT PtrTy = TLI.getValueType(DAG.getDataLayout(), I.getType());
SDValue Chain = getRoot();
if (TLI.useLoadStackGuardNode()) {
Res = getLoadStackGuard(DAG, sdl, Chain);
+ Res = DAG.getPtrExtOrTrunc(Res, sdl, PtrTy);
} else {
- EVT PtrTy = TLI.getValueType(DAG.getDataLayout(), I.getType());
const Value *Global = TLI.getSDagStackGuard(M);
Align Align = DAG.getDataLayout().getPrefTypeAlign(Global->getType());
Res = DAG.getLoad(PtrTy, sdl, Chain, getValue(Global),
diff --git a/llvm/test/CodeGen/AArch64/arm64_32.ll b/llvm/test/CodeGen/AArch64/arm64_32.ll
index 16e2e84a14329d..716fdd6eac15c6 100644
--- a/llvm/test/CodeGen/AArch64/arm64_32.ll
+++ b/llvm/test/CodeGen/AArch64/arm64_32.ll
@@ -759,5 +759,19 @@ define void @test_bzero(i64 %in) {
declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1)
+define i1 @test_stackguard(ptr %p1) {
+; CHECK-LABEL: test_stackguard:
+; CHECK: adrp x[[TMP:[0-9]+]], ___stack_chk_guard at GOTPAGE
+; CHECK: ldr [[GUARD:w[0-9]+]], [x[[TMP]], ___stack_chk_guard at GOTPAGEOFF]
+; CHECK: cmp [[GUARD]], w
+
+ %p2 = call ptr @llvm.stackguard()
+ %res = icmp ne ptr %p2, %p1
+ ret i1 %res
+}
+declare ptr @llvm.stackguard()
+ at __stack_chk_guard = external global i32
+
+
!llvm.module.flags = !{!0}
!0 = !{i32 7, !"PIC Level", i32 2}
More information about the llvm-commits
mailing list