Author: Trung Nguyen Date: 2026-07-25T22:07:58Z New Revision: af4e527f138bbdf7dd298b5177006e82a3c47591
URL: https://github.com/llvm/llvm-project/commit/af4e527f138bbdf7dd298b5177006e82a3c47591 DIFF: https://github.com/llvm/llvm-project/commit/af4e527f138bbdf7dd298b5177006e82a3c47591.diff LOG: [ARM] Fix chkstk definition (#210940) (cherry picked from commit 77981e39b5fa26ab43a3a3611fbb247321e33d78) Added: llvm/test/CodeGen/ARM/Windows/chkstk-cpsr-clobber.ll Modified: llvm/lib/Target/ARM/ARMInstrInfo.td Removed: ################################################################################ diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td index 397342841a89b..4ba7a447e2edf 100644 --- a/llvm/lib/Target/ARM/ARMInstrInfo.td +++ b/llvm/lib/Target/ARM/ARMInstrInfo.td @@ -6041,7 +6041,7 @@ def MSRbanked : ABI<0b0001, (outs), (ins banked_reg:$banked, GPRnopc:$Rn), def win__chkstk : SDNode<"ARMISD::WIN__CHKSTK", SDTNone, [SDNPHasChain, SDNPSideEffect]>; -let usesCustomInserter = 1, Uses = [R4], Defs = [R4, SP], hasNoSchedulingInfo = 1 in +let usesCustomInserter = 1, Uses = [R4], Defs = [R4, R12, LR, SP, CPSR], hasNoSchedulingInfo = 1 in def WIN__CHKSTK : PseudoInst<(outs), (ins), NoItinerary, [(win__chkstk)]>; // Windows' divide by zero check diff --git a/llvm/test/CodeGen/ARM/Windows/chkstk-cpsr-clobber.ll b/llvm/test/CodeGen/ARM/Windows/chkstk-cpsr-clobber.ll new file mode 100644 index 0000000000000..b0be9df632557 --- /dev/null +++ b/llvm/test/CodeGen/ARM/Windows/chkstk-cpsr-clobber.ll @@ -0,0 +1,25 @@ +; RUN: llc -O2 -mtriple=thumbv7-windows %s -o - | FileCheck %s + +; Ensure that __chkstk correctly marks CPSR as clobbered so that conditional +; operations after dynamic stack allocation re-evaluate condition flags. + +define arm_aapcs_vfpcc void @chkstk_cpsr_clobber(i32 %n) { +entry: + %cmp = icmp sgt i32 %n, 0 + %max = select i1 %cmp, i32 %n, i32 1 + %vla = alloca i8, i32 %max + br i1 %cmp, label %then, label %exit + +then: + store volatile i8 1, ptr %vla + ret void + +exit: + ret void +} + +; CHECK-LABEL: chkstk_cpsr_clobber: +; CHECK: bl __chkstk +; CHECK: sub.w sp, sp, r4 +; CHECK: cmp r0, #0 +; CHECK: it gt _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
