[llvm] 1d0cceb - [ARM] Don't allocate memory if free space in segmented stack is just enough
John Brawn via llvm-commits
llvm-commits at lists.llvm.org
Tue May 2 05:10:21 PDT 2023
Author: Zhiyao Ma
Date: 2023-05-02T13:09:49+01:00
New Revision: 1d0ccebcd725309399262af346494242b064e2ed
URL: https://github.com/llvm/llvm-project/commit/1d0ccebcd725309399262af346494242b064e2ed
DIFF: https://github.com/llvm/llvm-project/commit/1d0ccebcd725309399262af346494242b064e2ed.diff
LOG: [ARM] Don't allocate memory if free space in segmented stack is just enough
Assuming that the stack grows downwards, it is fine if the stack
pointer is exactly at the stacklet boundary. We should use
less-or-equal condition when deciding whether to skip new memory
allocation.
Differential Revision: https://reviews.llvm.org/D149315
Added:
Modified:
llvm/lib/Target/ARM/ARMFrameLowering.cpp
llvm/test/CodeGen/ARM/debug-segmented-stacks.ll
llvm/test/CodeGen/ARM/segmented-stacks-dynamic.ll
llvm/test/CodeGen/ARM/segmented-stacks.ll
llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll
llvm/test/CodeGen/Thumb/segmented-stacks.ll
llvm/test/CodeGen/Thumb2/segmented-stacks.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/ARM/ARMFrameLowering.cpp b/llvm/lib/Target/ARM/ARMFrameLowering.cpp
index 643313daf9288..4496d4928ebe9 100644
--- a/llvm/lib/Target/ARM/ARMFrameLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMFrameLowering.cpp
@@ -3168,12 +3168,12 @@ void ARMFrameLowering::adjustForSegmentedStacks(
.addReg(ScratchReg1)
.add(predOps(ARMCC::AL));
- // This jump is taken if StackLimit < SP - stack required.
+ // This jump is taken if StackLimit <= SP - stack required.
Opcode = Thumb ? ARM::tBcc : ARM::Bcc;
- BuildMI(GetMBB, DL, TII.get(Opcode)).addMBB(PostStackMBB)
- .addImm(ARMCC::LO)
- .addReg(ARM::CPSR);
-
+ BuildMI(GetMBB, DL, TII.get(Opcode))
+ .addMBB(PostStackMBB)
+ .addImm(ARMCC::LS)
+ .addReg(ARM::CPSR);
// Calling __morestack(StackSize, Size of stack arguments).
// __morestack knows that the stack size requested is in SR0(r4)
diff --git a/llvm/test/CodeGen/ARM/debug-segmented-stacks.ll b/llvm/test/CodeGen/ARM/debug-segmented-stacks.ll
index 06050cbe8f841..e2f32fb45e206 100644
--- a/llvm/test/CodeGen/ARM/debug-segmented-stacks.ll
+++ b/llvm/test/CodeGen/ARM/debug-segmented-stacks.ll
@@ -20,7 +20,7 @@ define void @test_basic() #0 !dbg !4 {
; ARM-linux-NEXT: mov r5, sp
; ARM-linux-NEXT: ldr r4, [r4, #4]
; ARM-linux-NEXT: cmp r4, r5
-; ARM-linux-NEXT: blo .LBB0_2
+; ARM-linux-NEXT: bls .LBB0_2
; ARM-linux: mov r4, #48
; ARM-linux-NEXT: mov r5, #0
diff --git a/llvm/test/CodeGen/ARM/segmented-stacks-dynamic.ll b/llvm/test/CodeGen/ARM/segmented-stacks-dynamic.ll
index 6bfa7a3508b20..ca589afbb933a 100644
--- a/llvm/test/CodeGen/ARM/segmented-stacks-dynamic.ll
+++ b/llvm/test/CodeGen/ARM/segmented-stacks-dynamic.ll
@@ -27,7 +27,7 @@ false:
; ARM-linux-NEXT: mov r5, sp
; ARM-linux-NEXT: ldr r4, [r4, #4]
; ARM-linux-NEXT: cmp r4, r5
-; ARM-linux-NEXT: blo .LBB0_2
+; ARM-linux-NEXT: bls .LBB0_2
; ARM-linux: mov r4, #16
; ARM-linux-NEXT: mov r5, #0
@@ -47,7 +47,7 @@ false:
; ARM-android-NEXT: mov r5, sp
; ARM-android-NEXT: ldr r4, [r4, #252]
; ARM-android-NEXT: cmp r4, r5
-; ARM-android-NEXT: blo .LBB0_2
+; ARM-android-NEXT: bls .LBB0_2
; ARM-android: mov r4, #16
; ARM-android-NEXT: mov r5, #0
diff --git a/llvm/test/CodeGen/ARM/segmented-stacks.ll b/llvm/test/CodeGen/ARM/segmented-stacks.ll
index 3acae3ccf3236..a9c3be81562d2 100644
--- a/llvm/test/CodeGen/ARM/segmented-stacks.ll
+++ b/llvm/test/CodeGen/ARM/segmented-stacks.ll
@@ -21,7 +21,7 @@ define void @test_basic() #0 {
; ARM-linux-NEXT: mov r5, sp
; ARM-linux-NEXT: ldr r4, [r4, #4]
; ARM-linux-NEXT: cmp r4, r5
-; ARM-linux-NEXT: blo .LBB0_2
+; ARM-linux-NEXT: bls .LBB0_2
; ARM-linux: mov r4, #48
; ARM-linux-NEXT: mov r5, #0
@@ -40,7 +40,7 @@ define void @test_basic() #0 {
; ARM-android-NEXT: mov r5, sp
; ARM-android-NEXT: ldr r4, [r4, #252]
; ARM-android-NEXT: cmp r4, r5
-; ARM-android-NEXT: blo .LBB0_2
+; ARM-android-NEXT: bls .LBB0_2
; ARM-android: mov r4, #48
; ARM-android-NEXT: mov r5, #0
@@ -68,7 +68,7 @@ define i32 @test_nested(ptr nest %closure, i32 %other) #0 {
; ARM-linux-NEXT: mov r5, sp
; ARM-linux-NEXT: ldr r4, [r4, #4]
; ARM-linux-NEXT: cmp r4, r5
-; ARM-linux-NEXT: blo .LBB1_2
+; ARM-linux-NEXT: bls .LBB1_2
; ARM-linux: mov r4, #56
; ARM-linux-NEXT: mov r5, #0
@@ -87,7 +87,7 @@ define i32 @test_nested(ptr nest %closure, i32 %other) #0 {
; ARM-android-NEXT: mov r5, sp
; ARM-android-NEXT: ldr r4, [r4, #252]
; ARM-android-NEXT: cmp r4, r5
-; ARM-android-NEXT: blo .LBB1_2
+; ARM-android-NEXT: bls .LBB1_2
; ARM-android: mov r4, #56
; ARM-android-NEXT: mov r5, #0
@@ -114,7 +114,7 @@ define void @test_large() #0 {
; ARM-linux-NEXT: mrc p15, #0, r4, c13, c0, #3
; ARM-linux-NEXT: ldr r4, [r4, #4]
; ARM-linux-NEXT: cmp r4, r5
-; ARM-linux-NEXT: blo .LBB2_2
+; ARM-linux-NEXT: bls .LBB2_2
; ARM-linux: ldr r4, .LCPI2_0
; ARM-linux-NEXT: mov r5, #0
@@ -137,7 +137,7 @@ define void @test_large() #0 {
; ARM-android-NEXT: mrc p15, #0, r4, c13, c0, #3
; ARM-android-NEXT: ldr r4, [r4, #252]
; ARM-android-NEXT: cmp r4, r5
-; ARM-android-NEXT: blo .LBB2_2
+; ARM-android-NEXT: bls .LBB2_2
; ARM-android: ldr r4, .LCPI2_0
; ARM-android-NEXT: mov r5, #0
@@ -166,7 +166,7 @@ define fastcc void @test_fastcc() #0 {
; ARM-linux-NEXT: mov r5, sp
; ARM-linux-NEXT: ldr r4, [r4, #4]
; ARM-linux-NEXT: cmp r4, r5
-; ARM-linux-NEXT: blo .LBB3_2
+; ARM-linux-NEXT: bls .LBB3_2
; ARM-linux: mov r4, #48
; ARM-linux-NEXT: mov r5, #0
@@ -185,7 +185,7 @@ define fastcc void @test_fastcc() #0 {
; ARM-android-NEXT: mov r5, sp
; ARM-android-NEXT: ldr r4, [r4, #252]
; ARM-android-NEXT: cmp r4, r5
-; ARM-android-NEXT: blo .LBB3_2
+; ARM-android-NEXT: bls .LBB3_2
; ARM-android: mov r4, #48
; ARM-android-NEXT: mov r5, #0
@@ -212,7 +212,7 @@ define fastcc void @test_fastcc_large() #0 {
; ARM-linux-NEXT: mrc p15, #0, r4, c13, c0, #3
; ARM-linux-NEXT: ldr r4, [r4, #4]
; ARM-linux-NEXT: cmp r4, r5
-; ARM-linux-NEXT: blo .LBB4_2
+; ARM-linux-NEXT: bls .LBB4_2
; ARM-linux: ldr r4, .LCPI4_0
; ARM-linux-NEXT: mov r5, #0
@@ -235,7 +235,7 @@ define fastcc void @test_fastcc_large() #0 {
; ARM-android-NEXT: mrc p15, #0, r4, c13, c0, #3
; ARM-android-NEXT: ldr r4, [r4, #252]
; ARM-android-NEXT: cmp r4, r5
-; ARM-android-NEXT: blo .LBB4_2
+; ARM-android-NEXT: bls .LBB4_2
; ARM-android: ldr r4, .LCPI4_0
; ARM-android-NEXT: mov r5, #0
diff --git a/llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll b/llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll
index 4f8c39f6496b5..ed554ea84aff5 100644
--- a/llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll
+++ b/llvm/test/CodeGen/Thumb/segmented-stacks-dynamic.ll
@@ -27,7 +27,7 @@ false:
; Thumb-linux-NEXT: ldr r4, .LCPI0_0
; Thumb-linux-NEXT: ldr r4, [r4]
; Thumb-linux-NEXT: cmp r4, r5
-; Thumb-linux-NEXT: blo .LBB0_2
+; Thumb-linux-NEXT: bls .LBB0_2
; Thumb-linux: mov r4, #16
; Thumb-linux-NEXT: mov r5, #0
@@ -47,7 +47,7 @@ false:
; Thumb-android-NEXT: ldr r4, .LCPI0_0
; Thumb-android-NEXT: ldr r4, [r4]
; Thumb-android-NEXT: cmp r4, r5
-; Thumb-android-NEXT: blo .LBB0_2
+; Thumb-android-NEXT: bls .LBB0_2
; Thumb-android: mov r4, #16
; Thumb-android-NEXT: mov r5, #0
diff --git a/llvm/test/CodeGen/Thumb/segmented-stacks.ll b/llvm/test/CodeGen/Thumb/segmented-stacks.ll
index c3b66b3b91320..1118f4cc98e5b 100644
--- a/llvm/test/CodeGen/Thumb/segmented-stacks.ll
+++ b/llvm/test/CodeGen/Thumb/segmented-stacks.ll
@@ -19,7 +19,7 @@ define void @test_basic() #0 {
; Thumb-android-NEXT: ldr r4, .LCPI0_0
; Thumb-android-NEXT: ldr r4, [r4]
; Thumb-android-NEXT: cmp r4, r5
-; Thumb-android-NEXT: blo .LBB0_2
+; Thumb-android-NEXT: bls .LBB0_2
; Thumb-android: mov r4, #48
; Thumb-android-NEXT: mov r5, #0
@@ -43,7 +43,7 @@ define void @test_basic() #0 {
; Thumb-linux-NEXT: ldr r4, .LCPI0_0
; Thumb-linux-NEXT: ldr r4, [r4]
; Thumb-linux-NEXT: cmp r4, r5
-; Thumb-linux-NEXT: blo .LBB0_2
+; Thumb-linux-NEXT: bls .LBB0_2
; Thumb-linux: mov r4, #48
; Thumb-linux-NEXT: mov r5, #0
@@ -72,7 +72,7 @@ define i32 @test_nested(ptr nest %closure, i32 %other) #0 {
; Thumb-android-NEXT: ldr r4, .LCPI1_0
; Thumb-android-NEXT: ldr r4, [r4]
; Thumb-android-NEXT: cmp r4, r5
-; Thumb-android-NEXT: blo .LBB1_2
+; Thumb-android-NEXT: bls .LBB1_2
; Thumb-android: mov r4, #56
; Thumb-android-NEXT: mov r5, #0
@@ -92,7 +92,7 @@ define i32 @test_nested(ptr nest %closure, i32 %other) #0 {
; Thumb-linux-NEXT: ldr r4, .LCPI1_0
; Thumb-linux-NEXT: ldr r4, [r4]
; Thumb-linux-NEXT: cmp r4, r5
-; Thumb-linux-NEXT: blo .LBB1_2
+; Thumb-linux-NEXT: bls .LBB1_2
; Thumb-linux: mov r4, #56
; Thumb-linux-NEXT: mov r5, #0
@@ -121,7 +121,7 @@ define void @test_large() #0 {
; Thumb-android-NEXT: ldr r4, .LCPI2_3
; Thumb-android-NEXT: ldr r4, [r4]
; Thumb-android-NEXT: cmp r4, r5
-; Thumb-android-NEXT: blo .LBB2_2
+; Thumb-android-NEXT: bls .LBB2_2
; Thumb-android: ldr r4, .LCPI2_2
; Thumb-android-NEXT: mov r5, #0
@@ -146,7 +146,7 @@ define void @test_large() #0 {
; Thumb-linux-NEXT: ldr r4, .LCPI2_3
; Thumb-linux-NEXT: ldr r4, [r4]
; Thumb-linux-NEXT: cmp r4, r5
-; Thumb-linux-NEXT: blo .LBB2_2
+; Thumb-linux-NEXT: bls .LBB2_2
; Thumb-linux: ldr r4, .LCPI2_2
; Thumb-linux-NEXT: mov r5, #0
@@ -173,7 +173,7 @@ define fastcc void @test_fastcc() #0 {
; Thumb-android-NEXT: ldr r4, .LCPI3_0
; Thumb-android-NEXT: ldr r4, [r4]
; Thumb-android-NEXT: cmp r4, r5
-; Thumb-android-NEXT: blo .LBB3_2
+; Thumb-android-NEXT: bls .LBB3_2
; Thumb-android: mov r4, #48
; Thumb-android-NEXT: mov r5, #0
@@ -193,7 +193,7 @@ define fastcc void @test_fastcc() #0 {
; Thumb-linux-NEXT: ldr r4, .LCPI3_0
; Thumb-linux-NEXT: ldr r4, [r4]
; Thumb-linux-NEXT: cmp r4, r5
-; Thumb-linux-NEXT: blo .LBB3_2
+; Thumb-linux-NEXT: bls .LBB3_2
; Thumb-linux: mov r4, #48
; Thumb-linux-NEXT: mov r5, #0
@@ -222,7 +222,7 @@ define fastcc void @test_fastcc_large() #0 {
; Thumb-android-NEXT: ldr r4, .LCPI4_3
; Thumb-android-NEXT: ldr r4, [r4]
; Thumb-android-NEXT: cmp r4, r5
-; Thumb-android-NEXT: blo .LBB4_2
+; Thumb-android-NEXT: bls .LBB4_2
; Thumb-android: ldr r4, .LCPI4_2
; Thumb-android-NEXT: mov r5, #0
@@ -247,7 +247,7 @@ define fastcc void @test_fastcc_large() #0 {
; Thumb-linux-NEXT: ldr r4, .LCPI4_3
; Thumb-linux-NEXT: ldr r4, [r4]
; Thumb-linux-NEXT: cmp r4, r5
-; Thumb-linux-NEXT: blo .LBB4_2
+; Thumb-linux-NEXT: bls .LBB4_2
; Thumb-linux: ldr r4, .LCPI4_2
; Thumb-linux-NEXT: mov r5, #0
diff --git a/llvm/test/CodeGen/Thumb2/segmented-stacks.ll b/llvm/test/CodeGen/Thumb2/segmented-stacks.ll
index 6d3dbf4eb38f6..60f029c13719e 100644
--- a/llvm/test/CodeGen/Thumb2/segmented-stacks.ll
+++ b/llvm/test/CodeGen/Thumb2/segmented-stacks.ll
@@ -14,7 +14,7 @@ define void @test_basic() #0 {
; THUMB-NEXT: mov r5, sp
; THUMB-NEXT: ldr.w r4, [r4, #252]
; THUMB-NEXT: cmp r4, r5
-; THUMB-NEXT: blo .LBB0_2
+; THUMB-NEXT: bls .LBB0_2
; THUMB-NEXT: @ %bb.1:
; THUMB-NEXT: mov r4, #48
; THUMB-NEXT: mov r5, #0
@@ -42,7 +42,7 @@ define void @test_basic() #0 {
; ARM-NEXT: mov r5, sp
; ARM-NEXT: ldr r4, [r4, #252]
; ARM-NEXT: cmp r4, r5
-; ARM-NEXT: blo .LBB0_2
+; ARM-NEXT: bls .LBB0_2
; ARM-NEXT: @ %bb.1:
; ARM-NEXT: mov r4, #48
; ARM-NEXT: mov r5, #0
@@ -82,7 +82,7 @@ define void @test_large() #0 {
; THUMB-NEXT: mrc p15, #0, r4, c13, c0, #3
; THUMB-NEXT: ldr.w r4, [r4, #252]
; THUMB-NEXT: cmp r4, r5
-; THUMB-NEXT: blo .LBB1_2
+; THUMB-NEXT: bls .LBB1_2
; THUMB: movw r4, #40192
; THUMB-NEXT: movt r4, #0
@@ -104,7 +104,7 @@ define void @test_large() #0 {
; ARM-NEXT: mrc p15, #0, r4, c13, c0, #3
; ARM-NEXT: ldr r4, [r4, #252]
; ARM-NEXT: cmp r4, r5
-; ARM-NEXT: blo .LBB1_2
+; ARM-NEXT: bls .LBB1_2
; ARM: ldr r4, .LCPI1_0
; ARM-NEXT: mov r5, #0
@@ -136,7 +136,7 @@ define fastcc void @test_fastcc_large() #0 {
; THUMB-NEXT: mrc p15, #0, r4, c13, c0, #3
; THUMB-NEXT: ldr.w r4, [r4, #252]
; THUMB-NEXT: cmp r4, r5
-; THUMB-NEXT: blo .LBB2_2
+; THUMB-NEXT: bls .LBB2_2
; THUMB: movw r4, #40192
; THUMB-NEXT: movt r4, #0
@@ -157,7 +157,7 @@ define fastcc void @test_fastcc_large() #0 {
; ARM-NEXT: mrc p15, #0, r4, c13, c0, #3
; ARM-NEXT: ldr r4, [r4, #252]
; ARM-NEXT: cmp r4, r5
-; ARM-NEXT: blo .LBB2_2
+; ARM-NEXT: bls .LBB2_2
; ARM: ldr r4, .LCPI2_0
; ARM-NEXT: mov r5, #0
More information about the llvm-commits
mailing list