Skip to content

Commit fad4751

Browse files
committed
[SFB] Add test line for SFB back (llvm#38)
Reviewed-on: https://gitea.andestech.com/RD-SW/llvm-project/pulls/38 Reviewed-by: Kai Kai-Yi Weng <[email protected]>
1 parent a84258c commit fad4751

File tree

1 file changed

+191
-0
lines changed

1 file changed

+191
-0
lines changed

llvm/test/CodeGen/RISCV/short-foward-branch-opt.ll

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: llc -mtriple=riscv64 -mattr=+c -verify-machineinstrs < %s \
33
; RUN: | FileCheck -check-prefix=NOSFB %s
4+
; RUN: llc -mtriple=riscv64 -mattr=+c,+short-forward-branch-opt -verify-machineinstrs < %s \
5+
; RUN: | FileCheck -check-prefix=SFB %s
46

57
; The sifive-7-series can predicate a mv.
68

@@ -12,6 +14,14 @@ define signext i32 @test1(i32 signext %x, i32 signext %y, i32 signext %z) {
1214
; NOSFB-NEXT: mv a0, a1
1315
; NOSFB-NEXT: .LBB0_2:
1416
; NOSFB-NEXT: ret
17+
;
18+
; SFB-LABEL: test1:
19+
; SFB: # %bb.0:
20+
; SFB-NEXT: beqz a2, .LBB0_2
21+
; SFB-NEXT: # %bb.1:
22+
; SFB-NEXT: mv a0, a1
23+
; SFB-NEXT: .LBB0_2:
24+
; SFB-NEXT: ret
1525
%c = icmp eq i32 %z, 0
1626
%b = select i1 %c, i32 %x, i32 %y
1727
ret i32 %b
@@ -27,6 +37,14 @@ define signext i32 @test2(i32 signext %x, i32 signext %y, i32 signext %z) {
2737
; NOSFB-NEXT: .LBB1_2:
2838
; NOSFB-NEXT: mv a0, a1
2939
; NOSFB-NEXT: ret
40+
;
41+
; SFB-LABEL: test2:
42+
; SFB: # %bb.0:
43+
; SFB-NEXT: bnez a2, .LBB1_2
44+
; SFB-NEXT: # %bb.1:
45+
; SFB-NEXT: mv a0, a1
46+
; SFB-NEXT: .LBB1_2:
47+
; SFB-NEXT: ret
3048
%c = icmp eq i32 %z, 0
3149
%b = select i1 %c, i32 %y, i32 %x
3250
ret i32 %b
@@ -44,6 +62,19 @@ define signext i32 @test3(i32 signext %v, i32 signext %w, i32 signext %x, i32 si
4462
; NOSFB-NEXT: .LBB2_2:
4563
; NOSFB-NEXT: addw a0, a1, a2
4664
; NOSFB-NEXT: ret
65+
;
66+
; SFB-LABEL: test3:
67+
; SFB: # %bb.0:
68+
; SFB-NEXT: beqz a4, .LBB2_2
69+
; SFB-NEXT: # %bb.1:
70+
; SFB-NEXT: mv a2, a3
71+
; SFB-NEXT: .LBB2_2:
72+
; SFB-NEXT: bnez a4, .LBB2_4
73+
; SFB-NEXT: # %bb.3:
74+
; SFB-NEXT: mv a0, a1
75+
; SFB-NEXT: .LBB2_4:
76+
; SFB-NEXT: addw a0, a0, a2
77+
; SFB-NEXT: ret
4778
%c = icmp eq i32 %z, 0
4879
%a = select i1 %c, i32 %w, i32 %v
4980
%b = select i1 %c, i32 %x, i32 %y
@@ -59,6 +90,14 @@ define signext i32 @test4(i32 signext %x, i32 signext %z) {
5990
; NOSFB-NEXT: addi a1, a1, -1
6091
; NOSFB-NEXT: and a0, a0, a1
6192
; NOSFB-NEXT: ret
93+
;
94+
; SFB-LABEL: test4:
95+
; SFB: # %bb.0:
96+
; SFB-NEXT: beqz a1, .LBB3_2
97+
; SFB-NEXT: # %bb.1:
98+
; SFB-NEXT: li a0, 0
99+
; SFB-NEXT: .LBB3_2:
100+
; SFB-NEXT: ret
62101
%c = icmp eq i32 %z, 0
63102
%b = select i1 %c, i32 %x, i32 0
64103
ret i32 %b
@@ -72,6 +111,14 @@ define signext i32 @test5(i32 signext %x, i32 signext %z) {
72111
; NOSFB-NEXT: addi a1, a1, -1
73112
; NOSFB-NEXT: and a0, a0, a1
74113
; NOSFB-NEXT: ret
114+
;
115+
; SFB-LABEL: test5:
116+
; SFB: # %bb.0:
117+
; SFB-NEXT: bnez a1, .LBB4_2
118+
; SFB-NEXT: # %bb.1:
119+
; SFB-NEXT: li a0, 0
120+
; SFB-NEXT: .LBB4_2:
121+
; SFB-NEXT: ret
75122
%c = icmp eq i32 %z, 0
76123
%b = select i1 %c, i32 0, i32 %x
77124
ret i32 %b
@@ -85,6 +132,15 @@ define signext i32 @test6(i32 signext %x, i32 signext %z) {
85132
; NOSFB-NEXT: addi a1, a1, -1
86133
; NOSFB-NEXT: or a0, a0, a1
87134
; NOSFB-NEXT: ret
135+
;
136+
; SFB-LABEL: test6:
137+
; SFB: # %bb.0:
138+
; SFB-NEXT: li a2, -1
139+
; SFB-NEXT: beqz a1, .LBB5_2
140+
; SFB-NEXT: # %bb.1:
141+
; SFB-NEXT: mv a0, a2
142+
; SFB-NEXT: .LBB5_2:
143+
; SFB-NEXT: ret
88144
%c = icmp eq i32 %z, 0
89145
%b = select i1 %c, i32 %x, i32 -1
90146
ret i32 %b
@@ -98,6 +154,15 @@ define signext i32 @test7(i32 signext %x, i32 signext %z) {
98154
; NOSFB-NEXT: addi a1, a1, -1
99155
; NOSFB-NEXT: or a0, a0, a1
100156
; NOSFB-NEXT: ret
157+
;
158+
; SFB-LABEL: test7:
159+
; SFB: # %bb.0:
160+
; SFB-NEXT: li a2, -1
161+
; SFB-NEXT: bnez a1, .LBB6_2
162+
; SFB-NEXT: # %bb.1:
163+
; SFB-NEXT: mv a0, a2
164+
; SFB-NEXT: .LBB6_2:
165+
; SFB-NEXT: ret
101166
%c = icmp eq i32 %z, 0
102167
%b = select i1 %c, i32 -1, i32 %x
103168
ret i32 %b
@@ -111,6 +176,16 @@ define i16 @select_xor_1(i16 %A, i8 %cond) {
111176
; NOSFB-NEXT: andi a1, a1, 43
112177
; NOSFB-NEXT: xor a0, a0, a1
113178
; NOSFB-NEXT: ret
179+
;
180+
; SFB-LABEL: select_xor_1:
181+
; SFB: # %bb.0: # %entry
182+
; SFB-NEXT: xori a2, a0, 43
183+
; SFB-NEXT: andi a1, a1, 1
184+
; SFB-NEXT: beqz a1, .LBB7_2
185+
; SFB-NEXT: # %bb.1: # %entry
186+
; SFB-NEXT: mv a0, a2
187+
; SFB-NEXT: .LBB7_2: # %entry
188+
; SFB-NEXT: ret
114189
entry:
115190
%and = and i8 %cond, 1
116191
%cmp10 = icmp eq i8 %and, 0
@@ -129,6 +204,16 @@ define i16 @select_xor_1b(i16 %A, i8 %cond) {
129204
; NOSFB-NEXT: andi a1, a1, 43
130205
; NOSFB-NEXT: xor a0, a0, a1
131206
; NOSFB-NEXT: ret
207+
;
208+
; SFB-LABEL: select_xor_1b:
209+
; SFB: # %bb.0: # %entry
210+
; SFB-NEXT: xori a2, a0, 43
211+
; SFB-NEXT: andi a1, a1, 1
212+
; SFB-NEXT: beqz a1, .LBB8_2
213+
; SFB-NEXT: # %bb.1: # %entry
214+
; SFB-NEXT: mv a0, a2
215+
; SFB-NEXT: .LBB8_2: # %entry
216+
; SFB-NEXT: ret
132217
entry:
133218
%and = and i8 %cond, 1
134219
%cmp10 = icmp ne i8 %and, 1
@@ -145,6 +230,15 @@ define i32 @select_xor_2(i32 %A, i32 %B, i8 %cond) {
145230
; NOSFB-NEXT: and a1, a1, a2
146231
; NOSFB-NEXT: xor a0, a0, a1
147232
; NOSFB-NEXT: ret
233+
;
234+
; SFB-LABEL: select_xor_2:
235+
; SFB: # %bb.0: # %entry
236+
; SFB-NEXT: andi a2, a2, 1
237+
; SFB-NEXT: beqz a2, .LBB9_2
238+
; SFB-NEXT: # %bb.1: # %entry
239+
; SFB-NEXT: xor a0, a0, a1
240+
; SFB-NEXT: .LBB9_2: # %entry
241+
; SFB-NEXT: ret
148242
entry:
149243
%and = and i8 %cond, 1
150244
%cmp10 = icmp eq i8 %and, 0
@@ -163,6 +257,15 @@ define i32 @select_xor_2b(i32 %A, i32 %B, i8 %cond) {
163257
; NOSFB-NEXT: and a1, a1, a2
164258
; NOSFB-NEXT: xor a0, a0, a1
165259
; NOSFB-NEXT: ret
260+
;
261+
; SFB-LABEL: select_xor_2b:
262+
; SFB: # %bb.0: # %entry
263+
; SFB-NEXT: andi a2, a2, 1
264+
; SFB-NEXT: beqz a2, .LBB10_2
265+
; SFB-NEXT: # %bb.1: # %entry
266+
; SFB-NEXT: xor a0, a0, a1
267+
; SFB-NEXT: .LBB10_2: # %entry
268+
; SFB-NEXT: ret
166269
entry:
167270
%and = and i8 %cond, 1
168271
%cmp10 = icmp ne i8 %and, 1
@@ -179,6 +282,15 @@ define i32 @select_or(i32 %A, i32 %B, i8 %cond) {
179282
; NOSFB-NEXT: and a1, a1, a2
180283
; NOSFB-NEXT: or a0, a0, a1
181284
; NOSFB-NEXT: ret
285+
;
286+
; SFB-LABEL: select_or:
287+
; SFB: # %bb.0: # %entry
288+
; SFB-NEXT: andi a2, a2, 1
289+
; SFB-NEXT: beqz a2, .LBB11_2
290+
; SFB-NEXT: # %bb.1: # %entry
291+
; SFB-NEXT: or a0, a0, a1
292+
; SFB-NEXT: .LBB11_2: # %entry
293+
; SFB-NEXT: ret
182294
entry:
183295
%and = and i8 %cond, 1
184296
%cmp10 = icmp eq i8 %and, 0
@@ -197,6 +309,15 @@ define i32 @select_or_b(i32 %A, i32 %B, i8 %cond) {
197309
; NOSFB-NEXT: and a1, a1, a2
198310
; NOSFB-NEXT: or a0, a0, a1
199311
; NOSFB-NEXT: ret
312+
;
313+
; SFB-LABEL: select_or_b:
314+
; SFB: # %bb.0: # %entry
315+
; SFB-NEXT: andi a2, a2, 1
316+
; SFB-NEXT: beqz a2, .LBB12_2
317+
; SFB-NEXT: # %bb.1: # %entry
318+
; SFB-NEXT: or a0, a0, a1
319+
; SFB-NEXT: .LBB12_2: # %entry
320+
; SFB-NEXT: ret
200321
entry:
201322
%and = and i8 %cond, 1
202323
%cmp10 = icmp ne i8 %and, 1
@@ -213,6 +334,15 @@ define i32 @select_or_1(i32 %A, i32 %B, i32 %cond) {
213334
; NOSFB-NEXT: and a1, a1, a2
214335
; NOSFB-NEXT: or a0, a0, a1
215336
; NOSFB-NEXT: ret
337+
;
338+
; SFB-LABEL: select_or_1:
339+
; SFB: # %bb.0: # %entry
340+
; SFB-NEXT: andi a2, a2, 1
341+
; SFB-NEXT: beqz a2, .LBB13_2
342+
; SFB-NEXT: # %bb.1: # %entry
343+
; SFB-NEXT: or a0, a0, a1
344+
; SFB-NEXT: .LBB13_2: # %entry
345+
; SFB-NEXT: ret
216346
entry:
217347
%and = and i32 %cond, 1
218348
%cmp10 = icmp eq i32 %and, 0
@@ -231,6 +361,15 @@ define i32 @select_or_1b(i32 %A, i32 %B, i32 %cond) {
231361
; NOSFB-NEXT: and a1, a1, a2
232362
; NOSFB-NEXT: or a0, a0, a1
233363
; NOSFB-NEXT: ret
364+
;
365+
; SFB-LABEL: select_or_1b:
366+
; SFB: # %bb.0: # %entry
367+
; SFB-NEXT: andi a2, a2, 1
368+
; SFB-NEXT: beqz a2, .LBB14_2
369+
; SFB-NEXT: # %bb.1: # %entry
370+
; SFB-NEXT: or a0, a0, a1
371+
; SFB-NEXT: .LBB14_2: # %entry
372+
; SFB-NEXT: ret
234373
entry:
235374
%and = and i32 %cond, 1
236375
%cmp10 = icmp ne i32 %and, 1
@@ -264,6 +403,32 @@ define void @sextw_removal_ccor(i1 %c, i32 signext %arg, i32 signext %arg1, i32
264403
; NOSFB-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
265404
; NOSFB-NEXT: addi sp, sp, 32
266405
; NOSFB-NEXT: ret
406+
;
407+
; SFB-LABEL: sextw_removal_ccor:
408+
; SFB: # %bb.0: # %bb
409+
; SFB-NEXT: addi sp, sp, -32
410+
; SFB-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
411+
; SFB-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
412+
; SFB-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
413+
; SFB-NEXT: andi a0, a0, 1
414+
; SFB-NEXT: mv s0, a2
415+
; SFB-NEXT: beqz a0, .LBB15_4
416+
; SFB-NEXT: # %bb.3: # %bb
417+
; SFB-NEXT: or a3, a3, a1
418+
; SFB-NEXT: .LBB15_4: # %bb
419+
; SFB-NEXT: .LBB15_1: # %bb2
420+
; SFB-NEXT: # =>This Inner Loop Header: Depth=1
421+
; SFB-NEXT: mv a0, a3
422+
; SFB-NEXT: sllw s1, a3, s0
423+
; SFB-NEXT: call bar@plt
424+
; SFB-NEXT: mv a3, s1
425+
; SFB-NEXT: bnez a0, .LBB15_1
426+
; SFB-NEXT: # %bb.2: # %bb7
427+
; SFB-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
428+
; SFB-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
429+
; SFB-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
430+
; SFB-NEXT: addi sp, sp, 32
431+
; SFB-NEXT: ret
267432
bb:
268433
%sel = select i1 %c, i32 %arg, i32 0
269434
%or = or i32 %sel, %arg2
@@ -306,6 +471,32 @@ define void @sextw_removal_ccaddw(i1 %c, i32 signext %arg, i32 signext %arg1, i3
306471
; NOSFB-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
307472
; NOSFB-NEXT: addi sp, sp, 32
308473
; NOSFB-NEXT: ret
474+
;
475+
; SFB-LABEL: sextw_removal_ccaddw:
476+
; SFB: # %bb.0: # %bb
477+
; SFB-NEXT: addi sp, sp, -32
478+
; SFB-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
479+
; SFB-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
480+
; SFB-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
481+
; SFB-NEXT: andi a0, a0, 1
482+
; SFB-NEXT: mv s0, a2
483+
; SFB-NEXT: beqz a0, .LBB16_4
484+
; SFB-NEXT: # %bb.3: # %bb
485+
; SFB-NEXT: addw a1, a1, a3
486+
; SFB-NEXT: .LBB16_4: # %bb
487+
; SFB-NEXT: .LBB16_1: # %bb2
488+
; SFB-NEXT: # =>This Inner Loop Header: Depth=1
489+
; SFB-NEXT: mv a0, a1
490+
; SFB-NEXT: sllw s1, a1, s0
491+
; SFB-NEXT: call bar@plt
492+
; SFB-NEXT: mv a1, s1
493+
; SFB-NEXT: bnez a0, .LBB16_1
494+
; SFB-NEXT: # %bb.2: # %bb7
495+
; SFB-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
496+
; SFB-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
497+
; SFB-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
498+
; SFB-NEXT: addi sp, sp, 32
499+
; SFB-NEXT: ret
309500
bb:
310501
%sel = select i1 %c, i32 %arg2, i32 0
311502
%or = add i32 %sel, %arg

0 commit comments

Comments
 (0)