xref: /llvm-project/llvm/test/CodeGen/RISCV/branch-opt.ll (revision 1e39575a981088e8596461a3511cce3ec4c3b274)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2; RUN: llc -mtriple=riscv32 -O2 -verify-machineinstrs < %s | FileCheck %s
3; RUN: llc -mtriple=riscv64 -O2 -verify-machineinstrs < %s | FileCheck %s
4
5define void @u_case1_a(ptr %a, i32 signext %b, ptr %c, ptr %d) {
6; CHECK-LABEL: u_case1_a:
7; CHECK:       # %bb.0:
8; CHECK-NEXT:    li a4, 32
9; CHECK-NEXT:    sw a4, 0(a0)
10; CHECK-NEXT:    bgeu a1, a4, .LBB0_2
11; CHECK-NEXT:  # %bb.1: # %block1
12; CHECK-NEXT:    sw a1, 0(a2)
13; CHECK-NEXT:    ret
14; CHECK-NEXT:  .LBB0_2: # %block2
15; CHECK-NEXT:    li a0, 87
16; CHECK-NEXT:    sw a0, 0(a3)
17; CHECK-NEXT:    ret
18  store i32 32, ptr %a
19  %p = icmp ule i32 %b, 31
20  br i1 %p, label %block1, label %block2
21
22block1:                                           ; preds = %0
23  store i32 %b, ptr %c
24  br label %end_block
25
26block2:                                           ; preds = %0
27  store i32 87, ptr %d
28  br label %end_block
29
30end_block:                                        ; preds = %block2, %block1
31  ret void
32}
33
34define void @case1_a(ptr %a, i32 signext %b, ptr %c, ptr %d) {
35; CHECK-LABEL: case1_a:
36; CHECK:       # %bb.0:
37; CHECK-NEXT:    li a4, -1
38; CHECK-NEXT:    sw a4, 0(a0)
39; CHECK-NEXT:    bge a1, a4, .LBB1_2
40; CHECK-NEXT:  # %bb.1: # %block1
41; CHECK-NEXT:    sw a1, 0(a2)
42; CHECK-NEXT:    ret
43; CHECK-NEXT:  .LBB1_2: # %block2
44; CHECK-NEXT:    li a0, 87
45; CHECK-NEXT:    sw a0, 0(a3)
46; CHECK-NEXT:    ret
47  store i32 -1, ptr %a
48  %p = icmp sle i32 %b, -2
49  br i1 %p, label %block1, label %block2
50
51block1:                                           ; preds = %0
52  store i32 %b, ptr %c
53  br label %end_block
54
55block2:                                           ; preds = %0
56  store i32 87, ptr %d
57  br label %end_block
58
59end_block:                                        ; preds = %block2, %block1
60  ret void
61}
62
63define void @u_case2_a(ptr %a, i32 signext %b, ptr %c, ptr %d) {
64; CHECK-LABEL: u_case2_a:
65; CHECK:       # %bb.0:
66; CHECK-NEXT:    li a4, 32
67; CHECK-NEXT:    sw a4, 0(a0)
68; CHECK-NEXT:    bgeu a4, a1, .LBB2_2
69; CHECK-NEXT:  # %bb.1: # %block1
70; CHECK-NEXT:    sw a1, 0(a2)
71; CHECK-NEXT:    ret
72; CHECK-NEXT:  .LBB2_2: # %block2
73; CHECK-NEXT:    li a0, 87
74; CHECK-NEXT:    sw a0, 0(a3)
75; CHECK-NEXT:    ret
76  store i32 32, ptr %a
77  %p = icmp uge i32 %b, 33
78  br i1 %p, label %block1, label %block2
79
80block1:                                           ; preds = %0
81  store i32 %b, ptr %c
82  br label %end_block
83
84block2:                                           ; preds = %0
85  store i32 87, ptr %d
86  br label %end_block
87
88end_block:                                        ; preds = %block2, %block1
89  ret void
90}
91
92define void @case2_a(ptr %a, i32 signext %b, ptr %c, ptr %d) {
93; CHECK-LABEL: case2_a:
94; CHECK:       # %bb.0:
95; CHECK-NEXT:    li a4, -4
96; CHECK-NEXT:    sw a4, 0(a0)
97; CHECK-NEXT:    bge a4, a1, .LBB3_2
98; CHECK-NEXT:  # %bb.1: # %block1
99; CHECK-NEXT:    sw a1, 0(a2)
100; CHECK-NEXT:    ret
101; CHECK-NEXT:  .LBB3_2: # %block2
102; CHECK-NEXT:    li a0, 87
103; CHECK-NEXT:    sw a0, 0(a3)
104; CHECK-NEXT:    ret
105  store i32 -4, ptr %a
106  %p = icmp sge i32 %b, -3
107  br i1 %p, label %block1, label %block2
108
109block1:                                           ; preds = %0
110  store i32 %b, ptr %c
111  br label %end_block
112
113block2:                                           ; preds = %0
114  store i32 87, ptr %d
115  br label %end_block
116
117end_block:                                        ; preds = %block2, %block1
118  ret void
119}
120