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

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

Issue 2047043002: Subzero, MIPS32: Floating point comparison (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addressing review comments Created 4 years, 3 months 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 | « src/IceTargetLoweringMIPS32.cpp ('k') | no next file » | 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 \
11 ; RUN: -allow-externally-defined-symbols \ 11 ; RUN: -allow-externally-defined-symbols \
12 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ 12 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \
13 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2 13 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2
14 14
15 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ 15 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
16 ; RUN: --target arm32 -i %s --args -Om1 \ 16 ; RUN: --target arm32 -i %s --args -Om1 \
17 ; RUN: -allow-externally-defined-symbols \ 17 ; RUN: -allow-externally-defined-symbols \
18 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ 18 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \
19 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-OM1 19 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-OM1
20 20
21 ; RUN: %if --need=allow_dump --need=target_MIPS32 --command %p2i \
22 ; RUN: --filetype=asm --target mips32 -i %s --args -Om1 \
23 ; RUN: -allow-externally-defined-symbols --skip-unimplemented \
24 ; RUN: | %if --need=allow_dump --need=target_MIPS32 --command FileCheck %s \
25 ; RUN: --check-prefix=MIPS32
26
21 define internal void @fcmpEq(float %a, float %b, double %c, double %d) { 27 define internal void @fcmpEq(float %a, float %b, double %c, double %d) {
22 entry: 28 entry:
23 %cmp = fcmp oeq float %a, %b 29 %cmp = fcmp oeq float %a, %b
24 br i1 %cmp, label %if.then, label %if.end 30 br i1 %cmp, label %if.then, label %if.end
25 31
26 if.then: ; preds = %entry 32 if.then: ; preds = %entry
27 call void @func() 33 call void @func()
28 br label %if.end 34 br label %if.end
29 35
30 if.end: ; preds = %if.then, %entry 36 if.end: ; preds = %if.then, %entry
(...skipping 29 matching lines...) Expand all
60 ; ARM32: vmrs 66 ; ARM32: vmrs
61 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 67 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
62 ; ARM32-OM1: moveq [[R0]], #1 68 ; ARM32-OM1: moveq [[R0]], #1
63 ; ARM32-O2: bne 69 ; ARM32-O2: bne
64 ; ARM32: bl func 70 ; ARM32: bl func
65 ; ARM32: vcmp.f64 71 ; ARM32: vcmp.f64
66 ; ARM32: vmrs 72 ; ARM32: vmrs
67 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 73 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
68 ; ARM32-OM1: moveq [[R1]], #1 74 ; ARM32-OM1: moveq [[R1]], #1
69 ; ARM32-O2: bne 75 ; ARM32-O2: bne
76 ; MIPS32-LABEL: fcmpEq
77 ; MIPS32-LABEL: .LfcmpEq$entry
78 ; MIPS32: c.eq.s
79 ; MIPS32: movf
80 ; MIPS32-LABEL: .LfcmpEq$if.end
81 ; MIPS32: c.eq.d
82 ; MIPS32: movf
70 83
71 declare void @func() 84 declare void @func()
72 85
73 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { 86 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
74 entry: 87 entry:
75 %cmp = fcmp une float %a, %b 88 %cmp = fcmp une float %a, %b
76 br i1 %cmp, label %if.then, label %if.end 89 br i1 %cmp, label %if.then, label %if.end
77 90
78 if.then: ; preds = %entry 91 if.then: ; preds = %entry
79 call void @func() 92 call void @func()
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 ; ARM32: vcmp.f32 129 ; ARM32: vcmp.f32
117 ; ARM32: vmrs 130 ; ARM32: vmrs
118 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 131 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
119 ; ARM32-OM1: movne [[R0]], #1 132 ; ARM32-OM1: movne [[R0]], #1
120 ; ARM32-O2: beq 133 ; ARM32-O2: beq
121 ; ARM32: vcmp.f64 134 ; ARM32: vcmp.f64
122 ; ARM32: vmrs 135 ; ARM32: vmrs
123 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 136 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
124 ; ARM32-OM1: movne [[R1]], #1 137 ; ARM32-OM1: movne [[R1]], #1
125 ; ARM32-O2: beq 138 ; ARM32-O2: beq
139 ; MIPS32-LABEL: fcmpNe
140 ; MIPS32-LABEL: .LfcmpNe$entry
141 ; MIPS32: c.eq.s
142 ; MIPS32: movt
143 ; MIPS32-LABEL: .LfcmpNe$if.end
144 ; MIPS32: c.eq.d
145 ; MIPS32: movt
126 146
127 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 147 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
128 entry: 148 entry:
129 %cmp = fcmp ogt float %a, %b 149 %cmp = fcmp ogt float %a, %b
130 br i1 %cmp, label %if.then, label %if.end 150 br i1 %cmp, label %if.then, label %if.end
131 151
132 if.then: ; preds = %entry 152 if.then: ; preds = %entry
133 call void @func() 153 call void @func()
134 br label %if.end 154 br label %if.end
135 155
(...skipping 26 matching lines...) Expand all
162 ; ARM32: vcmp.f32 182 ; ARM32: vcmp.f32
163 ; ARM32: vmrs 183 ; ARM32: vmrs
164 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 184 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
165 ; ARM32-OM1: movgt [[R0]], #1 185 ; ARM32-OM1: movgt [[R0]], #1
166 ; ARM32-O2: ble 186 ; ARM32-O2: ble
167 ; ARM32: vcmp.f64 187 ; ARM32: vcmp.f64
168 ; ARM32: vmrs 188 ; ARM32: vmrs
169 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 189 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
170 ; ARM32-OM1: movgt [[R1]], #1 190 ; ARM32-OM1: movgt [[R1]], #1
171 ; ARM32-O2: ble 191 ; ARM32-O2: ble
192 ; MIPS32-LABEL: fcmpGt
193 ; MIPS32-LABEL: .LfcmpGt$entry
194 ; MIPS32: c.ule.s
195 ; MIPS32: movt
196 ; MIPS32-LABEL: .LfcmpGt$if.end
197 ; MIPS32: c.ule.d
198 ; MIPS32: movt
172 199
173 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 200 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
174 entry: 201 entry:
175 %cmp = fcmp ult float %a, %b 202 %cmp = fcmp ult float %a, %b
176 br i1 %cmp, label %if.end, label %if.then 203 br i1 %cmp, label %if.end, label %if.then
177 204
178 if.then: ; preds = %entry 205 if.then: ; preds = %entry
179 call void @func() 206 call void @func()
180 br label %if.end 207 br label %if.end
181 208
(...skipping 26 matching lines...) Expand all
208 ; ARM32: vcmp.f32 235 ; ARM32: vcmp.f32
209 ; ARM32: vmrs 236 ; ARM32: vmrs
210 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 237 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
211 ; ARM32-OM1: movlt [[R0]], #1 238 ; ARM32-OM1: movlt [[R0]], #1
212 ; ARM32-O2: blt 239 ; ARM32-O2: blt
213 ; ARM32: vcmp.f64 240 ; ARM32: vcmp.f64
214 ; ARM32: vmrs 241 ; ARM32: vmrs
215 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 242 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
216 ; ARM32-OM1: movlt [[R1]], #1 243 ; ARM32-OM1: movlt [[R1]], #1
217 ; ARM32-O2: blt 244 ; ARM32-O2: blt
245 ; MIPS32-LABEL: fcmpGe
246 ; MIPS32-LABEL: .LfcmpGe$entry
247 ; MIPS32: c.ult.s
248 ; MIPS32: movf
249 ; MIPS32-LABEL: .LfcmpGe$if.end
250 ; MIPS32: c.ult.d
251 ; MIPS32: movf
218 252
219 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 253 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
220 entry: 254 entry:
221 %cmp = fcmp olt float %a, %b 255 %cmp = fcmp olt float %a, %b
222 br i1 %cmp, label %if.then, label %if.end 256 br i1 %cmp, label %if.then, label %if.end
223 257
224 if.then: ; preds = %entry 258 if.then: ; preds = %entry
225 call void @func() 259 call void @func()
226 br label %if.end 260 br label %if.end
227 261
(...skipping 26 matching lines...) Expand all
254 ; ARM32: vcmp.f32 288 ; ARM32: vcmp.f32
255 ; ARM32: vmrs 289 ; ARM32: vmrs
256 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 290 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
257 ; ARM32-OM1: movmi [[R0]], #1 291 ; ARM32-OM1: movmi [[R0]], #1
258 ; ARM32-O2: bpl 292 ; ARM32-O2: bpl
259 ; ARM32: vcmp.f64 293 ; ARM32: vcmp.f64
260 ; ARM32: vmrs 294 ; ARM32: vmrs
261 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 295 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
262 ; ARM32-OM1: movmi [[R1]], #1 296 ; ARM32-OM1: movmi [[R1]], #1
263 ; ARM32-O2: bpl 297 ; ARM32-O2: bpl
298 ; MIPS32-LABEL: fcmpLt
299 ; MIPS32-LABEL: .LfcmpLt$entry
300 ; MIPS32: c.olt.s
301 ; MIPS32: movf
302 ; MIPS32-LABEL: .LfcmpLt$if.end
303 ; MIPS32: c.olt.d
304 ; MIPS32: movf
264 305
265 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 306 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
266 entry: 307 entry:
267 %cmp = fcmp ugt float %a, %b 308 %cmp = fcmp ugt float %a, %b
268 br i1 %cmp, label %if.end, label %if.then 309 br i1 %cmp, label %if.end, label %if.then
269 310
270 if.then: ; preds = %entry 311 if.then: ; preds = %entry
271 call void @func() 312 call void @func()
272 br label %if.end 313 br label %if.end
273 314
(...skipping 26 matching lines...) Expand all
300 ; ARM32: vcmp.f32 341 ; ARM32: vcmp.f32
301 ; ARM32: vmrs 342 ; ARM32: vmrs
302 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 343 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
303 ; ARM32-OM1: movhi [[R0]], #1 344 ; ARM32-OM1: movhi [[R0]], #1
304 ; ARM32-O2: bhi 345 ; ARM32-O2: bhi
305 ; ARM32: vcmp.f64 346 ; ARM32: vcmp.f64
306 ; ARM32: vmrs 347 ; ARM32: vmrs
307 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 348 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
308 ; ARM32-OM1: movhi [[R1]], #1 349 ; ARM32-OM1: movhi [[R1]], #1
309 ; ARM32-O2: bhi 350 ; ARM32-O2: bhi
351 ; MIPS32-LABEL: fcmpLe
352 ; MIPS32-LABEL: .LfcmpLe$entry
353 ; MIPS32: c.ole.s
354 ; MIPS32: movt
355 ; MIPS32-LABEL: .LfcmpLe$if.end
356 ; MIPS32: c.ole.d
357 ; MIPS32: movt
310 358
311 define internal i32 @fcmpFalseFloat(float %a, float %b) { 359 define internal i32 @fcmpFalseFloat(float %a, float %b) {
312 entry: 360 entry:
313 %cmp = fcmp false float %a, %b 361 %cmp = fcmp false float %a, %b
314 %cmp.ret_ext = zext i1 %cmp to i32 362 %cmp.ret_ext = zext i1 %cmp to i32
315 ret i32 %cmp.ret_ext 363 ret i32 %cmp.ret_ext
316 } 364 }
317 ; CHECK-LABEL: fcmpFalseFloat 365 ; CHECK-LABEL: fcmpFalseFloat
318 ; CHECK: mov {{.*}},0x0 366 ; CHECK: mov {{.*}},0x0
319 ; ARM32-LABEL: fcmpFalseFloat 367 ; ARM32-LABEL: fcmpFalseFloat
320 ; ARM32: mov [[R:r[0-9]+]], #0 368 ; ARM32: mov [[R:r[0-9]+]], #0
369 ; MIPS32-LABEL: fcmpFalseFloat
370 ; MIPS32: addiu
371 ; MIPS32: sb
321 372
322 define internal i32 @fcmpFalseDouble(double %a, double %b) { 373 define internal i32 @fcmpFalseDouble(double %a, double %b) {
323 entry: 374 entry:
324 %cmp = fcmp false double %a, %b 375 %cmp = fcmp false double %a, %b
325 %cmp.ret_ext = zext i1 %cmp to i32 376 %cmp.ret_ext = zext i1 %cmp to i32
326 ret i32 %cmp.ret_ext 377 ret i32 %cmp.ret_ext
327 } 378 }
328 ; CHECK-LABEL: fcmpFalseDouble 379 ; CHECK-LABEL: fcmpFalseDouble
329 ; CHECK: mov {{.*}},0x0 380 ; CHECK: mov {{.*}},0x0
330 ; ARM32-LABEL: fcmpFalseDouble 381 ; ARM32-LABEL: fcmpFalseDouble
331 ; ARM32: mov [[R:r[0-9]+]], #0 382 ; ARM32: mov [[R:r[0-9]+]], #0
383 ; MIPS32-LABEL: fcmpFalseDouble
384 ; MIPS32: addiu
385 ; MIPS32: sb
332 386
333 define internal i32 @fcmpOeqFloat(float %a, float %b) { 387 define internal i32 @fcmpOeqFloat(float %a, float %b) {
334 entry: 388 entry:
335 %cmp = fcmp oeq float %a, %b 389 %cmp = fcmp oeq float %a, %b
336 %cmp.ret_ext = zext i1 %cmp to i32 390 %cmp.ret_ext = zext i1 %cmp to i32
337 ret i32 %cmp.ret_ext 391 ret i32 %cmp.ret_ext
338 } 392 }
339 ; CHECK-LABEL: fcmpOeqFloat 393 ; CHECK-LABEL: fcmpOeqFloat
340 ; CHECK: ucomiss 394 ; CHECK: ucomiss
341 ; CHECK: jne 395 ; CHECK: jne
342 ; CHECK: jp 396 ; CHECK: jp
343 ; ARM32-LABEL: fcmpOeqFloat 397 ; ARM32-LABEL: fcmpOeqFloat
344 ; ARM32-O2: mov [[R:r[0-9]+]], #0 398 ; ARM32-O2: mov [[R:r[0-9]+]], #0
345 ; ARM32: vcmp.f32 399 ; ARM32: vcmp.f32
346 ; ARM32: vmrs 400 ; ARM32: vmrs
347 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 401 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
348 ; ARM32: moveq [[R]], #1 402 ; ARM32: moveq [[R]], #1
403 ; MIPS32-LABEL: fcmpOeqFloat
404 ; MIPS32: c.eq.s
405 ; MIPS32: movf
349 406
350 define internal i32 @fcmpOeqDouble(double %a, double %b) { 407 define internal i32 @fcmpOeqDouble(double %a, double %b) {
351 entry: 408 entry:
352 %cmp = fcmp oeq double %a, %b 409 %cmp = fcmp oeq double %a, %b
353 %cmp.ret_ext = zext i1 %cmp to i32 410 %cmp.ret_ext = zext i1 %cmp to i32
354 ret i32 %cmp.ret_ext 411 ret i32 %cmp.ret_ext
355 } 412 }
356 ; CHECK-LABEL: fcmpOeqDouble 413 ; CHECK-LABEL: fcmpOeqDouble
357 ; CHECK: ucomisd 414 ; CHECK: ucomisd
358 ; CHECK: jne 415 ; CHECK: jne
359 ; CHECK: jp 416 ; CHECK: jp
360 ; ARM32-LABEL: fcmpOeqDouble 417 ; ARM32-LABEL: fcmpOeqDouble
361 ; ARM32-O2: mov [[R:r[0-9]+]], #0 418 ; ARM32-O2: mov [[R:r[0-9]+]], #0
362 ; ARM32: vcmp.f64 419 ; ARM32: vcmp.f64
363 ; ARM32: vmrs 420 ; ARM32: vmrs
364 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 421 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
365 ; ARM32: moveq [[R]], #1 422 ; ARM32: moveq [[R]], #1
423 ; MIPS32-LABEL: fcmpOeqDouble
424 ; MIPS32: c.eq.d
425 ; MIPS32: movf
366 426
367 define internal i32 @fcmpOgtFloat(float %a, float %b) { 427 define internal i32 @fcmpOgtFloat(float %a, float %b) {
368 entry: 428 entry:
369 %cmp = fcmp ogt float %a, %b 429 %cmp = fcmp ogt float %a, %b
370 %cmp.ret_ext = zext i1 %cmp to i32 430 %cmp.ret_ext = zext i1 %cmp to i32
371 ret i32 %cmp.ret_ext 431 ret i32 %cmp.ret_ext
372 } 432 }
373 ; CHECK-LABEL: fcmpOgtFloat 433 ; CHECK-LABEL: fcmpOgtFloat
374 ; CHECK: ucomiss 434 ; CHECK: ucomiss
375 ; CHECK: seta 435 ; CHECK: seta
376 ; ARM32-LABEL: fcmpOgtFloat 436 ; ARM32-LABEL: fcmpOgtFloat
377 ; ARM32-O2: mov [[R:r[0-9]+]], #0 437 ; ARM32-O2: mov [[R:r[0-9]+]], #0
378 ; ARM32: vcmp.f32 438 ; ARM32: vcmp.f32
379 ; ARM32: vmrs 439 ; ARM32: vmrs
380 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 440 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
381 ; ARM32: movgt [[R]], #1 441 ; ARM32: movgt [[R]], #1
442 ; MIPS32-LABEL: fcmpOgtFloat
443 ; MIPS32: c.ule.s
444 ; MIPS32: movt
382 445
383 define internal i32 @fcmpOgtDouble(double %a, double %b) { 446 define internal i32 @fcmpOgtDouble(double %a, double %b) {
384 entry: 447 entry:
385 %cmp = fcmp ogt double %a, %b 448 %cmp = fcmp ogt double %a, %b
386 %cmp.ret_ext = zext i1 %cmp to i32 449 %cmp.ret_ext = zext i1 %cmp to i32
387 ret i32 %cmp.ret_ext 450 ret i32 %cmp.ret_ext
388 } 451 }
389 ; CHECK-LABEL: fcmpOgtDouble 452 ; CHECK-LABEL: fcmpOgtDouble
390 ; CHECK: ucomisd 453 ; CHECK: ucomisd
391 ; CHECK: seta 454 ; CHECK: seta
392 ; ARM32-LABEL: fcmpOgtDouble 455 ; ARM32-LABEL: fcmpOgtDouble
393 ; ARM32-O2: mov [[R:r[0-9]+]], #0 456 ; ARM32-O2: mov [[R:r[0-9]+]], #0
394 ; ARM32: vcmp.f64 457 ; ARM32: vcmp.f64
395 ; ARM32: vmrs 458 ; ARM32: vmrs
396 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 459 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
397 ; ARM32: movgt [[R]], #1 460 ; ARM32: movgt [[R]], #1
461 ; MIPS32-LABEL: fcmpOgtDouble
462 ; MIPS32: c.ule.d
463 ; MIPS32: movt
398 464
399 define internal i32 @fcmpOgeFloat(float %a, float %b) { 465 define internal i32 @fcmpOgeFloat(float %a, float %b) {
400 entry: 466 entry:
401 %cmp = fcmp oge float %a, %b 467 %cmp = fcmp oge float %a, %b
402 %cmp.ret_ext = zext i1 %cmp to i32 468 %cmp.ret_ext = zext i1 %cmp to i32
403 ret i32 %cmp.ret_ext 469 ret i32 %cmp.ret_ext
404 } 470 }
405 ; CHECK-LABEL: fcmpOgeFloat 471 ; CHECK-LABEL: fcmpOgeFloat
406 ; CHECK: ucomiss 472 ; CHECK: ucomiss
407 ; CHECK: setae 473 ; CHECK: setae
408 ; ARM32-LABEL: fcmpOgeFloat 474 ; ARM32-LABEL: fcmpOgeFloat
409 ; ARM32-O2: mov [[R:r[0-9]+]], #0 475 ; ARM32-O2: mov [[R:r[0-9]+]], #0
410 ; ARM32: vcmp.f32 476 ; ARM32: vcmp.f32
411 ; ARM32: vmrs 477 ; ARM32: vmrs
412 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 478 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
413 ; ARM32: movge [[R]], #1 479 ; ARM32: movge [[R]], #1
480 ; MIPS32-LABEL: fcmpOgeFloat
481 ; MIPS32: c.ult.s
482 ; MIPS32: movt
414 483
415 define internal i32 @fcmpOgeDouble(double %a, double %b) { 484 define internal i32 @fcmpOgeDouble(double %a, double %b) {
416 entry: 485 entry:
417 %cmp = fcmp oge double %a, %b 486 %cmp = fcmp oge double %a, %b
418 %cmp.ret_ext = zext i1 %cmp to i32 487 %cmp.ret_ext = zext i1 %cmp to i32
419 ret i32 %cmp.ret_ext 488 ret i32 %cmp.ret_ext
420 } 489 }
421 ; CHECK-LABEL: fcmpOgeDouble 490 ; CHECK-LABEL: fcmpOgeDouble
422 ; CHECK: ucomisd 491 ; CHECK: ucomisd
423 ; CHECK: setae 492 ; CHECK: setae
424 ; ARM32-LABEL: fcmpOgeDouble 493 ; ARM32-LABEL: fcmpOgeDouble
425 ; ARM32-O2: mov [[R:r[0-9]+]], #0 494 ; ARM32-O2: mov [[R:r[0-9]+]], #0
426 ; ARM32: vcmp.f64 495 ; ARM32: vcmp.f64
427 ; ARM32: vmrs 496 ; ARM32: vmrs
428 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 497 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
429 ; ARM32: movge [[R]], #1 498 ; ARM32: movge [[R]], #1
499 ; MIPS32-LABEL: fcmpOgeDouble
500 ; MIPS32: c.ult.d
501 ; MIPS32: movt
430 502
431 define internal i32 @fcmpOltFloat(float %a, float %b) { 503 define internal i32 @fcmpOltFloat(float %a, float %b) {
432 entry: 504 entry:
433 %cmp = fcmp olt float %a, %b 505 %cmp = fcmp olt float %a, %b
434 %cmp.ret_ext = zext i1 %cmp to i32 506 %cmp.ret_ext = zext i1 %cmp to i32
435 ret i32 %cmp.ret_ext 507 ret i32 %cmp.ret_ext
436 } 508 }
437 ; CHECK-LABEL: fcmpOltFloat 509 ; CHECK-LABEL: fcmpOltFloat
438 ; CHECK: ucomiss 510 ; CHECK: ucomiss
439 ; CHECK: seta 511 ; CHECK: seta
440 ; ARM32-LABEL: fcmpOltFloat 512 ; ARM32-LABEL: fcmpOltFloat
441 ; ARM32-O2: mov [[R:r[0-9]+]], #0 513 ; ARM32-O2: mov [[R:r[0-9]+]], #0
442 ; ARM32: vcmp.f32 514 ; ARM32: vcmp.f32
443 ; ARM32: vmrs 515 ; ARM32: vmrs
444 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 516 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
445 ; ARM32: movmi [[R]], #1 517 ; ARM32: movmi [[R]], #1
518 ; MIPS32-LABEL: fcmpOltFloat
519 ; MIPS32: c.olt.s
520 ; MIPS32: movf
446 521
447 define internal i32 @fcmpOltDouble(double %a, double %b) { 522 define internal i32 @fcmpOltDouble(double %a, double %b) {
448 entry: 523 entry:
449 %cmp = fcmp olt double %a, %b 524 %cmp = fcmp olt double %a, %b
450 %cmp.ret_ext = zext i1 %cmp to i32 525 %cmp.ret_ext = zext i1 %cmp to i32
451 ret i32 %cmp.ret_ext 526 ret i32 %cmp.ret_ext
452 } 527 }
453 ; CHECK-LABEL: fcmpOltDouble 528 ; CHECK-LABEL: fcmpOltDouble
454 ; CHECK: ucomisd 529 ; CHECK: ucomisd
455 ; CHECK: seta 530 ; CHECK: seta
456 ; ARM32-LABEL: fcmpOltDouble 531 ; ARM32-LABEL: fcmpOltDouble
457 ; ARM32-O2: mov [[R:r[0-9]+]], #0 532 ; ARM32-O2: mov [[R:r[0-9]+]], #0
458 ; ARM32: vcmp.f64 533 ; ARM32: vcmp.f64
459 ; ARM32: vmrs 534 ; ARM32: vmrs
460 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 535 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
461 ; ARM32: movmi [[R]], #1 536 ; ARM32: movmi [[R]], #1
537 ; MIPS32-LABEL: fcmpOltDouble
538 ; MIPS32: c.olt.d
539 ; MIPS32: movf
462 540
463 define internal i32 @fcmpOleFloat(float %a, float %b) { 541 define internal i32 @fcmpOleFloat(float %a, float %b) {
464 entry: 542 entry:
465 %cmp = fcmp ole float %a, %b 543 %cmp = fcmp ole float %a, %b
466 %cmp.ret_ext = zext i1 %cmp to i32 544 %cmp.ret_ext = zext i1 %cmp to i32
467 ret i32 %cmp.ret_ext 545 ret i32 %cmp.ret_ext
468 } 546 }
469 ; CHECK-LABEL: fcmpOleFloat 547 ; CHECK-LABEL: fcmpOleFloat
470 ; CHECK: ucomiss 548 ; CHECK: ucomiss
471 ; CHECK: setae 549 ; CHECK: setae
472 ; ARM32-LABEL: fcmpOleFloat 550 ; ARM32-LABEL: fcmpOleFloat
473 ; ARM32-O2: mov [[R:r[0-9]+]], #0 551 ; ARM32-O2: mov [[R:r[0-9]+]], #0
474 ; ARM32: vcmp.f32 552 ; ARM32: vcmp.f32
475 ; ARM32: vmrs 553 ; ARM32: vmrs
476 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 554 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
477 ; ARM32: movls [[R]], #1 555 ; ARM32: movls [[R]], #1
556 ; MIPS32-LABEL: fcmpOleFloat
557 ; MIPS32: c.ole.s
558 ; MIPS32: movf
478 559
479 define internal i32 @fcmpOleDouble(double %a, double %b) { 560 define internal i32 @fcmpOleDouble(double %a, double %b) {
480 entry: 561 entry:
481 %cmp = fcmp ole double %a, %b 562 %cmp = fcmp ole double %a, %b
482 %cmp.ret_ext = zext i1 %cmp to i32 563 %cmp.ret_ext = zext i1 %cmp to i32
483 ret i32 %cmp.ret_ext 564 ret i32 %cmp.ret_ext
484 } 565 }
485 ; CHECK-LABEL: fcmpOleDouble 566 ; CHECK-LABEL: fcmpOleDouble
486 ; CHECK: ucomisd 567 ; CHECK: ucomisd
487 ; CHECK: setae 568 ; CHECK: setae
488 ; ARM32-LABEL: fcmpOleDouble 569 ; ARM32-LABEL: fcmpOleDouble
489 ; ARM32-O2: mov [[R:r[0-9]+]], #0 570 ; ARM32-O2: mov [[R:r[0-9]+]], #0
490 ; ARM32: vcmp.f64 571 ; ARM32: vcmp.f64
491 ; ARM32: vmrs 572 ; ARM32: vmrs
492 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 573 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
493 ; ARM32: movls [[R]], #1 574 ; ARM32: movls [[R]], #1
575 ; MIPS32-LABEL: fcmpOleDouble
576 ; MIPS32: c.ole.d
577 ; MIPS32: movf
494 578
495 define internal i32 @fcmpOneFloat(float %a, float %b) { 579 define internal i32 @fcmpOneFloat(float %a, float %b) {
496 entry: 580 entry:
497 %cmp = fcmp one float %a, %b 581 %cmp = fcmp one float %a, %b
498 %cmp.ret_ext = zext i1 %cmp to i32 582 %cmp.ret_ext = zext i1 %cmp to i32
499 ret i32 %cmp.ret_ext 583 ret i32 %cmp.ret_ext
500 } 584 }
501 ; CHECK-LABEL: fcmpOneFloat 585 ; CHECK-LABEL: fcmpOneFloat
502 ; CHECK: ucomiss 586 ; CHECK: ucomiss
503 ; CHECK: setne 587 ; CHECK: setne
504 ; ARM32-LABEL: fcmpOneFloat 588 ; ARM32-LABEL: fcmpOneFloat
505 ; ARM32-O2: mov [[R:r[0-9]+]], #0 589 ; ARM32-O2: mov [[R:r[0-9]+]], #0
506 ; ARM32: vcmp.f32 590 ; ARM32: vcmp.f32
507 ; ARM32: vmrs 591 ; ARM32: vmrs
508 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 592 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
509 ; ARM32: movmi [[R]], #1 593 ; ARM32: movmi [[R]], #1
510 ; ARM32: movgt [[R]], #1 594 ; ARM32: movgt [[R]], #1
595 ; MIPS32-LABEL: fcmpOneFloat
596 ; MIPS32: c.ueq.s
597 ; MIPS32: movt
511 598
512 define internal i32 @fcmpOneDouble(double %a, double %b) { 599 define internal i32 @fcmpOneDouble(double %a, double %b) {
513 entry: 600 entry:
514 %cmp = fcmp one double %a, %b 601 %cmp = fcmp one double %a, %b
515 %cmp.ret_ext = zext i1 %cmp to i32 602 %cmp.ret_ext = zext i1 %cmp to i32
516 ret i32 %cmp.ret_ext 603 ret i32 %cmp.ret_ext
517 } 604 }
518 ; CHECK-LABEL: fcmpOneDouble 605 ; CHECK-LABEL: fcmpOneDouble
519 ; CHECK: ucomisd 606 ; CHECK: ucomisd
520 ; CHECK: setne 607 ; CHECK: setne
521 ; ARM32-LABEL: fcmpOneDouble 608 ; ARM32-LABEL: fcmpOneDouble
522 ; ARM32-O2: mov [[R:r[0-9]+]], #0 609 ; ARM32-O2: mov [[R:r[0-9]+]], #0
523 ; ARM32: vcmp.f64 610 ; ARM32: vcmp.f64
524 ; ARM32: vmrs 611 ; ARM32: vmrs
525 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 612 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
526 ; ARM32: movmi [[R]], #1 613 ; ARM32: movmi [[R]], #1
527 ; ARM32: movgt [[R]], #1 614 ; ARM32: movgt [[R]], #1
615 ; MIPS32-LABEL: fcmpOneDouble
616 ; MIPS32: c.ueq.d
617 ; MIPS32: movt
528 618
529 define internal i32 @fcmpOrdFloat(float %a, float %b) { 619 define internal i32 @fcmpOrdFloat(float %a, float %b) {
530 entry: 620 entry:
531 %cmp = fcmp ord float %a, %b 621 %cmp = fcmp ord float %a, %b
532 %cmp.ret_ext = zext i1 %cmp to i32 622 %cmp.ret_ext = zext i1 %cmp to i32
533 ret i32 %cmp.ret_ext 623 ret i32 %cmp.ret_ext
534 } 624 }
535 ; CHECK-LABEL: fcmpOrdFloat 625 ; CHECK-LABEL: fcmpOrdFloat
536 ; CHECK: ucomiss 626 ; CHECK: ucomiss
537 ; CHECK: setnp 627 ; CHECK: setnp
538 ; ARM32-LABEL: fcmpOrdFloat 628 ; ARM32-LABEL: fcmpOrdFloat
539 ; ARM32-O2: mov [[R:r[0-9]+]], #0 629 ; ARM32-O2: mov [[R:r[0-9]+]], #0
540 ; ARM32: vcmp.f32 630 ; ARM32: vcmp.f32
541 ; ARM32: vmrs 631 ; ARM32: vmrs
542 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 632 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
543 ; ARM32: movvc [[R]], #1 633 ; ARM32: movvc [[R]], #1
634 ; MIPS32-LABEL: fcmpOrdFloat
635 ; MIPS32: c.un.s
636 ; MIPS32: movt
544 637
545 define internal i32 @fcmpOrdDouble(double %a, double %b) { 638 define internal i32 @fcmpOrdDouble(double %a, double %b) {
546 entry: 639 entry:
547 %cmp = fcmp ord double %a, %b 640 %cmp = fcmp ord double %a, %b
548 %cmp.ret_ext = zext i1 %cmp to i32 641 %cmp.ret_ext = zext i1 %cmp to i32
549 ret i32 %cmp.ret_ext 642 ret i32 %cmp.ret_ext
550 } 643 }
551 ; CHECK-LABEL: fcmpOrdDouble 644 ; CHECK-LABEL: fcmpOrdDouble
552 ; CHECK: ucomisd 645 ; CHECK: ucomisd
553 ; CHECK: setnp 646 ; CHECK: setnp
554 ; ARM32-LABEL: fcmpOrdDouble 647 ; ARM32-LABEL: fcmpOrdDouble
555 ; ARM32-O2: mov [[R:r[0-9]+]], #0 648 ; ARM32-O2: mov [[R:r[0-9]+]], #0
556 ; ARM32: vcmp.f64 649 ; ARM32: vcmp.f64
557 ; ARM32: vmrs 650 ; ARM32: vmrs
558 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 651 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
559 ; ARM32: movvc [[R]], #1 652 ; ARM32: movvc [[R]], #1
653 ; MIPS32-LABEL: fcmpOrdDouble
654 ; MIPS32: c.un.d
655 ; MIPS32: movt
560 656
561 define internal i32 @fcmpUeqFloat(float %a, float %b) { 657 define internal i32 @fcmpUeqFloat(float %a, float %b) {
562 entry: 658 entry:
563 %cmp = fcmp ueq float %a, %b 659 %cmp = fcmp ueq float %a, %b
564 %cmp.ret_ext = zext i1 %cmp to i32 660 %cmp.ret_ext = zext i1 %cmp to i32
565 ret i32 %cmp.ret_ext 661 ret i32 %cmp.ret_ext
566 } 662 }
567 ; CHECK-LABEL: fcmpUeqFloat 663 ; CHECK-LABEL: fcmpUeqFloat
568 ; CHECK: ucomiss 664 ; CHECK: ucomiss
569 ; CHECK: sete 665 ; CHECK: sete
570 ; ARM32-LABEL: fcmpUeqFloat 666 ; ARM32-LABEL: fcmpUeqFloat
571 ; ARM32-O2: mov [[R:r[0-9]+]], #0 667 ; ARM32-O2: mov [[R:r[0-9]+]], #0
572 ; ARM32: vcmp.f32 668 ; ARM32: vcmp.f32
573 ; ARM32: vmrs 669 ; ARM32: vmrs
574 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 670 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
575 ; ARM32: moveq [[R]], #1 671 ; ARM32: moveq [[R]], #1
576 ; ARM32: movvs [[R]], #1 672 ; ARM32: movvs [[R]], #1
673 ; MIPS32-LABEL: fcmpUeqFloat
674 ; MIPS32: c.ueq.s
675 ; MIPS32: movf
577 676
578 define internal i32 @fcmpUeqDouble(double %a, double %b) { 677 define internal i32 @fcmpUeqDouble(double %a, double %b) {
579 entry: 678 entry:
580 %cmp = fcmp ueq double %a, %b 679 %cmp = fcmp ueq double %a, %b
581 %cmp.ret_ext = zext i1 %cmp to i32 680 %cmp.ret_ext = zext i1 %cmp to i32
582 ret i32 %cmp.ret_ext 681 ret i32 %cmp.ret_ext
583 } 682 }
584 ; CHECK-LABEL: fcmpUeqDouble 683 ; CHECK-LABEL: fcmpUeqDouble
585 ; CHECK: ucomisd 684 ; CHECK: ucomisd
586 ; CHECK: sete 685 ; CHECK: sete
587 ; ARM32-LABEL: fcmpUeqDouble 686 ; ARM32-LABEL: fcmpUeqDouble
588 ; ARM32-O2: mov [[R:r[0-9]+]], #0 687 ; ARM32-O2: mov [[R:r[0-9]+]], #0
589 ; ARM32: vcmp.f64 688 ; ARM32: vcmp.f64
590 ; ARM32: vmrs 689 ; ARM32: vmrs
591 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 690 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
592 ; ARM32: moveq [[R]], #1 691 ; ARM32: moveq [[R]], #1
593 ; ARM32: movvs [[R]], #1 692 ; ARM32: movvs [[R]], #1
693 ; MIPS32-LABEL: fcmpUeqDouble
694 ; MIPS32: c.ueq.d
695 ; MIPS32: movf
594 696
595 define internal i32 @fcmpUgtFloat(float %a, float %b) { 697 define internal i32 @fcmpUgtFloat(float %a, float %b) {
596 entry: 698 entry:
597 %cmp = fcmp ugt float %a, %b 699 %cmp = fcmp ugt float %a, %b
598 %cmp.ret_ext = zext i1 %cmp to i32 700 %cmp.ret_ext = zext i1 %cmp to i32
599 ret i32 %cmp.ret_ext 701 ret i32 %cmp.ret_ext
600 } 702 }
601 ; CHECK-LABEL: fcmpUgtFloat 703 ; CHECK-LABEL: fcmpUgtFloat
602 ; CHECK: ucomiss 704 ; CHECK: ucomiss
603 ; CHECK: setb 705 ; CHECK: setb
604 ; ARM32-LABEL: fcmpUgtFloat 706 ; ARM32-LABEL: fcmpUgtFloat
605 ; ARM32-O2: mov [[R:r[0-9]+]], #0 707 ; ARM32-O2: mov [[R:r[0-9]+]], #0
606 ; ARM32: vcmp.f32 708 ; ARM32: vcmp.f32
607 ; ARM32: vmrs 709 ; ARM32: vmrs
608 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 710 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
609 ; ARM32: movhi [[R]], #1 711 ; ARM32: movhi [[R]], #1
712 ; MIPS32-LABEL: fcmpUgtFloat
713 ; MIPS32: c.ole.s
714 ; MIPS32: movt
610 715
611 define internal i32 @fcmpUgtDouble(double %a, double %b) { 716 define internal i32 @fcmpUgtDouble(double %a, double %b) {
612 entry: 717 entry:
613 %cmp = fcmp ugt double %a, %b 718 %cmp = fcmp ugt double %a, %b
614 %cmp.ret_ext = zext i1 %cmp to i32 719 %cmp.ret_ext = zext i1 %cmp to i32
615 ret i32 %cmp.ret_ext 720 ret i32 %cmp.ret_ext
616 } 721 }
617 ; CHECK-LABEL: fcmpUgtDouble 722 ; CHECK-LABEL: fcmpUgtDouble
618 ; CHECK: ucomisd 723 ; CHECK: ucomisd
619 ; CHECK: setb 724 ; CHECK: setb
620 ; ARM32-LABEL: fcmpUgtDouble 725 ; ARM32-LABEL: fcmpUgtDouble
621 ; ARM32-O2: mov [[R:r[0-9]+]], #0 726 ; ARM32-O2: mov [[R:r[0-9]+]], #0
622 ; ARM32: vcmp.f64 727 ; ARM32: vcmp.f64
623 ; ARM32: vmrs 728 ; ARM32: vmrs
624 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 729 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
625 ; ARM32: movhi [[R]], #1 730 ; ARM32: movhi [[R]], #1
731 ; MIPS32-LABEL: fcmpUgtDouble
732 ; MIPS32: c.ole.d
733 ; MIPS32: movt
626 734
627 define internal i32 @fcmpUgeFloat(float %a, float %b) { 735 define internal i32 @fcmpUgeFloat(float %a, float %b) {
628 entry: 736 entry:
629 %cmp = fcmp uge float %a, %b 737 %cmp = fcmp uge float %a, %b
630 %cmp.ret_ext = zext i1 %cmp to i32 738 %cmp.ret_ext = zext i1 %cmp to i32
631 ret i32 %cmp.ret_ext 739 ret i32 %cmp.ret_ext
632 } 740 }
633 ; CHECK-LABEL: fcmpUgeFloat 741 ; CHECK-LABEL: fcmpUgeFloat
634 ; CHECK: ucomiss 742 ; CHECK: ucomiss
635 ; CHECK: setbe 743 ; CHECK: setbe
636 ; ARM32-LABEL: fcmpUgeFloat 744 ; ARM32-LABEL: fcmpUgeFloat
637 ; ARM32-O2: mov [[R:r[0-9]+]], #0 745 ; ARM32-O2: mov [[R:r[0-9]+]], #0
638 ; ARM32: vcmp.f32 746 ; ARM32: vcmp.f32
639 ; ARM32: vmrs 747 ; ARM32: vmrs
640 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 748 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
641 ; ARM32: movpl [[R]], #1 749 ; ARM32: movpl [[R]], #1
750 ; MIPS32-LABEL: fcmpUgeFloat
751 ; MIPS32: c.olt.s
752 ; MIPS32: movt
642 753
643 define internal i32 @fcmpUgeDouble(double %a, double %b) { 754 define internal i32 @fcmpUgeDouble(double %a, double %b) {
644 entry: 755 entry:
645 %cmp = fcmp uge double %a, %b 756 %cmp = fcmp uge double %a, %b
646 %cmp.ret_ext = zext i1 %cmp to i32 757 %cmp.ret_ext = zext i1 %cmp to i32
647 ret i32 %cmp.ret_ext 758 ret i32 %cmp.ret_ext
648 } 759 }
649 ; CHECK-LABEL: fcmpUgeDouble 760 ; CHECK-LABEL: fcmpUgeDouble
650 ; CHECK: ucomisd 761 ; CHECK: ucomisd
651 ; CHECK: setbe 762 ; CHECK: setbe
652 ; ARM32-LABEL: fcmpUgeDouble 763 ; ARM32-LABEL: fcmpUgeDouble
653 ; ARM32-O2: mov [[R:r[0-9]+]], #0 764 ; ARM32-O2: mov [[R:r[0-9]+]], #0
654 ; ARM32: vcmp.f64 765 ; ARM32: vcmp.f64
655 ; ARM32: vmrs 766 ; ARM32: vmrs
656 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 767 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
657 ; ARM32: movpl [[R]], #1 768 ; ARM32: movpl [[R]], #1
769 ; MIPS32-LABEL: fcmpUgeDouble
770 ; MIPS32: c.olt.d
771 ; MIPS32: movt
658 772
659 define internal i32 @fcmpUltFloat(float %a, float %b) { 773 define internal i32 @fcmpUltFloat(float %a, float %b) {
660 entry: 774 entry:
661 %cmp = fcmp ult float %a, %b 775 %cmp = fcmp ult float %a, %b
662 %cmp.ret_ext = zext i1 %cmp to i32 776 %cmp.ret_ext = zext i1 %cmp to i32
663 ret i32 %cmp.ret_ext 777 ret i32 %cmp.ret_ext
664 } 778 }
665 ; CHECK-LABEL: fcmpUltFloat 779 ; CHECK-LABEL: fcmpUltFloat
666 ; CHECK: ucomiss 780 ; CHECK: ucomiss
667 ; CHECK: setb 781 ; CHECK: setb
668 ; ARM32-LABEL: fcmpUltFloat 782 ; ARM32-LABEL: fcmpUltFloat
669 ; ARM32-O2: mov [[R:r[0-9]+]], #0 783 ; ARM32-O2: mov [[R:r[0-9]+]], #0
670 ; ARM32: vcmp.f32 784 ; ARM32: vcmp.f32
671 ; ARM32: vmrs 785 ; ARM32: vmrs
672 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 786 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
673 ; ARM32: movlt [[R]], #1 787 ; ARM32: movlt [[R]], #1
788 ; MIPS32-LABEL: fcmpUltFloat
789 ; MIPS32: c.ult.s
790 ; MIPS32: movf
674 791
675 define internal i32 @fcmpUltDouble(double %a, double %b) { 792 define internal i32 @fcmpUltDouble(double %a, double %b) {
676 entry: 793 entry:
677 %cmp = fcmp ult double %a, %b 794 %cmp = fcmp ult double %a, %b
678 %cmp.ret_ext = zext i1 %cmp to i32 795 %cmp.ret_ext = zext i1 %cmp to i32
679 ret i32 %cmp.ret_ext 796 ret i32 %cmp.ret_ext
680 } 797 }
681 ; CHECK-LABEL: fcmpUltDouble 798 ; CHECK-LABEL: fcmpUltDouble
682 ; CHECK: ucomisd 799 ; CHECK: ucomisd
683 ; CHECK: setb 800 ; CHECK: setb
684 ; ARM32-LABEL: fcmpUltDouble 801 ; ARM32-LABEL: fcmpUltDouble
685 ; ARM32-O2: mov [[R:r[0-9]+]], #0 802 ; ARM32-O2: mov [[R:r[0-9]+]], #0
686 ; ARM32: vcmp.f64 803 ; ARM32: vcmp.f64
687 ; ARM32: vmrs 804 ; ARM32: vmrs
688 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 805 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
689 ; ARM32: movlt [[R]], #1 806 ; ARM32: movlt [[R]], #1
807 ; MIPS32-LABEL: fcmpUltDouble
808 ; MIPS32: c.ult.d
809 ; MIPS32: movf
690 810
691 define internal i32 @fcmpUleFloat(float %a, float %b) { 811 define internal i32 @fcmpUleFloat(float %a, float %b) {
692 entry: 812 entry:
693 %cmp = fcmp ule float %a, %b 813 %cmp = fcmp ule float %a, %b
694 %cmp.ret_ext = zext i1 %cmp to i32 814 %cmp.ret_ext = zext i1 %cmp to i32
695 ret i32 %cmp.ret_ext 815 ret i32 %cmp.ret_ext
696 } 816 }
697 ; CHECK-LABEL: fcmpUleFloat 817 ; CHECK-LABEL: fcmpUleFloat
698 ; CHECK: ucomiss 818 ; CHECK: ucomiss
699 ; CHECK: setbe 819 ; CHECK: setbe
700 ; ARM32-LABEL: fcmpUleFloat 820 ; ARM32-LABEL: fcmpUleFloat
701 ; ARM32-O2: mov [[R:r[0-9]+]], #0 821 ; ARM32-O2: mov [[R:r[0-9]+]], #0
702 ; ARM32: vcmp.f32 822 ; ARM32: vcmp.f32
703 ; ARM32: vmrs 823 ; ARM32: vmrs
704 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 824 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
705 ; ARM32: movle [[R]], #1 825 ; ARM32: movle [[R]], #1
826 ; MIPS32-LABEL: fcmpUleFloat
827 ; MIPS32: c.ule.s
828 ; MIPS32: movf
706 829
707 define internal i32 @fcmpUleDouble(double %a, double %b) { 830 define internal i32 @fcmpUleDouble(double %a, double %b) {
708 entry: 831 entry:
709 %cmp = fcmp ule double %a, %b 832 %cmp = fcmp ule double %a, %b
710 %cmp.ret_ext = zext i1 %cmp to i32 833 %cmp.ret_ext = zext i1 %cmp to i32
711 ret i32 %cmp.ret_ext 834 ret i32 %cmp.ret_ext
712 } 835 }
713 ; CHECK-LABEL: fcmpUleDouble 836 ; CHECK-LABEL: fcmpUleDouble
714 ; CHECK: ucomisd 837 ; CHECK: ucomisd
715 ; CHECK: setbe 838 ; CHECK: setbe
716 ; ARM32-LABEL: fcmpUleDouble 839 ; ARM32-LABEL: fcmpUleDouble
717 ; ARM32-O2: mov [[R:r[0-9]+]], #0 840 ; ARM32-O2: mov [[R:r[0-9]+]], #0
718 ; ARM32: vcmp.f64 841 ; ARM32: vcmp.f64
719 ; ARM32: vmrs 842 ; ARM32: vmrs
720 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 843 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
721 ; ARM32: movle [[R]], #1 844 ; ARM32: movle [[R]], #1
845 ; MIPS32-LABEL: fcmpUleDouble
846 ; MIPS32: c.ule.d
847 ; MIPS32: movf
722 848
723 define internal i32 @fcmpUneFloat(float %a, float %b) { 849 define internal i32 @fcmpUneFloat(float %a, float %b) {
724 entry: 850 entry:
725 %cmp = fcmp une float %a, %b 851 %cmp = fcmp une float %a, %b
726 %cmp.ret_ext = zext i1 %cmp to i32 852 %cmp.ret_ext = zext i1 %cmp to i32
727 ret i32 %cmp.ret_ext 853 ret i32 %cmp.ret_ext
728 } 854 }
729 ; CHECK-LABEL: fcmpUneFloat 855 ; CHECK-LABEL: fcmpUneFloat
730 ; CHECK: ucomiss 856 ; CHECK: ucomiss
731 ; CHECK: jne 857 ; CHECK: jne
732 ; CHECK: jp 858 ; CHECK: jp
733 ; ARM32-LABEL: fcmpUneFloat 859 ; ARM32-LABEL: fcmpUneFloat
734 ; ARM32-O2: mov [[R:r[0-9]+]], #0 860 ; ARM32-O2: mov [[R:r[0-9]+]], #0
735 ; ARM32: vcmp.f32 861 ; ARM32: vcmp.f32
736 ; ARM32: vmrs 862 ; ARM32: vmrs
737 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 863 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
738 ; ARM32: movne [[R]], #1 864 ; ARM32: movne [[R]], #1
865 ; MIPS32-LABEL: fcmpUneFloat
866 ; MIPS32: c.eq.s
867 ; MIPS32: movt
739 868
740 define internal i32 @fcmpUneDouble(double %a, double %b) { 869 define internal i32 @fcmpUneDouble(double %a, double %b) {
741 entry: 870 entry:
742 %cmp = fcmp une double %a, %b 871 %cmp = fcmp une double %a, %b
743 %cmp.ret_ext = zext i1 %cmp to i32 872 %cmp.ret_ext = zext i1 %cmp to i32
744 ret i32 %cmp.ret_ext 873 ret i32 %cmp.ret_ext
745 } 874 }
746 ; CHECK-LABEL: fcmpUneDouble 875 ; CHECK-LABEL: fcmpUneDouble
747 ; CHECK: ucomisd 876 ; CHECK: ucomisd
748 ; CHECK: jne 877 ; CHECK: jne
749 ; CHECK: jp 878 ; CHECK: jp
750 ; ARM32-LABEL: fcmpUneDouble 879 ; ARM32-LABEL: fcmpUneDouble
751 ; ARM32-O2: mov [[R:r[0-9]+]], #0 880 ; ARM32-O2: mov [[R:r[0-9]+]], #0
752 ; ARM32: vcmp.f64 881 ; ARM32: vcmp.f64
753 ; ARM32: vmrs 882 ; ARM32: vmrs
754 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 883 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
755 ; ARM32: movne [[R]], #1 884 ; ARM32: movne [[R]], #1
885 ; MIPS32-LABEL: fcmpUneDouble
886 ; MIPS32: c.eq.d
887 ; MIPS32: movt
756 888
757 define internal i32 @fcmpUnoFloat(float %a, float %b) { 889 define internal i32 @fcmpUnoFloat(float %a, float %b) {
758 entry: 890 entry:
759 %cmp = fcmp uno float %a, %b 891 %cmp = fcmp uno float %a, %b
760 %cmp.ret_ext = zext i1 %cmp to i32 892 %cmp.ret_ext = zext i1 %cmp to i32
761 ret i32 %cmp.ret_ext 893 ret i32 %cmp.ret_ext
762 } 894 }
763 ; CHECK-LABEL: fcmpUnoFloat 895 ; CHECK-LABEL: fcmpUnoFloat
764 ; CHECK: ucomiss 896 ; CHECK: ucomiss
765 ; CHECK: setp 897 ; CHECK: setp
766 ; ARM32-LABEL: fcmpUnoFloat 898 ; ARM32-LABEL: fcmpUnoFloat
767 ; ARM32-O2: mov [[R:r[0-9]+]], #0 899 ; ARM32-O2: mov [[R:r[0-9]+]], #0
768 ; ARM32: vcmp.f32 900 ; ARM32: vcmp.f32
769 ; ARM32: vmrs 901 ; ARM32: vmrs
770 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 902 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
771 ; ARM32: movvs [[R]], #1 903 ; ARM32: movvs [[R]], #1
904 ; MIPS32-LABEL: fcmpUnoFloat
905 ; MIPS32: c.un.s
906 ; MIPS32: movf
772 907
773 define internal i32 @fcmpUnoDouble(double %a, double %b) { 908 define internal i32 @fcmpUnoDouble(double %a, double %b) {
774 entry: 909 entry:
775 %cmp = fcmp uno double %a, %b 910 %cmp = fcmp uno double %a, %b
776 %cmp.ret_ext = zext i1 %cmp to i32 911 %cmp.ret_ext = zext i1 %cmp to i32
777 ret i32 %cmp.ret_ext 912 ret i32 %cmp.ret_ext
778 } 913 }
779 ; CHECK-LABEL: fcmpUnoDouble 914 ; CHECK-LABEL: fcmpUnoDouble
780 ; CHECK: ucomisd 915 ; CHECK: ucomisd
781 ; CHECK: setp 916 ; CHECK: setp
782 ; ARM32-LABEL: fcmpUnoDouble 917 ; ARM32-LABEL: fcmpUnoDouble
783 ; ARM32-O2: mov [[R:r[0-9]+]], #0 918 ; ARM32-O2: mov [[R:r[0-9]+]], #0
784 ; ARM32: vcmp.f64 919 ; ARM32: vcmp.f64
785 ; ARM32: vmrs 920 ; ARM32: vmrs
786 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 921 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
787 ; ARM32: movvs [[R]], #1 922 ; ARM32: movvs [[R]], #1
923 ; MIPS32-LABEL: fcmpUnoDouble
924 ; MIPS32: c.un.d
925 ; MIPS32: movf
788 926
789 define internal i32 @fcmpTrueFloat(float %a, float %b) { 927 define internal i32 @fcmpTrueFloat(float %a, float %b) {
790 entry: 928 entry:
791 %cmp = fcmp true float %a, %b 929 %cmp = fcmp true float %a, %b
792 %cmp.ret_ext = zext i1 %cmp to i32 930 %cmp.ret_ext = zext i1 %cmp to i32
793 ret i32 %cmp.ret_ext 931 ret i32 %cmp.ret_ext
794 } 932 }
795 ; CHECK-LABEL: fcmpTrueFloat 933 ; CHECK-LABEL: fcmpTrueFloat
796 ; CHECK: mov {{.*}},0x1 934 ; CHECK: mov {{.*}},0x1
797 ; ARM32-LABEL: fcmpTrueFloat 935 ; ARM32-LABEL: fcmpTrueFloat
798 ; ARM32: mov {{r[0-9]+}}, #1 936 ; ARM32: mov {{r[0-9]+}}, #1
937 ; MIPS32-LABEL: fcmpTrueFloat
938 ; MIPS32: addiu
939 ; MIPS32: sb
799 940
800 define internal i32 @fcmpTrueDouble(double %a, double %b) { 941 define internal i32 @fcmpTrueDouble(double %a, double %b) {
801 entry: 942 entry:
802 %cmp = fcmp true double %a, %b 943 %cmp = fcmp true double %a, %b
803 %cmp.ret_ext = zext i1 %cmp to i32 944 %cmp.ret_ext = zext i1 %cmp to i32
804 ret i32 %cmp.ret_ext 945 ret i32 %cmp.ret_ext
805 } 946 }
806 ; CHECK-LABEL: fcmpTrueDouble 947 ; CHECK-LABEL: fcmpTrueDouble
807 ; CHECK: mov {{.*}},0x1 948 ; CHECK: mov {{.*}},0x1
808 ; ARM32-LABEL: fcmpTrueDouble 949 ; ARM32-LABEL: fcmpTrueDouble
809 ; ARM32: mov {{r[0-9]+}}, #1 950 ; ARM32: mov {{r[0-9]+}}, #1
951 ; MIPS32-LABEL: fcmpTrueDouble
952 ; MIPS32: addiu
953 ; MIPS32: sb
810 954
811 define internal float @selectFloatVarVar(float %a, float %b) { 955 define internal float @selectFloatVarVar(float %a, float %b) {
812 entry: 956 entry:
813 %cmp = fcmp olt float %a, %b 957 %cmp = fcmp olt float %a, %b
814 %cond = select i1 %cmp, float %a, float %b 958 %cond = select i1 %cmp, float %a, float %b
815 ret float %cond 959 ret float %cond
816 } 960 }
817 ; CHECK-LABEL: selectFloatVarVar 961 ; CHECK-LABEL: selectFloatVarVar
818 ; CHECK: movss 962 ; CHECK: movss
819 ; CHECK: ucomiss 963 ; CHECK: ucomiss
(...skipping 14 matching lines...) Expand all
834 ; CHECK-LABEL: selectDoubleVarVar 978 ; CHECK-LABEL: selectDoubleVarVar
835 ; CHECK: movsd 979 ; CHECK: movsd
836 ; CHECK: ucomisd 980 ; CHECK: ucomisd
837 ; CHECK: ja 981 ; CHECK: ja
838 ; CHECK: movsd 982 ; CHECK: movsd
839 ; ARM32-LABEL: selectDoubleVarVar 983 ; ARM32-LABEL: selectDoubleVarVar
840 ; ARM32: vcmp.f64 984 ; ARM32: vcmp.f64
841 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} 985 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}}
842 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} 986 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}}
843 ; ARM32: bx 987 ; ARM32: bx
OLDNEW
« no previous file with comments | « src/IceTargetLoweringMIPS32.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698