Skip to content

Commit 7389adf

Browse files
committed
[RISCV] add varargs SP recovery test
1 parent ebbd8a6 commit 7389adf

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed

llvm/test/CodeGen/RISCV/pr114316.ll

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -riscv-v-vector-bits-max=512 -mtriple=riscv64 -mattr=+m,+c,+v -O0 < %s | FileCheck --check-prefix=RV64V %s
3+
4+
%struct.Foo = type { ptr, ptr }
5+
6+
@x = dso_local global ptr null, align 8
7+
@.str = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
8+
9+
; Function Attrs: mustprogress noinline optnone uwtable vscale_range(8,8)
10+
define dso_local void @_Z4vfooPcPKcPv(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
11+
; RV64V-LABEL: _Z4vfooPcPKcPv:
12+
; RV64V: # %bb.0:
13+
; RV64V-NEXT: addi sp, sp, -496
14+
; RV64V-NEXT: .cfi_def_cfa_offset 496
15+
; RV64V-NEXT: sd ra, 488(sp) # 8-byte Folded Spill
16+
; RV64V-NEXT: sd s0, 480(sp) # 8-byte Folded Spill
17+
; RV64V-NEXT: .cfi_offset ra, -8
18+
; RV64V-NEXT: .cfi_offset s0, -16
19+
; RV64V-NEXT: addi s0, sp, 496
20+
; RV64V-NEXT: .cfi_def_cfa s0, 0
21+
; RV64V-NEXT: lui a3, 2
22+
; RV64V-NEXT: addiw a3, a3, -592
23+
; RV64V-NEXT: sub sp, sp, a3
24+
; RV64V-NEXT: lui a3, 2
25+
; RV64V-NEXT: addiw a3, a3, -120
26+
; RV64V-NEXT: sub a3, s0, a3
27+
; RV64V-NEXT: lui a4, 2
28+
; RV64V-NEXT: sub a4, s0, a4
29+
; RV64V-NEXT: sd a3, 104(a4) # 8-byte Folded Spill
30+
; RV64V-NEXT: mv a3, a2
31+
; RV64V-NEXT: lui a2, 2
32+
; RV64V-NEXT: sub a2, s0, a2
33+
; RV64V-NEXT: ld a2, 104(a2) # 8-byte Folded Reload
34+
; RV64V-NEXT: lui a4, 2
35+
; RV64V-NEXT: sub a4, s0, a4
36+
; RV64V-NEXT: sd a3, 112(a4) # 8-byte Folded Spill
37+
; RV64V-NEXT: mv a3, a0
38+
; RV64V-NEXT: lui a0, 2
39+
; RV64V-NEXT: sub a0, s0, a0
40+
; RV64V-NEXT: ld a0, 112(a0) # 8-byte Folded Reload
41+
; RV64V-NEXT: sd a3, -32(s0)
42+
; RV64V-NEXT: sd a1, -40(s0)
43+
; RV64V-NEXT: sd a0, -48(s0)
44+
; RV64V-NEXT: ld a0, -32(s0)
45+
; RV64V-NEXT: sd a0, 8(a2)
46+
; RV64V-NEXT: lui a0, 2
47+
; RV64V-NEXT: addiw a0, a0, -144
48+
; RV64V-NEXT: sub a0, s0, a0
49+
; RV64V-NEXT: sd a0, 16(a2)
50+
; RV64V-NEXT: lui a0, %hi(x)
51+
; RV64V-NEXT: lui a1, %hi(_ZL6x_implP3Foo)
52+
; RV64V-NEXT: addi a1, a1, %lo(_ZL6x_implP3Foo)
53+
; RV64V-NEXT: sd a1, %lo(x)(a0)
54+
; RV64V-NEXT: ld a1, -48(s0)
55+
; RV64V-NEXT: sd a1, 0(a2)
56+
; RV64V-NEXT: ld a1, %lo(x)(a0)
57+
; RV64V-NEXT: lui a0, 2
58+
; RV64V-NEXT: addiw a0, a0, -128
59+
; RV64V-NEXT: sub a0, s0, a0
60+
; RV64V-NEXT: jalr a1
61+
; RV64V-NEXT: addi sp, s0, -496
62+
; RV64V-NEXT: ld ra, 488(sp) # 8-byte Folded Reload
63+
; RV64V-NEXT: ld s0, 480(sp) # 8-byte Folded Reload
64+
; RV64V-NEXT: addi sp, sp, 496
65+
; RV64V-NEXT: ret
66+
%4 = alloca ptr, align 8
67+
%5 = alloca ptr, align 8
68+
%6 = alloca ptr, align 8
69+
%7 = alloca [8000 x i8], align 1
70+
%8 = alloca %struct.Foo, align 8
71+
%9 = alloca ptr, align 8
72+
store ptr %0, ptr %4, align 8
73+
store ptr %1, ptr %5, align 8
74+
store ptr %2, ptr %6, align 8
75+
%10 = getelementptr inbounds nuw %struct.Foo, ptr %8, i32 0, i32 0
76+
%11 = load ptr, ptr %4, align 8
77+
store ptr %11, ptr %10, align 8
78+
%12 = getelementptr inbounds nuw %struct.Foo, ptr %8, i32 0, i32 1
79+
%13 = getelementptr inbounds [8000 x i8], ptr %7, i64 0, i64 0
80+
store ptr %13, ptr %12, align 8
81+
store ptr @_ZL6x_implP3Foo, ptr @x, align 8
82+
call void @llvm.va_copy.p0(ptr %9, ptr %6)
83+
%14 = load ptr, ptr @x, align 8
84+
call void %14(ptr noundef %8)
85+
call void @llvm.va_end.p0(ptr %9)
86+
ret void
87+
}
88+
89+
; Function Attrs: mustprogress noinline nounwind optnone uwtable vscale_range(8,8)
90+
define internal void @_ZL6x_implP3Foo(ptr noundef %0) #1 {
91+
; RV64V-LABEL: _ZL6x_implP3Foo:
92+
; RV64V: # %bb.0:
93+
; RV64V-NEXT: addi sp, sp, -32
94+
; RV64V-NEXT: .cfi_def_cfa_offset 32
95+
; RV64V-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
96+
; RV64V-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
97+
; RV64V-NEXT: .cfi_offset ra, -8
98+
; RV64V-NEXT: .cfi_offset s0, -16
99+
; RV64V-NEXT: addi s0, sp, 32
100+
; RV64V-NEXT: .cfi_def_cfa s0, 0
101+
; RV64V-NEXT: sd a0, -24(s0)
102+
; RV64V-NEXT: addi sp, s0, -32
103+
; RV64V-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
104+
; RV64V-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
105+
; RV64V-NEXT: addi sp, sp, 32
106+
; RV64V-NEXT: ret
107+
%2 = alloca ptr, align 8
108+
store ptr %0, ptr %2, align 8
109+
ret void
110+
}
111+
112+
; Function Attrs: nocallback nofree nosync nounwind willreturn
113+
declare void @llvm.va_copy.p0(ptr, ptr) #2
114+
115+
; Function Attrs: nocallback nofree nosync nounwind willreturn
116+
declare void @llvm.va_end.p0(ptr) #2
117+
118+
; Function Attrs: mustprogress noinline optnone uwtable vscale_range(8,8)
119+
define dso_local void @_Z3fooPKcz(ptr noundef %0, ...) #0 {
120+
; RV64V-LABEL: _Z3fooPKcz:
121+
; RV64V: # %bb.0:
122+
; RV64V-NEXT: addi sp, sp, -496
123+
; RV64V-NEXT: .cfi_def_cfa_offset 496
124+
; RV64V-NEXT: sd ra, 424(sp) # 8-byte Folded Spill
125+
; RV64V-NEXT: sd s0, 416(sp) # 8-byte Folded Spill
126+
; RV64V-NEXT: .cfi_offset ra, -72
127+
; RV64V-NEXT: .cfi_offset s0, -80
128+
; RV64V-NEXT: addi s0, sp, 432
129+
; RV64V-NEXT: .cfi_def_cfa s0, 64
130+
; RV64V-NEXT: lui t0, 2
131+
; RV64V-NEXT: addiw t0, t0, -576
132+
; RV64V-NEXT: sub sp, sp, t0
133+
; RV64V-NEXT: sd a7, 56(s0)
134+
; RV64V-NEXT: sd a6, 48(s0)
135+
; RV64V-NEXT: sd a5, 40(s0)
136+
; RV64V-NEXT: sd a4, 32(s0)
137+
; RV64V-NEXT: sd a3, 24(s0)
138+
; RV64V-NEXT: sd a2, 16(s0)
139+
; RV64V-NEXT: sd a1, 8(s0)
140+
; RV64V-NEXT: sd a0, -32(s0)
141+
; RV64V-NEXT: addi a0, s0, 8
142+
; RV64V-NEXT: sd a0, -40(s0)
143+
; RV64V-NEXT: ld a1, -32(s0)
144+
; RV64V-NEXT: ld a2, -40(s0)
145+
; RV64V-NEXT: lui a0, 2
146+
; RV64V-NEXT: addiw a0, a0, -152
147+
; RV64V-NEXT: sub a0, s0, a0
148+
; RV64V-NEXT: call _Z4vfooPcPKcPv
149+
; RV64V-NEXT: addi sp, s0, -432
150+
; RV64V-NEXT: ld ra, 424(sp) # 8-byte Folded Reload
151+
; RV64V-NEXT: ld s0, 416(sp) # 8-byte Folded Reload
152+
; RV64V-NEXT: addi sp, sp, 496
153+
; RV64V-NEXT: ret
154+
%2 = alloca ptr, align 8
155+
%3 = alloca ptr, align 8
156+
%4 = alloca [8000 x i8], align 1
157+
store ptr %0, ptr %2, align 8
158+
call void @llvm.va_start.p0(ptr %3)
159+
%5 = getelementptr inbounds [8000 x i8], ptr %4, i64 0, i64 0
160+
%6 = load ptr, ptr %2, align 8
161+
%7 = load ptr, ptr %3, align 8
162+
call void @_Z4vfooPcPKcPv(ptr noundef %5, ptr noundef %6, ptr noundef %7)
163+
call void @llvm.va_end.p0(ptr %3)
164+
ret void
165+
}
166+
167+
attributes #0 = { mustprogress noinline optnone uwtable vscale_range(8,8) "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic-rv64" "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zicsr,+zifencei,+zmmul,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl32b,+zvl64b,-b,-e,-experimental-smctr,-experimental-smmpm,-experimental-smnpm,-experimental-ssctr,-experimental-ssnpm,-experimental-sspm,-experimental-supm,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssqosid,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zaamo,-zabha,-zacas,-zalrsc,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-ztso,-zvbb,-zvbc,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
168+
attributes #1 = { mustprogress noinline nounwind optnone uwtable vscale_range(8,8) "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic-rv64" "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zicsr,+zifencei,+zmmul,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl32b,+zvl64b,-b,-e,-experimental-smctr,-experimental-smmpm,-experimental-smnpm,-experimental-ssctr,-experimental-ssnpm,-experimental-sspm,-experimental-supm,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssqosid,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zaamo,-zabha,-zacas,-zalrsc,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-ztso,-zvbb,-zvbc,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
169+
attributes #2 = { nocallback nofree nosync nounwind willreturn }

0 commit comments

Comments
 (0)