[llvm] 17d6aa0 - [ARM] Fix expansion of ABS in a call sequence (#147270)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 7 07:52:41 PDT 2025
Author: Jay Foad
Date: 2025-07-07T15:52:37+01:00
New Revision: 17d6aa01ec0c843b636cde0bc7e0903523c144aa
URL: https://github.com/llvm/llvm-project/commit/17d6aa01ec0c843b636cde0bc7e0903523c144aa
DIFF: https://github.com/llvm/llvm-project/commit/17d6aa01ec0c843b636cde0bc7e0903523c144aa.diff
LOG: [ARM] Fix expansion of ABS in a call sequence (#147270)
Fixes #147162
Added:
Modified:
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/test/CodeGen/ARM/iabs.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index eb3c741c6ded2..5378ca2a485d4 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -12359,6 +12359,11 @@ ARMTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
Fn->insert(BBI, RSBBB);
Fn->insert(BBI, SinkBB);
+ // Set the call frame size on entry to the new basic blocks.
+ unsigned CallFrameSize = TII->getCallFrameSizeAt(MI);
+ RSBBB->setCallFrameSize(CallFrameSize);
+ SinkBB->setCallFrameSize(CallFrameSize);
+
Register ABSSrcReg = MI.getOperand(1).getReg();
Register ABSDstReg = MI.getOperand(0).getReg();
bool ABSSrcKIll = MI.getOperand(1).isKill();
diff --git a/llvm/test/CodeGen/ARM/iabs.ll b/llvm/test/CodeGen/ARM/iabs.ll
index fffa9555b2966..758fe7507c0b2 100644
--- a/llvm/test/CodeGen/ARM/iabs.ll
+++ b/llvm/test/CodeGen/ARM/iabs.ll
@@ -50,3 +50,28 @@ define i64 @test3(i64 %a) {
%abs = select i1 %b, i64 %a, i64 %tmp1neg
ret i64 %abs
}
+
+declare void @callee(...)
+
+define void @testcallframe(i32 %a) {
+; CHECK-LABEL: testcallframe:
+; CHECK: @ %bb.0: @ %bb
+; CHECK-NEXT: .save {r11, lr}
+; CHECK-NEXT: push {r11, lr}
+; CHECK-NEXT: .pad #8
+; CHECK-NEXT: sub sp, sp, #8
+; CHECK-NEXT: cmp r0, #0
+; CHECK-NEXT: mov r1, #0
+; CHECK-NEXT: rsbmi r0, r0, #0
+; CHECK-NEXT: mov r2, #0
+; CHECK-NEXT: mov r3, #0
+; CHECK-NEXT: str r1, [sp]
+; CHECK-NEXT: bl callee
+; CHECK-NEXT: add sp, sp, #8
+; CHECK-NEXT: pop {r11, lr}
+; CHECK-NEXT: bx lr
+bb:
+ %i = tail call i32 @llvm.abs.i32(i32 %a, i1 false)
+ tail call void @callee(i32 %i, i32 0, i32 0, i32 0, i32 0)
+ ret void
+}
More information about the llvm-commits
mailing list