Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / Xtensa / brcc.ll
blob8bbc39c536c561bc5e8b9a3151736542ecc55ca1
1 ; RUN: llc -mtriple=xtensa -disable-block-placement -verify-machineinstrs < %s \
2 ; RUN:   | FileCheck %s
4 define i32 @brcc_sgt(i32 %a, i32 %b) nounwind {
5 ; CHECK-LABEL: brcc_sgt:
6 ; CHECK:         bge a3, a2, .LBB0_2
7 ; CHECK-NEXT:    j .LBB0_1
8 ; CHECK-NEXT:  .LBB0_1: # %t1
9 ; CHECK-NEXT:    addi a2, a2, 4
10 ; CHECK-NEXT:    j .LBB0_3
11 ; CHECK-NEXT:  .LBB0_2: # %t2
12 ; CHECK-NEXT:    addi a2, a3, 8
13 ; CHECK-NEXT:  .LBB0_3: # %exit
14 ; CHECK-NEXT:    ret
15   %wb = icmp sgt i32 %a, %b
16   br i1 %wb, label %t1, label %t2
17 t1:
18   %t1v = add i32 %a, 4
19   br label %exit
20 t2:
21   %t2v = add i32 %b, 8
22   br label %exit
23 exit:
24   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
25   ret i32 %v
28 define i32 @brcc_ugt(i32 %a, i32 %b) nounwind {
29 ; CHECK-LABEL: brcc_ugt:
30 ; CHECK:         bgeu a3, a2, .LBB1_2
31 ; CHECK-NEXT:    j .LBB1_1
32 ; CHECK-NEXT:  .LBB1_1: # %t1
33 ; CHECK-NEXT:    addi a2, a2, 4
34 ; CHECK-NEXT:    j .LBB1_3
35 ; CHECK-NEXT:  .LBB1_2: # %t2
36 ; CHECK-NEXT:    addi a2, a3, 8
37 ; CHECK-NEXT:  .LBB1_3: # %exit
38 ; CHECK-NEXT:    ret
39   %wb = icmp ugt i32 %a, %b
40   br i1 %wb, label %t1, label %t2
41 t1:
42   %t1v = add i32 %a, 4
43   br label %exit
44 t2:
45   %t2v = add i32 %b, 8
46   br label %exit
47 exit:
48   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
49   ret i32 %v
52 define i32 @brcc_sle(i32 %a, i32 %b) nounwind {
53 ; CHECK-LABEL: brcc_sle:
54 ; CHECK:         blt a3, a2, .LBB2_2
55 ; CHECK-NEXT:    j .LBB2_1
56 ; CHECK-NEXT:  .LBB2_1: # %t1
57 ; CHECK-NEXT:    addi a2, a2, 4
58 ; CHECK-NEXT:    j .LBB2_3
59 ; CHECK-NEXT:  .LBB2_2: # %t2
60 ; CHECK-NEXT:    addi a2, a3, 8
61 ; CHECK-NEXT:  .LBB2_3: # %exit
62 ; CHECK-NEXT:    ret
63   %wb = icmp sle i32 %a, %b
64   br i1 %wb, label %t1, label %t2
65 t1:
66   %t1v = add i32 %a, 4
67   br label %exit
68 t2:
69   %t2v = add i32 %b, 8
70   br label %exit
71 exit:
72   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
73   ret i32 %v
76 define i32 @brcc_ule(i32 %a, i32 %b) nounwind {
77 ; CHECK-LABEL: brcc_ule:
78 ; CHECK:         bltu a3, a2, .LBB3_2
79 ; CHECK-NEXT:    j .LBB3_1
80 ; CHECK-NEXT:  .LBB3_1: # %t1
81 ; CHECK-NEXT:    addi a2, a2, 4
82 ; CHECK-NEXT:    j .LBB3_3
83 ; CHECK-NEXT:  .LBB3_2: # %t2
84 ; CHECK-NEXT:    addi a2, a3, 8
85 ; CHECK-NEXT:  .LBB3_3: # %exit
86 ; CHECK-NEXT:    ret
87   %wb = icmp ule i32 %a, %b
88   br i1 %wb, label %t1, label %t2
89 t1:
90   %t1v = add i32 %a, 4
91   br label %exit
92 t2:
93   %t2v = add i32 %b, 8
94   br label %exit
95 exit:
96   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
97   ret i32 %v
100 define i32 @brcc_eq(i32 %a, i32 %b) nounwind {
101 ; CHECK-LABEL: brcc_eq:
102 ; CHECK:         bne a2, a3, .LBB4_2
103 ; CHECK-NEXT:    j .LBB4_1
104 ; CHECK-NEXT:  .LBB4_1: # %t1
105 ; CHECK-NEXT:    addi a2, a2, 4
106 ; CHECK-NEXT:    j .LBB4_3
107 ; CHECK-NEXT:  .LBB4_2: # %t2
108 ; CHECK-NEXT:    addi a2, a3, 8
109 ; CHECK-NEXT:  .LBB4_3: # %exit
110 ; CHECK-NEXT:    ret
111   %wb = icmp eq i32 %a, %b
112   br i1 %wb, label %t1, label %t2
114   %t1v = add i32 %a, 4
115   br label %exit
117   %t2v = add i32 %b, 8
118   br label %exit
119 exit:
120   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
121   ret i32 %v
124 define i32 @brcc_ne(i32 %a, i32 %b) nounwind {
125 ; CHECK-LABEL: brcc_ne:
126 ; CHECK:         beq a2, a3, .LBB5_2
127 ; CHECK-NEXT:    j .LBB5_1
128 ; CHECK-NEXT:  .LBB5_1: # %t1
129 ; CHECK-NEXT:    addi a2, a2, 4
130 ; CHECK-NEXT:    j .LBB5_3
131 ; CHECK-NEXT:  .LBB5_2: # %t2
132 ; CHECK-NEXT:    addi a2, a3, 8
133 ; CHECK-NEXT:  .LBB5_3: # %exit
134 ; CHECK-NEXT:    ret
135   %wb = icmp ne i32 %a, %b
136   br i1 %wb, label %t1, label %t2
138   %t1v = add i32 %a, 4
139   br label %exit
141   %t2v = add i32 %b, 8
142   br label %exit
143 exit:
144   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
145   ret i32 %v
148 define i32 @brcc_ge(i32 %a, i32 %b) nounwind {
149 ; CHECK-LABEL: brcc_ge:
150 ; CHECK:         blt a2, a3, .LBB6_2
151 ; CHECK-NEXT:    j .LBB6_1
152 ; CHECK-NEXT:  .LBB6_1: # %t1
153 ; CHECK-NEXT:    addi a2, a2, 4
154 ; CHECK-NEXT:    j .LBB6_3
155 ; CHECK-NEXT:  .LBB6_2: # %t2
156 ; CHECK-NEXT:    addi a2, a3, 8
157 ; CHECK-NEXT:  .LBB6_3: # %exit
158 ; CHECK-NEXT:    ret
159   %wb = icmp sge i32 %a, %b
160   br i1 %wb, label %t1, label %t2
162   %t1v = add i32 %a, 4
163   br label %exit
165   %t2v = add i32 %b, 8
166   br label %exit
167 exit:
168   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
169   ret i32 %v
172 define i32 @brcc_lt(i32 %a, i32 %b) nounwind {
173 ; CHECK-LABEL: brcc_lt:
174 ; CHECK:         bge a2, a3, .LBB7_2
175 ; CHECK-NEXT:    j .LBB7_1
176 ; CHECK-NEXT:  .LBB7_1: # %t1
177 ; CHECK-NEXT:    addi a2, a2, 4
178 ; CHECK-NEXT:    j .LBB7_3
179 ; CHECK-NEXT:  .LBB7_2: # %t2
180 ; CHECK-NEXT:    addi a2, a3, 8
181 ; CHECK-NEXT:  .LBB7_3: # %exit
182 ; CHECK-NEXT:    ret
183   %wb = icmp slt i32 %a, %b
184   br i1 %wb, label %t1, label %t2
186   %t1v = add i32 %a, 4
187   br label %exit
189   %t2v = add i32 %b, 8
190   br label %exit
191 exit:
192   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
193   ret i32 %v
196 define i32 @brcc_uge(i32 %a, i32 %b) nounwind {
197 ; CHECK-LABEL: brcc_uge:
198 ; CHECK:         bltu a2, a3, .LBB8_2
199 ; CHECK-NEXT:    j .LBB8_1
200 ; CHECK-NEXT:  .LBB8_1: # %t1
201 ; CHECK-NEXT:    addi a2, a2, 4
202 ; CHECK-NEXT:    j .LBB8_3
203 ; CHECK-NEXT:  .LBB8_2: # %t2
204 ; CHECK-NEXT:    addi a2, a3, 8
205 ; CHECK-NEXT:  .LBB8_3: # %exit
206 ; CHECK-NEXT:    ret
207   %wb = icmp uge i32 %a, %b
208   br i1 %wb, label %t1, label %t2
210   %t1v = add i32 %a, 4
211   br label %exit
213   %t2v = add i32 %b, 8
214   br label %exit
215 exit:
216   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
217   ret i32 %v
220 define i32 @brcc_ult(i32 %a, i32 %b) nounwind {
221 ; CHECK-LABEL: brcc_ult:
222 ; CHECK:         bgeu a2, a3, .LBB9_2
223 ; CHECK-NEXT:    j .LBB9_1
224 ; CHECK-NEXT:  .LBB9_1: # %t1
225 ; CHECK-NEXT:    addi a2, a2, 4
226 ; CHECK-NEXT:    j .LBB9_3
227 ; CHECK-NEXT:  .LBB9_2: # %t2
228 ; CHECK-NEXT:    addi a2, a3, 8
229 ; CHECK-NEXT:  .LBB9_3: # %exit
230 ; CHECK-NEXT:    ret
231   %wb = icmp ult i32 %a, %b
232   br i1 %wb, label %t1, label %t2
234   %t1v = add i32 %a, 4
235   br label %exit
237   %t2v = add i32 %b, 8
238   br label %exit
239 exit:
240   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
241   ret i32 %v