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