| OLD | NEW |
| 1 ; This tries to be a comprehensive test of i64 operations, in | 1 ; This tries to be a comprehensive test of i64 operations, in |
| 2 ; particular the patterns for lowering i64 operations into constituent | 2 ; particular the patterns for lowering i64 operations into constituent |
| 3 ; i32 operations on x86-32. | 3 ; i32 operations on x86-32. |
| 4 | 4 |
| 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ | 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 6 ; RUN: | FileCheck %s | 6 ; RUN: --target x8632 -i %s --args -O2 \ |
| 7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ | 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 8 ; RUN: | FileCheck --check-prefix=OPTM1 %s | 8 |
| 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 10 ; RUN: --target x8632 -i %s --args -Om1 \ |
| 11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s |
| 12 |
| 13 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) |
| 14 ; once enough infrastructure is in. Also, switch to --filetype=obj |
| 15 ; when possible. |
| 16 ; RUN: %if --need=target_ARM32 --command %p2i --filetype=asm --assemble \ |
| 17 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
| 18 ; RUN: | %if --need=target_ARM32 --command FileCheck --check-prefix ARM32 %s |
| 9 | 19 |
| 10 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 20 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
| 11 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 21 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
| 12 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 | 22 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 |
| 13 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 | 23 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 |
| 14 | 24 |
| 15 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { | 25 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { |
| 16 entry: | 26 entry: |
| 17 ret i32 %b | 27 ret i32 %b |
| 18 } | 28 } |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 ret i64 %a | 117 ret i64 %a |
| 108 } | 118 } |
| 109 ; CHECK-LABEL: return64BitArg | 119 ; CHECK-LABEL: return64BitArg |
| 110 ; CHECK: mov {{.*}},DWORD PTR [esp+0x4] | 120 ; CHECK: mov {{.*}},DWORD PTR [esp+0x4] |
| 111 ; CHECK: mov {{.*}},DWORD PTR [esp+0x8] | 121 ; CHECK: mov {{.*}},DWORD PTR [esp+0x8] |
| 112 ; | 122 ; |
| 113 ; OPTM1-LABEL: return64BitArg | 123 ; OPTM1-LABEL: return64BitArg |
| 114 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x4] | 124 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x4] |
| 115 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x8] | 125 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x8] |
| 116 | 126 |
| 127 ; Nothing to do for ARM O2 -- arg and return value are in r0,r1. |
| 128 ; ARM32-LABEL: return64BitArg |
| 129 ; ARM32-NEXT: bx lr |
| 130 |
| 117 define internal i64 @return64BitConst() { | 131 define internal i64 @return64BitConst() { |
| 118 entry: | 132 entry: |
| 119 ret i64 -2401053092306725256 | 133 ret i64 -2401053092306725256 |
| 120 } | 134 } |
| 121 ; CHECK-LABEL: return64BitConst | 135 ; CHECK-LABEL: return64BitConst |
| 122 ; CHECK: mov eax,0x12345678 | 136 ; CHECK: mov eax,0x12345678 |
| 123 ; CHECK: mov edx,0xdeadbeef | 137 ; CHECK: mov edx,0xdeadbeef |
| 124 ; | 138 ; |
| 125 ; OPTM1-LABEL: return64BitConst | 139 ; OPTM1-LABEL: return64BitConst |
| 126 ; OPTM1: mov eax,0x12345678 | 140 ; OPTM1: mov eax,0x12345678 |
| 127 ; OPTM1: mov edx,0xdeadbeef | 141 ; OPTM1: mov edx,0xdeadbeef |
| 128 | 142 |
| 143 ; ARM32-LABEL: return64BitConst |
| 144 ; ARM32: movw r0, #22136 ; 0x5678 |
| 145 ; ARM32: movt r0, #4660 ; 0x1234 |
| 146 ; ARM32: movw r1, #48879 ; 0xbeef |
| 147 ; ARM32: movt r1, #57005 ; 0xdead |
| 148 |
| 129 define internal i64 @add64BitSigned(i64 %a, i64 %b) { | 149 define internal i64 @add64BitSigned(i64 %a, i64 %b) { |
| 130 entry: | 150 entry: |
| 131 %add = add i64 %b, %a | 151 %add = add i64 %b, %a |
| 132 ret i64 %add | 152 ret i64 %add |
| 133 } | 153 } |
| 134 ; CHECK-LABEL: add64BitSigned | 154 ; CHECK-LABEL: add64BitSigned |
| 135 ; CHECK: add | 155 ; CHECK: add |
| 136 ; CHECK: adc | 156 ; CHECK: adc |
| 137 ; | 157 ; |
| 138 ; OPTM1-LABEL: add64BitSigned | 158 ; OPTM1-LABEL: add64BitSigned |
| 139 ; OPTM1: add | 159 ; OPTM1: add |
| 140 ; OPTM1: adc | 160 ; OPTM1: adc |
| 141 | 161 |
| 162 ; ARM32-LABEL: add64BitSigned |
| 163 ; ARM32: adds |
| 164 ; ARM32: adc |
| 165 |
| 142 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) { | 166 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) { |
| 143 entry: | 167 entry: |
| 144 %add = add i64 %b, %a | 168 %add = add i64 %b, %a |
| 145 ret i64 %add | 169 ret i64 %add |
| 146 } | 170 } |
| 147 ; CHECK-LABEL: add64BitUnsigned | 171 ; CHECK-LABEL: add64BitUnsigned |
| 148 ; CHECK: add | 172 ; CHECK: add |
| 149 ; CHECK: adc | 173 ; CHECK: adc |
| 150 ; | 174 ; |
| 151 ; OPTM1-LABEL: add64BitUnsigned | 175 ; OPTM1-LABEL: add64BitUnsigned |
| 152 ; OPTM1: add | 176 ; OPTM1: add |
| 153 ; OPTM1: adc | 177 ; OPTM1: adc |
| 154 | 178 |
| 179 ; ARM32-LABEL: add64BitUnsigned |
| 180 ; ARM32: adds |
| 181 ; ARM32: adc |
| 182 |
| 155 define internal i64 @sub64BitSigned(i64 %a, i64 %b) { | 183 define internal i64 @sub64BitSigned(i64 %a, i64 %b) { |
| 156 entry: | 184 entry: |
| 157 %sub = sub i64 %a, %b | 185 %sub = sub i64 %a, %b |
| 158 ret i64 %sub | 186 ret i64 %sub |
| 159 } | 187 } |
| 160 ; CHECK-LABEL: sub64BitSigned | 188 ; CHECK-LABEL: sub64BitSigned |
| 161 ; CHECK: sub | 189 ; CHECK: sub |
| 162 ; CHECK: sbb | 190 ; CHECK: sbb |
| 163 ; | 191 ; |
| 164 ; OPTM1-LABEL: sub64BitSigned | 192 ; OPTM1-LABEL: sub64BitSigned |
| 165 ; OPTM1: sub | 193 ; OPTM1: sub |
| 166 ; OPTM1: sbb | 194 ; OPTM1: sbb |
| 167 | 195 |
| 196 ; ARM32-LABEL: sub64BitSigned |
| 197 ; ARM32: subs |
| 198 ; ARM32: sbc |
| 199 |
| 168 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) { | 200 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) { |
| 169 entry: | 201 entry: |
| 170 %sub = sub i64 %a, %b | 202 %sub = sub i64 %a, %b |
| 171 ret i64 %sub | 203 ret i64 %sub |
| 172 } | 204 } |
| 173 ; CHECK-LABEL: sub64BitUnsigned | 205 ; CHECK-LABEL: sub64BitUnsigned |
| 174 ; CHECK: sub | 206 ; CHECK: sub |
| 175 ; CHECK: sbb | 207 ; CHECK: sbb |
| 176 ; | 208 ; |
| 177 ; OPTM1-LABEL: sub64BitUnsigned | 209 ; OPTM1-LABEL: sub64BitUnsigned |
| 178 ; OPTM1: sub | 210 ; OPTM1: sub |
| 179 ; OPTM1: sbb | 211 ; OPTM1: sbb |
| 180 | 212 |
| 213 ; ARM32-LABEL: sub64BitUnsigned |
| 214 ; ARM32: subs |
| 215 ; ARM32: sbc |
| 216 |
| 181 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { | 217 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { |
| 182 entry: | 218 entry: |
| 183 %mul = mul i64 %b, %a | 219 %mul = mul i64 %b, %a |
| 184 ret i64 %mul | 220 ret i64 %mul |
| 185 } | 221 } |
| 186 ; CHECK-LABEL: mul64BitSigned | 222 ; CHECK-LABEL: mul64BitSigned |
| 187 ; CHECK: imul | 223 ; CHECK: imul |
| 188 ; CHECK: imul | 224 ; CHECK: imul |
| 189 ; CHECK: mul | 225 ; CHECK: mul |
| 190 ; CHECK: add | 226 ; CHECK: add |
| 191 ; CHECK: add | 227 ; CHECK: add |
| 192 ; | 228 ; |
| 193 ; OPTM1-LABEL: mul64BitSigned | 229 ; OPTM1-LABEL: mul64BitSigned |
| 194 ; OPTM1: imul | 230 ; OPTM1: imul |
| 195 ; OPTM1: imul | 231 ; OPTM1: imul |
| 196 ; OPTM1: mul | 232 ; OPTM1: mul |
| 197 ; OPTM1: add | 233 ; OPTM1: add |
| 198 ; OPTM1: add | 234 ; OPTM1: add |
| 199 | 235 |
| 236 ; ARM32-LABEL: mul64BitSigned |
| 237 ; ARM32: mul |
| 238 ; ARM32: mla |
| 239 ; ARM32: umull |
| 240 ; ARM32: add |
| 241 |
| 200 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) { | 242 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) { |
| 201 entry: | 243 entry: |
| 202 %mul = mul i64 %b, %a | 244 %mul = mul i64 %b, %a |
| 203 ret i64 %mul | 245 ret i64 %mul |
| 204 } | 246 } |
| 205 ; CHECK-LABEL: mul64BitUnsigned | 247 ; CHECK-LABEL: mul64BitUnsigned |
| 206 ; CHECK: imul | 248 ; CHECK: imul |
| 207 ; CHECK: imul | 249 ; CHECK: imul |
| 208 ; CHECK: mul | 250 ; CHECK: mul |
| 209 ; CHECK: add | 251 ; CHECK: add |
| 210 ; CHECK: add | 252 ; CHECK: add |
| 211 ; | 253 ; |
| 212 ; OPTM1-LABEL: mul64BitUnsigned | 254 ; OPTM1-LABEL: mul64BitUnsigned |
| 213 ; OPTM1: imul | 255 ; OPTM1: imul |
| 214 ; OPTM1: imul | 256 ; OPTM1: imul |
| 215 ; OPTM1: mul | 257 ; OPTM1: mul |
| 216 ; OPTM1: add | 258 ; OPTM1: add |
| 217 ; OPTM1: add | 259 ; OPTM1: add |
| 218 | 260 |
| 261 ; ARM32-LABEL: mul64BitUnsigned |
| 262 ; ARM32: mul |
| 263 ; ARM32: mla |
| 264 ; ARM32: umull |
| 265 ; ARM32: add |
| 266 |
| 219 define internal i64 @div64BitSigned(i64 %a, i64 %b) { | 267 define internal i64 @div64BitSigned(i64 %a, i64 %b) { |
| 220 entry: | 268 entry: |
| 221 %div = sdiv i64 %a, %b | 269 %div = sdiv i64 %a, %b |
| 222 ret i64 %div | 270 ret i64 %div |
| 223 } | 271 } |
| 224 ; CHECK-LABEL: div64BitSigned | 272 ; CHECK-LABEL: div64BitSigned |
| 225 ; CHECK: call {{.*}} R_{{.*}} __divdi3 | 273 ; CHECK: call {{.*}} R_{{.*}} __divdi3 |
| 226 | 274 |
| 227 ; OPTM1-LABEL: div64BitSigned | 275 ; OPTM1-LABEL: div64BitSigned |
| 228 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 | 276 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 ret i64 %and | 454 ret i64 %and |
| 407 } | 455 } |
| 408 ; CHECK-LABEL: and64BitSigned | 456 ; CHECK-LABEL: and64BitSigned |
| 409 ; CHECK: and | 457 ; CHECK: and |
| 410 ; CHECK: and | 458 ; CHECK: and |
| 411 ; | 459 ; |
| 412 ; OPTM1-LABEL: and64BitSigned | 460 ; OPTM1-LABEL: and64BitSigned |
| 413 ; OPTM1: and | 461 ; OPTM1: and |
| 414 ; OPTM1: and | 462 ; OPTM1: and |
| 415 | 463 |
| 464 ; ARM32-LABEL: and64BitSigned |
| 465 ; ARM32: and |
| 466 ; ARM32: and |
| 467 |
| 416 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) { | 468 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) { |
| 417 entry: | 469 entry: |
| 418 %and = and i64 %b, %a | 470 %and = and i64 %b, %a |
| 419 ret i64 %and | 471 ret i64 %and |
| 420 } | 472 } |
| 421 ; CHECK-LABEL: and64BitUnsigned | 473 ; CHECK-LABEL: and64BitUnsigned |
| 422 ; CHECK: and | 474 ; CHECK: and |
| 423 ; CHECK: and | 475 ; CHECK: and |
| 424 ; | 476 ; |
| 425 ; OPTM1-LABEL: and64BitUnsigned | 477 ; OPTM1-LABEL: and64BitUnsigned |
| 426 ; OPTM1: and | 478 ; OPTM1: and |
| 427 ; OPTM1: and | 479 ; OPTM1: and |
| 428 | 480 |
| 481 ; ARM32-LABEL: and64BitUnsigned |
| 482 ; ARM32: and |
| 483 ; ARM32: and |
| 484 |
| 429 define internal i64 @or64BitSigned(i64 %a, i64 %b) { | 485 define internal i64 @or64BitSigned(i64 %a, i64 %b) { |
| 430 entry: | 486 entry: |
| 431 %or = or i64 %b, %a | 487 %or = or i64 %b, %a |
| 432 ret i64 %or | 488 ret i64 %or |
| 433 } | 489 } |
| 434 ; CHECK-LABEL: or64BitSigned | 490 ; CHECK-LABEL: or64BitSigned |
| 435 ; CHECK: or | 491 ; CHECK: or |
| 436 ; CHECK: or | 492 ; CHECK: or |
| 437 ; | 493 ; |
| 438 ; OPTM1-LABEL: or64BitSigned | 494 ; OPTM1-LABEL: or64BitSigned |
| 439 ; OPTM1: or | 495 ; OPTM1: or |
| 440 ; OPTM1: or | 496 ; OPTM1: or |
| 441 | 497 |
| 498 ; ARM32-LABEL: or64BitSigned |
| 499 ; ARM32: orr |
| 500 ; ARM32: orr |
| 501 |
| 442 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) { | 502 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) { |
| 443 entry: | 503 entry: |
| 444 %or = or i64 %b, %a | 504 %or = or i64 %b, %a |
| 445 ret i64 %or | 505 ret i64 %or |
| 446 } | 506 } |
| 447 ; CHECK-LABEL: or64BitUnsigned | 507 ; CHECK-LABEL: or64BitUnsigned |
| 448 ; CHECK: or | 508 ; CHECK: or |
| 449 ; CHECK: or | 509 ; CHECK: or |
| 450 ; | 510 ; |
| 451 ; OPTM1-LABEL: or64BitUnsigned | 511 ; OPTM1-LABEL: or64BitUnsigned |
| 452 ; OPTM1: or | 512 ; OPTM1: or |
| 453 ; OPTM1: or | 513 ; OPTM1: or |
| 454 | 514 |
| 515 ; ARM32-LABEL: or64BitUnsigned |
| 516 ; ARM32: orr |
| 517 ; ARM32: orr |
| 518 |
| 455 define internal i64 @xor64BitSigned(i64 %a, i64 %b) { | 519 define internal i64 @xor64BitSigned(i64 %a, i64 %b) { |
| 456 entry: | 520 entry: |
| 457 %xor = xor i64 %b, %a | 521 %xor = xor i64 %b, %a |
| 458 ret i64 %xor | 522 ret i64 %xor |
| 459 } | 523 } |
| 460 ; CHECK-LABEL: xor64BitSigned | 524 ; CHECK-LABEL: xor64BitSigned |
| 461 ; CHECK: xor | 525 ; CHECK: xor |
| 462 ; CHECK: xor | 526 ; CHECK: xor |
| 463 ; | 527 ; |
| 464 ; OPTM1-LABEL: xor64BitSigned | 528 ; OPTM1-LABEL: xor64BitSigned |
| 465 ; OPTM1: xor | 529 ; OPTM1: xor |
| 466 ; OPTM1: xor | 530 ; OPTM1: xor |
| 467 | 531 |
| 532 ; ARM32-LABEL: xor64BitSigned |
| 533 ; ARM32: eor |
| 534 ; ARM32: eor |
| 535 |
| 468 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) { | 536 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) { |
| 469 entry: | 537 entry: |
| 470 %xor = xor i64 %b, %a | 538 %xor = xor i64 %b, %a |
| 471 ret i64 %xor | 539 ret i64 %xor |
| 472 } | 540 } |
| 473 ; CHECK-LABEL: xor64BitUnsigned | 541 ; CHECK-LABEL: xor64BitUnsigned |
| 474 ; CHECK: xor | 542 ; CHECK: xor |
| 475 ; CHECK: xor | 543 ; CHECK: xor |
| 476 ; | 544 ; |
| 477 ; OPTM1-LABEL: xor64BitUnsigned | 545 ; OPTM1-LABEL: xor64BitUnsigned |
| 478 ; OPTM1: xor | 546 ; OPTM1: xor |
| 479 ; OPTM1: xor | 547 ; OPTM1: xor |
| 480 | 548 |
| 549 ; ARM32-LABEL: xor64BitUnsigned |
| 550 ; ARM32: eor |
| 551 ; ARM32: eor |
| 552 |
| 481 define internal i32 @trunc64To32Signed(i64 %a) { | 553 define internal i32 @trunc64To32Signed(i64 %a) { |
| 482 entry: | 554 entry: |
| 483 %conv = trunc i64 %a to i32 | 555 %conv = trunc i64 %a to i32 |
| 484 ret i32 %conv | 556 ret i32 %conv |
| 485 } | 557 } |
| 486 ; CHECK-LABEL: trunc64To32Signed | 558 ; CHECK-LABEL: trunc64To32Signed |
| 487 ; CHECK: mov eax,DWORD PTR [esp+0x4] | 559 ; CHECK: mov eax,DWORD PTR [esp+0x4] |
| 488 ; | 560 ; |
| 489 ; OPTM1-LABEL: trunc64To32Signed | 561 ; OPTM1-LABEL: trunc64To32Signed |
| 490 ; OPTM1: mov eax,DWORD PTR [esp+ | 562 ; OPTM1: mov eax,DWORD PTR [esp+ |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 ; CHECK: call | 811 ; CHECK: call |
| 740 ; | 812 ; |
| 741 ; OPTM1-LABEL: icmpEq64 | 813 ; OPTM1-LABEL: icmpEq64 |
| 742 ; OPTM1: jne | 814 ; OPTM1: jne |
| 743 ; OPTM1: je | 815 ; OPTM1: je |
| 744 ; OPTM1: call | 816 ; OPTM1: call |
| 745 ; OPTM1: jne | 817 ; OPTM1: jne |
| 746 ; OPTM1: je | 818 ; OPTM1: je |
| 747 ; OPTM1: call | 819 ; OPTM1: call |
| 748 | 820 |
| 821 ; ARM32-LABEL: icmpEq64 |
| 822 ; ARM32: cmp |
| 823 ; ARM32: cmpeq |
| 824 ; ARM32: moveq |
| 825 ; ARM32: movne |
| 826 ; ARM32: beq |
| 827 ; ARM32: bl |
| 828 ; ARM32: cmp |
| 829 ; ARM32: cmpeq |
| 830 ; ARM32: moveq |
| 831 ; ARM32: movne |
| 832 ; ARM32: beq |
| 833 ; ARM32: bl |
| 834 |
| 749 declare void @func() | 835 declare void @func() |
| 750 | 836 |
| 751 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { | 837 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 752 entry: | 838 entry: |
| 753 %cmp = icmp ne i64 %a, %b | 839 %cmp = icmp ne i64 %a, %b |
| 754 br i1 %cmp, label %if.then, label %if.end | 840 br i1 %cmp, label %if.then, label %if.end |
| 755 | 841 |
| 756 if.then: ; preds = %entry | 842 if.then: ; preds = %entry |
| 757 call void @func() | 843 call void @func() |
| 758 br label %if.end | 844 br label %if.end |
| (...skipping 18 matching lines...) Expand all Loading... |
| 777 ; CHECK: call | 863 ; CHECK: call |
| 778 ; | 864 ; |
| 779 ; OPTM1-LABEL: icmpNe64 | 865 ; OPTM1-LABEL: icmpNe64 |
| 780 ; OPTM1: jne | 866 ; OPTM1: jne |
| 781 ; OPTM1: jne | 867 ; OPTM1: jne |
| 782 ; OPTM1: call | 868 ; OPTM1: call |
| 783 ; OPTM1: jne | 869 ; OPTM1: jne |
| 784 ; OPTM1: jne | 870 ; OPTM1: jne |
| 785 ; OPTM1: call | 871 ; OPTM1: call |
| 786 | 872 |
| 873 ; ARM32-LABEL: icmpNe64 |
| 874 ; ARM32: cmp |
| 875 ; ARM32: cmpeq |
| 876 ; ARM32: movne |
| 877 ; ARM32: moveq |
| 878 ; ARM32: beq |
| 879 ; ARM32: bl |
| 880 ; ARM32: cmp |
| 881 ; ARM32: cmpeq |
| 882 ; ARM32: movne |
| 883 ; ARM32: moveq |
| 884 ; ARM32: beq |
| 885 ; ARM32: bl |
| 886 |
| 787 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { | 887 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 788 entry: | 888 entry: |
| 789 %cmp = icmp ugt i64 %a, %b | 889 %cmp = icmp ugt i64 %a, %b |
| 790 br i1 %cmp, label %if.then, label %if.end | 890 br i1 %cmp, label %if.then, label %if.end |
| 791 | 891 |
| 792 if.then: ; preds = %entry | 892 if.then: ; preds = %entry |
| 793 call void @func() | 893 call void @func() |
| 794 br label %if.end | 894 br label %if.end |
| 795 | 895 |
| 796 if.end: ; preds = %if.then, %entry | 896 if.end: ; preds = %if.then, %entry |
| (...skipping 20 matching lines...) Expand all Loading... |
| 817 ; OPTM1-LABEL: icmpGt64 | 917 ; OPTM1-LABEL: icmpGt64 |
| 818 ; OPTM1: ja | 918 ; OPTM1: ja |
| 819 ; OPTM1: jb | 919 ; OPTM1: jb |
| 820 ; OPTM1: ja | 920 ; OPTM1: ja |
| 821 ; OPTM1: call | 921 ; OPTM1: call |
| 822 ; OPTM1: jg | 922 ; OPTM1: jg |
| 823 ; OPTM1: jl | 923 ; OPTM1: jl |
| 824 ; OPTM1: ja | 924 ; OPTM1: ja |
| 825 ; OPTM1: call | 925 ; OPTM1: call |
| 826 | 926 |
| 927 ; ARM32-LABEL: icmpGt64 |
| 928 ; ARM32: cmp |
| 929 ; ARM32: cmpeq |
| 930 ; ARM32: movhi |
| 931 ; ARM32: movls |
| 932 ; ARM32: beq |
| 933 ; ARM32: bl |
| 934 ; ARM32: cmp |
| 935 ; ARM32: sbcs |
| 936 ; ARM32: movlt |
| 937 ; ARM32: movge |
| 938 ; ARM32: beq |
| 939 ; ARM32: bl |
| 940 |
| 827 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { | 941 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 828 entry: | 942 entry: |
| 829 %cmp = icmp uge i64 %a, %b | 943 %cmp = icmp uge i64 %a, %b |
| 830 br i1 %cmp, label %if.then, label %if.end | 944 br i1 %cmp, label %if.then, label %if.end |
| 831 | 945 |
| 832 if.then: ; preds = %entry | 946 if.then: ; preds = %entry |
| 833 call void @func() | 947 call void @func() |
| 834 br label %if.end | 948 br label %if.end |
| 835 | 949 |
| 836 if.end: ; preds = %if.then, %entry | 950 if.end: ; preds = %if.then, %entry |
| (...skipping 20 matching lines...) Expand all Loading... |
| 857 ; OPTM1-LABEL: icmpGe64 | 971 ; OPTM1-LABEL: icmpGe64 |
| 858 ; OPTM1: ja | 972 ; OPTM1: ja |
| 859 ; OPTM1: jb | 973 ; OPTM1: jb |
| 860 ; OPTM1: jae | 974 ; OPTM1: jae |
| 861 ; OPTM1: call | 975 ; OPTM1: call |
| 862 ; OPTM1: jg | 976 ; OPTM1: jg |
| 863 ; OPTM1: jl | 977 ; OPTM1: jl |
| 864 ; OPTM1: jae | 978 ; OPTM1: jae |
| 865 ; OPTM1: call | 979 ; OPTM1: call |
| 866 | 980 |
| 981 ; ARM32-LABEL: icmpGe64 |
| 982 ; ARM32: cmp |
| 983 ; ARM32: cmpeq |
| 984 ; ARM32: movcs |
| 985 ; ARM32: movcc |
| 986 ; ARM32: beq |
| 987 ; ARM32: bl |
| 988 ; ARM32: cmp |
| 989 ; ARM32: sbcs |
| 990 ; ARM32: movge |
| 991 ; ARM32: movlt |
| 992 ; ARM32: beq |
| 993 ; ARM32: bl |
| 994 |
| 867 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { | 995 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 868 entry: | 996 entry: |
| 869 %cmp = icmp ult i64 %a, %b | 997 %cmp = icmp ult i64 %a, %b |
| 870 br i1 %cmp, label %if.then, label %if.end | 998 br i1 %cmp, label %if.then, label %if.end |
| 871 | 999 |
| 872 if.then: ; preds = %entry | 1000 if.then: ; preds = %entry |
| 873 call void @func() | 1001 call void @func() |
| 874 br label %if.end | 1002 br label %if.end |
| 875 | 1003 |
| 876 if.end: ; preds = %if.then, %entry | 1004 if.end: ; preds = %if.then, %entry |
| (...skipping 20 matching lines...) Expand all Loading... |
| 897 ; OPTM1-LABEL: icmpLt64 | 1025 ; OPTM1-LABEL: icmpLt64 |
| 898 ; OPTM1: jb | 1026 ; OPTM1: jb |
| 899 ; OPTM1: ja | 1027 ; OPTM1: ja |
| 900 ; OPTM1: jb | 1028 ; OPTM1: jb |
| 901 ; OPTM1: call | 1029 ; OPTM1: call |
| 902 ; OPTM1: jl | 1030 ; OPTM1: jl |
| 903 ; OPTM1: jg | 1031 ; OPTM1: jg |
| 904 ; OPTM1: jb | 1032 ; OPTM1: jb |
| 905 ; OPTM1: call | 1033 ; OPTM1: call |
| 906 | 1034 |
| 1035 ; ARM32-LABEL: icmpLt64 |
| 1036 ; ARM32: cmp |
| 1037 ; ARM32: cmpeq |
| 1038 ; ARM32: movcc |
| 1039 ; ARM32: movcs |
| 1040 ; ARM32: beq |
| 1041 ; ARM32: bl |
| 1042 ; ARM32: cmp |
| 1043 ; ARM32: sbcs |
| 1044 ; ARM32: movlt |
| 1045 ; ARM32: movge |
| 1046 ; ARM32: beq |
| 1047 ; ARM32: bl |
| 1048 |
| 907 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1049 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 908 entry: | 1050 entry: |
| 909 %cmp = icmp ule i64 %a, %b | 1051 %cmp = icmp ule i64 %a, %b |
| 910 br i1 %cmp, label %if.then, label %if.end | 1052 br i1 %cmp, label %if.then, label %if.end |
| 911 | 1053 |
| 912 if.then: ; preds = %entry | 1054 if.then: ; preds = %entry |
| 913 call void @func() | 1055 call void @func() |
| 914 br label %if.end | 1056 br label %if.end |
| 915 | 1057 |
| 916 if.end: ; preds = %if.then, %entry | 1058 if.end: ; preds = %if.then, %entry |
| (...skipping 20 matching lines...) Expand all Loading... |
| 937 ; OPTM1-LABEL: icmpLe64 | 1079 ; OPTM1-LABEL: icmpLe64 |
| 938 ; OPTM1: jb | 1080 ; OPTM1: jb |
| 939 ; OPTM1: ja | 1081 ; OPTM1: ja |
| 940 ; OPTM1: jbe | 1082 ; OPTM1: jbe |
| 941 ; OPTM1: call | 1083 ; OPTM1: call |
| 942 ; OPTM1: jl | 1084 ; OPTM1: jl |
| 943 ; OPTM1: jg | 1085 ; OPTM1: jg |
| 944 ; OPTM1: jbe | 1086 ; OPTM1: jbe |
| 945 ; OPTM1: call | 1087 ; OPTM1: call |
| 946 | 1088 |
| 1089 ; ARM32-LABEL: icmpLe64 |
| 1090 ; ARM32: cmp |
| 1091 ; ARM32: cmpeq |
| 1092 ; ARM32: movls |
| 1093 ; ARM32: movhi |
| 1094 ; ARM32: beq |
| 1095 ; ARM32: bl |
| 1096 ; ARM32: cmp |
| 1097 ; ARM32: sbcs |
| 1098 ; ARM32: movge |
| 1099 ; ARM32: movlt |
| 1100 ; ARM32: beq |
| 1101 ; ARM32: bl |
| 1102 |
| 947 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { | 1103 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { |
| 948 entry: | 1104 entry: |
| 949 %cmp = icmp eq i64 %a, %b | 1105 %cmp = icmp eq i64 %a, %b |
| 950 %cmp.ret_ext = zext i1 %cmp to i32 | 1106 %cmp.ret_ext = zext i1 %cmp to i32 |
| 951 ret i32 %cmp.ret_ext | 1107 ret i32 %cmp.ret_ext |
| 952 } | 1108 } |
| 953 ; CHECK-LABEL: icmpEq64Bool | 1109 ; CHECK-LABEL: icmpEq64Bool |
| 954 ; CHECK: jne | 1110 ; CHECK: jne |
| 955 ; CHECK: je | 1111 ; CHECK: je |
| 956 ; | 1112 ; |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1268 | 1424 |
| 1269 if.end3: ; preds = %if.then2, %if.end | 1425 if.end3: ; preds = %if.then2, %if.end |
| 1270 ret void | 1426 ret void |
| 1271 } | 1427 } |
| 1272 ; The following checks are not strictly necessary since one of the RUN | 1428 ; The following checks are not strictly necessary since one of the RUN |
| 1273 ; lines actually runs the output through the assembler. | 1429 ; lines actually runs the output through the assembler. |
| 1274 ; CHECK-LABEL: icmpEq64Imm | 1430 ; CHECK-LABEL: icmpEq64Imm |
| 1275 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, | 1431 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, |
| 1276 ; OPTM1-LABEL: icmpEq64Imm | 1432 ; OPTM1-LABEL: icmpEq64Imm |
| 1277 ; OPTM1-LABEL-NOT: cmp 0x{{[0-9a-f]+}}, | 1433 ; OPTM1-LABEL-NOT: cmp 0x{{[0-9a-f]+}}, |
| 1434 ; ARM32-LABEL: icmpEq64Imm |
| 1435 ; ARM32-NOT: cmp #{{[0-9a-f]+}}, |
| 1278 | 1436 |
| 1279 define internal void @icmpLt64Imm() { | 1437 define internal void @icmpLt64Imm() { |
| 1280 entry: | 1438 entry: |
| 1281 %cmp = icmp ult i64 123, 234 | 1439 %cmp = icmp ult i64 123, 234 |
| 1282 br i1 %cmp, label %if.then, label %if.end | 1440 br i1 %cmp, label %if.then, label %if.end |
| 1283 | 1441 |
| 1284 if.then: ; preds = %entry | 1442 if.then: ; preds = %entry |
| 1285 call void @func() | 1443 call void @func() |
| 1286 br label %if.end | 1444 br label %if.end |
| 1287 | 1445 |
| 1288 if.end: ; preds = %if.then, %entry | 1446 if.end: ; preds = %if.then, %entry |
| 1289 %cmp1 = icmp slt i64 345, 456 | 1447 %cmp1 = icmp slt i64 345, 456 |
| 1290 br i1 %cmp1, label %if.then2, label %if.end3 | 1448 br i1 %cmp1, label %if.then2, label %if.end3 |
| 1291 | 1449 |
| 1292 if.then2: ; preds = %if.end | 1450 if.then2: ; preds = %if.end |
| 1293 call void @func() | 1451 call void @func() |
| 1294 br label %if.end3 | 1452 br label %if.end3 |
| 1295 | 1453 |
| 1296 if.end3: ; preds = %if.then2, %if.end | 1454 if.end3: ; preds = %if.then2, %if.end |
| 1297 ret void | 1455 ret void |
| 1298 } | 1456 } |
| 1299 ; The following checks are not strictly necessary since one of the RUN | 1457 ; The following checks are not strictly necessary since one of the RUN |
| 1300 ; lines actually runs the output through the assembler. | 1458 ; lines actually runs the output through the assembler. |
| 1301 ; CHECK-LABEL: icmpLt64Imm | 1459 ; CHECK-LABEL: icmpLt64Imm |
| 1302 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, | 1460 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, |
| 1303 ; OPTM1-LABEL: icmpLt64Imm | 1461 ; OPTM1-LABEL: icmpLt64Imm |
| 1304 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}}, | 1462 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}}, |
| 1463 ; ARM32-LABEL: icmpLt64Imm |
| 1464 ; ARM32-NOT: cmp #{{[0-9a-f]+}}, |
| OLD | NEW |