Skip to content

Commit 34570f4

Browse files
author
Hsiangkai Wang
committed
[RISCV] Add a test to show the bug in the RA caused by reserved BP.
The bug is reported in #53016. Authored-by: Kito Cheng <[email protected]> Differential Revision: https://reviews.llvm.org/D117738
1 parent 70002a7 commit 34570f4

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+f -riscv-v-vector-bits-min=128 \
3+
; RUN: -verify-machineinstrs < %s | FileCheck %s
4+
5+
define void @foo(i32* nocapture noundef %p1) {
6+
; CHECK-LABEL: foo:
7+
; CHECK: # %bb.0: # %entry
8+
; CHECK-NEXT: addi sp, sp, -128
9+
; CHECK-NEXT: .cfi_def_cfa_offset 128
10+
; CHECK-NEXT: sd ra, 120(sp) # 8-byte Folded Spill
11+
; CHECK-NEXT: sd s0, 112(sp) # 8-byte Folded Spill
12+
; CHECK-NEXT: sd s1, 104(sp) # 8-byte Folded Spill
13+
; CHECK-NEXT: .cfi_offset ra, -8
14+
; CHECK-NEXT: .cfi_offset s0, -16
15+
; CHECK-NEXT: .cfi_offset s1, -24
16+
; CHECK-NEXT: addi s0, sp, 128
17+
; CHECK-NEXT: .cfi_def_cfa s0, 0
18+
; CHECK-NEXT: csrr a1, vlenb
19+
; CHECK-NEXT: slli a1, a1, 1
20+
; CHECK-NEXT: sub sp, sp, a1
21+
; CHECK-NEXT: andi sp, sp, -64
22+
; CHECK-NEXT: mv s1, sp
23+
; CHECK-NEXT: mv s1, a0
24+
; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
25+
; CHECK-NEXT: vle32.v v8, (a0)
26+
; CHECK-NEXT: addi a0, s1, 104
27+
; CHECK-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill
28+
; CHECK-NEXT: addi sp, sp, -16
29+
; CHECK-NEXT: addi t0, s1, 64
30+
; CHECK-NEXT: li a0, 1
31+
; CHECK-NEXT: li a1, 2
32+
; CHECK-NEXT: li a2, 3
33+
; CHECK-NEXT: li a3, 4
34+
; CHECK-NEXT: li a4, 5
35+
; CHECK-NEXT: li a5, 6
36+
; CHECK-NEXT: li a6, 7
37+
; CHECK-NEXT: li a7, 8
38+
; CHECK-NEXT: sd t0, 0(sp)
39+
; CHECK-NEXT: call bar@plt
40+
; CHECK-NEXT: addi sp, sp, 16
41+
; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
42+
; CHECK-NEXT: vle32.v v8, (s1)
43+
; CHECK-NEXT: addi a0, s1, 104
44+
; CHECK-NEXT: vl2re8.v v10, (a0) # Unknown-size Folded Reload
45+
; CHECK-NEXT: vfadd.vv v8, v10, v8
46+
; CHECK-NEXT: vse32.v v8, (s1)
47+
; CHECK-NEXT: addi sp, s0, -128
48+
; CHECK-NEXT: ld ra, 120(sp) # 8-byte Folded Reload
49+
; CHECK-NEXT: ld s0, 112(sp) # 8-byte Folded Reload
50+
; CHECK-NEXT: ld s1, 104(sp) # 8-byte Folded Reload
51+
; CHECK-NEXT: addi sp, sp, 128
52+
; CHECK-NEXT: ret
53+
entry:
54+
%vla = alloca [10 x i32], align 64
55+
%0 = bitcast [10 x i32]* %vla to i8*
56+
call void @llvm.lifetime.start.p0i8(i64 40, i8* nonnull %0)
57+
%1 = bitcast i32* %p1 to <8 x float>*
58+
%2 = load <8 x float>, <8 x float>* %1, align 32
59+
%arraydecay = getelementptr inbounds [10 x i32], [10 x i32]* %vla, i64 0, i64 0
60+
call void @bar(i32 noundef signext 1, i32 noundef signext 2, i32 noundef signext 3, i32 noundef signext 4, i32 noundef signext 5, i32 noundef signext 6, i32 noundef signext 7, i32 noundef signext 8, i32* noundef nonnull %arraydecay)
61+
%3 = load <8 x float>, <8 x float>* %1, align 32
62+
%add = fadd <8 x float> %2, %3
63+
store <8 x float> %add, <8 x float>* %1, align 32
64+
call void @llvm.lifetime.end.p0i8(i64 40, i8* nonnull %0)
65+
ret void
66+
}
67+
68+
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #1
69+
70+
declare void @bar(i32 noundef signext, i32 noundef signext, i32 noundef signext, i32 noundef signext, i32 noundef signext, i32 noundef signext, i32 noundef signext, i32 noundef signext, i32* noundef)
71+
72+
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #1
73+
74+
attributes #1 = { argmemonly mustprogress nofree nosync nounwind willreturn }

0 commit comments

Comments
 (0)