@@ -413,3 +413,60 @@ define i1 @f32cmp3(float %x, float %y, float %z, float %w) {
413413 %r = xor i1 %or , %cmpzw
414414 ret i1 %r
415415}
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