aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/LoongArch/frame.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/LoongArch/frame.ll')
-rw-r--r--llvm/test/CodeGen/LoongArch/frame.ll107
1 files changed, 91 insertions, 16 deletions
diff --git a/llvm/test/CodeGen/LoongArch/frame.ll b/llvm/test/CodeGen/LoongArch/frame.ll
index 0487030..b29d863 100644
--- a/llvm/test/CodeGen/LoongArch/frame.ll
+++ b/llvm/test/CodeGen/LoongArch/frame.ll
@@ -1,5 +1,6 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc --mtriple=loongarch64 -mattr=+d,-lsx < %s | FileCheck %s --check-prefixes=CHECK,NOLSX
+; RUN: llc --mtriple=loongarch64 -mattr=+d,+lsx < %s | FileCheck %s --check-prefixes=CHECK,LSX
%struct.key_t = type { i32, [16 x i8] }
@@ -7,20 +8,35 @@ declare void @llvm.memset.p0.i64(ptr, i8, i64, i1)
declare void @test1(ptr)
define i32 @test() nounwind {
-; CHECK-LABEL: test:
-; CHECK: # %bb.0:
-; CHECK-NEXT: addi.d $sp, $sp, -32
-; CHECK-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill
-; CHECK-NEXT: st.w $zero, $sp, 16
-; CHECK-NEXT: vrepli.b $vr0, 0
-; CHECK-NEXT: vst $vr0, $sp, 0
-; CHECK-NEXT: addi.d $a0, $sp, 4
-; CHECK-NEXT: pcaddu18i $ra, %call36(test1)
-; CHECK-NEXT: jirl $ra, $ra, 0
-; CHECK-NEXT: move $a0, $zero
-; CHECK-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload
-; CHECK-NEXT: addi.d $sp, $sp, 32
-; CHECK-NEXT: ret
+; NOLSX-LABEL: test:
+; NOLSX: # %bb.0:
+; NOLSX-NEXT: addi.d $sp, $sp, -32
+; NOLSX-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill
+; NOLSX-NEXT: st.w $zero, $sp, 16
+; NOLSX-NEXT: st.d $zero, $sp, 8
+; NOLSX-NEXT: st.d $zero, $sp, 0
+; NOLSX-NEXT: addi.d $a0, $sp, 4
+; NOLSX-NEXT: pcaddu18i $ra, %call36(test1)
+; NOLSX-NEXT: jirl $ra, $ra, 0
+; NOLSX-NEXT: move $a0, $zero
+; NOLSX-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload
+; NOLSX-NEXT: addi.d $sp, $sp, 32
+; NOLSX-NEXT: ret
+;
+; LSX-LABEL: test:
+; LSX: # %bb.0:
+; LSX-NEXT: addi.d $sp, $sp, -32
+; LSX-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill
+; LSX-NEXT: st.w $zero, $sp, 16
+; LSX-NEXT: vrepli.b $vr0, 0
+; LSX-NEXT: vst $vr0, $sp, 0
+; LSX-NEXT: addi.d $a0, $sp, 4
+; LSX-NEXT: pcaddu18i $ra, %call36(test1)
+; LSX-NEXT: jirl $ra, $ra, 0
+; LSX-NEXT: move $a0, $zero
+; LSX-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload
+; LSX-NEXT: addi.d $sp, $sp, 32
+; LSX-NEXT: ret
%key = alloca %struct.key_t, align 4
call void @llvm.memset.p0.i64(ptr %key, i8 0, i64 20, i1 false)
%1 = getelementptr inbounds %struct.key_t, ptr %key, i64 0, i32 1, i64 0
@@ -98,3 +114,62 @@ define void @test_large_frame_size_1234576() "frame-pointer"="all" {
%1 = alloca i8, i32 1234567
ret void
}
+
+;; Note: will create an emergency spill slot, if (!isInt<7>(StackSize)).
+;; Should involve only one SP-adjusting addi per adjustment.
+;; LSX 112 + 16(emergency solt) = 128
+define void @test_frame_size_112() {
+; NOLSX-LABEL: test_frame_size_112:
+; NOLSX: # %bb.0:
+; NOLSX-NEXT: addi.d $sp, $sp, -112
+; NOLSX-NEXT: .cfi_def_cfa_offset 112
+; NOLSX-NEXT: addi.d $sp, $sp, 112
+; NOLSX-NEXT: ret
+;
+; LSX-LABEL: test_frame_size_112:
+; LSX: # %bb.0:
+; LSX-NEXT: addi.d $sp, $sp, -128
+; LSX-NEXT: .cfi_def_cfa_offset 128
+; LSX-NEXT: addi.d $sp, $sp, 128
+; LSX-NEXT: ret
+ %1 = alloca i8, i32 112
+ ret void
+}
+
+;; LSX 128 + 16(emergency solt) = 144
+define void @test_frame_size_128() {
+; NOLSX-LABEL: test_frame_size_128:
+; NOLSX: # %bb.0:
+; NOLSX-NEXT: addi.d $sp, $sp, -128
+; NOLSX-NEXT: .cfi_def_cfa_offset 128
+; NOLSX-NEXT: addi.d $sp, $sp, 128
+; NOLSX-NEXT: ret
+;
+; LSX-LABEL: test_frame_size_128:
+; LSX: # %bb.0:
+; LSX-NEXT: addi.d $sp, $sp, -144
+; LSX-NEXT: .cfi_def_cfa_offset 144
+; LSX-NEXT: addi.d $sp, $sp, 144
+; LSX-NEXT: ret
+ %1 = alloca i8, i32 128
+ ret void
+}
+
+;; LSX 144 + 16(emergency solt) = 160
+define void @test_frame_size_144() {
+; NOLSX-LABEL: test_frame_size_144:
+; NOLSX: # %bb.0:
+; NOLSX-NEXT: addi.d $sp, $sp, -144
+; NOLSX-NEXT: .cfi_def_cfa_offset 144
+; NOLSX-NEXT: addi.d $sp, $sp, 144
+; NOLSX-NEXT: ret
+;
+; LSX-LABEL: test_frame_size_144:
+; LSX: # %bb.0:
+; LSX-NEXT: addi.d $sp, $sp, -160
+; LSX-NEXT: .cfi_def_cfa_offset 160
+; LSX-NEXT: addi.d $sp, $sp, 160
+; LSX-NEXT: ret
+ %1 = alloca i8, i32 144
+ ret void
+}