@@ -413,3 +413,60 @@ define i1 @f32cmp3(float %x, float %y, float %z, float %w) {
413
413
%r = xor i1 %or , %cmpzw
414
414
ret i1 %r
415
415
}
416
+
417
+ define i1 @PR140534 (i32 %a0 , i32 %a1 , i32 %a2 ) {
418
+ ; SSE2-LABEL: PR140534:
419
+ ; SSE2: # %bb.0:
420
+ ; SSE2-NEXT: movl %edi, %eax
421
+ ; SSE2-NEXT: cvtsi2sd %rax, %xmm0
422
+ ; SSE2-NEXT: movl %esi, %eax
423
+ ; SSE2-NEXT: cvtsi2sd %rax, %xmm1
424
+ ; SSE2-NEXT: movl %edx, %eax
425
+ ; SSE2-NEXT: cvtsi2sd %rax, %xmm2
426
+ ; SSE2-NEXT: mulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
427
+ ; SSE2-NEXT: movapd %xmm1, %xmm3
428
+ ; SSE2-NEXT: cmpltpd %xmm2, %xmm3
429
+ ; SSE2-NEXT: cmpltpd %xmm0, %xmm1
430
+ ; SSE2-NEXT: orpd %xmm3, %xmm1
431
+ ; SSE2-NEXT: movd %xmm1, %eax
432
+ ; SSE2-NEXT: # kill: def $al killed $al killed $eax
433
+ ; SSE2-NEXT: retq
434
+ ;
435
+ ; AVX1-LABEL: PR140534:
436
+ ; AVX1: # %bb.0:
437
+ ; AVX1-NEXT: movl %edi, %eax
438
+ ; AVX1-NEXT: vcvtsi2sd %rax, %xmm0, %xmm0
439
+ ; AVX1-NEXT: movl %esi, %eax
440
+ ; AVX1-NEXT: vcvtsi2sd %rax, %xmm1, %xmm1
441
+ ; AVX1-NEXT: movl %edx, %eax
442
+ ; AVX1-NEXT: vcvtsi2sd %rax, %xmm2, %xmm2
443
+ ; AVX1-NEXT: vmulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
444
+ ; AVX1-NEXT: vcmpltpd %xmm2, %xmm1, %xmm2
445
+ ; AVX1-NEXT: vcmpltpd %xmm0, %xmm1, %xmm0
446
+ ; AVX1-NEXT: vorpd %xmm2, %xmm0, %xmm0
447
+ ; AVX1-NEXT: vmovd %xmm0, %eax
448
+ ; AVX1-NEXT: # kill: def $al killed $al killed $eax
449
+ ; AVX1-NEXT: retq
450
+ ;
451
+ ; AVX512-LABEL: PR140534:
452
+ ; AVX512: # %bb.0:
453
+ ; AVX512-NEXT: vcvtusi2sd %edi, %xmm0, %xmm0
454
+ ; AVX512-NEXT: vcvtusi2sd %esi, %xmm1, %xmm1
455
+ ; AVX512-NEXT: vcvtusi2sd %edx, %xmm2, %xmm2
456
+ ; AVX512-NEXT: vmulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
457
+ ; AVX512-NEXT: vcmpltpd %zmm2, %zmm1, %k0
458
+ ; AVX512-NEXT: vcmpltpd %zmm0, %zmm1, %k1
459
+ ; AVX512-NEXT: korw %k0, %k1, %k0
460
+ ; AVX512-NEXT: kmovw %k0, %eax
461
+ ; AVX512-NEXT: # kill: def $al killed $al killed $eax
462
+ ; AVX512-NEXT: vzeroupper
463
+ ; AVX512-NEXT: retq
464
+ %conv0 = uitofp i32 %a0 to double
465
+ %conv1 = uitofp i32 %a1 to double
466
+ %conv2 = uitofp i32 %a2 to double
467
+ %mul = fmul double %conv1 , 0x3FF6A09E667F3BCD
468
+ %cmp0 = fcmp olt double %mul , %conv0
469
+ %cmp2 = fcmp olt double %mul , %conv2
470
+ %or = or i1 %cmp0 , %cmp2
471
+ ret i1 %or
472
+ }
0 commit comments