99 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-pc-unknown -mattr=+sse2 | FileCheck -check-prefix=X64 %s3; RUN: llc < %s -mtriple=i686-pc-unknown -mattr=+sse2 | FileCheck -check-prefix=X86 %s4 5; PR190596 7define i32 @isint_return(double %d) nounwind {8; X64-LABEL: isint_return:9; X64: # %bb.0:10; X64-NEXT: cvttpd2dq %xmm0, %xmm111; X64-NEXT: cvtdq2pd %xmm1, %xmm112; X64-NEXT: cmpeqsd %xmm0, %xmm113; X64-NEXT: movq %xmm1, %rax14; X64-NEXT: andl $1, %eax15; X64-NEXT: # kill: def $eax killed $eax killed $rax16; X64-NEXT: retq17;18; X86-LABEL: isint_return:19; X86: # %bb.0:20; X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero21; X86-NEXT: cvttpd2dq %xmm0, %xmm122; X86-NEXT: cvtdq2pd %xmm1, %xmm123; X86-NEXT: cmpeqsd %xmm0, %xmm124; X86-NEXT: movd %xmm1, %eax25; X86-NEXT: andl $1, %eax26; X86-NEXT: retl27 %i = fptosi double %d to i3228 %e = sitofp i32 %i to double29 %c = fcmp oeq double %d, %e30 %z = zext i1 %c to i3231 ret i32 %z32}33 34define i32 @isint_float_return(float %f) nounwind {35; X64-LABEL: isint_float_return:36; X64: # %bb.0:37; X64-NEXT: cvttps2dq %xmm0, %xmm138; X64-NEXT: cvtdq2ps %xmm1, %xmm139; X64-NEXT: cmpeqss %xmm0, %xmm140; X64-NEXT: movd %xmm1, %eax41; X64-NEXT: andl $1, %eax42; X64-NEXT: retq43;44; X86-LABEL: isint_float_return:45; X86: # %bb.0:46; X86-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero47; X86-NEXT: cvttps2dq %xmm0, %xmm148; X86-NEXT: cvtdq2ps %xmm1, %xmm149; X86-NEXT: cmpeqss %xmm0, %xmm150; X86-NEXT: movd %xmm1, %eax51; X86-NEXT: andl $1, %eax52; X86-NEXT: retl53 %i = fptosi float %f to i3254 %g = sitofp i32 %i to float55 %c = fcmp oeq float %f, %g56 %z = zext i1 %c to i3257 ret i32 %z58}59 60declare void @foo()61 62define void @isint_branch(double %d) nounwind {63; X64-LABEL: isint_branch:64; X64: # %bb.0:65; X64-NEXT: cvttpd2dq %xmm0, %xmm166; X64-NEXT: cvtdq2pd %xmm1, %xmm167; X64-NEXT: ucomisd %xmm1, %xmm068; X64-NEXT: jne .LBB2_269; X64-NEXT: jp .LBB2_270; X64-NEXT: # %bb.1: # %true71; X64-NEXT: pushq %rax72; X64-NEXT: callq foo@PLT73; X64-NEXT: popq %rax74; X64-NEXT: .LBB2_2: # %false75; X64-NEXT: retq76;77; X86-LABEL: isint_branch:78; X86: # %bb.0:79; X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero80; X86-NEXT: cvttpd2dq %xmm0, %xmm181; X86-NEXT: cvtdq2pd %xmm1, %xmm182; X86-NEXT: ucomisd %xmm1, %xmm083; X86-NEXT: jne .LBB2_284; X86-NEXT: jp .LBB2_285; X86-NEXT: # %bb.1: # %true86; X86-NEXT: calll foo@PLT87; X86-NEXT: .LBB2_2: # %false88; X86-NEXT: retl89 %i = fptosi double %d to i3290 %e = sitofp i32 %i to double91 %c = fcmp oeq double %d, %e92 br i1 %c, label %true, label %false93true:94 call void @foo()95 ret void96false:97 ret void98}99