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

Side by Side Diff: tests_lit/llvm2ice_tests/fp.cmp.ll

Issue 1417393003: Subzero. ARM32. New bool folding. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Adds --force to check-spec 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/branch-opt.ll ('k') | tests_lit/llvm2ice_tests/select-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 tries to be a comprehensive test of f32 and f64 compare operations. 1 ; This tries to be a comprehensive test of f32 and f64 compare operations.
2 2
3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \
4 ; RUN: -allow-externally-defined-symbols | FileCheck %s 4 ; RUN: -allow-externally-defined-symbols | FileCheck %s
5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \
6 ; RUN: -allow-externally-defined-symbols | FileCheck %s \ 6 ; RUN: -allow-externally-defined-symbols | FileCheck %s \
7 ; RUN: --check-prefix=CHECK-OM1 7 ; RUN: --check-prefix=CHECK-OM1
8 8
9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ 9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
10 ; RUN: --target arm32 -i %s --args -O2 \ 10 ; RUN: --target arm32 -i %s --args -O2 \
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 ; CHECK-OM1: ucomiss 51 ; CHECK-OM1: ucomiss
52 ; CHECK-OM1: jne 52 ; CHECK-OM1: jne
53 ; CHECK-OM1-NEXT: jp 53 ; CHECK-OM1-NEXT: jp
54 ; CHECK-OM1: call {{.*}} R_{{.*}} func 54 ; CHECK-OM1: call {{.*}} R_{{.*}} func
55 ; CHECK-OM1: ucomisd 55 ; CHECK-OM1: ucomisd
56 ; CHECK-OM1: jne 56 ; CHECK-OM1: jne
57 ; CHECK-NEXT-OM1: jp 57 ; CHECK-NEXT-OM1: jp
58 ; ARM32-LABEL: fcmpEq 58 ; ARM32-LABEL: fcmpEq
59 ; ARM32: vcmp.f32 59 ; ARM32: vcmp.f32
60 ; ARM32: vmrs 60 ; ARM32: vmrs
61 ; ARM32-OM1: movne [[R0:r[0-9]+]], #0 61 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
62 ; ARM32-OM1: moveq [[R0]], #1 62 ; ARM32-OM1: moveq [[R0]], #1
63 ; ARM32-O2: bne 63 ; ARM32-O2: bne
64 ; ARM32: bl func 64 ; ARM32: bl func
65 ; ARM32: vcmp.f64 65 ; ARM32: vcmp.f64
66 ; ARM32: vmrs 66 ; ARM32: vmrs
67 ; ARM32-OM1: movne [[R1:r[0-9]+]], #0 67 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
68 ; ARM32-OM1: moveq [[R1]], #1 68 ; ARM32-OM1: moveq [[R1]], #1
69 ; ARM32-O2: bne 69 ; ARM32-O2: bne
70 70
71 declare void @func() 71 declare void @func()
72 72
73 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { 73 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
74 entry: 74 entry:
75 %cmp = fcmp une float %a, %b 75 %cmp = fcmp une float %a, %b
76 br i1 %cmp, label %if.then, label %if.end 76 br i1 %cmp, label %if.then, label %if.end
77 77
(...skipping 30 matching lines...) Expand all
108 ; CHECK-OM1: jmp 108 ; CHECK-OM1: jmp
109 ; CHECK-OM1: call {{.*}} R_{{.*}} func 109 ; CHECK-OM1: call {{.*}} R_{{.*}} func
110 ; CHECK-OM1: ucomisd 110 ; CHECK-OM1: ucomisd
111 ; CHECK-OM1: jne 111 ; CHECK-OM1: jne
112 ; CHECK-OM1: jp 112 ; CHECK-OM1: jp
113 ; CHECK-OM1: jmp 113 ; CHECK-OM1: jmp
114 ; CHECK-OM1: call {{.*}} R_{{.*}} func 114 ; CHECK-OM1: call {{.*}} R_{{.*}} func
115 ; ARM32-LABEL: fcmpNe 115 ; ARM32-LABEL: fcmpNe
116 ; ARM32: vcmp.f32 116 ; ARM32: vcmp.f32
117 ; ARM32: vmrs 117 ; ARM32: vmrs
118 ; ARM32-OM1: moveq [[R0:r[0-9]+]], #0 118 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
119 ; ARM32-OM1: movne [[R0]], #1 119 ; ARM32-OM1: movne [[R0]], #1
120 ; ARM32-O2: beq 120 ; ARM32-O2: beq
121 ; ARM32: vcmp.f64 121 ; ARM32: vcmp.f64
122 ; ARM32: vmrs 122 ; ARM32: vmrs
123 ; ARM32-OM1: moveq [[R1:r[0-9]+]], #0 123 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
124 ; ARM32-OM1: movne [[R1]], #1 124 ; ARM32-OM1: movne [[R1]], #1
125 ; ARM32-O2: beq 125 ; ARM32-O2: beq
126 126
127 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 127 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
128 entry: 128 entry:
129 %cmp = fcmp ogt float %a, %b 129 %cmp = fcmp ogt float %a, %b
130 br i1 %cmp, label %if.then, label %if.end 130 br i1 %cmp, label %if.then, label %if.end
131 131
132 if.then: ; preds = %entry 132 if.then: ; preds = %entry
133 call void @func() 133 call void @func()
(...skipping 20 matching lines...) Expand all
154 ; CHECK-OM1-LABEL: fcmpGt 154 ; CHECK-OM1-LABEL: fcmpGt
155 ; CHECK-OM1: ucomiss 155 ; CHECK-OM1: ucomiss
156 ; CHECK-OM1: seta 156 ; CHECK-OM1: seta
157 ; CHECK-OM1: call {{.*}} R_{{.*}} func 157 ; CHECK-OM1: call {{.*}} R_{{.*}} func
158 ; CHECK-OM1: ucomisd 158 ; CHECK-OM1: ucomisd
159 ; CHECK-OM1: seta 159 ; CHECK-OM1: seta
160 ; CHECK-OM1: call {{.*}} R_{{.*}} func 160 ; CHECK-OM1: call {{.*}} R_{{.*}} func
161 ; ARM32-LABEL: fcmpGt 161 ; ARM32-LABEL: fcmpGt
162 ; ARM32: vcmp.f32 162 ; ARM32: vcmp.f32
163 ; ARM32: vmrs 163 ; ARM32: vmrs
164 ; ARM32-OM1: movle [[R0:r[0-9]+]], #0 164 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
165 ; ARM32-OM1: movgt [[R0]], #1 165 ; ARM32-OM1: movgt [[R0]], #1
166 ; ARM32-O2: ble 166 ; ARM32-O2: ble
167 ; ARM32: vcmp.f64 167 ; ARM32: vcmp.f64
168 ; ARM32: vmrs 168 ; ARM32: vmrs
169 ; ARM32-OM1: movle [[R1:r[0-9]+]], #0 169 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
170 ; ARM32-OM1: movgt [[R1]], #1 170 ; ARM32-OM1: movgt [[R1]], #1
171 ; ARM32-O2: ble 171 ; ARM32-O2: ble
172 172
173 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 173 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
174 entry: 174 entry:
175 %cmp = fcmp ult float %a, %b 175 %cmp = fcmp ult float %a, %b
176 br i1 %cmp, label %if.end, label %if.then 176 br i1 %cmp, label %if.end, label %if.then
177 177
178 if.then: ; preds = %entry 178 if.then: ; preds = %entry
179 call void @func() 179 call void @func()
(...skipping 20 matching lines...) Expand all
200 ; CHECK-OM1-LABEL: fcmpGe 200 ; CHECK-OM1-LABEL: fcmpGe
201 ; CHECK-OM1: ucomiss 201 ; CHECK-OM1: ucomiss
202 ; CHECK-OM1-NEXT: setb 202 ; CHECK-OM1-NEXT: setb
203 ; CHECK-OM1: call {{.*}} R_{{.*}} func 203 ; CHECK-OM1: call {{.*}} R_{{.*}} func
204 ; CHECK-OM1: ucomisd 204 ; CHECK-OM1: ucomisd
205 ; CHECK-OM1-NEXT: setb 205 ; CHECK-OM1-NEXT: setb
206 ; CHECK-OM1: call {{.*}} R_{{.*}} func 206 ; CHECK-OM1: call {{.*}} R_{{.*}} func
207 ; ARM32-LABEL: fcmpGe 207 ; ARM32-LABEL: fcmpGe
208 ; ARM32: vcmp.f32 208 ; ARM32: vcmp.f32
209 ; ARM32: vmrs 209 ; ARM32: vmrs
210 ; ARM32-OM1: movge [[R0:r[0-9]+]], #0 210 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
211 ; ARM32-OM1: movlt [[R0]], #1 211 ; ARM32-OM1: movlt [[R0]], #1
212 ; ARM32-O2: blt 212 ; ARM32-O2: blt
213 ; ARM32: vcmp.f64 213 ; ARM32: vcmp.f64
214 ; ARM32: vmrs 214 ; ARM32: vmrs
215 ; ARM32-OM1: movge [[R1:r[0-9]+]], #0 215 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
216 ; ARM32-OM1: movlt [[R1]], #1 216 ; ARM32-OM1: movlt [[R1]], #1
217 ; ARM32-O2: blt 217 ; ARM32-O2: blt
218 218
219 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 219 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
220 entry: 220 entry:
221 %cmp = fcmp olt float %a, %b 221 %cmp = fcmp olt float %a, %b
222 br i1 %cmp, label %if.then, label %if.end 222 br i1 %cmp, label %if.then, label %if.end
223 223
224 if.then: ; preds = %entry 224 if.then: ; preds = %entry
225 call void @func() 225 call void @func()
(...skipping 20 matching lines...) Expand all
246 ; CHECK-OM1-LABEL: fcmpLt 246 ; CHECK-OM1-LABEL: fcmpLt
247 ; CHECK-OM1: ucomiss 247 ; CHECK-OM1: ucomiss
248 ; CHECK-OM1-NEXT: seta 248 ; CHECK-OM1-NEXT: seta
249 ; CHECK-OM1: call {{.*}} R_{{.*}} func 249 ; CHECK-OM1: call {{.*}} R_{{.*}} func
250 ; CHECK-OM1: ucomisd 250 ; CHECK-OM1: ucomisd
251 ; CHECK-OM1-NEXT: seta 251 ; CHECK-OM1-NEXT: seta
252 ; CHECK-OM1: call {{.*}} R_{{.*}} func 252 ; CHECK-OM1: call {{.*}} R_{{.*}} func
253 ; ARM32-LABEL: fcmpLt 253 ; ARM32-LABEL: fcmpLt
254 ; ARM32: vcmp.f32 254 ; ARM32: vcmp.f32
255 ; ARM32: vmrs 255 ; ARM32: vmrs
256 ; ARM32-OM1: movpl [[R0:r[0-9]+]], #0 256 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
257 ; ARM32-OM1: movmi [[R0]], #1 257 ; ARM32-OM1: movmi [[R0]], #1
258 ; ARM32-O2: bpl 258 ; ARM32-O2: bpl
259 ; ARM32: vcmp.f64 259 ; ARM32: vcmp.f64
260 ; ARM32: vmrs 260 ; ARM32: vmrs
261 ; ARM32-OM1: movpl [[R1:r[0-9]+]], #0 261 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
262 ; ARM32-OM1: movmi [[R1]], #1 262 ; ARM32-OM1: movmi [[R1]], #1
263 ; ARM32-O2: bpl 263 ; ARM32-O2: bpl
264 264
265 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 265 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
266 entry: 266 entry:
267 %cmp = fcmp ugt float %a, %b 267 %cmp = fcmp ugt float %a, %b
268 br i1 %cmp, label %if.end, label %if.then 268 br i1 %cmp, label %if.end, label %if.then
269 269
270 if.then: ; preds = %entry 270 if.then: ; preds = %entry
271 call void @func() 271 call void @func()
(...skipping 20 matching lines...) Expand all
292 ; CHECK-OM1-LABEL: fcmpLe 292 ; CHECK-OM1-LABEL: fcmpLe
293 ; CHECK-OM1: ucomiss 293 ; CHECK-OM1: ucomiss
294 ; CHECK-OM1-NEXT: setb 294 ; CHECK-OM1-NEXT: setb
295 ; CHECK-OM1: call {{.*}} R_{{.*}} func 295 ; CHECK-OM1: call {{.*}} R_{{.*}} func
296 ; CHECK-OM1: ucomisd 296 ; CHECK-OM1: ucomisd
297 ; CHECK-OM1-NEXT: setb 297 ; CHECK-OM1-NEXT: setb
298 ; CHECK-OM1: call {{.*}} R_{{.*}} func 298 ; CHECK-OM1: call {{.*}} R_{{.*}} func
299 ; ARM32-LABEL: fcmpLe 299 ; ARM32-LABEL: fcmpLe
300 ; ARM32: vcmp.f32 300 ; ARM32: vcmp.f32
301 ; ARM32: vmrs 301 ; ARM32: vmrs
302 ; ARM32-OM1: movls [[R0:r[0-9]+]], #0 302 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
303 ; ARM32-OM1: movhi [[R0]], #1 303 ; ARM32-OM1: movhi [[R0]], #1
304 ; ARM32-O2: bhi 304 ; ARM32-O2: bhi
305 ; ARM32: vcmp.f64 305 ; ARM32: vcmp.f64
306 ; ARM32: vmrs 306 ; ARM32: vmrs
307 ; ARM32-OM1: movls [[R1:r[0-9]+]], #0 307 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
308 ; ARM32-OM1: movhi [[R1]], #1 308 ; ARM32-OM1: movhi [[R1]], #1
309 ; ARM32-O2: bhi 309 ; ARM32-O2: bhi
310 310
311 define internal i32 @fcmpFalseFloat(float %a, float %b) { 311 define internal i32 @fcmpFalseFloat(float %a, float %b) {
312 entry: 312 entry:
313 %cmp = fcmp false float %a, %b 313 %cmp = fcmp false float %a, %b
314 %cmp.ret_ext = zext i1 %cmp to i32 314 %cmp.ret_ext = zext i1 %cmp to i32
315 ret i32 %cmp.ret_ext 315 ret i32 %cmp.ret_ext
316 } 316 }
317 ; CHECK-LABEL: fcmpFalseFloat 317 ; CHECK-LABEL: fcmpFalseFloat
(...skipping 16 matching lines...) Expand all
334 entry: 334 entry:
335 %cmp = fcmp oeq float %a, %b 335 %cmp = fcmp oeq float %a, %b
336 %cmp.ret_ext = zext i1 %cmp to i32 336 %cmp.ret_ext = zext i1 %cmp to i32
337 ret i32 %cmp.ret_ext 337 ret i32 %cmp.ret_ext
338 } 338 }
339 ; CHECK-LABEL: fcmpOeqFloat 339 ; CHECK-LABEL: fcmpOeqFloat
340 ; CHECK: ucomiss 340 ; CHECK: ucomiss
341 ; CHECK: jne 341 ; CHECK: jne
342 ; CHECK: jp 342 ; CHECK: jp
343 ; ARM32-LABEL: fcmpOeqFloat 343 ; ARM32-LABEL: fcmpOeqFloat
344 ; ARM32-O2: mov [[R:r[0-9]+]], #0
344 ; ARM32: vcmp.f32 345 ; ARM32: vcmp.f32
345 ; ARM32: vmrs 346 ; ARM32: vmrs
346 ; ARM32: movne [[R:r[0-9]+]], #0 347 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
347 ; ARM32: moveq [[R]], #1 348 ; ARM32: moveq [[R]], #1
348 349
349 define internal i32 @fcmpOeqDouble(double %a, double %b) { 350 define internal i32 @fcmpOeqDouble(double %a, double %b) {
350 entry: 351 entry:
351 %cmp = fcmp oeq double %a, %b 352 %cmp = fcmp oeq double %a, %b
352 %cmp.ret_ext = zext i1 %cmp to i32 353 %cmp.ret_ext = zext i1 %cmp to i32
353 ret i32 %cmp.ret_ext 354 ret i32 %cmp.ret_ext
354 } 355 }
355 ; CHECK-LABEL: fcmpOeqDouble 356 ; CHECK-LABEL: fcmpOeqDouble
356 ; CHECK: ucomisd 357 ; CHECK: ucomisd
357 ; CHECK: jne 358 ; CHECK: jne
358 ; CHECK: jp 359 ; CHECK: jp
359 ; ARM32-LABEL: fcmpOeqDouble 360 ; ARM32-LABEL: fcmpOeqDouble
361 ; ARM32-O2: mov [[R:r[0-9]+]], #0
360 ; ARM32: vcmp.f64 362 ; ARM32: vcmp.f64
361 ; ARM32: vmrs 363 ; ARM32: vmrs
362 ; ARM32: movne [[R:r[0-9]+]], #0 364 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
363 ; ARM32: moveq [[R]], #1 365 ; ARM32: moveq [[R]], #1
364 366
365 define internal i32 @fcmpOgtFloat(float %a, float %b) { 367 define internal i32 @fcmpOgtFloat(float %a, float %b) {
366 entry: 368 entry:
367 %cmp = fcmp ogt float %a, %b 369 %cmp = fcmp ogt float %a, %b
368 %cmp.ret_ext = zext i1 %cmp to i32 370 %cmp.ret_ext = zext i1 %cmp to i32
369 ret i32 %cmp.ret_ext 371 ret i32 %cmp.ret_ext
370 } 372 }
371 ; CHECK-LABEL: fcmpOgtFloat 373 ; CHECK-LABEL: fcmpOgtFloat
372 ; CHECK: ucomiss 374 ; CHECK: ucomiss
373 ; CHECK: seta 375 ; CHECK: seta
374 ; ARM32-LABEL: fcmpOgtFloat 376 ; ARM32-LABEL: fcmpOgtFloat
377 ; ARM32-O2: mov [[R:r[0-9]+]], #0
375 ; ARM32: vcmp.f32 378 ; ARM32: vcmp.f32
376 ; ARM32: vmrs 379 ; ARM32: vmrs
377 ; ARM32: movle [[R:r[0-9]+]], #0 380 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
378 ; ARM32: movgt [[R]], #1 381 ; ARM32: movgt [[R]], #1
379 382
380 define internal i32 @fcmpOgtDouble(double %a, double %b) { 383 define internal i32 @fcmpOgtDouble(double %a, double %b) {
381 entry: 384 entry:
382 %cmp = fcmp ogt double %a, %b 385 %cmp = fcmp ogt double %a, %b
383 %cmp.ret_ext = zext i1 %cmp to i32 386 %cmp.ret_ext = zext i1 %cmp to i32
384 ret i32 %cmp.ret_ext 387 ret i32 %cmp.ret_ext
385 } 388 }
386 ; CHECK-LABEL: fcmpOgtDouble 389 ; CHECK-LABEL: fcmpOgtDouble
387 ; CHECK: ucomisd 390 ; CHECK: ucomisd
388 ; CHECK: seta 391 ; CHECK: seta
389 ; ARM32-LABEL: fcmpOgtDouble 392 ; ARM32-LABEL: fcmpOgtDouble
393 ; ARM32-O2: mov [[R:r[0-9]+]], #0
390 ; ARM32: vcmp.f64 394 ; ARM32: vcmp.f64
391 ; ARM32: vmrs 395 ; ARM32: vmrs
392 ; ARM32: movle [[R:r[0-9]+]], #0 396 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
393 ; ARM32: movgt [[R]], #1 397 ; ARM32: movgt [[R]], #1
394 398
395 define internal i32 @fcmpOgeFloat(float %a, float %b) { 399 define internal i32 @fcmpOgeFloat(float %a, float %b) {
396 entry: 400 entry:
397 %cmp = fcmp oge float %a, %b 401 %cmp = fcmp oge float %a, %b
398 %cmp.ret_ext = zext i1 %cmp to i32 402 %cmp.ret_ext = zext i1 %cmp to i32
399 ret i32 %cmp.ret_ext 403 ret i32 %cmp.ret_ext
400 } 404 }
401 ; CHECK-LABEL: fcmpOgeFloat 405 ; CHECK-LABEL: fcmpOgeFloat
402 ; CHECK: ucomiss 406 ; CHECK: ucomiss
403 ; CHECK: setae 407 ; CHECK: setae
404 ; ARM32-LABEL: fcmpOgeFloat 408 ; ARM32-LABEL: fcmpOgeFloat
409 ; ARM32-O2: mov [[R:r[0-9]+]], #0
405 ; ARM32: vcmp.f32 410 ; ARM32: vcmp.f32
406 ; ARM32: vmrs 411 ; ARM32: vmrs
407 ; ARM32: movlt [[R:r[0-9]+]], #0 412 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
408 ; ARM32: movge [[R]], #1 413 ; ARM32: movge [[R]], #1
409 414
410 define internal i32 @fcmpOgeDouble(double %a, double %b) { 415 define internal i32 @fcmpOgeDouble(double %a, double %b) {
411 entry: 416 entry:
412 %cmp = fcmp oge double %a, %b 417 %cmp = fcmp oge double %a, %b
413 %cmp.ret_ext = zext i1 %cmp to i32 418 %cmp.ret_ext = zext i1 %cmp to i32
414 ret i32 %cmp.ret_ext 419 ret i32 %cmp.ret_ext
415 } 420 }
416 ; CHECK-LABEL: fcmpOgeDouble 421 ; CHECK-LABEL: fcmpOgeDouble
417 ; CHECK: ucomisd 422 ; CHECK: ucomisd
418 ; CHECK: setae 423 ; CHECK: setae
419 ; ARM32-LABEL: fcmpOgeDouble 424 ; ARM32-LABEL: fcmpOgeDouble
425 ; ARM32-O2: mov [[R:r[0-9]+]], #0
420 ; ARM32: vcmp.f64 426 ; ARM32: vcmp.f64
421 ; ARM32: vmrs 427 ; ARM32: vmrs
422 ; ARM32: movlt [[R:r[0-9]+]], #0 428 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
423 ; ARM32: movge [[R]], #1 429 ; ARM32: movge [[R]], #1
424 430
425 define internal i32 @fcmpOltFloat(float %a, float %b) { 431 define internal i32 @fcmpOltFloat(float %a, float %b) {
426 entry: 432 entry:
427 %cmp = fcmp olt float %a, %b 433 %cmp = fcmp olt float %a, %b
428 %cmp.ret_ext = zext i1 %cmp to i32 434 %cmp.ret_ext = zext i1 %cmp to i32
429 ret i32 %cmp.ret_ext 435 ret i32 %cmp.ret_ext
430 } 436 }
431 ; CHECK-LABEL: fcmpOltFloat 437 ; CHECK-LABEL: fcmpOltFloat
432 ; CHECK: ucomiss 438 ; CHECK: ucomiss
433 ; CHECK: seta 439 ; CHECK: seta
434 ; ARM32-LABEL: fcmpOltFloat 440 ; ARM32-LABEL: fcmpOltFloat
441 ; ARM32-O2: mov [[R:r[0-9]+]], #0
435 ; ARM32: vcmp.f32 442 ; ARM32: vcmp.f32
436 ; ARM32: vmrs 443 ; ARM32: vmrs
437 ; ARM32: movpl [[R:r[0-9]+]], #0 444 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
438 ; ARM32: movmi [[R]], #1 445 ; ARM32: movmi [[R]], #1
439 446
440 define internal i32 @fcmpOltDouble(double %a, double %b) { 447 define internal i32 @fcmpOltDouble(double %a, double %b) {
441 entry: 448 entry:
442 %cmp = fcmp olt double %a, %b 449 %cmp = fcmp olt double %a, %b
443 %cmp.ret_ext = zext i1 %cmp to i32 450 %cmp.ret_ext = zext i1 %cmp to i32
444 ret i32 %cmp.ret_ext 451 ret i32 %cmp.ret_ext
445 } 452 }
446 ; CHECK-LABEL: fcmpOltDouble 453 ; CHECK-LABEL: fcmpOltDouble
447 ; CHECK: ucomisd 454 ; CHECK: ucomisd
448 ; CHECK: seta 455 ; CHECK: seta
449 ; ARM32-LABEL: fcmpOltDouble 456 ; ARM32-LABEL: fcmpOltDouble
457 ; ARM32-O2: mov [[R:r[0-9]+]], #0
450 ; ARM32: vcmp.f64 458 ; ARM32: vcmp.f64
451 ; ARM32: vmrs 459 ; ARM32: vmrs
452 ; ARM32: movpl [[R:r[0-9]+]], #0 460 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
453 ; ARM32: movmi [[R]], #1 461 ; ARM32: movmi [[R]], #1
454 462
455 define internal i32 @fcmpOleFloat(float %a, float %b) { 463 define internal i32 @fcmpOleFloat(float %a, float %b) {
456 entry: 464 entry:
457 %cmp = fcmp ole float %a, %b 465 %cmp = fcmp ole float %a, %b
458 %cmp.ret_ext = zext i1 %cmp to i32 466 %cmp.ret_ext = zext i1 %cmp to i32
459 ret i32 %cmp.ret_ext 467 ret i32 %cmp.ret_ext
460 } 468 }
461 ; CHECK-LABEL: fcmpOleFloat 469 ; CHECK-LABEL: fcmpOleFloat
462 ; CHECK: ucomiss 470 ; CHECK: ucomiss
463 ; CHECK: setae 471 ; CHECK: setae
464 ; ARM32-LABEL: fcmpOleFloat 472 ; ARM32-LABEL: fcmpOleFloat
473 ; ARM32-O2: mov [[R:r[0-9]+]], #0
465 ; ARM32: vcmp.f32 474 ; ARM32: vcmp.f32
466 ; ARM32: vmrs 475 ; ARM32: vmrs
467 ; ARM32: movhi [[R:r[0-9]+]], #0 476 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
468 ; ARM32: movls [[R]], #1 477 ; ARM32: movls [[R]], #1
469 478
470 define internal i32 @fcmpOleDouble(double %a, double %b) { 479 define internal i32 @fcmpOleDouble(double %a, double %b) {
471 entry: 480 entry:
472 %cmp = fcmp ole double %a, %b 481 %cmp = fcmp ole double %a, %b
473 %cmp.ret_ext = zext i1 %cmp to i32 482 %cmp.ret_ext = zext i1 %cmp to i32
474 ret i32 %cmp.ret_ext 483 ret i32 %cmp.ret_ext
475 } 484 }
476 ; CHECK-LABEL: fcmpOleDouble 485 ; CHECK-LABEL: fcmpOleDouble
477 ; CHECK: ucomisd 486 ; CHECK: ucomisd
478 ; CHECK: setae 487 ; CHECK: setae
479 ; ARM32-LABEL: fcmpOleDouble 488 ; ARM32-LABEL: fcmpOleDouble
489 ; ARM32-O2: mov [[R:r[0-9]+]], #0
480 ; ARM32: vcmp.f64 490 ; ARM32: vcmp.f64
481 ; ARM32: vmrs 491 ; ARM32: vmrs
482 ; ARM32: movhi [[R:r[0-9]+]], #0 492 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
483 ; ARM32: movls [[R]], #1 493 ; ARM32: movls [[R]], #1
484 494
485 define internal i32 @fcmpOneFloat(float %a, float %b) { 495 define internal i32 @fcmpOneFloat(float %a, float %b) {
486 entry: 496 entry:
487 %cmp = fcmp one float %a, %b 497 %cmp = fcmp one float %a, %b
488 %cmp.ret_ext = zext i1 %cmp to i32 498 %cmp.ret_ext = zext i1 %cmp to i32
489 ret i32 %cmp.ret_ext 499 ret i32 %cmp.ret_ext
490 } 500 }
491 ; CHECK-LABEL: fcmpOneFloat 501 ; CHECK-LABEL: fcmpOneFloat
492 ; CHECK: ucomiss 502 ; CHECK: ucomiss
493 ; CHECK: setne 503 ; CHECK: setne
494 ; ARM32-LABEL: fcmpOneFloat 504 ; ARM32-LABEL: fcmpOneFloat
505 ; ARM32-O2: mov [[R:r[0-9]+]], #0
495 ; ARM32: vcmp.f32 506 ; ARM32: vcmp.f32
496 ; ARM32: vmrs 507 ; ARM32: vmrs
497 ; ARM32: mov [[R:r[0-9]+]], #0 508 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
498 ; ARM32: movmi [[R]], #1 509 ; ARM32: movmi [[R]], #1
499 ; ARM32: movgt [[R]], #1 510 ; ARM32: movgt [[R]], #1
500 511
501 define internal i32 @fcmpOneDouble(double %a, double %b) { 512 define internal i32 @fcmpOneDouble(double %a, double %b) {
502 entry: 513 entry:
503 %cmp = fcmp one double %a, %b 514 %cmp = fcmp one double %a, %b
504 %cmp.ret_ext = zext i1 %cmp to i32 515 %cmp.ret_ext = zext i1 %cmp to i32
505 ret i32 %cmp.ret_ext 516 ret i32 %cmp.ret_ext
506 } 517 }
507 ; CHECK-LABEL: fcmpOneDouble 518 ; CHECK-LABEL: fcmpOneDouble
508 ; CHECK: ucomisd 519 ; CHECK: ucomisd
509 ; CHECK: setne 520 ; CHECK: setne
510 ; ARM32-LABEL: fcmpOneDouble 521 ; ARM32-LABEL: fcmpOneDouble
522 ; ARM32-O2: mov [[R:r[0-9]+]], #0
511 ; ARM32: vcmp.f64 523 ; ARM32: vcmp.f64
512 ; ARM32: vmrs 524 ; ARM32: vmrs
513 ; ARM32: mov [[R:r[0-9]+]], #0 525 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
514 ; ARM32: movmi [[R]], #1 526 ; ARM32: movmi [[R]], #1
515 ; ARM32: movgt [[R]], #1 527 ; ARM32: movgt [[R]], #1
516 528
517 define internal i32 @fcmpOrdFloat(float %a, float %b) { 529 define internal i32 @fcmpOrdFloat(float %a, float %b) {
518 entry: 530 entry:
519 %cmp = fcmp ord float %a, %b 531 %cmp = fcmp ord float %a, %b
520 %cmp.ret_ext = zext i1 %cmp to i32 532 %cmp.ret_ext = zext i1 %cmp to i32
521 ret i32 %cmp.ret_ext 533 ret i32 %cmp.ret_ext
522 } 534 }
523 ; CHECK-LABEL: fcmpOrdFloat 535 ; CHECK-LABEL: fcmpOrdFloat
524 ; CHECK: ucomiss 536 ; CHECK: ucomiss
525 ; CHECK: setnp 537 ; CHECK: setnp
526 ; ARM32-LABEL: fcmpOrdFloat 538 ; ARM32-LABEL: fcmpOrdFloat
539 ; ARM32-O2: mov [[R:r[0-9]+]], #0
527 ; ARM32: vcmp.f32 540 ; ARM32: vcmp.f32
528 ; ARM32: vmrs 541 ; ARM32: vmrs
529 ; ARM32: movvs [[R:r[0-9]+]], #0 542 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
530 ; ARM32: movvc [[R]], #1 543 ; ARM32: movvc [[R]], #1
531 544
532 define internal i32 @fcmpOrdDouble(double %a, double %b) { 545 define internal i32 @fcmpOrdDouble(double %a, double %b) {
533 entry: 546 entry:
534 %cmp = fcmp ord double %a, %b 547 %cmp = fcmp ord double %a, %b
535 %cmp.ret_ext = zext i1 %cmp to i32 548 %cmp.ret_ext = zext i1 %cmp to i32
536 ret i32 %cmp.ret_ext 549 ret i32 %cmp.ret_ext
537 } 550 }
538 ; CHECK-LABEL: fcmpOrdDouble 551 ; CHECK-LABEL: fcmpOrdDouble
539 ; CHECK: ucomisd 552 ; CHECK: ucomisd
540 ; CHECK: setnp 553 ; CHECK: setnp
541 ; ARM32-LABEL: fcmpOrdDouble 554 ; ARM32-LABEL: fcmpOrdDouble
555 ; ARM32-O2: mov [[R:r[0-9]+]], #0
542 ; ARM32: vcmp.f64 556 ; ARM32: vcmp.f64
543 ; ARM32: vmrs 557 ; ARM32: vmrs
544 ; ARM32: movvs [[R:r[0-9]+]], #0 558 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
545 ; ARM32: movvc [[R]], #1 559 ; ARM32: movvc [[R]], #1
546 560
547 define internal i32 @fcmpUeqFloat(float %a, float %b) { 561 define internal i32 @fcmpUeqFloat(float %a, float %b) {
548 entry: 562 entry:
549 %cmp = fcmp ueq float %a, %b 563 %cmp = fcmp ueq float %a, %b
550 %cmp.ret_ext = zext i1 %cmp to i32 564 %cmp.ret_ext = zext i1 %cmp to i32
551 ret i32 %cmp.ret_ext 565 ret i32 %cmp.ret_ext
552 } 566 }
553 ; CHECK-LABEL: fcmpUeqFloat 567 ; CHECK-LABEL: fcmpUeqFloat
554 ; CHECK: ucomiss 568 ; CHECK: ucomiss
555 ; CHECK: sete 569 ; CHECK: sete
556 ; ARM32-LABEL: fcmpUeqFloat 570 ; ARM32-LABEL: fcmpUeqFloat
571 ; ARM32-O2: mov [[R:r[0-9]+]], #0
557 ; ARM32: vcmp.f32 572 ; ARM32: vcmp.f32
558 ; ARM32: vmrs 573 ; ARM32: vmrs
559 ; ARM32: mov [[R:r[0-9]+]], #0 574 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
560 ; ARM32: moveq [[R]], #1 575 ; ARM32: moveq [[R]], #1
561 ; ARM32: movvs [[R]], #1 576 ; ARM32: movvs [[R]], #1
562 577
563 define internal i32 @fcmpUeqDouble(double %a, double %b) { 578 define internal i32 @fcmpUeqDouble(double %a, double %b) {
564 entry: 579 entry:
565 %cmp = fcmp ueq double %a, %b 580 %cmp = fcmp ueq double %a, %b
566 %cmp.ret_ext = zext i1 %cmp to i32 581 %cmp.ret_ext = zext i1 %cmp to i32
567 ret i32 %cmp.ret_ext 582 ret i32 %cmp.ret_ext
568 } 583 }
569 ; CHECK-LABEL: fcmpUeqDouble 584 ; CHECK-LABEL: fcmpUeqDouble
570 ; CHECK: ucomisd 585 ; CHECK: ucomisd
571 ; CHECK: sete 586 ; CHECK: sete
572 ; ARM32-LABEL: fcmpUeqDouble 587 ; ARM32-LABEL: fcmpUeqDouble
588 ; ARM32-O2: mov [[R:r[0-9]+]], #0
573 ; ARM32: vcmp.f64 589 ; ARM32: vcmp.f64
574 ; ARM32: vmrs 590 ; ARM32: vmrs
575 ; ARM32: mov [[R:r[0-9]+]], #0 591 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
576 ; ARM32: moveq [[R]], #1 592 ; ARM32: moveq [[R]], #1
577 ; ARM32: movvs [[R]], #1 593 ; ARM32: movvs [[R]], #1
578 594
579 define internal i32 @fcmpUgtFloat(float %a, float %b) { 595 define internal i32 @fcmpUgtFloat(float %a, float %b) {
580 entry: 596 entry:
581 %cmp = fcmp ugt float %a, %b 597 %cmp = fcmp ugt float %a, %b
582 %cmp.ret_ext = zext i1 %cmp to i32 598 %cmp.ret_ext = zext i1 %cmp to i32
583 ret i32 %cmp.ret_ext 599 ret i32 %cmp.ret_ext
584 } 600 }
585 ; CHECK-LABEL: fcmpUgtFloat 601 ; CHECK-LABEL: fcmpUgtFloat
586 ; CHECK: ucomiss 602 ; CHECK: ucomiss
587 ; CHECK: setb 603 ; CHECK: setb
588 ; ARM32-LABEL: fcmpUgtFloat 604 ; ARM32-LABEL: fcmpUgtFloat
605 ; ARM32-O2: mov [[R:r[0-9]+]], #0
589 ; ARM32: vcmp.f32 606 ; ARM32: vcmp.f32
590 ; ARM32: vmrs 607 ; ARM32: vmrs
591 ; ARM32: movls [[R:r[0-9]+]], #0 608 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
592 ; ARM32: movhi [[R]], #1 609 ; ARM32: movhi [[R]], #1
593 610
594 define internal i32 @fcmpUgtDouble(double %a, double %b) { 611 define internal i32 @fcmpUgtDouble(double %a, double %b) {
595 entry: 612 entry:
596 %cmp = fcmp ugt double %a, %b 613 %cmp = fcmp ugt double %a, %b
597 %cmp.ret_ext = zext i1 %cmp to i32 614 %cmp.ret_ext = zext i1 %cmp to i32
598 ret i32 %cmp.ret_ext 615 ret i32 %cmp.ret_ext
599 } 616 }
600 ; CHECK-LABEL: fcmpUgtDouble 617 ; CHECK-LABEL: fcmpUgtDouble
601 ; CHECK: ucomisd 618 ; CHECK: ucomisd
602 ; CHECK: setb 619 ; CHECK: setb
603 ; ARM32-LABEL: fcmpUgtDouble 620 ; ARM32-LABEL: fcmpUgtDouble
621 ; ARM32-O2: mov [[R:r[0-9]+]], #0
604 ; ARM32: vcmp.f64 622 ; ARM32: vcmp.f64
605 ; ARM32: vmrs 623 ; ARM32: vmrs
606 ; ARM32: movls [[R:r[0-9]+]], #0 624 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
607 ; ARM32: movhi [[R]], #1 625 ; ARM32: movhi [[R]], #1
608 626
609 define internal i32 @fcmpUgeFloat(float %a, float %b) { 627 define internal i32 @fcmpUgeFloat(float %a, float %b) {
610 entry: 628 entry:
611 %cmp = fcmp uge float %a, %b 629 %cmp = fcmp uge float %a, %b
612 %cmp.ret_ext = zext i1 %cmp to i32 630 %cmp.ret_ext = zext i1 %cmp to i32
613 ret i32 %cmp.ret_ext 631 ret i32 %cmp.ret_ext
614 } 632 }
615 ; CHECK-LABEL: fcmpUgeFloat 633 ; CHECK-LABEL: fcmpUgeFloat
616 ; CHECK: ucomiss 634 ; CHECK: ucomiss
617 ; CHECK: setbe 635 ; CHECK: setbe
618 ; ARM32-LABEL: fcmpUgeFloat 636 ; ARM32-LABEL: fcmpUgeFloat
637 ; ARM32-O2: mov [[R:r[0-9]+]], #0
619 ; ARM32: vcmp.f32 638 ; ARM32: vcmp.f32
620 ; ARM32: vmrs 639 ; ARM32: vmrs
621 ; ARM32: movmi [[R:r[0-9]+]], #0 640 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
622 ; ARM32: movpl [[R]], #1 641 ; ARM32: movpl [[R]], #1
623 642
624 define internal i32 @fcmpUgeDouble(double %a, double %b) { 643 define internal i32 @fcmpUgeDouble(double %a, double %b) {
625 entry: 644 entry:
626 %cmp = fcmp uge double %a, %b 645 %cmp = fcmp uge double %a, %b
627 %cmp.ret_ext = zext i1 %cmp to i32 646 %cmp.ret_ext = zext i1 %cmp to i32
628 ret i32 %cmp.ret_ext 647 ret i32 %cmp.ret_ext
629 } 648 }
630 ; CHECK-LABEL: fcmpUgeDouble 649 ; CHECK-LABEL: fcmpUgeDouble
631 ; CHECK: ucomisd 650 ; CHECK: ucomisd
632 ; CHECK: setbe 651 ; CHECK: setbe
633 ; ARM32-LABEL: fcmpUgeDouble 652 ; ARM32-LABEL: fcmpUgeDouble
653 ; ARM32-O2: mov [[R:r[0-9]+]], #0
634 ; ARM32: vcmp.f64 654 ; ARM32: vcmp.f64
635 ; ARM32: vmrs 655 ; ARM32: vmrs
636 ; ARM32: movmi [[R:r[0-9]+]], #0 656 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
637 ; ARM32: movpl [[R]], #1 657 ; ARM32: movpl [[R]], #1
638 658
639 define internal i32 @fcmpUltFloat(float %a, float %b) { 659 define internal i32 @fcmpUltFloat(float %a, float %b) {
640 entry: 660 entry:
641 %cmp = fcmp ult float %a, %b 661 %cmp = fcmp ult float %a, %b
642 %cmp.ret_ext = zext i1 %cmp to i32 662 %cmp.ret_ext = zext i1 %cmp to i32
643 ret i32 %cmp.ret_ext 663 ret i32 %cmp.ret_ext
644 } 664 }
645 ; CHECK-LABEL: fcmpUltFloat 665 ; CHECK-LABEL: fcmpUltFloat
646 ; CHECK: ucomiss 666 ; CHECK: ucomiss
647 ; CHECK: setb 667 ; CHECK: setb
648 ; ARM32-LABEL: fcmpUltFloat 668 ; ARM32-LABEL: fcmpUltFloat
669 ; ARM32-O2: mov [[R:r[0-9]+]], #0
649 ; ARM32: vcmp.f32 670 ; ARM32: vcmp.f32
650 ; ARM32: vmrs 671 ; ARM32: vmrs
651 ; ARM32: movge [[R:r[0-9]+]], #0 672 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
652 ; ARM32: movlt [[R]], #1 673 ; ARM32: movlt [[R]], #1
653 674
654 define internal i32 @fcmpUltDouble(double %a, double %b) { 675 define internal i32 @fcmpUltDouble(double %a, double %b) {
655 entry: 676 entry:
656 %cmp = fcmp ult double %a, %b 677 %cmp = fcmp ult double %a, %b
657 %cmp.ret_ext = zext i1 %cmp to i32 678 %cmp.ret_ext = zext i1 %cmp to i32
658 ret i32 %cmp.ret_ext 679 ret i32 %cmp.ret_ext
659 } 680 }
660 ; CHECK-LABEL: fcmpUltDouble 681 ; CHECK-LABEL: fcmpUltDouble
661 ; CHECK: ucomisd 682 ; CHECK: ucomisd
662 ; CHECK: setb 683 ; CHECK: setb
663 ; ARM32-LABEL: fcmpUltDouble 684 ; ARM32-LABEL: fcmpUltDouble
685 ; ARM32-O2: mov [[R:r[0-9]+]], #0
664 ; ARM32: vcmp.f64 686 ; ARM32: vcmp.f64
665 ; ARM32: vmrs 687 ; ARM32: vmrs
666 ; ARM32: movge [[R:r[0-9]+]], #0 688 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
667 ; ARM32: movlt [[R]], #1 689 ; ARM32: movlt [[R]], #1
668 690
669 define internal i32 @fcmpUleFloat(float %a, float %b) { 691 define internal i32 @fcmpUleFloat(float %a, float %b) {
670 entry: 692 entry:
671 %cmp = fcmp ule float %a, %b 693 %cmp = fcmp ule float %a, %b
672 %cmp.ret_ext = zext i1 %cmp to i32 694 %cmp.ret_ext = zext i1 %cmp to i32
673 ret i32 %cmp.ret_ext 695 ret i32 %cmp.ret_ext
674 } 696 }
675 ; CHECK-LABEL: fcmpUleFloat 697 ; CHECK-LABEL: fcmpUleFloat
676 ; CHECK: ucomiss 698 ; CHECK: ucomiss
677 ; CHECK: setbe 699 ; CHECK: setbe
678 ; ARM32-LABEL: fcmpUleFloat 700 ; ARM32-LABEL: fcmpUleFloat
701 ; ARM32-O2: mov [[R:r[0-9]+]], #0
679 ; ARM32: vcmp.f32 702 ; ARM32: vcmp.f32
680 ; ARM32: vmrs 703 ; ARM32: vmrs
681 ; ARM32: movgt [[R:r[0-9]+]], #0 704 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
682 ; ARM32: movle [[R]], #1 705 ; ARM32: movle [[R]], #1
683 706
684 define internal i32 @fcmpUleDouble(double %a, double %b) { 707 define internal i32 @fcmpUleDouble(double %a, double %b) {
685 entry: 708 entry:
686 %cmp = fcmp ule double %a, %b 709 %cmp = fcmp ule double %a, %b
687 %cmp.ret_ext = zext i1 %cmp to i32 710 %cmp.ret_ext = zext i1 %cmp to i32
688 ret i32 %cmp.ret_ext 711 ret i32 %cmp.ret_ext
689 } 712 }
690 ; CHECK-LABEL: fcmpUleDouble 713 ; CHECK-LABEL: fcmpUleDouble
691 ; CHECK: ucomisd 714 ; CHECK: ucomisd
692 ; CHECK: setbe 715 ; CHECK: setbe
693 ; ARM32-LABEL: fcmpUleDouble 716 ; ARM32-LABEL: fcmpUleDouble
717 ; ARM32-O2: mov [[R:r[0-9]+]], #0
694 ; ARM32: vcmp.f64 718 ; ARM32: vcmp.f64
695 ; ARM32: vmrs 719 ; ARM32: vmrs
696 ; ARM32: movgt [[R:r[0-9]+]], #0 720 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
697 ; ARM32: movle [[R]], #1 721 ; ARM32: movle [[R]], #1
698 722
699 define internal i32 @fcmpUneFloat(float %a, float %b) { 723 define internal i32 @fcmpUneFloat(float %a, float %b) {
700 entry: 724 entry:
701 %cmp = fcmp une float %a, %b 725 %cmp = fcmp une float %a, %b
702 %cmp.ret_ext = zext i1 %cmp to i32 726 %cmp.ret_ext = zext i1 %cmp to i32
703 ret i32 %cmp.ret_ext 727 ret i32 %cmp.ret_ext
704 } 728 }
705 ; CHECK-LABEL: fcmpUneFloat 729 ; CHECK-LABEL: fcmpUneFloat
706 ; CHECK: ucomiss 730 ; CHECK: ucomiss
707 ; CHECK: jne 731 ; CHECK: jne
708 ; CHECK: jp 732 ; CHECK: jp
709 ; ARM32-LABEL: fcmpUneFloat 733 ; ARM32-LABEL: fcmpUneFloat
734 ; ARM32-O2: mov [[R:r[0-9]+]], #0
710 ; ARM32: vcmp.f32 735 ; ARM32: vcmp.f32
711 ; ARM32: vmrs 736 ; ARM32: vmrs
712 ; ARM32: moveq [[R:r[0-9]+]], #0 737 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
713 ; ARM32: movne [[R]], #1 738 ; ARM32: movne [[R]], #1
714 739
715 define internal i32 @fcmpUneDouble(double %a, double %b) { 740 define internal i32 @fcmpUneDouble(double %a, double %b) {
716 entry: 741 entry:
717 %cmp = fcmp une double %a, %b 742 %cmp = fcmp une double %a, %b
718 %cmp.ret_ext = zext i1 %cmp to i32 743 %cmp.ret_ext = zext i1 %cmp to i32
719 ret i32 %cmp.ret_ext 744 ret i32 %cmp.ret_ext
720 } 745 }
721 ; CHECK-LABEL: fcmpUneDouble 746 ; CHECK-LABEL: fcmpUneDouble
722 ; CHECK: ucomisd 747 ; CHECK: ucomisd
723 ; CHECK: jne 748 ; CHECK: jne
724 ; CHECK: jp 749 ; CHECK: jp
725 ; ARM32-LABEL: fcmpUneDouble 750 ; ARM32-LABEL: fcmpUneDouble
751 ; ARM32-O2: mov [[R:r[0-9]+]], #0
726 ; ARM32: vcmp.f64 752 ; ARM32: vcmp.f64
727 ; ARM32: vmrs 753 ; ARM32: vmrs
728 ; ARM32: moveq [[R:r[0-9]+]], #0 754 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
729 ; ARM32: movne [[R]], #1 755 ; ARM32: movne [[R]], #1
730 756
731 define internal i32 @fcmpUnoFloat(float %a, float %b) { 757 define internal i32 @fcmpUnoFloat(float %a, float %b) {
732 entry: 758 entry:
733 %cmp = fcmp uno float %a, %b 759 %cmp = fcmp uno float %a, %b
734 %cmp.ret_ext = zext i1 %cmp to i32 760 %cmp.ret_ext = zext i1 %cmp to i32
735 ret i32 %cmp.ret_ext 761 ret i32 %cmp.ret_ext
736 } 762 }
737 ; CHECK-LABEL: fcmpUnoFloat 763 ; CHECK-LABEL: fcmpUnoFloat
738 ; CHECK: ucomiss 764 ; CHECK: ucomiss
739 ; CHECK: setp 765 ; CHECK: setp
740 ; ARM32-LABEL: fcmpUnoFloat 766 ; ARM32-LABEL: fcmpUnoFloat
767 ; ARM32-O2: mov [[R:r[0-9]+]], #0
741 ; ARM32: vcmp.f32 768 ; ARM32: vcmp.f32
742 ; ARM32: vmrs 769 ; ARM32: vmrs
743 ; ARM32: movvc [[R:r[0-9]+]], #0 770 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
744 ; ARM32: movvs [[R]], #1 771 ; ARM32: movvs [[R]], #1
745 772
746 define internal i32 @fcmpUnoDouble(double %a, double %b) { 773 define internal i32 @fcmpUnoDouble(double %a, double %b) {
747 entry: 774 entry:
748 %cmp = fcmp uno double %a, %b 775 %cmp = fcmp uno double %a, %b
749 %cmp.ret_ext = zext i1 %cmp to i32 776 %cmp.ret_ext = zext i1 %cmp to i32
750 ret i32 %cmp.ret_ext 777 ret i32 %cmp.ret_ext
751 } 778 }
752 ; CHECK-LABEL: fcmpUnoDouble 779 ; CHECK-LABEL: fcmpUnoDouble
753 ; CHECK: ucomisd 780 ; CHECK: ucomisd
754 ; CHECK: setp 781 ; CHECK: setp
755 ; ARM32-LABEL: fcmpUnoDouble 782 ; ARM32-LABEL: fcmpUnoDouble
783 ; ARM32-O2: mov [[R:r[0-9]+]], #0
756 ; ARM32: vcmp.f64 784 ; ARM32: vcmp.f64
757 ; ARM32: vmrs 785 ; ARM32: vmrs
758 ; ARM32: movvc [[R:r[0-9]+]], #0 786 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
759 ; ARM32: movvs [[R]], #1 787 ; ARM32: movvs [[R]], #1
760 788
761 define internal i32 @fcmpTrueFloat(float %a, float %b) { 789 define internal i32 @fcmpTrueFloat(float %a, float %b) {
762 entry: 790 entry:
763 %cmp = fcmp true float %a, %b 791 %cmp = fcmp true float %a, %b
764 %cmp.ret_ext = zext i1 %cmp to i32 792 %cmp.ret_ext = zext i1 %cmp to i32
765 ret i32 %cmp.ret_ext 793 ret i32 %cmp.ret_ext
766 } 794 }
767 ; CHECK-LABEL: fcmpTrueFloat 795 ; CHECK-LABEL: fcmpTrueFloat
768 ; CHECK: mov {{.*}},0x1 796 ; CHECK: mov {{.*}},0x1
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 } 832 }
805 ; CHECK-LABEL: selectDoubleVarVar 833 ; CHECK-LABEL: selectDoubleVarVar
806 ; CHECK: ucomisd 834 ; CHECK: ucomisd
807 ; CHECK: seta 835 ; CHECK: seta
808 ; CHECK: fld 836 ; CHECK: fld
809 ; ARM32-LABEL: selectDoubleVarVar 837 ; ARM32-LABEL: selectDoubleVarVar
810 ; ARM32: vcmp.f64 838 ; ARM32: vcmp.f64
811 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} 839 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}}
812 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} 840 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}}
813 ; ARM32: bx 841 ; ARM32: bx
OLDNEW
« no previous file with comments | « tests_lit/llvm2ice_tests/branch-opt.ll ('k') | tests_lit/llvm2ice_tests/select-opt.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698