Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / branch-opt.ll
blobe4912bbf861a2a0e2904fbdee03b87612798fdfa
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
5 define 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
22 block1:                                           ; preds = %0
23   store i32 %b, ptr %c
24   br label %end_block
26 block2:                                           ; preds = %0
27   store i32 87, ptr %d
28   br label %end_block
30 end_block:                                        ; preds = %block2, %block1
31   ret void
34 define 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
51 block1:                                           ; preds = %0
52   store i32 %b, ptr %c
53   br label %end_block
55 block2:                                           ; preds = %0
56   store i32 87, ptr %d
57   br label %end_block
59 end_block:                                        ; preds = %block2, %block1
60   ret void
63 define 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
80 block1:                                           ; preds = %0
81   store i32 %b, ptr %c
82   br label %end_block
84 block2:                                           ; preds = %0
85   store i32 87, ptr %d
86   br label %end_block
88 end_block:                                        ; preds = %block2, %block1
89   ret void
92 define 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
109 block1:                                           ; preds = %0
110   store i32 %b, ptr %c
111   br label %end_block
113 block2:                                           ; preds = %0
114   store i32 87, ptr %d
115   br label %end_block
117 end_block:                                        ; preds = %block2, %block1
118   ret void