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: jnp {{LBB.+_2}} 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: jp {{LBB.+_2}} 166 ; CHECK-NEXT: jmp {{LBB.+_1}} 167 %1 = fcmp une float %x, %y 168 br i1 %1, label %bb1, label %bb2 169 bb2: 170 ret i32 1 171 bb1: 172 ret i32 0 173 } 174 175 define 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 181 bb2: 182 ret i32 1 183 bb1: 184 ret i32 0 185 } 186 187 define 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 193 bb2: 194 ret i32 1 195 bb1: 196 ret i32 0 197 } 198 199 define 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 205 bb2: 206 ret i32 1 207 bb1: 208 ret i32 0 209 } 210 211 define 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 217 bb2: 218 ret i32 1 219 bb1: 220 ret i32 0 221 } 222 223 define 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 229 bb2: 230 ret i32 1 231 bb1: 232 ret i32 0 233 } 234 235 define 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 241 bb2: 242 ret i32 1 243 bb1: 244 ret i32 0 245 } 246 247 define 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 253 bb2: 254 ret i32 1 255 bb1: 256 ret i32 0 257 } 258 259 define 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 265 bb2: 266 ret i32 1 267 bb1: 268 ret i32 0 269 } 270 271 define 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 277 bb2: 278 ret i32 1 279 bb1: 280 ret i32 0 281 } 282 283 define 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 289 bb2: 290 ret i32 1 291 bb1: 292 ret i32 0 293 } 294 295