Skip to content

Commit 08bb0b8

Browse files
[RISCV] Add test case for PR #133256
1 parent 85c54a5 commit 08bb0b8

File tree

1 file changed

+180
-0
lines changed

1 file changed

+180
-0
lines changed
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
3+
; RUN: | FileCheck %s
4+
5+
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
6+
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0
7+
8+
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write)
9+
declare void @llvm.assume(i1 noundef) #0
10+
11+
declare fastcc i1 @S_reginclass()
12+
13+
declare fastcc ptr @Perl_av_store(i64)
14+
15+
define fastcc i32 @S_regrepeat(ptr %startposp, i32 %max, i8 %0, i1 %cmp343) nounwind {
16+
; CHECK-LABEL: S_regrepeat:
17+
; CHECK: # %bb.0: # %entry
18+
; CHECK-NEXT: addi sp, sp, -32
19+
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
20+
; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
21+
; CHECK-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
22+
; CHECK-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
23+
; CHECK-NEXT: andi a2, a2, 255
24+
; CHECK-NEXT: addi a4, a2, -19
25+
; CHECK-NEXT: li a5, 2
26+
; CHECK-NEXT: mv a0, a1
27+
; CHECK-NEXT: bltu a4, a5, .LBB0_4
28+
; CHECK-NEXT: # %bb.1: # %entry
29+
; CHECK-NEXT: li a1, 1
30+
; CHECK-NEXT: bltu a1, a2, .LBB0_8
31+
; CHECK-NEXT: # %bb.2: # %do_exactf
32+
; CHECK-NEXT: andi a3, a3, 1
33+
; CHECK-NEXT: beqz a3, .LBB0_10
34+
; CHECK-NEXT: # %bb.3: # %land.rhs251
35+
; CHECK-NEXT: lw zero, 0(zero)
36+
; CHECK-NEXT: li s0, 1
37+
; CHECK-NEXT: bnez s0, .LBB0_9
38+
; CHECK-NEXT: j .LBB0_8
39+
; CHECK-NEXT: .LBB0_4: # %sw.bb336
40+
; CHECK-NEXT: mv s1, a0
41+
; CHECK-NEXT: li s0, 0
42+
; CHECK-NEXT: andi s2, a3, 1
43+
; CHECK-NEXT: .LBB0_5: # %land.rhs345
44+
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
45+
; CHECK-NEXT: call S_reginclass
46+
; CHECK-NEXT: andi a0, a0, 1
47+
; CHECK-NEXT: beqz a0, .LBB0_7
48+
; CHECK-NEXT: # %bb.6: # %while.body350
49+
; CHECK-NEXT: # in Loop: Header=BB0_5 Depth=1
50+
; CHECK-NEXT: addiw s0, s0, 1
51+
; CHECK-NEXT: bnez s2, .LBB0_5
52+
; CHECK-NEXT: j .LBB0_8
53+
; CHECK-NEXT: .LBB0_7:
54+
; CHECK-NEXT: mv a0, s1
55+
; CHECK-NEXT: bnez s0, .LBB0_9
56+
; CHECK-NEXT: .LBB0_8: # %if.else1492
57+
; CHECK-NEXT: li a0, 0
58+
; CHECK-NEXT: .LBB0_9: # %if.end1497
59+
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
60+
; CHECK-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
61+
; CHECK-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
62+
; CHECK-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
63+
; CHECK-NEXT: addi sp, sp, 32
64+
; CHECK-NEXT: ret
65+
; CHECK-NEXT: .LBB0_10:
66+
; CHECK-NEXT: bnez zero, .LBB0_9
67+
; CHECK-NEXT: j .LBB0_8
68+
entry:
69+
switch i8 %0, label %if.else1492 [
70+
i8 19, label %sw.bb336
71+
i8 20, label %sw.bb336
72+
i8 1, label %do_exactf
73+
i8 0, label %do_exactf
74+
]
75+
76+
do_exactf: ; preds = %entry, %entry
77+
br i1 %cmp343, label %land.rhs251, label %if.end334
78+
79+
land.rhs251: ; preds = %do_exactf
80+
%bcmp414 = load volatile i32, ptr null, align 4
81+
br label %if.end334
82+
83+
if.end334: ; preds = %land.rhs251, %do_exactf
84+
%hardcount.7 = phi i32 [ 0, %do_exactf ], [ 1, %land.rhs251 ]
85+
call void @llvm.lifetime.end.p0(i64 0, ptr null)
86+
br label %sw.epilog1489
87+
88+
sw.bb336: ; preds = %entry, %entry
89+
br label %land.rhs345
90+
91+
land.rhs345: ; preds = %while.body350, %sw.bb336
92+
%hardcount.8634 = phi i32 [ %inc356, %while.body350 ], [ 0, %sw.bb336 ]
93+
%call347 = call fastcc i1 @S_reginclass()
94+
br i1 %call347, label %while.body350, label %sw.epilog1489
95+
96+
while.body350: ; preds = %land.rhs345
97+
%inc356 = add i32 %hardcount.8634, 1
98+
br i1 %cmp343, label %land.rhs345, label %if.end1497
99+
100+
sw.epilog1489: ; preds = %land.rhs345, %if.end334
101+
%hardcount.20 = phi i32 [ %hardcount.7, %if.end334 ], [ %hardcount.8634, %land.rhs345 ]
102+
%tobool1490.not = icmp eq i32 %hardcount.20, 0
103+
br i1 %tobool1490.not, label %if.else1492, label %if.end1497
104+
105+
if.else1492: ; preds = %sw.epilog1489, %entry
106+
br label %if.end1497
107+
108+
if.end1497: ; preds = %if.else1492, %sw.epilog1489, %while.body350
109+
%c.0 = phi i32 [ 0, %if.else1492 ], [ %max, %sw.epilog1489 ], [ 0, %while.body350 ]
110+
ret i32 %c.0
111+
}
112+
113+
define ptr @Perl_pp_refassign(ptr %PL_stack_sp, i1 %tobool.not, i1 %tobool3.not, i1 %cond1) nounwind {
114+
; CHECK-LABEL: Perl_pp_refassign:
115+
; CHECK: # %bb.0: # %entry
116+
; CHECK-NEXT: andi a1, a1, 1
117+
; CHECK-NEXT: beqz a1, .LBB1_3
118+
; CHECK-NEXT: # %bb.1:
119+
; CHECK-NEXT: li a1, 0
120+
; CHECK-NEXT: andi a2, a2, 1
121+
; CHECK-NEXT: bnez a2, .LBB1_4
122+
; CHECK-NEXT: .LBB1_2: # %cond.true4
123+
; CHECK-NEXT: ld a0, 0(a0)
124+
; CHECK-NEXT: snez a0, a0
125+
; CHECK-NEXT: bnez a0, .LBB1_5
126+
; CHECK-NEXT: j .LBB1_6
127+
; CHECK-NEXT: .LBB1_3: # %cond.true
128+
; CHECK-NEXT: ld a1, 0(a0)
129+
; CHECK-NEXT: andi a2, a2, 1
130+
; CHECK-NEXT: beqz a2, .LBB1_2
131+
; CHECK-NEXT: .LBB1_4:
132+
; CHECK-NEXT: beqz zero, .LBB1_6
133+
; CHECK-NEXT: .LBB1_5: # %sw.bb85
134+
; CHECK-NEXT: addi sp, sp, -16
135+
; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
136+
; CHECK-NEXT: ld a0, 0(a1)
137+
; CHECK-NEXT: call Perl_av_store
138+
; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
139+
; CHECK-NEXT: addi sp, sp, 16
140+
; CHECK-NEXT: .LBB1_6: # %common.ret
141+
; CHECK-NEXT: li a0, 0
142+
; CHECK-NEXT: ret
143+
entry:
144+
br i1 %tobool.not, label %cond.end, label %cond.true
145+
146+
cond.true: ; preds = %entry
147+
%0 = load ptr, ptr %PL_stack_sp, align 8
148+
br label %cond.end
149+
150+
cond.end: ; preds = %cond.true, %entry
151+
%cond = phi ptr [ %0, %cond.true ], [ null, %entry ]
152+
br i1 %tobool3.not, label %cond.end7, label %cond.true4
153+
154+
cond.true4: ; preds = %cond.end
155+
%1 = load ptr, ptr %PL_stack_sp, align 8
156+
%2 = icmp ne ptr %1, null
157+
br label %cond.end7
158+
159+
cond.end7: ; preds = %cond.true4, %cond.end
160+
%cond84 = phi i1 [ %2, %cond.true4 ], [ false, %cond.end ]
161+
br i1 %cond1, label %if.end48, label %sw.bb
162+
163+
sw.bb: ; preds = %cond.end7
164+
call void @llvm.assume(i1 %tobool.not)
165+
br label %if.end48
166+
167+
if.end48: ; preds = %sw.bb, %cond.end7
168+
br i1 %cond84, label %sw.bb85, label %common.ret
169+
170+
common.ret: ; preds = %sw.bb85, %if.end48
171+
ret ptr null
172+
173+
sw.bb85: ; preds = %if.end48
174+
%3 = load i64, ptr %cond, align 8
175+
%call125 = call fastcc ptr @Perl_av_store(i64 %3)
176+
br label %common.ret
177+
}
178+
179+
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
180+
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }

0 commit comments

Comments
 (0)