Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: tests_lit/llvm2ice_tests/bool-folding.ll

Issue 1414883007: Subzero. ARM32. Implements bool folding. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments && pulls. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests_lit/llvm2ice_tests/64bit.pnacl.ll ('k') | tests_lit/llvm2ice_tests/branch-opt.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; This tests the optimization where producers and consumers of i1 (bool) 1 ; This tests the optimization where producers and consumers of i1 (bool)
2 ; variables are combined to implicitly use flags instead of explicitly using 2 ; variables are combined to implicitly use flags instead of explicitly using
3 ; stack or register variables. 3 ; stack or register variables.
4 4
5 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 \ 5 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 \
6 ; RUN: -allow-externally-defined-symbols | FileCheck %s 6 ; RUN: -allow-externally-defined-symbols | FileCheck %s
7 7
8 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ 8 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
9 ; RUN: --target arm32 -i %s --args -O2 --skip-unimplemented \ 9 ; RUN: --target arm32 -i %s --args -O2 --skip-unimplemented \
10 ; RUN: -allow-externally-defined-symbols \ 10 ; RUN: -allow-externally-defined-symbols \
(...skipping 10 matching lines...) Expand all
21 branch1: 21 branch1:
22 ret i32 1 22 ret i32 1
23 branch2: 23 branch2:
24 ret i32 2 24 ret i32 2
25 } 25 }
26 26
27 ; CHECK-LABEL: fold_cmp_br 27 ; CHECK-LABEL: fold_cmp_br
28 ; CHECK: cmp 28 ; CHECK: cmp
29 ; CHECK: jge 29 ; CHECK: jge
30 ; ARM32-LABEL: fold_cmp_br 30 ; ARM32-LABEL: fold_cmp_br
31 ; ARM32: cmp 31 ; ARM32: cmp r0, r1
32 ; ARM32: beq 32 ; ARM32: bge
33 ; ARM32: mov r0, #1
34 ; ARM32: bx lr
35 ; ARM32: mov r0, #2
36 ; ARM32: bx lr
33 37
34 38
35 ; Cmp/branch folding with intervening instructions. 39 ; Cmp/branch folding with intervening instructions.
36 define internal i32 @fold_cmp_br_intervening_insts(i32 %arg1, i32 %arg2) { 40 define internal i32 @fold_cmp_br_intervening_insts(i32 %arg1, i32 %arg2) {
37 entry: 41 entry:
38 %cmp1 = icmp slt i32 %arg1, %arg2 42 %cmp1 = icmp slt i32 %arg1, %arg2
39 call void @use_value(i32 %arg1) 43 call void @use_value(i32 %arg1)
40 br i1 %cmp1, label %branch1, label %branch2 44 br i1 %cmp1, label %branch1, label %branch2
41 branch1: 45 branch1:
42 ret i32 1 46 ret i32 1
43 branch2: 47 branch2:
44 ret i32 2 48 ret i32 2
45 } 49 }
46 50
47 ; CHECK-LABEL: fold_cmp_br_intervening_insts 51 ; CHECK-LABEL: fold_cmp_br_intervening_insts
48 ; CHECK-NOT: cmp 52 ; CHECK-NOT: cmp
49 ; CHECK: call 53 ; CHECK: call
50 ; CHECK: cmp 54 ; CHECK: cmp
51 ; CHECK: jge 55 ; CHECK: jge
52 ; ARM32-LABEL: fold_cmp_br_intervening_insts 56 ; ARM32-LABEL: fold_cmp_br_intervening_insts
53 ; ARM32: push {{[{].*[}]}} 57 ; ARM32: push {{[{].*[}]}}
54 ; ARM32: movlt [[TMP:r[0-9]+]], #1 58 ; ARM32: bl use_value
55 ; ARM32: mov [[P:r[4-7]]], [[TMP]] 59 ; ARM32: cmp {{r[0-9]+}}, {{r[0-9]+}}
56 ; ARM32: bl 60 ; ARM32: bge
57 ; ARM32: cmp [[P]], #0 61 ; ARM32: mov r0, #1
58 ; ARM32: beq 62 ; ARM32: bx lr
63 ; ARM32: mov r0, #2
64 ; ARM32: bx lr
59 65
60 66
61 ; Cmp/branch non-folding because of live-out. 67 ; Cmp/branch non-folding because of live-out.
62 define internal i32 @no_fold_cmp_br_liveout(i32 %arg1, i32 %arg2) { 68 define internal i32 @no_fold_cmp_br_liveout(i32 %arg1, i32 %arg2) {
63 entry: 69 entry:
64 %cmp1 = icmp slt i32 %arg1, %arg2 70 %cmp1 = icmp slt i32 %arg1, %arg2
65 br label %next 71 br label %next
66 next: 72 next:
67 br i1 %cmp1, label %branch1, label %branch2 73 br i1 %cmp1, label %branch1, label %branch2
68 branch1: 74 branch1:
(...skipping 26 matching lines...) Expand all
95 ret i32 2 101 ret i32 2
96 } 102 }
97 103
98 ; CHECK-LABEL: no_fold_cmp_br_non_whitelist 104 ; CHECK-LABEL: no_fold_cmp_br_non_whitelist
99 ; CHECK: cmp 105 ; CHECK: cmp
100 ; CHECK: set 106 ; CHECK: set
101 ; CHECK: movzx 107 ; CHECK: movzx
102 ; CHECK: cmp 108 ; CHECK: cmp
103 ; CHECK: je 109 ; CHECK: je
104 ; ARM32-LABEL: no_fold_cmp_br_non_whitelist 110 ; ARM32-LABEL: no_fold_cmp_br_non_whitelist
105 ; ARM32: mov [[R:r[0-9]+]], #0
106 ; ARM32: cmp r0, r1 111 ; ARM32: cmp r0, r1
112 ; ARM32: movge [[R:r[0-9]+]], #0
107 ; ARM32: movlt [[R]], #1 113 ; ARM32: movlt [[R]], #1
108 ; ARM32: mov [[R2:r[0-9]+]], [[R]] 114 ; ARM32: cmp r0, r1
109 ; ARM32: and [[R3:r[0-9]+]], [[R2]], #1 115 ; ARM32: bge
110 ; ARM32: cmp [[R]] 116 ; ARM32: bx lr
111 ; ARM32: beq 117 ; ARM32: mov r0, #2
118 ; ARM32: bx lr
112 119
113 120
114 ; Basic cmp/select folding. 121 ; Basic cmp/select folding.
115 define internal i32 @fold_cmp_select(i32 %arg1, i32 %arg2) { 122 define internal i32 @fold_cmp_select(i32 %arg1, i32 %arg2) {
116 entry: 123 entry:
117 %cmp1 = icmp slt i32 %arg1, %arg2 124 %cmp1 = icmp slt i32 %arg1, %arg2
118 %result = select i1 %cmp1, i32 %arg1, i32 %arg2 125 %result = select i1 %cmp1, i32 %arg1, i32 %arg2
119 ret i32 %result 126 ret i32 %result
120 } 127 }
121 128
122 ; CHECK-LABEL: fold_cmp_select 129 ; CHECK-LABEL: fold_cmp_select
123 ; CHECK: cmp 130 ; CHECK: cmp
124 ; CHECK: cmovl 131 ; CHECK: cmovl
125 ; ARM32-LABEL: fold_cmp_select 132 ; ARM32-LABEL: fold_cmp_select
126 ; ARM32: mov [[R:r[0-9]+]], #0
127 ; ARM32: cmp r0, r1 133 ; ARM32: cmp r0, r1
128 ; ARM32: movlt [[R]], #1 134 ; ARM32: movlt {{r[0-9]+}}, r0
129 ; ARM32: cmp [[R]], #0
130
131 135
132 ; 64-bit cmp/select folding. 136 ; 64-bit cmp/select folding.
133 define internal i64 @fold_cmp_select_64(i64 %arg1, i64 %arg2) { 137 define internal i64 @fold_cmp_select_64(i64 %arg1, i64 %arg2) {
134 entry: 138 entry:
135 %arg1_trunc = trunc i64 %arg1 to i32 139 %arg1_trunc = trunc i64 %arg1 to i32
136 %arg2_trunc = trunc i64 %arg2 to i32 140 %arg2_trunc = trunc i64 %arg2 to i32
137 %cmp1 = icmp slt i32 %arg1_trunc, %arg2_trunc 141 %cmp1 = icmp slt i32 %arg1_trunc, %arg2_trunc
138 %result = select i1 %cmp1, i64 %arg1, i64 %arg2 142 %result = select i1 %cmp1, i64 %arg1, i64 %arg2
139 ret i64 %result 143 ret i64 %result
140 } 144 }
141 145
142 ; CHECK-LABEL: fold_cmp_select_64 146 ; CHECK-LABEL: fold_cmp_select_64
143 ; CHECK: cmp 147 ; CHECK: cmp
144 ; CHECK: cmovl 148 ; CHECK: cmovl
145 ; CHECK: cmovl 149 ; CHECK: cmovl
146 ; ARM32-LABEL: fold_cmp_select_64 150 ; ARM32-LABEL: fold_cmp_select_64
147 ; ARM32: mov [[R:r[0-9]+]], #0
148 ; ARM32: cmp r0, r2 151 ; ARM32: cmp r0, r2
149 ; ARM32: movlt [[R]], #1 152 ; ARM32: movlt [[LOW:r[0-9]+]], r0
150 ; ARM32: cmp [[R]], #0 153 ; ARM32: movlt [[HIGH:r[0-9]+]], r1
151 ; ARM32: movne 154 ; ARM32: mov r0, [[LOW]]
152 ; ARM32: movne 155 ; ARM32: mov r1, [[HIGH]]
153 ; ARM32-DAG: mov r0
154 ; ARM32-DAG: mov r1
155 ; ARM32: bx lr 156 ; ARM32: bx lr
156 157
157 158
158 define internal i64 @fold_cmp_select_64_undef(i64 %arg1) { 159 define internal i64 @fold_cmp_select_64_undef(i64 %arg1) {
159 entry: 160 entry:
160 %arg1_trunc = trunc i64 %arg1 to i32 161 %arg1_trunc = trunc i64 %arg1 to i32
161 %cmp1 = icmp slt i32 undef, %arg1_trunc 162 %cmp1 = icmp slt i32 undef, %arg1_trunc
162 %result = select i1 %cmp1, i64 %arg1, i64 undef 163 %result = select i1 %cmp1, i64 %arg1, i64 undef
163 ret i64 %result 164 ret i64 %result
164 } 165 }
165 ; CHECK-LABEL: fold_cmp_select_64_undef 166 ; CHECK-LABEL: fold_cmp_select_64_undef
166 ; CHECK: cmp 167 ; CHECK: cmp
167 ; CHECK: cmovl 168 ; CHECK: cmovl
168 ; CHECK: cmovl 169 ; CHECK: cmovl
169 ; ARM32-LABEL: fold_cmp_select_64_undef 170 ; ARM32-LABEL: fold_cmp_select_64_undef
170 ; ARM32: cmp {{r[0-9]+}}, r0 171 ; ARM32: cmp {{r[0-9]+}}, r0
171 ; ARM32: movlt [[R:r[0-9]+]], #1 172 ; ARM32: movge
172 ; ARM32: cmp [[R]] 173 ; ARM32: movlt
173 ; ARM32: movne 174 ; ARM32: movge
174 ; ARM32: movne 175 ; ARM32: movlt
175 ; ARM32-DAG: mov r0
176 ; ARM32-DAG: mov r1
177 ; ARM32: bx lr 176 ; ARM32: bx lr
178 177
179 178
180 ; Cmp/select folding with intervening instructions. 179 ; Cmp/select folding with intervening instructions.
181 define internal i32 @fold_cmp_select_intervening_insts(i32 %arg1, i32 %arg2) { 180 define internal i32 @fold_cmp_select_intervening_insts(i32 %arg1, i32 %arg2) {
182 entry: 181 entry:
183 %cmp1 = icmp slt i32 %arg1, %arg2 182 %cmp1 = icmp slt i32 %arg1, %arg2
184 call void @use_value(i32 %arg1) 183 call void @use_value(i32 %arg1)
185 %result = select i1 %cmp1, i32 %arg1, i32 %arg2 184 %result = select i1 %cmp1, i32 %arg1, i32 %arg2
186 ret i32 %result 185 ret i32 %result
187 } 186 }
188 187
189 ; CHECK-LABEL: fold_cmp_select_intervening_insts 188 ; CHECK-LABEL: fold_cmp_select_intervening_insts
190 ; CHECK-NOT: cmp 189 ; CHECK-NOT: cmp
191 ; CHECK: call 190 ; CHECK: call
192 ; CHECK: cmp 191 ; CHECK: cmp
193 ; CHECK: cmovl 192 ; CHECK: cmovl
194 ; ARM32-LABEL: fold_cmp_select_intervening_insts 193 ; ARM32-LABEL: fold_cmp_select_intervening_insts
195 ; ARM32: mov [[RES0:r[4-7]+]], r0 194 ; ARM32: bl use_value
196 ; ARM32: mov [[RES1:r[4-7]+]], r1
197 ; ARM32: mov [[R:r[0-9]+]], #0
198 ; ARM32: cmp r{{[0-9]+}}, r{{[0-9]+}} 195 ; ARM32: cmp r{{[0-9]+}}, r{{[0-9]+}}
199 ; ARM32: movlt [[R]], #1 196 ; ARM32: movlt
200 ; ARM32: mov [[R2:r[4-7]]], [[R]] 197 ; ARM32: bx lr
201 ; ARM32: bl use_value
202 ; ARM32: cmp [[R2]], #0
203 ; ARM32: movne [[RES1]], [[RES0]]
204 ; ARM32: mov r0, [[RES1]]
205
206 198
207 ; Cmp/multi-select folding. 199 ; Cmp/multi-select folding.
208 define internal i32 @fold_cmp_select_multi(i32 %arg1, i32 %arg2) { 200 define internal i32 @fold_cmp_select_multi(i32 %arg1, i32 %arg2) {
209 entry: 201 entry:
210 %cmp1 = icmp slt i32 %arg1, %arg2 202 %cmp1 = icmp slt i32 %arg1, %arg2
211 %a = select i1 %cmp1, i32 %arg1, i32 %arg2 203 %a = select i1 %cmp1, i32 %arg1, i32 %arg2
212 %b = select i1 %cmp1, i32 %arg2, i32 %arg1 204 %b = select i1 %cmp1, i32 %arg2, i32 %arg1
213 %c = select i1 %cmp1, i32 123, i32 %arg1 205 %c = select i1 %cmp1, i32 123, i32 %arg1
214 %partial = add i32 %a, %b 206 %partial = add i32 %a, %b
215 %result = add i32 %partial, %c 207 %result = add i32 %partial, %c
216 ret i32 %result 208 ret i32 %result
217 } 209 }
218 210
219 ; CHECK-LABEL: fold_cmp_select_multi 211 ; CHECK-LABEL: fold_cmp_select_multi
220 ; CHECK: cmp 212 ; CHECK: cmp
221 ; CHECK: cmovl 213 ; CHECK: cmovl
222 ; CHECK: cmp 214 ; CHECK: cmp
223 ; CHECK: cmovl 215 ; CHECK: cmovl
224 ; CHECK: cmp 216 ; CHECK: cmp
225 ; CHECK: cmovge 217 ; CHECK: cmovge
226 ; CHECK: add 218 ; CHECK: add
227 ; CHECK: add 219 ; CHECK: add
228 ; ARM32-LABEL: fold_cmp_select_multi 220 ; ARM32-LABEL: fold_cmp_select_multi
229 ; ARM32: mov [[T0:r[0-9]+]], #0
230 ; ARM32: cmp r0, r1 221 ; ARM32: cmp r0, r1
231 ; ARM32: movlt [[T0]], #1 222 ; ARM32: movlt {{r[0-9]+}}, r0
232 ; ARM32: uxtb [[T1:r[0-9]+]], [[T1]] 223 ; ARM32: cmp r0, r1
233 ; ARM32-NEXT: cmp [[T1]], #0 224 ; ARM32: movlt {{r[0-9]+}}, r1
234 ; ARM32: movne [[T2:r[0-9]+]], r0 225 ; ARM32: cmp r0, r1
235 ; ARM32: uxtb [[T3:r[0-9]+]], [[T3]] 226 ; ARM32: movlt {{r[0-9]+}}, #123
236 ; ARM32-NEXT: cmp [[T3]], #0 227 ; ARM32: add
237 ; ARM32: movne [[T4:r[0-9]+]], r1 228 ; ARM32: add
238 ; ARM32: uxtb [[T5:r[0-9]+]], [[T5]]
239 ; ARM32-NEXT: cmp [[T5]], #0
240 ; ARM32: movne [[T6:r[0-9]+]], #123
241 ; ARM32: add [[T7:r[0-9]+]], [[T2]], [[T4]]
242 ; ARM32: add {{r[0-9]+}}, [[T7]], [[T6]]
243 ; ARM32: bx lr 229 ; ARM32: bx lr
244 230
245 231
246 ; Cmp/multi-select non-folding because of live-out. 232 ; Cmp/multi-select non-folding because of live-out.
247 define internal i32 @no_fold_cmp_select_multi_liveout(i32 %arg1, i32 %arg2) { 233 define internal i32 @no_fold_cmp_select_multi_liveout(i32 %arg1, i32 %arg2) {
248 entry: 234 entry:
249 %cmp1 = icmp slt i32 %arg1, %arg2 235 %cmp1 = icmp slt i32 %arg1, %arg2
250 %a = select i1 %cmp1, i32 %arg1, i32 %arg2 236 %a = select i1 %cmp1, i32 %arg1, i32 %arg2
251 %b = select i1 %cmp1, i32 %arg2, i32 %arg1 237 %b = select i1 %cmp1, i32 %arg2, i32 %arg1
252 br label %next 238 br label %next
253 next: 239 next:
254 %c = select i1 %cmp1, i32 123, i32 %arg1 240 %c = select i1 %cmp1, i32 123, i32 %arg1
255 %partial = add i32 %a, %b 241 %partial = add i32 %a, %b
256 %result = add i32 %partial, %c 242 %result = add i32 %partial, %c
257 ret i32 %result 243 ret i32 %result
258 } 244 }
259 245
260 ; CHECK-LABEL: no_fold_cmp_select_multi_liveout 246 ; CHECK-LABEL: no_fold_cmp_select_multi_liveout
261 ; CHECK: set 247 ; CHECK: set
262 ; CHECK: cmp 248 ; CHECK: cmp
263 ; CHECK: cmovne 249 ; CHECK: cmovne
264 ; CHECK: cmp 250 ; CHECK: cmp
265 ; CHECK: cmovne 251 ; CHECK: cmovne
266 ; CHECK: cmp 252 ; CHECK: cmp
267 ; CHECK: cmove 253 ; CHECK: cmove
268 ; CHECK: add 254 ; CHECK: add
269 ; CHECK: add 255 ; CHECK: add
270 ; ARM32-LABEL: no_fold_cmp_select_multi_liveout 256 ; ARM32-LABEL: no_fold_cmp_select_multi_liveout
271 ; ARM32-LABEL: fold_cmp_select_multi 257 ; ARM32-LABEL: fold_cmp_select_multi
272 ; ARM32: mov [[T0:r[0-9]+]], #0
273 ; ARM32: cmp r0, r1 258 ; ARM32: cmp r0, r1
259 ; ARM32: movge [[T0:r[0-9]+]], #0
274 ; ARM32: movlt [[T0]], #1 260 ; ARM32: movlt [[T0]], #1
275 ; ARM32: uxtb [[T2:r[0-9]+]], [[T2]] 261 ; ARM32: uxtb [[T1:r[0-9]+]], [[T1]]
276 ; ARM32-NEXT: cmp [[T2]], #0 262 ; ARM32-NEXT: cmp [[T1]], #0
277 ; ARM32: movne [[T1]], r0 263 ; ARM32: movne [[T2:r[0-9]+]], r0
278 ; ARM32: uxtb [[T4:r[0-9]+]], [[T4]] 264 ; ARM32: uxtb [[T3:r[0-9]+]], [[T3]]
279 ; ARM32-NEXT: cmp [[T4]], #0 265 ; ARM32-NEXT: cmp [[T3]], #0
280 ; ARM32: movne [[T3]], r1 266 ; ARM32: movne [[T4:r[0-9]+]], r1
281 ; ARM32-LABEL: .Lno_fold_cmp_select_multi_liveout$next: 267 ; ARM32-LABEL: .Lno_fold_cmp_select_multi_liveout$next:
282 ; ARM32: uxtb [[T5:r[0-9]+]], [[T5]] 268 ; ARM32: uxtb [[T5:r[0-9]+]], [[T5]]
283 ; ARM32: cmp [[T5]], #0 269 ; ARM32: cmp [[T5]], #0
284 ; ARM32: movne [[T6:r[0-9]+]], #123 270 ; ARM32: movne [[T6:r[0-9]+]], #123
285 ; ARM32: add [[T7:r[0-9]+]], [[T2]], [[T4]] 271 ; ARM32: add
286 ; ARM32: add {{r[0-9]+}}, [[T7]], [[T6]] 272 ; ARM32: add
287 ; ARM32: bx lr 273 ; ARM32: bx lr
288 274
289 ; Cmp/multi-select non-folding because of extra non-whitelisted uses. 275 ; Cmp/multi-select non-folding because of extra non-whitelisted uses.
290 define internal i32 @no_fold_cmp_select_multi_non_whitelist(i32 %arg1, 276 define internal i32 @no_fold_cmp_select_multi_non_whitelist(i32 %arg1,
291 i32 %arg2) { 277 i32 %arg2) {
292 entry: 278 entry:
293 %cmp1 = icmp slt i32 %arg1, %arg2 279 %cmp1 = icmp slt i32 %arg1, %arg2
294 %a = select i1 %cmp1, i32 %arg1, i32 %arg2 280 %a = select i1 %cmp1, i32 %arg1, i32 %arg2
295 %b = select i1 %cmp1, i32 %arg2, i32 %arg1 281 %b = select i1 %cmp1, i32 %arg2, i32 %arg1
296 %c = select i1 %cmp1, i32 123, i32 %arg1 282 %c = select i1 %cmp1, i32 123, i32 %arg1
(...skipping 10 matching lines...) Expand all
307 ; CHECK: cmovne 293 ; CHECK: cmovne
308 ; CHECK: cmp 294 ; CHECK: cmp
309 ; CHECK: cmovne 295 ; CHECK: cmovne
310 ; CHECK: cmp 296 ; CHECK: cmp
311 ; CHECK: cmove 297 ; CHECK: cmove
312 ; CHECK: movzx 298 ; CHECK: movzx
313 ; CHECK: add 299 ; CHECK: add
314 ; CHECK: add 300 ; CHECK: add
315 ; CHECK: add 301 ; CHECK: add
316 ; ARM32-LABEL: no_fold_cmp_select_multi_non_whitelist 302 ; ARM32-LABEL: no_fold_cmp_select_multi_non_whitelist
317 ; ARM32: mov [[T0:r[0-9]+]], #0
318 ; ARM32: cmp r0, r1 303 ; ARM32: cmp r0, r1
319 ; ARM32: movlt [[T0]], #1 304 ; ARM32: movge [[R0:r[0-9]+]]
320 ; ARM32: uxtb [[T1:r[0-9]+]], [[T1]] 305 ; ARM32: movlt [[R0]]
321 ; ARM32-NEXT: cmp [[T1]], #0 306 ; ARM32: cmp r0, r1
322 ; ARM32: movne [[T2:r[0-9]+]], r0 307 ; ARM32: movge [[R1:r[0-9]+]]
323 ; ARM32: uxtb [[T3:r[0-9]+]], [[T3]] 308 ; ARM32: movlt [[R1]]
324 ; ARM32-NEXT: cmp [[T3]], #0 309 ; ARM32: cmp r0, r1
325 ; ARM32: movne [[T4:r[0-9]+]], r1 310 ; ARM32: movge [[R2:r[0-9]+]]
326 ; ARM32: uxtb [[T5:r[0-9]+]], [[T5]] 311 ; ARM32: movlt [[R2]]
327 ; ARM32-NEXT: cmp [[T5]], #0 312 ; ARM32: cmp r0, r1
328 ; ARM32: movne [[T6:r[0-9]+]], #123 313 ; ARM32: movge [[R3:r[0-9]+]]
329 ; ARM32: and [[T7:r[0-9]+]], [[T0]], #1 314 ; ARM32: movlt [[R3]]
330 ; ARM32: add [[T8:r[0-9]+]], [[T2]], [[T4]] 315 ; ARM32: add
331 ; ARM32: add {{r[0-9]+}}, [[T8]], [[T7]] 316 ; ARM32: add
317 ; ARM32: add
332 ; ARM32: bx lr 318 ; ARM32: bx lr
OLDNEW
« no previous file with comments | « tests_lit/llvm2ice_tests/64bit.pnacl.ll ('k') | tests_lit/llvm2ice_tests/branch-opt.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698