ELF: Have __rela_iplt_{start,end} surround .rela.iplt with --pack-dyn-relocs=android.
[llvm-project.git] / llvm / test / CodeGen / Xtensa / brcc.ll
blob6d542f637cf659aed9ee00cee34b58d4b09a17b5
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=xtensa -disable-block-placement -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s
5 define i32 @brcc_sgt(i32 %a, i32 %b) nounwind {
6 ; CHECK-LABEL: brcc_sgt:
7 ; CHECK:         bge a3, a2, .LBB0_2
8 ; CHECK-NEXT:  # %bb.1: # %t1
9 ; CHECK-NEXT:    addi a2, a2, 4
10 ; CHECK-NEXT:    ret
11 ; CHECK-NEXT:  .LBB0_2: # %t2
12 ; CHECK-NEXT:    addi a2, a3, 8
13 ; CHECK-NEXT:    ret
14   %wb = icmp sgt i32 %a, %b
15   br i1 %wb, label %t1, label %t2
16 t1:
17   %t1v = add i32 %a, 4
18   br label %exit
19 t2:
20   %t2v = add i32 %b, 8
21   br label %exit
22 exit:
23   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
24   ret i32 %v
27 define i32 @brcc_ugt(i32 %a, i32 %b) nounwind {
28 ; CHECK-LABEL: brcc_ugt:
29 ; CHECK:         bgeu a3, a2, .LBB1_2
30 ; CHECK-NEXT:  # %bb.1: # %t1
31 ; CHECK-NEXT:    addi a2, a2, 4
32 ; CHECK-NEXT:    ret
33 ; CHECK-NEXT:  .LBB1_2: # %t2
34 ; CHECK-NEXT:    addi a2, a3, 8
35 ; CHECK-NEXT:    ret
36   %wb = icmp ugt i32 %a, %b
37   br i1 %wb, label %t1, label %t2
38 t1:
39   %t1v = add i32 %a, 4
40   br label %exit
41 t2:
42   %t2v = add i32 %b, 8
43   br label %exit
44 exit:
45   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
46   ret i32 %v
49 define i32 @brcc_sle(i32 %a, i32 %b) nounwind {
50 ; CHECK-LABEL: brcc_sle:
51 ; CHECK:         blt a3, a2, .LBB2_2
52 ; CHECK-NEXT:  # %bb.1: # %t1
53 ; CHECK-NEXT:    addi a2, a2, 4
54 ; CHECK-NEXT:    ret
55 ; CHECK-NEXT:  .LBB2_2: # %t2
56 ; CHECK-NEXT:    addi a2, a3, 8
57 ; CHECK-NEXT:    ret
58   %wb = icmp sle i32 %a, %b
59   br i1 %wb, label %t1, label %t2
60 t1:
61   %t1v = add i32 %a, 4
62   br label %exit
63 t2:
64   %t2v = add i32 %b, 8
65   br label %exit
66 exit:
67   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
68   ret i32 %v
71 define i32 @brcc_ule(i32 %a, i32 %b) nounwind {
72 ; CHECK-LABEL: brcc_ule:
73 ; CHECK:         bltu a3, a2, .LBB3_2
74 ; CHECK-NEXT:  # %bb.1: # %t1
75 ; CHECK-NEXT:    addi a2, a2, 4
76 ; CHECK-NEXT:    ret
77 ; CHECK-NEXT:  .LBB3_2: # %t2
78 ; CHECK-NEXT:    addi a2, a3, 8
79 ; CHECK-NEXT:    ret
80   %wb = icmp ule i32 %a, %b
81   br i1 %wb, label %t1, label %t2
82 t1:
83   %t1v = add i32 %a, 4
84   br label %exit
85 t2:
86   %t2v = add i32 %b, 8
87   br label %exit
88 exit:
89   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
90   ret i32 %v
93 define i32 @brcc_eq(i32 %a, i32 %b) nounwind {
94 ; CHECK-LABEL: brcc_eq:
95 ; CHECK:         bne a2, a3, .LBB4_2
96 ; CHECK-NEXT:  # %bb.1: # %t1
97 ; CHECK-NEXT:    addi a2, a2, 4
98 ; CHECK-NEXT:    ret
99 ; CHECK-NEXT:  .LBB4_2: # %t2
100 ; CHECK-NEXT:    addi a2, a3, 8
101 ; CHECK-NEXT:    ret
102   %wb = icmp eq i32 %a, %b
103   br i1 %wb, label %t1, label %t2
105   %t1v = add i32 %a, 4
106   br label %exit
108   %t2v = add i32 %b, 8
109   br label %exit
110 exit:
111   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
112   ret i32 %v
115 define i32 @brcc_ne(i32 %a, i32 %b) nounwind {
116 ; CHECK-LABEL: brcc_ne:
117 ; CHECK:         beq a2, a3, .LBB5_2
118 ; CHECK-NEXT:  # %bb.1: # %t1
119 ; CHECK-NEXT:    addi a2, a2, 4
120 ; CHECK-NEXT:    ret
121 ; CHECK-NEXT:  .LBB5_2: # %t2
122 ; CHECK-NEXT:    addi a2, a3, 8
123 ; CHECK-NEXT:    ret
124   %wb = icmp ne i32 %a, %b
125   br i1 %wb, label %t1, label %t2
127   %t1v = add i32 %a, 4
128   br label %exit
130   %t2v = add i32 %b, 8
131   br label %exit
132 exit:
133   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
134   ret i32 %v
137 define i32 @brcc_ge(i32 %a, i32 %b) nounwind {
138 ; CHECK-LABEL: brcc_ge:
139 ; CHECK:         blt a2, a3, .LBB6_2
140 ; CHECK-NEXT:  # %bb.1: # %t1
141 ; CHECK-NEXT:    addi a2, a2, 4
142 ; CHECK-NEXT:    ret
143 ; CHECK-NEXT:  .LBB6_2: # %t2
144 ; CHECK-NEXT:    addi a2, a3, 8
145 ; CHECK-NEXT:    ret
146   %wb = icmp sge i32 %a, %b
147   br i1 %wb, label %t1, label %t2
149   %t1v = add i32 %a, 4
150   br label %exit
152   %t2v = add i32 %b, 8
153   br label %exit
154 exit:
155   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
156   ret i32 %v
159 define i32 @brcc_lt(i32 %a, i32 %b) nounwind {
160 ; CHECK-LABEL: brcc_lt:
161 ; CHECK:         bge a2, a3, .LBB7_2
162 ; CHECK-NEXT:  # %bb.1: # %t1
163 ; CHECK-NEXT:    addi a2, a2, 4
164 ; CHECK-NEXT:    ret
165 ; CHECK-NEXT:  .LBB7_2: # %t2
166 ; CHECK-NEXT:    addi a2, a3, 8
167 ; CHECK-NEXT:    ret
168   %wb = icmp slt i32 %a, %b
169   br i1 %wb, label %t1, label %t2
171   %t1v = add i32 %a, 4
172   br label %exit
174   %t2v = add i32 %b, 8
175   br label %exit
176 exit:
177   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
178   ret i32 %v
181 define i32 @brcc_uge(i32 %a, i32 %b) nounwind {
182 ; CHECK-LABEL: brcc_uge:
183 ; CHECK:         bltu a2, a3, .LBB8_2
184 ; CHECK-NEXT:  # %bb.1: # %t1
185 ; CHECK-NEXT:    addi a2, a2, 4
186 ; CHECK-NEXT:    ret
187 ; CHECK-NEXT:  .LBB8_2: # %t2
188 ; CHECK-NEXT:    addi a2, a3, 8
189 ; CHECK-NEXT:    ret
190   %wb = icmp uge i32 %a, %b
191   br i1 %wb, label %t1, label %t2
193   %t1v = add i32 %a, 4
194   br label %exit
196   %t2v = add i32 %b, 8
197   br label %exit
198 exit:
199   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
200   ret i32 %v
203 define i32 @brcc_ult(i32 %a, i32 %b) nounwind {
204 ; CHECK-LABEL: brcc_ult:
205 ; CHECK:         bgeu a2, a3, .LBB9_2
206 ; CHECK-NEXT:  # %bb.1: # %t1
207 ; CHECK-NEXT:    addi a2, a2, 4
208 ; CHECK-NEXT:    ret
209 ; CHECK-NEXT:  .LBB9_2: # %t2
210 ; CHECK-NEXT:    addi a2, a3, 8
211 ; CHECK-NEXT:    ret
212   %wb = icmp ult i32 %a, %b
213   br i1 %wb, label %t1, label %t2
215   %t1v = add i32 %a, 4
216   br label %exit
218   %t2v = add i32 %b, 8
219   br label %exit
220 exit:
221   %v = phi i32 [ %t1v, %t1 ], [ %t2v, %t2 ]
222   ret i32 %v