1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_oeq(float %x, float %y) { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_oeq 6*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jne {{LBB.+_1}} 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jp {{LBB.+_1}} 9*9880d681SAndroid Build Coastguard Worker %1 = fcmp oeq float %x, %y 10*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 11*9880d681SAndroid Build Coastguard Workerbb2: 12*9880d681SAndroid Build Coastguard Worker ret i32 1 13*9880d681SAndroid Build Coastguard Workerbb1: 14*9880d681SAndroid Build Coastguard Worker ret i32 0 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_ogt(float %x, float %y) { 18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ogt 19*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jbe {{LBB.+_1}} 21*9880d681SAndroid Build Coastguard Worker %1 = fcmp ogt float %x, %y 22*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 23*9880d681SAndroid Build Coastguard Workerbb2: 24*9880d681SAndroid Build Coastguard Worker ret i32 1 25*9880d681SAndroid Build Coastguard Workerbb1: 26*9880d681SAndroid Build Coastguard Worker ret i32 0 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_oge(float %x, float %y) { 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_oge 31*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jb {{LBB.+_1}} 33*9880d681SAndroid Build Coastguard Worker %1 = fcmp oge float %x, %y 34*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 35*9880d681SAndroid Build Coastguard Workerbb2: 36*9880d681SAndroid Build Coastguard Worker ret i32 1 37*9880d681SAndroid Build Coastguard Workerbb1: 38*9880d681SAndroid Build Coastguard Worker ret i32 0 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_olt(float %x, float %y) { 42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_olt 43*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm0, %xmm1 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jbe {{LBB.+_1}} 45*9880d681SAndroid Build Coastguard Worker %1 = fcmp olt float %x, %y 46*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 47*9880d681SAndroid Build Coastguard Workerbb2: 48*9880d681SAndroid Build Coastguard Worker ret i32 1 49*9880d681SAndroid Build Coastguard Workerbb1: 50*9880d681SAndroid Build Coastguard Worker ret i32 0 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_ole(float %x, float %y) { 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ole 55*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm0, %xmm1 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jb {{LBB.+_1}} 57*9880d681SAndroid Build Coastguard Worker %1 = fcmp ole float %x, %y 58*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 59*9880d681SAndroid Build Coastguard Workerbb2: 60*9880d681SAndroid Build Coastguard Worker ret i32 1 61*9880d681SAndroid Build Coastguard Workerbb1: 62*9880d681SAndroid Build Coastguard Worker ret i32 0 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_one(float %x, float %y) { 66*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_one 67*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: je {{LBB.+_1}} 69*9880d681SAndroid Build Coastguard Worker %1 = fcmp one float %x, %y 70*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 71*9880d681SAndroid Build Coastguard Workerbb2: 72*9880d681SAndroid Build Coastguard Worker ret i32 1 73*9880d681SAndroid Build Coastguard Workerbb1: 74*9880d681SAndroid Build Coastguard Worker ret i32 0 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_ord(float %x, float %y) { 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ord 79*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jp {{LBB.+_1}} 81*9880d681SAndroid Build Coastguard Worker %1 = fcmp ord float %x, %y 82*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 83*9880d681SAndroid Build Coastguard Workerbb2: 84*9880d681SAndroid Build Coastguard Worker ret i32 1 85*9880d681SAndroid Build Coastguard Workerbb1: 86*9880d681SAndroid Build Coastguard Worker ret i32 0 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_uno(float %x, float %y) { 90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_uno 91*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jp {{LBB.+_2}} 93*9880d681SAndroid Build Coastguard Worker %1 = fcmp uno float %x, %y 94*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 95*9880d681SAndroid Build Coastguard Workerbb2: 96*9880d681SAndroid Build Coastguard Worker ret i32 1 97*9880d681SAndroid Build Coastguard Workerbb1: 98*9880d681SAndroid Build Coastguard Worker ret i32 0 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_ueq(float %x, float %y) { 102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ueq 103*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: je {{LBB.+_2}} 105*9880d681SAndroid Build Coastguard Worker %1 = fcmp ueq float %x, %y 106*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 107*9880d681SAndroid Build Coastguard Workerbb2: 108*9880d681SAndroid Build Coastguard Worker ret i32 1 109*9880d681SAndroid Build Coastguard Workerbb1: 110*9880d681SAndroid Build Coastguard Worker ret i32 0 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_ugt(float %x, float %y) { 114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ugt 115*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm0, %xmm1 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jae {{LBB.+_1}} 117*9880d681SAndroid Build Coastguard Worker %1 = fcmp ugt float %x, %y 118*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 119*9880d681SAndroid Build Coastguard Workerbb2: 120*9880d681SAndroid Build Coastguard Worker ret i32 1 121*9880d681SAndroid Build Coastguard Workerbb1: 122*9880d681SAndroid Build Coastguard Worker ret i32 0 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_uge(float %x, float %y) { 126*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_uge 127*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm0, %xmm1 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ja {{LBB.+_1}} 129*9880d681SAndroid Build Coastguard Worker %1 = fcmp uge float %x, %y 130*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 131*9880d681SAndroid Build Coastguard Workerbb2: 132*9880d681SAndroid Build Coastguard Worker ret i32 1 133*9880d681SAndroid Build Coastguard Workerbb1: 134*9880d681SAndroid Build Coastguard Worker ret i32 0 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_ult(float %x, float %y) { 138*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ult 139*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jae {{LBB.+_1}} 141*9880d681SAndroid Build Coastguard Worker %1 = fcmp ult float %x, %y 142*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 143*9880d681SAndroid Build Coastguard Workerbb2: 144*9880d681SAndroid Build Coastguard Worker ret i32 1 145*9880d681SAndroid Build Coastguard Workerbb1: 146*9880d681SAndroid Build Coastguard Worker ret i32 0 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_ule(float %x, float %y) { 150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ule 151*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ja {{LBB.+_1}} 153*9880d681SAndroid Build Coastguard Worker %1 = fcmp ule float %x, %y 154*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 155*9880d681SAndroid Build Coastguard Workerbb2: 156*9880d681SAndroid Build Coastguard Worker ret i32 1 157*9880d681SAndroid Build Coastguard Workerbb1: 158*9880d681SAndroid Build Coastguard Worker ret i32 0 159*9880d681SAndroid Build Coastguard Worker} 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Workerdefine i32 @fcmp_une(float %x, float %y) { 162*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_une 163*9880d681SAndroid Build Coastguard Worker; CHECK: ucomiss %xmm1, %xmm0 164*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jne {{LBB.+_2}} 165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jnp {{LBB.+_1}} 166*9880d681SAndroid Build Coastguard Worker %1 = fcmp une float %x, %y 167*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 168*9880d681SAndroid Build Coastguard Workerbb2: 169*9880d681SAndroid Build Coastguard Worker ret i32 1 170*9880d681SAndroid Build Coastguard Workerbb1: 171*9880d681SAndroid Build Coastguard Worker ret i32 0 172*9880d681SAndroid Build Coastguard Worker} 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_eq(i32 %x, i32 %y) { 175*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_eq 176*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jne {{LBB.+_1}} 178*9880d681SAndroid Build Coastguard Worker %1 = icmp eq i32 %x, %y 179*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 180*9880d681SAndroid Build Coastguard Workerbb2: 181*9880d681SAndroid Build Coastguard Worker ret i32 1 182*9880d681SAndroid Build Coastguard Workerbb1: 183*9880d681SAndroid Build Coastguard Worker ret i32 0 184*9880d681SAndroid Build Coastguard Worker} 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_ne(i32 %x, i32 %y) { 187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_ne 188*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: je {{LBB.+_1}} 190*9880d681SAndroid Build Coastguard Worker %1 = icmp ne i32 %x, %y 191*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 192*9880d681SAndroid Build Coastguard Workerbb2: 193*9880d681SAndroid Build Coastguard Worker ret i32 1 194*9880d681SAndroid Build Coastguard Workerbb1: 195*9880d681SAndroid Build Coastguard Worker ret i32 0 196*9880d681SAndroid Build Coastguard Worker} 197*9880d681SAndroid Build Coastguard Worker 198*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_ugt(i32 %x, i32 %y) { 199*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_ugt 200*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jbe {{LBB.+_1}} 202*9880d681SAndroid Build Coastguard Worker %1 = icmp ugt i32 %x, %y 203*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 204*9880d681SAndroid Build Coastguard Workerbb2: 205*9880d681SAndroid Build Coastguard Worker ret i32 1 206*9880d681SAndroid Build Coastguard Workerbb1: 207*9880d681SAndroid Build Coastguard Worker ret i32 0 208*9880d681SAndroid Build Coastguard Worker} 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_uge(i32 %x, i32 %y) { 211*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_uge 212*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jb {{LBB.+_1}} 214*9880d681SAndroid Build Coastguard Worker %1 = icmp uge i32 %x, %y 215*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 216*9880d681SAndroid Build Coastguard Workerbb2: 217*9880d681SAndroid Build Coastguard Worker ret i32 1 218*9880d681SAndroid Build Coastguard Workerbb1: 219*9880d681SAndroid Build Coastguard Worker ret i32 0 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_ult(i32 %x, i32 %y) { 223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_ult 224*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jae {{LBB.+_1}} 226*9880d681SAndroid Build Coastguard Worker %1 = icmp ult i32 %x, %y 227*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 228*9880d681SAndroid Build Coastguard Workerbb2: 229*9880d681SAndroid Build Coastguard Worker ret i32 1 230*9880d681SAndroid Build Coastguard Workerbb1: 231*9880d681SAndroid Build Coastguard Worker ret i32 0 232*9880d681SAndroid Build Coastguard Worker} 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_ule(i32 %x, i32 %y) { 235*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_ule 236*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 237*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ja {{LBB.+_1}} 238*9880d681SAndroid Build Coastguard Worker %1 = icmp ule i32 %x, %y 239*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 240*9880d681SAndroid Build Coastguard Workerbb2: 241*9880d681SAndroid Build Coastguard Worker ret i32 1 242*9880d681SAndroid Build Coastguard Workerbb1: 243*9880d681SAndroid Build Coastguard Worker ret i32 0 244*9880d681SAndroid Build Coastguard Worker} 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_sgt(i32 %x, i32 %y) { 247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_sgt 248*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jle {{LBB.+_1}} 250*9880d681SAndroid Build Coastguard Worker %1 = icmp sgt i32 %x, %y 251*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 252*9880d681SAndroid Build Coastguard Workerbb2: 253*9880d681SAndroid Build Coastguard Worker ret i32 1 254*9880d681SAndroid Build Coastguard Workerbb1: 255*9880d681SAndroid Build Coastguard Worker ret i32 0 256*9880d681SAndroid Build Coastguard Worker} 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_sge(i32 %x, i32 %y) { 259*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_sge 260*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jl {{LBB.+_1}} 262*9880d681SAndroid Build Coastguard Worker %1 = icmp sge i32 %x, %y 263*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 264*9880d681SAndroid Build Coastguard Workerbb2: 265*9880d681SAndroid Build Coastguard Worker ret i32 1 266*9880d681SAndroid Build Coastguard Workerbb1: 267*9880d681SAndroid Build Coastguard Worker ret i32 0 268*9880d681SAndroid Build Coastguard Worker} 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_slt(i32 %x, i32 %y) { 271*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_slt 272*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jge {{LBB.+_1}} 274*9880d681SAndroid Build Coastguard Worker %1 = icmp slt i32 %x, %y 275*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 276*9880d681SAndroid Build Coastguard Workerbb2: 277*9880d681SAndroid Build Coastguard Worker ret i32 1 278*9880d681SAndroid Build Coastguard Workerbb1: 279*9880d681SAndroid Build Coastguard Worker ret i32 0 280*9880d681SAndroid Build Coastguard Worker} 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_sle(i32 %x, i32 %y) { 283*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: icmp_sle 284*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl %esi, %edi 285*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jg {{LBB.+_1}} 286*9880d681SAndroid Build Coastguard Worker %1 = icmp sle i32 %x, %y 287*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 288*9880d681SAndroid Build Coastguard Workerbb2: 289*9880d681SAndroid Build Coastguard Worker ret i32 1 290*9880d681SAndroid Build Coastguard Workerbb1: 291*9880d681SAndroid Build Coastguard Worker ret i32 0 292*9880d681SAndroid Build Coastguard Worker} 293*9880d681SAndroid Build Coastguard Worker 294