1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mcpu=corei7-avx | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 -mcpu=corei7-avx | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine float @select_fcmp_one_f32(float %a, float %b, float %c, float %d) { 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_fcmp_one_f32 9*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jne [[BB:LBB[0-9]+_2]] 11*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps %xmm2, %xmm0 13*9880d681SAndroid Build Coastguard Worker %1 = fcmp one float %a, %b 14*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 15*9880d681SAndroid Build Coastguard Worker ret float %2 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine double @select_fcmp_one_f64(double %a, double %b, double %c, double %d) { 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_fcmp_one_f64 20*9880d681SAndroid Build Coastguard Worker; CHECK: ucomisd %xmm1, %xmm0 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jne [[BB:LBB[0-9]+_2]] 22*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps %xmm2, %xmm0 24*9880d681SAndroid Build Coastguard Worker %1 = fcmp one double %a, %b 25*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, double %c, double %d 26*9880d681SAndroid Build Coastguard Worker ret double %2 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_eq_f32(i64 %a, i64 %b, float %c, float %d) { 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_eq_f32 31*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: je [[BB:LBB[0-9]+_2]] 33*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 35*9880d681SAndroid Build Coastguard Worker %1 = icmp eq i64 %a, %b 36*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 37*9880d681SAndroid Build Coastguard Worker ret float %2 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_ne_f32(i64 %a, i64 %b, float %c, float %d) { 41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_ne_f32 42*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jne [[BB:LBB[0-9]+_2]] 44*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 46*9880d681SAndroid Build Coastguard Worker %1 = icmp ne i64 %a, %b 47*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 48*9880d681SAndroid Build Coastguard Worker ret float %2 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_ugt_f32(i64 %a, i64 %b, float %c, float %d) { 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_ugt_f32 53*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ja [[BB:LBB[0-9]+_2]] 55*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 57*9880d681SAndroid Build Coastguard Worker %1 = icmp ugt i64 %a, %b 58*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 59*9880d681SAndroid Build Coastguard Worker ret float %2 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_uge_f32(i64 %a, i64 %b, float %c, float %d) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_uge_f32 64*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jae [[BB:LBB[0-9]+_2]] 66*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 68*9880d681SAndroid Build Coastguard Worker %1 = icmp uge i64 %a, %b 69*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 70*9880d681SAndroid Build Coastguard Worker ret float %2 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_ult_f32(i64 %a, i64 %b, float %c, float %d) { 74*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_ult_f32 75*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jb [[BB:LBB[0-9]+_2]] 77*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 79*9880d681SAndroid Build Coastguard Worker %1 = icmp ult i64 %a, %b 80*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 81*9880d681SAndroid Build Coastguard Worker ret float %2 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_ule_f32(i64 %a, i64 %b, float %c, float %d) { 85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_ule_f32 86*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jbe [[BB:LBB[0-9]+_2]] 88*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 90*9880d681SAndroid Build Coastguard Worker %1 = icmp ule i64 %a, %b 91*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 92*9880d681SAndroid Build Coastguard Worker ret float %2 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_sgt_f32(i64 %a, i64 %b, float %c, float %d) { 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_sgt_f32 97*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jg [[BB:LBB[0-9]+_2]] 99*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 101*9880d681SAndroid Build Coastguard Worker %1 = icmp sgt i64 %a, %b 102*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 103*9880d681SAndroid Build Coastguard Worker ret float %2 104*9880d681SAndroid Build Coastguard Worker} 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_sge_f32(i64 %a, i64 %b, float %c, float %d) { 107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_sge_f32 108*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jge [[BB:LBB[0-9]+_2]] 110*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 112*9880d681SAndroid Build Coastguard Worker %1 = icmp sge i64 %a, %b 113*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 114*9880d681SAndroid Build Coastguard Worker ret float %2 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_slt_f32(i64 %a, i64 %b, float %c, float %d) { 118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_slt_f32 119*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jl [[BB:LBB[0-9]+_2]] 121*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 123*9880d681SAndroid Build Coastguard Worker %1 = icmp slt i64 %a, %b 124*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 125*9880d681SAndroid Build Coastguard Worker ret float %2 126*9880d681SAndroid Build Coastguard Worker} 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Workerdefine float @select_icmp_sle_f32(i64 %a, i64 %b, float %c, float %d) { 129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_icmp_sle_f32 130*9880d681SAndroid Build Coastguard Worker; CHECK: cmpq %rsi, %rdi 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jle [[BB:LBB[0-9]+_2]] 132*9880d681SAndroid Build Coastguard Worker; CHECK: [[BB]] 133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 134*9880d681SAndroid Build Coastguard Worker %1 = icmp sle i64 %a, %b 135*9880d681SAndroid Build Coastguard Worker %2 = select i1 %1, float %c, float %d 136*9880d681SAndroid Build Coastguard Worker ret float %2 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139