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