1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s 2 ; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s 3 4 define 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: jp {{LBB.+_1}} 9 %1 = fcmp oeq float %x, %y 10 br i1 %1, label %bb1, label %bb2 11 bb2: 12 ret i32 1 13 bb1: 14 ret i32 0 15 } 16 17 define 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 23 bb2: 24 ret i32 1 25 bb1: 26 ret i32 0 27 } 28 29 define 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 35 bb2: 36 ret i32 1 37 bb1: 38 ret i32 0 39 } 40 41 define 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 47 bb2: 48 ret i32 1 49 bb1: 50 ret i32 0 51 } 52 53 define 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 59 bb2: 60 ret i32 1 61 bb1: 62 ret i32 0 63 } 64 65 define 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 71 bb2: 72 ret i32 1 73 bb1: 74 ret i32 0 75 } 76 77 define 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 83 bb2: 84 ret i32 1 85 bb1: 86 ret i32 0 87 } 88 89 define 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 95 bb2: 96 ret i32 1 97 bb1: 98 ret i32 0 99 } 100 101 define 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 107 bb2: 108 ret i32 1 109 bb1: 110 ret i32 0 111 } 112 113 define 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 119 bb2: 120 ret i32 1 121 bb1: 122 ret i32 0 123 } 124 125 define 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 131 bb2: 132 ret i32 1 133 bb1: 134 ret i32 0 135 } 136 137 define 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 143 bb2: 144 ret i32 1 145 bb1: 146 ret i32 0 147 } 148 149 define 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 155 bb2: 156 ret i32 1 157 bb1: 158 ret i32 0 159 } 160 161 define 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: jnp {{LBB.+_1}} 166 %1 = fcmp une float %x, %y 167 br i1 %1, label %bb1, label %bb2 168 bb2: 169 ret i32 1 170 bb1: 171 ret i32 0 172 } 173 174 define i32 @icmp_eq(i32 %x, i32 %y) { 175 ; CHECK-LABEL: icmp_eq 176 ; CHECK: cmpl %esi, %edi 177 ; CHECK-NEXT: jne {{LBB.+_1}} 178 %1 = icmp eq i32 %x, %y 179 br i1 %1, label %bb1, label %bb2 180 bb2: 181 ret i32 1 182 bb1: 183 ret i32 0 184 } 185 186 define i32 @icmp_ne(i32 %x, i32 %y) { 187 ; CHECK-LABEL: icmp_ne 188 ; CHECK: cmpl %esi, %edi 189 ; CHECK-NEXT: je {{LBB.+_1}} 190 %1 = icmp ne i32 %x, %y 191 br i1 %1, label %bb1, label %bb2 192 bb2: 193 ret i32 1 194 bb1: 195 ret i32 0 196 } 197 198 define i32 @icmp_ugt(i32 %x, i32 %y) { 199 ; CHECK-LABEL: icmp_ugt 200 ; CHECK: cmpl %esi, %edi 201 ; CHECK-NEXT: jbe {{LBB.+_1}} 202 %1 = icmp ugt i32 %x, %y 203 br i1 %1, label %bb1, label %bb2 204 bb2: 205 ret i32 1 206 bb1: 207 ret i32 0 208 } 209 210 define i32 @icmp_uge(i32 %x, i32 %y) { 211 ; CHECK-LABEL: icmp_uge 212 ; CHECK: cmpl %esi, %edi 213 ; CHECK-NEXT: jb {{LBB.+_1}} 214 %1 = icmp uge i32 %x, %y 215 br i1 %1, label %bb1, label %bb2 216 bb2: 217 ret i32 1 218 bb1: 219 ret i32 0 220 } 221 222 define i32 @icmp_ult(i32 %x, i32 %y) { 223 ; CHECK-LABEL: icmp_ult 224 ; CHECK: cmpl %esi, %edi 225 ; CHECK-NEXT: jae {{LBB.+_1}} 226 %1 = icmp ult i32 %x, %y 227 br i1 %1, label %bb1, label %bb2 228 bb2: 229 ret i32 1 230 bb1: 231 ret i32 0 232 } 233 234 define i32 @icmp_ule(i32 %x, i32 %y) { 235 ; CHECK-LABEL: icmp_ule 236 ; CHECK: cmpl %esi, %edi 237 ; CHECK-NEXT: ja {{LBB.+_1}} 238 %1 = icmp ule i32 %x, %y 239 br i1 %1, label %bb1, label %bb2 240 bb2: 241 ret i32 1 242 bb1: 243 ret i32 0 244 } 245 246 define i32 @icmp_sgt(i32 %x, i32 %y) { 247 ; CHECK-LABEL: icmp_sgt 248 ; CHECK: cmpl %esi, %edi 249 ; CHECK-NEXT: jle {{LBB.+_1}} 250 %1 = icmp sgt i32 %x, %y 251 br i1 %1, label %bb1, label %bb2 252 bb2: 253 ret i32 1 254 bb1: 255 ret i32 0 256 } 257 258 define i32 @icmp_sge(i32 %x, i32 %y) { 259 ; CHECK-LABEL: icmp_sge 260 ; CHECK: cmpl %esi, %edi 261 ; CHECK-NEXT: jl {{LBB.+_1}} 262 %1 = icmp sge i32 %x, %y 263 br i1 %1, label %bb1, label %bb2 264 bb2: 265 ret i32 1 266 bb1: 267 ret i32 0 268 } 269 270 define i32 @icmp_slt(i32 %x, i32 %y) { 271 ; CHECK-LABEL: icmp_slt 272 ; CHECK: cmpl %esi, %edi 273 ; CHECK-NEXT: jge {{LBB.+_1}} 274 %1 = icmp slt i32 %x, %y 275 br i1 %1, label %bb1, label %bb2 276 bb2: 277 ret i32 1 278 bb1: 279 ret i32 0 280 } 281 282 define i32 @icmp_sle(i32 %x, i32 %y) { 283 ; CHECK-LABEL: icmp_sle 284 ; CHECK: cmpl %esi, %edi 285 ; CHECK-NEXT: jg {{LBB.+_1}} 286 %1 = icmp sle i32 %x, %y 287 br i1 %1, label %bb1, label %bb2 288 bb2: 289 ret i32 1 290 bb1: 291 ret i32 0 292 } 293 294