| OLD | NEW |
| 1 ; This tries to be a comprehensive test of f32 and f64 compare operations. | 1 ; This tries to be a comprehensive test of f32 and f64 compare operations. |
| 2 | 2 |
| 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ | 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ |
| 4 ; RUN: -allow-externally-defined-symbols | FileCheck %s | 4 ; RUN: -allow-externally-defined-symbols | FileCheck %s |
| 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ | 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ |
| 6 ; RUN: -allow-externally-defined-symbols | FileCheck %s \ | 6 ; RUN: -allow-externally-defined-symbols | FileCheck %s \ |
| 7 ; RUN: --check-prefix=CHECK-OM1 | 7 ; RUN: --check-prefix=CHECK-OM1 |
| 8 | 8 |
| 9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ | 9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ |
| 10 ; RUN: --target arm32 -i %s --args -O2 \ | 10 ; RUN: --target arm32 -i %s --args -O2 \ |
| 11 ; RUN: -allow-externally-defined-symbols \ | 11 ; RUN: -allow-externally-defined-symbols \ |
| 12 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ | 12 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ |
| 13 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2 | 13 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2 |
| 14 | 14 |
| 15 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ | 15 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ |
| 16 ; RUN: --target arm32 -i %s --args -Om1 \ | 16 ; RUN: --target arm32 -i %s --args -Om1 \ |
| 17 ; RUN: -allow-externally-defined-symbols \ | 17 ; RUN: -allow-externally-defined-symbols \ |
| 18 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ | 18 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ |
| 19 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-OM1 | 19 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-OM1 |
| 20 | 20 |
| 21 ; RUN: %if --need=allow_dump --need=target_MIPS32 --command %p2i \ |
| 22 ; RUN: --filetype=asm --target mips32 -i %s --args -Om1 \ |
| 23 ; RUN: -allow-externally-defined-symbols --skip-unimplemented \ |
| 24 ; RUN: | %if --need=allow_dump --need=target_MIPS32 --command FileCheck %s \ |
| 25 ; RUN: --check-prefix=MIPS32 |
| 26 |
| 21 define internal void @fcmpEq(float %a, float %b, double %c, double %d) { | 27 define internal void @fcmpEq(float %a, float %b, double %c, double %d) { |
| 22 entry: | 28 entry: |
| 23 %cmp = fcmp oeq float %a, %b | 29 %cmp = fcmp oeq float %a, %b |
| 24 br i1 %cmp, label %if.then, label %if.end | 30 br i1 %cmp, label %if.then, label %if.end |
| 25 | 31 |
| 26 if.then: ; preds = %entry | 32 if.then: ; preds = %entry |
| 27 call void @func() | 33 call void @func() |
| 28 br label %if.end | 34 br label %if.end |
| 29 | 35 |
| 30 if.end: ; preds = %if.then, %entry | 36 if.end: ; preds = %if.then, %entry |
| (...skipping 29 matching lines...) Expand all Loading... |
| 60 ; ARM32: vmrs | 66 ; ARM32: vmrs |
| 61 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 67 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
| 62 ; ARM32-OM1: moveq [[R0]], #1 | 68 ; ARM32-OM1: moveq [[R0]], #1 |
| 63 ; ARM32-O2: bne | 69 ; ARM32-O2: bne |
| 64 ; ARM32: bl func | 70 ; ARM32: bl func |
| 65 ; ARM32: vcmp.f64 | 71 ; ARM32: vcmp.f64 |
| 66 ; ARM32: vmrs | 72 ; ARM32: vmrs |
| 67 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 73 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
| 68 ; ARM32-OM1: moveq [[R1]], #1 | 74 ; ARM32-OM1: moveq [[R1]], #1 |
| 69 ; ARM32-O2: bne | 75 ; ARM32-O2: bne |
| 76 ; MIPS32-LABEL: fcmpEq |
| 77 ; MIPS32-LABEL: .LfcmpEq$entry |
| 78 ; MIPS32: c.eq.s |
| 79 ; MIPS32: movf |
| 80 ; MIPS32-LABEL: .LfcmpEq$if.end |
| 81 ; MIPS32: c.eq.d |
| 82 ; MIPS32: movf |
| 70 | 83 |
| 71 declare void @func() | 84 declare void @func() |
| 72 | 85 |
| 73 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { | 86 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { |
| 74 entry: | 87 entry: |
| 75 %cmp = fcmp une float %a, %b | 88 %cmp = fcmp une float %a, %b |
| 76 br i1 %cmp, label %if.then, label %if.end | 89 br i1 %cmp, label %if.then, label %if.end |
| 77 | 90 |
| 78 if.then: ; preds = %entry | 91 if.then: ; preds = %entry |
| 79 call void @func() | 92 call void @func() |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 ; ARM32: vcmp.f32 | 129 ; ARM32: vcmp.f32 |
| 117 ; ARM32: vmrs | 130 ; ARM32: vmrs |
| 118 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 131 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
| 119 ; ARM32-OM1: movne [[R0]], #1 | 132 ; ARM32-OM1: movne [[R0]], #1 |
| 120 ; ARM32-O2: beq | 133 ; ARM32-O2: beq |
| 121 ; ARM32: vcmp.f64 | 134 ; ARM32: vcmp.f64 |
| 122 ; ARM32: vmrs | 135 ; ARM32: vmrs |
| 123 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 136 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
| 124 ; ARM32-OM1: movne [[R1]], #1 | 137 ; ARM32-OM1: movne [[R1]], #1 |
| 125 ; ARM32-O2: beq | 138 ; ARM32-O2: beq |
| 139 ; MIPS32-LABEL: fcmpNe |
| 140 ; MIPS32-LABEL: .LfcmpNe$entry |
| 141 ; MIPS32: c.eq.s |
| 142 ; MIPS32: movt |
| 143 ; MIPS32-LABEL: .LfcmpNe$if.end |
| 144 ; MIPS32: c.eq.d |
| 145 ; MIPS32: movt |
| 126 | 146 |
| 127 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { | 147 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { |
| 128 entry: | 148 entry: |
| 129 %cmp = fcmp ogt float %a, %b | 149 %cmp = fcmp ogt float %a, %b |
| 130 br i1 %cmp, label %if.then, label %if.end | 150 br i1 %cmp, label %if.then, label %if.end |
| 131 | 151 |
| 132 if.then: ; preds = %entry | 152 if.then: ; preds = %entry |
| 133 call void @func() | 153 call void @func() |
| 134 br label %if.end | 154 br label %if.end |
| 135 | 155 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 162 ; ARM32: vcmp.f32 | 182 ; ARM32: vcmp.f32 |
| 163 ; ARM32: vmrs | 183 ; ARM32: vmrs |
| 164 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 184 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
| 165 ; ARM32-OM1: movgt [[R0]], #1 | 185 ; ARM32-OM1: movgt [[R0]], #1 |
| 166 ; ARM32-O2: ble | 186 ; ARM32-O2: ble |
| 167 ; ARM32: vcmp.f64 | 187 ; ARM32: vcmp.f64 |
| 168 ; ARM32: vmrs | 188 ; ARM32: vmrs |
| 169 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 189 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
| 170 ; ARM32-OM1: movgt [[R1]], #1 | 190 ; ARM32-OM1: movgt [[R1]], #1 |
| 171 ; ARM32-O2: ble | 191 ; ARM32-O2: ble |
| 192 ; MIPS32-LABEL: fcmpGt |
| 193 ; MIPS32-LABEL: .LfcmpGt$entry |
| 194 ; MIPS32: c.ule.s |
| 195 ; MIPS32: movt |
| 196 ; MIPS32-LABEL: .LfcmpGt$if.end |
| 197 ; MIPS32: c.ule.d |
| 198 ; MIPS32: movt |
| 172 | 199 |
| 173 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { | 200 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { |
| 174 entry: | 201 entry: |
| 175 %cmp = fcmp ult float %a, %b | 202 %cmp = fcmp ult float %a, %b |
| 176 br i1 %cmp, label %if.end, label %if.then | 203 br i1 %cmp, label %if.end, label %if.then |
| 177 | 204 |
| 178 if.then: ; preds = %entry | 205 if.then: ; preds = %entry |
| 179 call void @func() | 206 call void @func() |
| 180 br label %if.end | 207 br label %if.end |
| 181 | 208 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 208 ; ARM32: vcmp.f32 | 235 ; ARM32: vcmp.f32 |
| 209 ; ARM32: vmrs | 236 ; ARM32: vmrs |
| 210 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 237 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
| 211 ; ARM32-OM1: movlt [[R0]], #1 | 238 ; ARM32-OM1: movlt [[R0]], #1 |
| 212 ; ARM32-O2: blt | 239 ; ARM32-O2: blt |
| 213 ; ARM32: vcmp.f64 | 240 ; ARM32: vcmp.f64 |
| 214 ; ARM32: vmrs | 241 ; ARM32: vmrs |
| 215 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 242 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
| 216 ; ARM32-OM1: movlt [[R1]], #1 | 243 ; ARM32-OM1: movlt [[R1]], #1 |
| 217 ; ARM32-O2: blt | 244 ; ARM32-O2: blt |
| 245 ; MIPS32-LABEL: fcmpGe |
| 246 ; MIPS32-LABEL: .LfcmpGe$entry |
| 247 ; MIPS32: c.ult.s |
| 248 ; MIPS32: movf |
| 249 ; MIPS32-LABEL: .LfcmpGe$if.end |
| 250 ; MIPS32: c.ult.d |
| 251 ; MIPS32: movf |
| 218 | 252 |
| 219 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { | 253 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { |
| 220 entry: | 254 entry: |
| 221 %cmp = fcmp olt float %a, %b | 255 %cmp = fcmp olt float %a, %b |
| 222 br i1 %cmp, label %if.then, label %if.end | 256 br i1 %cmp, label %if.then, label %if.end |
| 223 | 257 |
| 224 if.then: ; preds = %entry | 258 if.then: ; preds = %entry |
| 225 call void @func() | 259 call void @func() |
| 226 br label %if.end | 260 br label %if.end |
| 227 | 261 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 254 ; ARM32: vcmp.f32 | 288 ; ARM32: vcmp.f32 |
| 255 ; ARM32: vmrs | 289 ; ARM32: vmrs |
| 256 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 290 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
| 257 ; ARM32-OM1: movmi [[R0]], #1 | 291 ; ARM32-OM1: movmi [[R0]], #1 |
| 258 ; ARM32-O2: bpl | 292 ; ARM32-O2: bpl |
| 259 ; ARM32: vcmp.f64 | 293 ; ARM32: vcmp.f64 |
| 260 ; ARM32: vmrs | 294 ; ARM32: vmrs |
| 261 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 295 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
| 262 ; ARM32-OM1: movmi [[R1]], #1 | 296 ; ARM32-OM1: movmi [[R1]], #1 |
| 263 ; ARM32-O2: bpl | 297 ; ARM32-O2: bpl |
| 298 ; MIPS32-LABEL: fcmpLt |
| 299 ; MIPS32-LABEL: .LfcmpLt$entry |
| 300 ; MIPS32: c.olt.s |
| 301 ; MIPS32: movf |
| 302 ; MIPS32-LABEL: .LfcmpLt$if.end |
| 303 ; MIPS32: c.olt.d |
| 304 ; MIPS32: movf |
| 264 | 305 |
| 265 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { | 306 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { |
| 266 entry: | 307 entry: |
| 267 %cmp = fcmp ugt float %a, %b | 308 %cmp = fcmp ugt float %a, %b |
| 268 br i1 %cmp, label %if.end, label %if.then | 309 br i1 %cmp, label %if.end, label %if.then |
| 269 | 310 |
| 270 if.then: ; preds = %entry | 311 if.then: ; preds = %entry |
| 271 call void @func() | 312 call void @func() |
| 272 br label %if.end | 313 br label %if.end |
| 273 | 314 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 300 ; ARM32: vcmp.f32 | 341 ; ARM32: vcmp.f32 |
| 301 ; ARM32: vmrs | 342 ; ARM32: vmrs |
| 302 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 343 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
| 303 ; ARM32-OM1: movhi [[R0]], #1 | 344 ; ARM32-OM1: movhi [[R0]], #1 |
| 304 ; ARM32-O2: bhi | 345 ; ARM32-O2: bhi |
| 305 ; ARM32: vcmp.f64 | 346 ; ARM32: vcmp.f64 |
| 306 ; ARM32: vmrs | 347 ; ARM32: vmrs |
| 307 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 348 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
| 308 ; ARM32-OM1: movhi [[R1]], #1 | 349 ; ARM32-OM1: movhi [[R1]], #1 |
| 309 ; ARM32-O2: bhi | 350 ; ARM32-O2: bhi |
| 351 ; MIPS32-LABEL: fcmpLe |
| 352 ; MIPS32-LABEL: .LfcmpLe$entry |
| 353 ; MIPS32: c.ole.s |
| 354 ; MIPS32: movt |
| 355 ; MIPS32-LABEL: .LfcmpLe$if.end |
| 356 ; MIPS32: c.ole.d |
| 357 ; MIPS32: movt |
| 310 | 358 |
| 311 define internal i32 @fcmpFalseFloat(float %a, float %b) { | 359 define internal i32 @fcmpFalseFloat(float %a, float %b) { |
| 312 entry: | 360 entry: |
| 313 %cmp = fcmp false float %a, %b | 361 %cmp = fcmp false float %a, %b |
| 314 %cmp.ret_ext = zext i1 %cmp to i32 | 362 %cmp.ret_ext = zext i1 %cmp to i32 |
| 315 ret i32 %cmp.ret_ext | 363 ret i32 %cmp.ret_ext |
| 316 } | 364 } |
| 317 ; CHECK-LABEL: fcmpFalseFloat | 365 ; CHECK-LABEL: fcmpFalseFloat |
| 318 ; CHECK: mov {{.*}},0x0 | 366 ; CHECK: mov {{.*}},0x0 |
| 319 ; ARM32-LABEL: fcmpFalseFloat | 367 ; ARM32-LABEL: fcmpFalseFloat |
| 320 ; ARM32: mov [[R:r[0-9]+]], #0 | 368 ; ARM32: mov [[R:r[0-9]+]], #0 |
| 369 ; MIPS32-LABEL: fcmpFalseFloat |
| 370 ; MIPS32: addiu |
| 371 ; MIPS32: sb |
| 321 | 372 |
| 322 define internal i32 @fcmpFalseDouble(double %a, double %b) { | 373 define internal i32 @fcmpFalseDouble(double %a, double %b) { |
| 323 entry: | 374 entry: |
| 324 %cmp = fcmp false double %a, %b | 375 %cmp = fcmp false double %a, %b |
| 325 %cmp.ret_ext = zext i1 %cmp to i32 | 376 %cmp.ret_ext = zext i1 %cmp to i32 |
| 326 ret i32 %cmp.ret_ext | 377 ret i32 %cmp.ret_ext |
| 327 } | 378 } |
| 328 ; CHECK-LABEL: fcmpFalseDouble | 379 ; CHECK-LABEL: fcmpFalseDouble |
| 329 ; CHECK: mov {{.*}},0x0 | 380 ; CHECK: mov {{.*}},0x0 |
| 330 ; ARM32-LABEL: fcmpFalseDouble | 381 ; ARM32-LABEL: fcmpFalseDouble |
| 331 ; ARM32: mov [[R:r[0-9]+]], #0 | 382 ; ARM32: mov [[R:r[0-9]+]], #0 |
| 383 ; MIPS32-LABEL: fcmpFalseDouble |
| 384 ; MIPS32: addiu |
| 385 ; MIPS32: sb |
| 332 | 386 |
| 333 define internal i32 @fcmpOeqFloat(float %a, float %b) { | 387 define internal i32 @fcmpOeqFloat(float %a, float %b) { |
| 334 entry: | 388 entry: |
| 335 %cmp = fcmp oeq float %a, %b | 389 %cmp = fcmp oeq float %a, %b |
| 336 %cmp.ret_ext = zext i1 %cmp to i32 | 390 %cmp.ret_ext = zext i1 %cmp to i32 |
| 337 ret i32 %cmp.ret_ext | 391 ret i32 %cmp.ret_ext |
| 338 } | 392 } |
| 339 ; CHECK-LABEL: fcmpOeqFloat | 393 ; CHECK-LABEL: fcmpOeqFloat |
| 340 ; CHECK: ucomiss | 394 ; CHECK: ucomiss |
| 341 ; CHECK: jne | 395 ; CHECK: jne |
| 342 ; CHECK: jp | 396 ; CHECK: jp |
| 343 ; ARM32-LABEL: fcmpOeqFloat | 397 ; ARM32-LABEL: fcmpOeqFloat |
| 344 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 398 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 345 ; ARM32: vcmp.f32 | 399 ; ARM32: vcmp.f32 |
| 346 ; ARM32: vmrs | 400 ; ARM32: vmrs |
| 347 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 401 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 348 ; ARM32: moveq [[R]], #1 | 402 ; ARM32: moveq [[R]], #1 |
| 403 ; MIPS32-LABEL: fcmpOeqFloat |
| 404 ; MIPS32: c.eq.s |
| 405 ; MIPS32: movf |
| 349 | 406 |
| 350 define internal i32 @fcmpOeqDouble(double %a, double %b) { | 407 define internal i32 @fcmpOeqDouble(double %a, double %b) { |
| 351 entry: | 408 entry: |
| 352 %cmp = fcmp oeq double %a, %b | 409 %cmp = fcmp oeq double %a, %b |
| 353 %cmp.ret_ext = zext i1 %cmp to i32 | 410 %cmp.ret_ext = zext i1 %cmp to i32 |
| 354 ret i32 %cmp.ret_ext | 411 ret i32 %cmp.ret_ext |
| 355 } | 412 } |
| 356 ; CHECK-LABEL: fcmpOeqDouble | 413 ; CHECK-LABEL: fcmpOeqDouble |
| 357 ; CHECK: ucomisd | 414 ; CHECK: ucomisd |
| 358 ; CHECK: jne | 415 ; CHECK: jne |
| 359 ; CHECK: jp | 416 ; CHECK: jp |
| 360 ; ARM32-LABEL: fcmpOeqDouble | 417 ; ARM32-LABEL: fcmpOeqDouble |
| 361 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 418 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 362 ; ARM32: vcmp.f64 | 419 ; ARM32: vcmp.f64 |
| 363 ; ARM32: vmrs | 420 ; ARM32: vmrs |
| 364 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 421 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 365 ; ARM32: moveq [[R]], #1 | 422 ; ARM32: moveq [[R]], #1 |
| 423 ; MIPS32-LABEL: fcmpOeqDouble |
| 424 ; MIPS32: c.eq.d |
| 425 ; MIPS32: movf |
| 366 | 426 |
| 367 define internal i32 @fcmpOgtFloat(float %a, float %b) { | 427 define internal i32 @fcmpOgtFloat(float %a, float %b) { |
| 368 entry: | 428 entry: |
| 369 %cmp = fcmp ogt float %a, %b | 429 %cmp = fcmp ogt float %a, %b |
| 370 %cmp.ret_ext = zext i1 %cmp to i32 | 430 %cmp.ret_ext = zext i1 %cmp to i32 |
| 371 ret i32 %cmp.ret_ext | 431 ret i32 %cmp.ret_ext |
| 372 } | 432 } |
| 373 ; CHECK-LABEL: fcmpOgtFloat | 433 ; CHECK-LABEL: fcmpOgtFloat |
| 374 ; CHECK: ucomiss | 434 ; CHECK: ucomiss |
| 375 ; CHECK: seta | 435 ; CHECK: seta |
| 376 ; ARM32-LABEL: fcmpOgtFloat | 436 ; ARM32-LABEL: fcmpOgtFloat |
| 377 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 437 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 378 ; ARM32: vcmp.f32 | 438 ; ARM32: vcmp.f32 |
| 379 ; ARM32: vmrs | 439 ; ARM32: vmrs |
| 380 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 440 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 381 ; ARM32: movgt [[R]], #1 | 441 ; ARM32: movgt [[R]], #1 |
| 442 ; MIPS32-LABEL: fcmpOgtFloat |
| 443 ; MIPS32: c.ule.s |
| 444 ; MIPS32: movt |
| 382 | 445 |
| 383 define internal i32 @fcmpOgtDouble(double %a, double %b) { | 446 define internal i32 @fcmpOgtDouble(double %a, double %b) { |
| 384 entry: | 447 entry: |
| 385 %cmp = fcmp ogt double %a, %b | 448 %cmp = fcmp ogt double %a, %b |
| 386 %cmp.ret_ext = zext i1 %cmp to i32 | 449 %cmp.ret_ext = zext i1 %cmp to i32 |
| 387 ret i32 %cmp.ret_ext | 450 ret i32 %cmp.ret_ext |
| 388 } | 451 } |
| 389 ; CHECK-LABEL: fcmpOgtDouble | 452 ; CHECK-LABEL: fcmpOgtDouble |
| 390 ; CHECK: ucomisd | 453 ; CHECK: ucomisd |
| 391 ; CHECK: seta | 454 ; CHECK: seta |
| 392 ; ARM32-LABEL: fcmpOgtDouble | 455 ; ARM32-LABEL: fcmpOgtDouble |
| 393 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 456 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 394 ; ARM32: vcmp.f64 | 457 ; ARM32: vcmp.f64 |
| 395 ; ARM32: vmrs | 458 ; ARM32: vmrs |
| 396 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 459 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 397 ; ARM32: movgt [[R]], #1 | 460 ; ARM32: movgt [[R]], #1 |
| 461 ; MIPS32-LABEL: fcmpOgtDouble |
| 462 ; MIPS32: c.ule.d |
| 463 ; MIPS32: movt |
| 398 | 464 |
| 399 define internal i32 @fcmpOgeFloat(float %a, float %b) { | 465 define internal i32 @fcmpOgeFloat(float %a, float %b) { |
| 400 entry: | 466 entry: |
| 401 %cmp = fcmp oge float %a, %b | 467 %cmp = fcmp oge float %a, %b |
| 402 %cmp.ret_ext = zext i1 %cmp to i32 | 468 %cmp.ret_ext = zext i1 %cmp to i32 |
| 403 ret i32 %cmp.ret_ext | 469 ret i32 %cmp.ret_ext |
| 404 } | 470 } |
| 405 ; CHECK-LABEL: fcmpOgeFloat | 471 ; CHECK-LABEL: fcmpOgeFloat |
| 406 ; CHECK: ucomiss | 472 ; CHECK: ucomiss |
| 407 ; CHECK: setae | 473 ; CHECK: setae |
| 408 ; ARM32-LABEL: fcmpOgeFloat | 474 ; ARM32-LABEL: fcmpOgeFloat |
| 409 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 475 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 410 ; ARM32: vcmp.f32 | 476 ; ARM32: vcmp.f32 |
| 411 ; ARM32: vmrs | 477 ; ARM32: vmrs |
| 412 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 478 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 413 ; ARM32: movge [[R]], #1 | 479 ; ARM32: movge [[R]], #1 |
| 480 ; MIPS32-LABEL: fcmpOgeFloat |
| 481 ; MIPS32: c.ult.s |
| 482 ; MIPS32: movt |
| 414 | 483 |
| 415 define internal i32 @fcmpOgeDouble(double %a, double %b) { | 484 define internal i32 @fcmpOgeDouble(double %a, double %b) { |
| 416 entry: | 485 entry: |
| 417 %cmp = fcmp oge double %a, %b | 486 %cmp = fcmp oge double %a, %b |
| 418 %cmp.ret_ext = zext i1 %cmp to i32 | 487 %cmp.ret_ext = zext i1 %cmp to i32 |
| 419 ret i32 %cmp.ret_ext | 488 ret i32 %cmp.ret_ext |
| 420 } | 489 } |
| 421 ; CHECK-LABEL: fcmpOgeDouble | 490 ; CHECK-LABEL: fcmpOgeDouble |
| 422 ; CHECK: ucomisd | 491 ; CHECK: ucomisd |
| 423 ; CHECK: setae | 492 ; CHECK: setae |
| 424 ; ARM32-LABEL: fcmpOgeDouble | 493 ; ARM32-LABEL: fcmpOgeDouble |
| 425 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 494 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 426 ; ARM32: vcmp.f64 | 495 ; ARM32: vcmp.f64 |
| 427 ; ARM32: vmrs | 496 ; ARM32: vmrs |
| 428 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 497 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 429 ; ARM32: movge [[R]], #1 | 498 ; ARM32: movge [[R]], #1 |
| 499 ; MIPS32-LABEL: fcmpOgeDouble |
| 500 ; MIPS32: c.ult.d |
| 501 ; MIPS32: movt |
| 430 | 502 |
| 431 define internal i32 @fcmpOltFloat(float %a, float %b) { | 503 define internal i32 @fcmpOltFloat(float %a, float %b) { |
| 432 entry: | 504 entry: |
| 433 %cmp = fcmp olt float %a, %b | 505 %cmp = fcmp olt float %a, %b |
| 434 %cmp.ret_ext = zext i1 %cmp to i32 | 506 %cmp.ret_ext = zext i1 %cmp to i32 |
| 435 ret i32 %cmp.ret_ext | 507 ret i32 %cmp.ret_ext |
| 436 } | 508 } |
| 437 ; CHECK-LABEL: fcmpOltFloat | 509 ; CHECK-LABEL: fcmpOltFloat |
| 438 ; CHECK: ucomiss | 510 ; CHECK: ucomiss |
| 439 ; CHECK: seta | 511 ; CHECK: seta |
| 440 ; ARM32-LABEL: fcmpOltFloat | 512 ; ARM32-LABEL: fcmpOltFloat |
| 441 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 513 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 442 ; ARM32: vcmp.f32 | 514 ; ARM32: vcmp.f32 |
| 443 ; ARM32: vmrs | 515 ; ARM32: vmrs |
| 444 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 516 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 445 ; ARM32: movmi [[R]], #1 | 517 ; ARM32: movmi [[R]], #1 |
| 518 ; MIPS32-LABEL: fcmpOltFloat |
| 519 ; MIPS32: c.olt.s |
| 520 ; MIPS32: movf |
| 446 | 521 |
| 447 define internal i32 @fcmpOltDouble(double %a, double %b) { | 522 define internal i32 @fcmpOltDouble(double %a, double %b) { |
| 448 entry: | 523 entry: |
| 449 %cmp = fcmp olt double %a, %b | 524 %cmp = fcmp olt double %a, %b |
| 450 %cmp.ret_ext = zext i1 %cmp to i32 | 525 %cmp.ret_ext = zext i1 %cmp to i32 |
| 451 ret i32 %cmp.ret_ext | 526 ret i32 %cmp.ret_ext |
| 452 } | 527 } |
| 453 ; CHECK-LABEL: fcmpOltDouble | 528 ; CHECK-LABEL: fcmpOltDouble |
| 454 ; CHECK: ucomisd | 529 ; CHECK: ucomisd |
| 455 ; CHECK: seta | 530 ; CHECK: seta |
| 456 ; ARM32-LABEL: fcmpOltDouble | 531 ; ARM32-LABEL: fcmpOltDouble |
| 457 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 532 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 458 ; ARM32: vcmp.f64 | 533 ; ARM32: vcmp.f64 |
| 459 ; ARM32: vmrs | 534 ; ARM32: vmrs |
| 460 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 535 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 461 ; ARM32: movmi [[R]], #1 | 536 ; ARM32: movmi [[R]], #1 |
| 537 ; MIPS32-LABEL: fcmpOltDouble |
| 538 ; MIPS32: c.olt.d |
| 539 ; MIPS32: movf |
| 462 | 540 |
| 463 define internal i32 @fcmpOleFloat(float %a, float %b) { | 541 define internal i32 @fcmpOleFloat(float %a, float %b) { |
| 464 entry: | 542 entry: |
| 465 %cmp = fcmp ole float %a, %b | 543 %cmp = fcmp ole float %a, %b |
| 466 %cmp.ret_ext = zext i1 %cmp to i32 | 544 %cmp.ret_ext = zext i1 %cmp to i32 |
| 467 ret i32 %cmp.ret_ext | 545 ret i32 %cmp.ret_ext |
| 468 } | 546 } |
| 469 ; CHECK-LABEL: fcmpOleFloat | 547 ; CHECK-LABEL: fcmpOleFloat |
| 470 ; CHECK: ucomiss | 548 ; CHECK: ucomiss |
| 471 ; CHECK: setae | 549 ; CHECK: setae |
| 472 ; ARM32-LABEL: fcmpOleFloat | 550 ; ARM32-LABEL: fcmpOleFloat |
| 473 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 551 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 474 ; ARM32: vcmp.f32 | 552 ; ARM32: vcmp.f32 |
| 475 ; ARM32: vmrs | 553 ; ARM32: vmrs |
| 476 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 554 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 477 ; ARM32: movls [[R]], #1 | 555 ; ARM32: movls [[R]], #1 |
| 556 ; MIPS32-LABEL: fcmpOleFloat |
| 557 ; MIPS32: c.ole.s |
| 558 ; MIPS32: movf |
| 478 | 559 |
| 479 define internal i32 @fcmpOleDouble(double %a, double %b) { | 560 define internal i32 @fcmpOleDouble(double %a, double %b) { |
| 480 entry: | 561 entry: |
| 481 %cmp = fcmp ole double %a, %b | 562 %cmp = fcmp ole double %a, %b |
| 482 %cmp.ret_ext = zext i1 %cmp to i32 | 563 %cmp.ret_ext = zext i1 %cmp to i32 |
| 483 ret i32 %cmp.ret_ext | 564 ret i32 %cmp.ret_ext |
| 484 } | 565 } |
| 485 ; CHECK-LABEL: fcmpOleDouble | 566 ; CHECK-LABEL: fcmpOleDouble |
| 486 ; CHECK: ucomisd | 567 ; CHECK: ucomisd |
| 487 ; CHECK: setae | 568 ; CHECK: setae |
| 488 ; ARM32-LABEL: fcmpOleDouble | 569 ; ARM32-LABEL: fcmpOleDouble |
| 489 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 570 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 490 ; ARM32: vcmp.f64 | 571 ; ARM32: vcmp.f64 |
| 491 ; ARM32: vmrs | 572 ; ARM32: vmrs |
| 492 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 573 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 493 ; ARM32: movls [[R]], #1 | 574 ; ARM32: movls [[R]], #1 |
| 575 ; MIPS32-LABEL: fcmpOleDouble |
| 576 ; MIPS32: c.ole.d |
| 577 ; MIPS32: movf |
| 494 | 578 |
| 495 define internal i32 @fcmpOneFloat(float %a, float %b) { | 579 define internal i32 @fcmpOneFloat(float %a, float %b) { |
| 496 entry: | 580 entry: |
| 497 %cmp = fcmp one float %a, %b | 581 %cmp = fcmp one float %a, %b |
| 498 %cmp.ret_ext = zext i1 %cmp to i32 | 582 %cmp.ret_ext = zext i1 %cmp to i32 |
| 499 ret i32 %cmp.ret_ext | 583 ret i32 %cmp.ret_ext |
| 500 } | 584 } |
| 501 ; CHECK-LABEL: fcmpOneFloat | 585 ; CHECK-LABEL: fcmpOneFloat |
| 502 ; CHECK: ucomiss | 586 ; CHECK: ucomiss |
| 503 ; CHECK: setne | 587 ; CHECK: setne |
| 504 ; ARM32-LABEL: fcmpOneFloat | 588 ; ARM32-LABEL: fcmpOneFloat |
| 505 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 589 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 506 ; ARM32: vcmp.f32 | 590 ; ARM32: vcmp.f32 |
| 507 ; ARM32: vmrs | 591 ; ARM32: vmrs |
| 508 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 592 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 509 ; ARM32: movmi [[R]], #1 | 593 ; ARM32: movmi [[R]], #1 |
| 510 ; ARM32: movgt [[R]], #1 | 594 ; ARM32: movgt [[R]], #1 |
| 595 ; MIPS32-LABEL: fcmpOneFloat |
| 596 ; MIPS32: c.ueq.s |
| 597 ; MIPS32: movt |
| 511 | 598 |
| 512 define internal i32 @fcmpOneDouble(double %a, double %b) { | 599 define internal i32 @fcmpOneDouble(double %a, double %b) { |
| 513 entry: | 600 entry: |
| 514 %cmp = fcmp one double %a, %b | 601 %cmp = fcmp one double %a, %b |
| 515 %cmp.ret_ext = zext i1 %cmp to i32 | 602 %cmp.ret_ext = zext i1 %cmp to i32 |
| 516 ret i32 %cmp.ret_ext | 603 ret i32 %cmp.ret_ext |
| 517 } | 604 } |
| 518 ; CHECK-LABEL: fcmpOneDouble | 605 ; CHECK-LABEL: fcmpOneDouble |
| 519 ; CHECK: ucomisd | 606 ; CHECK: ucomisd |
| 520 ; CHECK: setne | 607 ; CHECK: setne |
| 521 ; ARM32-LABEL: fcmpOneDouble | 608 ; ARM32-LABEL: fcmpOneDouble |
| 522 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 609 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 523 ; ARM32: vcmp.f64 | 610 ; ARM32: vcmp.f64 |
| 524 ; ARM32: vmrs | 611 ; ARM32: vmrs |
| 525 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 612 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 526 ; ARM32: movmi [[R]], #1 | 613 ; ARM32: movmi [[R]], #1 |
| 527 ; ARM32: movgt [[R]], #1 | 614 ; ARM32: movgt [[R]], #1 |
| 615 ; MIPS32-LABEL: fcmpOneDouble |
| 616 ; MIPS32: c.ueq.d |
| 617 ; MIPS32: movt |
| 528 | 618 |
| 529 define internal i32 @fcmpOrdFloat(float %a, float %b) { | 619 define internal i32 @fcmpOrdFloat(float %a, float %b) { |
| 530 entry: | 620 entry: |
| 531 %cmp = fcmp ord float %a, %b | 621 %cmp = fcmp ord float %a, %b |
| 532 %cmp.ret_ext = zext i1 %cmp to i32 | 622 %cmp.ret_ext = zext i1 %cmp to i32 |
| 533 ret i32 %cmp.ret_ext | 623 ret i32 %cmp.ret_ext |
| 534 } | 624 } |
| 535 ; CHECK-LABEL: fcmpOrdFloat | 625 ; CHECK-LABEL: fcmpOrdFloat |
| 536 ; CHECK: ucomiss | 626 ; CHECK: ucomiss |
| 537 ; CHECK: setnp | 627 ; CHECK: setnp |
| 538 ; ARM32-LABEL: fcmpOrdFloat | 628 ; ARM32-LABEL: fcmpOrdFloat |
| 539 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 629 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 540 ; ARM32: vcmp.f32 | 630 ; ARM32: vcmp.f32 |
| 541 ; ARM32: vmrs | 631 ; ARM32: vmrs |
| 542 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 632 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 543 ; ARM32: movvc [[R]], #1 | 633 ; ARM32: movvc [[R]], #1 |
| 634 ; MIPS32-LABEL: fcmpOrdFloat |
| 635 ; MIPS32: c.un.s |
| 636 ; MIPS32: movt |
| 544 | 637 |
| 545 define internal i32 @fcmpOrdDouble(double %a, double %b) { | 638 define internal i32 @fcmpOrdDouble(double %a, double %b) { |
| 546 entry: | 639 entry: |
| 547 %cmp = fcmp ord double %a, %b | 640 %cmp = fcmp ord double %a, %b |
| 548 %cmp.ret_ext = zext i1 %cmp to i32 | 641 %cmp.ret_ext = zext i1 %cmp to i32 |
| 549 ret i32 %cmp.ret_ext | 642 ret i32 %cmp.ret_ext |
| 550 } | 643 } |
| 551 ; CHECK-LABEL: fcmpOrdDouble | 644 ; CHECK-LABEL: fcmpOrdDouble |
| 552 ; CHECK: ucomisd | 645 ; CHECK: ucomisd |
| 553 ; CHECK: setnp | 646 ; CHECK: setnp |
| 554 ; ARM32-LABEL: fcmpOrdDouble | 647 ; ARM32-LABEL: fcmpOrdDouble |
| 555 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 648 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 556 ; ARM32: vcmp.f64 | 649 ; ARM32: vcmp.f64 |
| 557 ; ARM32: vmrs | 650 ; ARM32: vmrs |
| 558 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 651 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 559 ; ARM32: movvc [[R]], #1 | 652 ; ARM32: movvc [[R]], #1 |
| 653 ; MIPS32-LABEL: fcmpOrdDouble |
| 654 ; MIPS32: c.un.d |
| 655 ; MIPS32: movt |
| 560 | 656 |
| 561 define internal i32 @fcmpUeqFloat(float %a, float %b) { | 657 define internal i32 @fcmpUeqFloat(float %a, float %b) { |
| 562 entry: | 658 entry: |
| 563 %cmp = fcmp ueq float %a, %b | 659 %cmp = fcmp ueq float %a, %b |
| 564 %cmp.ret_ext = zext i1 %cmp to i32 | 660 %cmp.ret_ext = zext i1 %cmp to i32 |
| 565 ret i32 %cmp.ret_ext | 661 ret i32 %cmp.ret_ext |
| 566 } | 662 } |
| 567 ; CHECK-LABEL: fcmpUeqFloat | 663 ; CHECK-LABEL: fcmpUeqFloat |
| 568 ; CHECK: ucomiss | 664 ; CHECK: ucomiss |
| 569 ; CHECK: sete | 665 ; CHECK: sete |
| 570 ; ARM32-LABEL: fcmpUeqFloat | 666 ; ARM32-LABEL: fcmpUeqFloat |
| 571 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 667 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 572 ; ARM32: vcmp.f32 | 668 ; ARM32: vcmp.f32 |
| 573 ; ARM32: vmrs | 669 ; ARM32: vmrs |
| 574 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 670 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 575 ; ARM32: moveq [[R]], #1 | 671 ; ARM32: moveq [[R]], #1 |
| 576 ; ARM32: movvs [[R]], #1 | 672 ; ARM32: movvs [[R]], #1 |
| 673 ; MIPS32-LABEL: fcmpUeqFloat |
| 674 ; MIPS32: c.ueq.s |
| 675 ; MIPS32: movf |
| 577 | 676 |
| 578 define internal i32 @fcmpUeqDouble(double %a, double %b) { | 677 define internal i32 @fcmpUeqDouble(double %a, double %b) { |
| 579 entry: | 678 entry: |
| 580 %cmp = fcmp ueq double %a, %b | 679 %cmp = fcmp ueq double %a, %b |
| 581 %cmp.ret_ext = zext i1 %cmp to i32 | 680 %cmp.ret_ext = zext i1 %cmp to i32 |
| 582 ret i32 %cmp.ret_ext | 681 ret i32 %cmp.ret_ext |
| 583 } | 682 } |
| 584 ; CHECK-LABEL: fcmpUeqDouble | 683 ; CHECK-LABEL: fcmpUeqDouble |
| 585 ; CHECK: ucomisd | 684 ; CHECK: ucomisd |
| 586 ; CHECK: sete | 685 ; CHECK: sete |
| 587 ; ARM32-LABEL: fcmpUeqDouble | 686 ; ARM32-LABEL: fcmpUeqDouble |
| 588 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 687 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 589 ; ARM32: vcmp.f64 | 688 ; ARM32: vcmp.f64 |
| 590 ; ARM32: vmrs | 689 ; ARM32: vmrs |
| 591 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 690 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 592 ; ARM32: moveq [[R]], #1 | 691 ; ARM32: moveq [[R]], #1 |
| 593 ; ARM32: movvs [[R]], #1 | 692 ; ARM32: movvs [[R]], #1 |
| 693 ; MIPS32-LABEL: fcmpUeqDouble |
| 694 ; MIPS32: c.ueq.d |
| 695 ; MIPS32: movf |
| 594 | 696 |
| 595 define internal i32 @fcmpUgtFloat(float %a, float %b) { | 697 define internal i32 @fcmpUgtFloat(float %a, float %b) { |
| 596 entry: | 698 entry: |
| 597 %cmp = fcmp ugt float %a, %b | 699 %cmp = fcmp ugt float %a, %b |
| 598 %cmp.ret_ext = zext i1 %cmp to i32 | 700 %cmp.ret_ext = zext i1 %cmp to i32 |
| 599 ret i32 %cmp.ret_ext | 701 ret i32 %cmp.ret_ext |
| 600 } | 702 } |
| 601 ; CHECK-LABEL: fcmpUgtFloat | 703 ; CHECK-LABEL: fcmpUgtFloat |
| 602 ; CHECK: ucomiss | 704 ; CHECK: ucomiss |
| 603 ; CHECK: setb | 705 ; CHECK: setb |
| 604 ; ARM32-LABEL: fcmpUgtFloat | 706 ; ARM32-LABEL: fcmpUgtFloat |
| 605 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 707 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 606 ; ARM32: vcmp.f32 | 708 ; ARM32: vcmp.f32 |
| 607 ; ARM32: vmrs | 709 ; ARM32: vmrs |
| 608 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 710 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 609 ; ARM32: movhi [[R]], #1 | 711 ; ARM32: movhi [[R]], #1 |
| 712 ; MIPS32-LABEL: fcmpUgtFloat |
| 713 ; MIPS32: c.ole.s |
| 714 ; MIPS32: movt |
| 610 | 715 |
| 611 define internal i32 @fcmpUgtDouble(double %a, double %b) { | 716 define internal i32 @fcmpUgtDouble(double %a, double %b) { |
| 612 entry: | 717 entry: |
| 613 %cmp = fcmp ugt double %a, %b | 718 %cmp = fcmp ugt double %a, %b |
| 614 %cmp.ret_ext = zext i1 %cmp to i32 | 719 %cmp.ret_ext = zext i1 %cmp to i32 |
| 615 ret i32 %cmp.ret_ext | 720 ret i32 %cmp.ret_ext |
| 616 } | 721 } |
| 617 ; CHECK-LABEL: fcmpUgtDouble | 722 ; CHECK-LABEL: fcmpUgtDouble |
| 618 ; CHECK: ucomisd | 723 ; CHECK: ucomisd |
| 619 ; CHECK: setb | 724 ; CHECK: setb |
| 620 ; ARM32-LABEL: fcmpUgtDouble | 725 ; ARM32-LABEL: fcmpUgtDouble |
| 621 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 726 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 622 ; ARM32: vcmp.f64 | 727 ; ARM32: vcmp.f64 |
| 623 ; ARM32: vmrs | 728 ; ARM32: vmrs |
| 624 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 729 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 625 ; ARM32: movhi [[R]], #1 | 730 ; ARM32: movhi [[R]], #1 |
| 731 ; MIPS32-LABEL: fcmpUgtDouble |
| 732 ; MIPS32: c.ole.d |
| 733 ; MIPS32: movt |
| 626 | 734 |
| 627 define internal i32 @fcmpUgeFloat(float %a, float %b) { | 735 define internal i32 @fcmpUgeFloat(float %a, float %b) { |
| 628 entry: | 736 entry: |
| 629 %cmp = fcmp uge float %a, %b | 737 %cmp = fcmp uge float %a, %b |
| 630 %cmp.ret_ext = zext i1 %cmp to i32 | 738 %cmp.ret_ext = zext i1 %cmp to i32 |
| 631 ret i32 %cmp.ret_ext | 739 ret i32 %cmp.ret_ext |
| 632 } | 740 } |
| 633 ; CHECK-LABEL: fcmpUgeFloat | 741 ; CHECK-LABEL: fcmpUgeFloat |
| 634 ; CHECK: ucomiss | 742 ; CHECK: ucomiss |
| 635 ; CHECK: setbe | 743 ; CHECK: setbe |
| 636 ; ARM32-LABEL: fcmpUgeFloat | 744 ; ARM32-LABEL: fcmpUgeFloat |
| 637 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 745 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 638 ; ARM32: vcmp.f32 | 746 ; ARM32: vcmp.f32 |
| 639 ; ARM32: vmrs | 747 ; ARM32: vmrs |
| 640 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 748 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 641 ; ARM32: movpl [[R]], #1 | 749 ; ARM32: movpl [[R]], #1 |
| 750 ; MIPS32-LABEL: fcmpUgeFloat |
| 751 ; MIPS32: c.olt.s |
| 752 ; MIPS32: movt |
| 642 | 753 |
| 643 define internal i32 @fcmpUgeDouble(double %a, double %b) { | 754 define internal i32 @fcmpUgeDouble(double %a, double %b) { |
| 644 entry: | 755 entry: |
| 645 %cmp = fcmp uge double %a, %b | 756 %cmp = fcmp uge double %a, %b |
| 646 %cmp.ret_ext = zext i1 %cmp to i32 | 757 %cmp.ret_ext = zext i1 %cmp to i32 |
| 647 ret i32 %cmp.ret_ext | 758 ret i32 %cmp.ret_ext |
| 648 } | 759 } |
| 649 ; CHECK-LABEL: fcmpUgeDouble | 760 ; CHECK-LABEL: fcmpUgeDouble |
| 650 ; CHECK: ucomisd | 761 ; CHECK: ucomisd |
| 651 ; CHECK: setbe | 762 ; CHECK: setbe |
| 652 ; ARM32-LABEL: fcmpUgeDouble | 763 ; ARM32-LABEL: fcmpUgeDouble |
| 653 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 764 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 654 ; ARM32: vcmp.f64 | 765 ; ARM32: vcmp.f64 |
| 655 ; ARM32: vmrs | 766 ; ARM32: vmrs |
| 656 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 767 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 657 ; ARM32: movpl [[R]], #1 | 768 ; ARM32: movpl [[R]], #1 |
| 769 ; MIPS32-LABEL: fcmpUgeDouble |
| 770 ; MIPS32: c.olt.d |
| 771 ; MIPS32: movt |
| 658 | 772 |
| 659 define internal i32 @fcmpUltFloat(float %a, float %b) { | 773 define internal i32 @fcmpUltFloat(float %a, float %b) { |
| 660 entry: | 774 entry: |
| 661 %cmp = fcmp ult float %a, %b | 775 %cmp = fcmp ult float %a, %b |
| 662 %cmp.ret_ext = zext i1 %cmp to i32 | 776 %cmp.ret_ext = zext i1 %cmp to i32 |
| 663 ret i32 %cmp.ret_ext | 777 ret i32 %cmp.ret_ext |
| 664 } | 778 } |
| 665 ; CHECK-LABEL: fcmpUltFloat | 779 ; CHECK-LABEL: fcmpUltFloat |
| 666 ; CHECK: ucomiss | 780 ; CHECK: ucomiss |
| 667 ; CHECK: setb | 781 ; CHECK: setb |
| 668 ; ARM32-LABEL: fcmpUltFloat | 782 ; ARM32-LABEL: fcmpUltFloat |
| 669 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 783 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 670 ; ARM32: vcmp.f32 | 784 ; ARM32: vcmp.f32 |
| 671 ; ARM32: vmrs | 785 ; ARM32: vmrs |
| 672 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 786 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 673 ; ARM32: movlt [[R]], #1 | 787 ; ARM32: movlt [[R]], #1 |
| 788 ; MIPS32-LABEL: fcmpUltFloat |
| 789 ; MIPS32: c.ult.s |
| 790 ; MIPS32: movf |
| 674 | 791 |
| 675 define internal i32 @fcmpUltDouble(double %a, double %b) { | 792 define internal i32 @fcmpUltDouble(double %a, double %b) { |
| 676 entry: | 793 entry: |
| 677 %cmp = fcmp ult double %a, %b | 794 %cmp = fcmp ult double %a, %b |
| 678 %cmp.ret_ext = zext i1 %cmp to i32 | 795 %cmp.ret_ext = zext i1 %cmp to i32 |
| 679 ret i32 %cmp.ret_ext | 796 ret i32 %cmp.ret_ext |
| 680 } | 797 } |
| 681 ; CHECK-LABEL: fcmpUltDouble | 798 ; CHECK-LABEL: fcmpUltDouble |
| 682 ; CHECK: ucomisd | 799 ; CHECK: ucomisd |
| 683 ; CHECK: setb | 800 ; CHECK: setb |
| 684 ; ARM32-LABEL: fcmpUltDouble | 801 ; ARM32-LABEL: fcmpUltDouble |
| 685 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 802 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 686 ; ARM32: vcmp.f64 | 803 ; ARM32: vcmp.f64 |
| 687 ; ARM32: vmrs | 804 ; ARM32: vmrs |
| 688 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 805 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 689 ; ARM32: movlt [[R]], #1 | 806 ; ARM32: movlt [[R]], #1 |
| 807 ; MIPS32-LABEL: fcmpUltDouble |
| 808 ; MIPS32: c.ult.d |
| 809 ; MIPS32: movf |
| 690 | 810 |
| 691 define internal i32 @fcmpUleFloat(float %a, float %b) { | 811 define internal i32 @fcmpUleFloat(float %a, float %b) { |
| 692 entry: | 812 entry: |
| 693 %cmp = fcmp ule float %a, %b | 813 %cmp = fcmp ule float %a, %b |
| 694 %cmp.ret_ext = zext i1 %cmp to i32 | 814 %cmp.ret_ext = zext i1 %cmp to i32 |
| 695 ret i32 %cmp.ret_ext | 815 ret i32 %cmp.ret_ext |
| 696 } | 816 } |
| 697 ; CHECK-LABEL: fcmpUleFloat | 817 ; CHECK-LABEL: fcmpUleFloat |
| 698 ; CHECK: ucomiss | 818 ; CHECK: ucomiss |
| 699 ; CHECK: setbe | 819 ; CHECK: setbe |
| 700 ; ARM32-LABEL: fcmpUleFloat | 820 ; ARM32-LABEL: fcmpUleFloat |
| 701 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 821 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 702 ; ARM32: vcmp.f32 | 822 ; ARM32: vcmp.f32 |
| 703 ; ARM32: vmrs | 823 ; ARM32: vmrs |
| 704 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 824 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 705 ; ARM32: movle [[R]], #1 | 825 ; ARM32: movle [[R]], #1 |
| 826 ; MIPS32-LABEL: fcmpUleFloat |
| 827 ; MIPS32: c.ule.s |
| 828 ; MIPS32: movf |
| 706 | 829 |
| 707 define internal i32 @fcmpUleDouble(double %a, double %b) { | 830 define internal i32 @fcmpUleDouble(double %a, double %b) { |
| 708 entry: | 831 entry: |
| 709 %cmp = fcmp ule double %a, %b | 832 %cmp = fcmp ule double %a, %b |
| 710 %cmp.ret_ext = zext i1 %cmp to i32 | 833 %cmp.ret_ext = zext i1 %cmp to i32 |
| 711 ret i32 %cmp.ret_ext | 834 ret i32 %cmp.ret_ext |
| 712 } | 835 } |
| 713 ; CHECK-LABEL: fcmpUleDouble | 836 ; CHECK-LABEL: fcmpUleDouble |
| 714 ; CHECK: ucomisd | 837 ; CHECK: ucomisd |
| 715 ; CHECK: setbe | 838 ; CHECK: setbe |
| 716 ; ARM32-LABEL: fcmpUleDouble | 839 ; ARM32-LABEL: fcmpUleDouble |
| 717 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 840 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 718 ; ARM32: vcmp.f64 | 841 ; ARM32: vcmp.f64 |
| 719 ; ARM32: vmrs | 842 ; ARM32: vmrs |
| 720 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 843 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 721 ; ARM32: movle [[R]], #1 | 844 ; ARM32: movle [[R]], #1 |
| 845 ; MIPS32-LABEL: fcmpUleDouble |
| 846 ; MIPS32: c.ule.d |
| 847 ; MIPS32: movf |
| 722 | 848 |
| 723 define internal i32 @fcmpUneFloat(float %a, float %b) { | 849 define internal i32 @fcmpUneFloat(float %a, float %b) { |
| 724 entry: | 850 entry: |
| 725 %cmp = fcmp une float %a, %b | 851 %cmp = fcmp une float %a, %b |
| 726 %cmp.ret_ext = zext i1 %cmp to i32 | 852 %cmp.ret_ext = zext i1 %cmp to i32 |
| 727 ret i32 %cmp.ret_ext | 853 ret i32 %cmp.ret_ext |
| 728 } | 854 } |
| 729 ; CHECK-LABEL: fcmpUneFloat | 855 ; CHECK-LABEL: fcmpUneFloat |
| 730 ; CHECK: ucomiss | 856 ; CHECK: ucomiss |
| 731 ; CHECK: jne | 857 ; CHECK: jne |
| 732 ; CHECK: jp | 858 ; CHECK: jp |
| 733 ; ARM32-LABEL: fcmpUneFloat | 859 ; ARM32-LABEL: fcmpUneFloat |
| 734 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 860 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 735 ; ARM32: vcmp.f32 | 861 ; ARM32: vcmp.f32 |
| 736 ; ARM32: vmrs | 862 ; ARM32: vmrs |
| 737 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 863 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 738 ; ARM32: movne [[R]], #1 | 864 ; ARM32: movne [[R]], #1 |
| 865 ; MIPS32-LABEL: fcmpUneFloat |
| 866 ; MIPS32: c.eq.s |
| 867 ; MIPS32: movt |
| 739 | 868 |
| 740 define internal i32 @fcmpUneDouble(double %a, double %b) { | 869 define internal i32 @fcmpUneDouble(double %a, double %b) { |
| 741 entry: | 870 entry: |
| 742 %cmp = fcmp une double %a, %b | 871 %cmp = fcmp une double %a, %b |
| 743 %cmp.ret_ext = zext i1 %cmp to i32 | 872 %cmp.ret_ext = zext i1 %cmp to i32 |
| 744 ret i32 %cmp.ret_ext | 873 ret i32 %cmp.ret_ext |
| 745 } | 874 } |
| 746 ; CHECK-LABEL: fcmpUneDouble | 875 ; CHECK-LABEL: fcmpUneDouble |
| 747 ; CHECK: ucomisd | 876 ; CHECK: ucomisd |
| 748 ; CHECK: jne | 877 ; CHECK: jne |
| 749 ; CHECK: jp | 878 ; CHECK: jp |
| 750 ; ARM32-LABEL: fcmpUneDouble | 879 ; ARM32-LABEL: fcmpUneDouble |
| 751 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 880 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 752 ; ARM32: vcmp.f64 | 881 ; ARM32: vcmp.f64 |
| 753 ; ARM32: vmrs | 882 ; ARM32: vmrs |
| 754 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 883 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 755 ; ARM32: movne [[R]], #1 | 884 ; ARM32: movne [[R]], #1 |
| 885 ; MIPS32-LABEL: fcmpUneDouble |
| 886 ; MIPS32: c.eq.d |
| 887 ; MIPS32: movt |
| 756 | 888 |
| 757 define internal i32 @fcmpUnoFloat(float %a, float %b) { | 889 define internal i32 @fcmpUnoFloat(float %a, float %b) { |
| 758 entry: | 890 entry: |
| 759 %cmp = fcmp uno float %a, %b | 891 %cmp = fcmp uno float %a, %b |
| 760 %cmp.ret_ext = zext i1 %cmp to i32 | 892 %cmp.ret_ext = zext i1 %cmp to i32 |
| 761 ret i32 %cmp.ret_ext | 893 ret i32 %cmp.ret_ext |
| 762 } | 894 } |
| 763 ; CHECK-LABEL: fcmpUnoFloat | 895 ; CHECK-LABEL: fcmpUnoFloat |
| 764 ; CHECK: ucomiss | 896 ; CHECK: ucomiss |
| 765 ; CHECK: setp | 897 ; CHECK: setp |
| 766 ; ARM32-LABEL: fcmpUnoFloat | 898 ; ARM32-LABEL: fcmpUnoFloat |
| 767 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 899 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 768 ; ARM32: vcmp.f32 | 900 ; ARM32: vcmp.f32 |
| 769 ; ARM32: vmrs | 901 ; ARM32: vmrs |
| 770 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 902 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 771 ; ARM32: movvs [[R]], #1 | 903 ; ARM32: movvs [[R]], #1 |
| 904 ; MIPS32-LABEL: fcmpUnoFloat |
| 905 ; MIPS32: c.un.s |
| 906 ; MIPS32: movf |
| 772 | 907 |
| 773 define internal i32 @fcmpUnoDouble(double %a, double %b) { | 908 define internal i32 @fcmpUnoDouble(double %a, double %b) { |
| 774 entry: | 909 entry: |
| 775 %cmp = fcmp uno double %a, %b | 910 %cmp = fcmp uno double %a, %b |
| 776 %cmp.ret_ext = zext i1 %cmp to i32 | 911 %cmp.ret_ext = zext i1 %cmp to i32 |
| 777 ret i32 %cmp.ret_ext | 912 ret i32 %cmp.ret_ext |
| 778 } | 913 } |
| 779 ; CHECK-LABEL: fcmpUnoDouble | 914 ; CHECK-LABEL: fcmpUnoDouble |
| 780 ; CHECK: ucomisd | 915 ; CHECK: ucomisd |
| 781 ; CHECK: setp | 916 ; CHECK: setp |
| 782 ; ARM32-LABEL: fcmpUnoDouble | 917 ; ARM32-LABEL: fcmpUnoDouble |
| 783 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 918 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
| 784 ; ARM32: vcmp.f64 | 919 ; ARM32: vcmp.f64 |
| 785 ; ARM32: vmrs | 920 ; ARM32: vmrs |
| 786 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 921 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
| 787 ; ARM32: movvs [[R]], #1 | 922 ; ARM32: movvs [[R]], #1 |
| 923 ; MIPS32-LABEL: fcmpUnoDouble |
| 924 ; MIPS32: c.un.d |
| 925 ; MIPS32: movf |
| 788 | 926 |
| 789 define internal i32 @fcmpTrueFloat(float %a, float %b) { | 927 define internal i32 @fcmpTrueFloat(float %a, float %b) { |
| 790 entry: | 928 entry: |
| 791 %cmp = fcmp true float %a, %b | 929 %cmp = fcmp true float %a, %b |
| 792 %cmp.ret_ext = zext i1 %cmp to i32 | 930 %cmp.ret_ext = zext i1 %cmp to i32 |
| 793 ret i32 %cmp.ret_ext | 931 ret i32 %cmp.ret_ext |
| 794 } | 932 } |
| 795 ; CHECK-LABEL: fcmpTrueFloat | 933 ; CHECK-LABEL: fcmpTrueFloat |
| 796 ; CHECK: mov {{.*}},0x1 | 934 ; CHECK: mov {{.*}},0x1 |
| 797 ; ARM32-LABEL: fcmpTrueFloat | 935 ; ARM32-LABEL: fcmpTrueFloat |
| 798 ; ARM32: mov {{r[0-9]+}}, #1 | 936 ; ARM32: mov {{r[0-9]+}}, #1 |
| 937 ; MIPS32-LABEL: fcmpTrueFloat |
| 938 ; MIPS32: addiu |
| 939 ; MIPS32: sb |
| 799 | 940 |
| 800 define internal i32 @fcmpTrueDouble(double %a, double %b) { | 941 define internal i32 @fcmpTrueDouble(double %a, double %b) { |
| 801 entry: | 942 entry: |
| 802 %cmp = fcmp true double %a, %b | 943 %cmp = fcmp true double %a, %b |
| 803 %cmp.ret_ext = zext i1 %cmp to i32 | 944 %cmp.ret_ext = zext i1 %cmp to i32 |
| 804 ret i32 %cmp.ret_ext | 945 ret i32 %cmp.ret_ext |
| 805 } | 946 } |
| 806 ; CHECK-LABEL: fcmpTrueDouble | 947 ; CHECK-LABEL: fcmpTrueDouble |
| 807 ; CHECK: mov {{.*}},0x1 | 948 ; CHECK: mov {{.*}},0x1 |
| 808 ; ARM32-LABEL: fcmpTrueDouble | 949 ; ARM32-LABEL: fcmpTrueDouble |
| 809 ; ARM32: mov {{r[0-9]+}}, #1 | 950 ; ARM32: mov {{r[0-9]+}}, #1 |
| 951 ; MIPS32-LABEL: fcmpTrueDouble |
| 952 ; MIPS32: addiu |
| 953 ; MIPS32: sb |
| 810 | 954 |
| 811 define internal float @selectFloatVarVar(float %a, float %b) { | 955 define internal float @selectFloatVarVar(float %a, float %b) { |
| 812 entry: | 956 entry: |
| 813 %cmp = fcmp olt float %a, %b | 957 %cmp = fcmp olt float %a, %b |
| 814 %cond = select i1 %cmp, float %a, float %b | 958 %cond = select i1 %cmp, float %a, float %b |
| 815 ret float %cond | 959 ret float %cond |
| 816 } | 960 } |
| 817 ; CHECK-LABEL: selectFloatVarVar | 961 ; CHECK-LABEL: selectFloatVarVar |
| 818 ; CHECK: movss | 962 ; CHECK: movss |
| 819 ; CHECK: ucomiss | 963 ; CHECK: ucomiss |
| (...skipping 14 matching lines...) Expand all Loading... |
| 834 ; CHECK-LABEL: selectDoubleVarVar | 978 ; CHECK-LABEL: selectDoubleVarVar |
| 835 ; CHECK: movsd | 979 ; CHECK: movsd |
| 836 ; CHECK: ucomisd | 980 ; CHECK: ucomisd |
| 837 ; CHECK: ja | 981 ; CHECK: ja |
| 838 ; CHECK: movsd | 982 ; CHECK: movsd |
| 839 ; ARM32-LABEL: selectDoubleVarVar | 983 ; ARM32-LABEL: selectDoubleVarVar |
| 840 ; ARM32: vcmp.f64 | 984 ; ARM32: vcmp.f64 |
| 841 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} | 985 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} |
| 842 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} | 986 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} |
| 843 ; ARM32: bx | 987 ; ARM32: bx |
| OLD | NEW |