1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-pc-unknown -mattr=+sse2 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-pc-unknown -mattr=+sse2 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; PR19059 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-pc-unknown -mattr=+sse2 | FileCheck -check-prefix=CHECK32 %s 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine i32 @isint_return(double %d) nounwind { 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isint_return: 9*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: xor 10*9880d681SAndroid Build Coastguard Worker; CHECK: cvt 11*9880d681SAndroid Build Coastguard Worker %i = fptosi double %d to i32 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cvt 13*9880d681SAndroid Build Coastguard Worker %e = sitofp i32 %i to double 14*9880d681SAndroid Build Coastguard Worker; CHECK: cmpeqsd 15*9880d681SAndroid Build Coastguard Worker %c = fcmp oeq double %d, %e 16*9880d681SAndroid Build Coastguard Worker; CHECK32-NOT: movd {{.*}}, %r{{.*}} 17*9880d681SAndroid Build Coastguard Worker; CHECK32-NOT: andq 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl 20*9880d681SAndroid Build Coastguard Worker %z = zext i1 %c to i32 21*9880d681SAndroid Build Coastguard Worker ret i32 %z 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i32 @isint_float_return(float %f) nounwind { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isint_float_return: 26*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: xor 27*9880d681SAndroid Build Coastguard Worker; CHECK: cvt 28*9880d681SAndroid Build Coastguard Worker %i = fptosi float %f to i32 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cvt 30*9880d681SAndroid Build Coastguard Worker %g = sitofp i32 %i to float 31*9880d681SAndroid Build Coastguard Worker; CHECK: cmpeqss 32*9880d681SAndroid Build Coastguard Worker %c = fcmp oeq float %f, %g 33*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movd {{.*}}, %r{{.*}} 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl 36*9880d681SAndroid Build Coastguard Worker %z = zext i1 %c to i32 37*9880d681SAndroid Build Coastguard Worker ret i32 %z 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdeclare void @foo() 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine void @isint_branch(double %d) nounwind { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isint_branch: 44*9880d681SAndroid Build Coastguard Worker; CHECK: cvt 45*9880d681SAndroid Build Coastguard Worker %i = fptosi double %d to i32 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cvt 47*9880d681SAndroid Build Coastguard Worker %e = sitofp i32 %i to double 48*9880d681SAndroid Build Coastguard Worker; CHECK: ucomisd 49*9880d681SAndroid Build Coastguard Worker %c = fcmp oeq double %d, %e 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jne 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jp 52*9880d681SAndroid Build Coastguard Worker br i1 %c, label %true, label %false 53*9880d681SAndroid Build Coastguard Workertrue: 54*9880d681SAndroid Build Coastguard Worker call void @foo() 55*9880d681SAndroid Build Coastguard Worker ret void 56*9880d681SAndroid Build Coastguard Workerfalse: 57*9880d681SAndroid Build Coastguard Worker ret void 58*9880d681SAndroid Build Coastguard Worker} 59