| 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: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ | 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
| 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 8 | 8 |
| 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ | 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ |
| 11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s | 11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s |
| 12 | 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. |
| 13 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 16 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
| 14 ; RUN: --command %p2i --filetype=obj --assemble \ | 17 ; RUN: --command %p2i --filetype=asm --assemble \ |
| 15 ; RUN: --disassemble --target arm32 -i %s --args -O2 \ | 18 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
| 16 ; RUN: -allow-externally-defined-symbols \ | 19 ; RUN: -allow-externally-defined-symbols \ |
| 17 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 20 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
| 18 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-O2 %s | 21 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-O2 %s |
| 19 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 22 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
| 20 ; RUN: --command %p2i --filetype=obj --assemble --disassemble --target arm32 \ | 23 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ |
| 21 ; RUN: -i %s --args -Om1 \ | 24 ; RUN: -i %s --args -Om1 --skip-unimplemented \ |
| 22 ; RUN: -allow-externally-defined-symbols \ | 25 ; RUN: -allow-externally-defined-symbols \ |
| 23 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 26 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
| 24 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-OM1 %s | 27 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-OM1 %s |
| 25 | 28 |
| 26 ; TODO(rkotler): Stop skipping unimplemented parts (via --skip-unimplemented) | 29 ; TODO(rkotler): Stop skipping unimplemented parts (via --skip-unimplemented) |
| 27 ; once enough infrastructure is in. Also, switch to --filetype=obj | 30 ; once enough infrastructure is in. Also, switch to --filetype=obj |
| 28 ; when possible. | 31 ; when possible. |
| 29 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ | 32 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ |
| 30 ; RUN: --command %p2i --filetype=asm --assemble \ | 33 ; RUN: --command %p2i --filetype=asm --assemble \ |
| 31 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ | 34 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 95 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 93 ; OPTM1: mov DWORD PTR [esp+0x4] | 96 ; OPTM1: mov DWORD PTR [esp+0x4] |
| 94 ; OPTM1: mov DWORD PTR [esp] | 97 ; OPTM1: mov DWORD PTR [esp] |
| 95 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b | 98 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b |
| 96 ; OPTM1: mov DWORD PTR [esp+0x10] | 99 ; OPTM1: mov DWORD PTR [esp+0x10] |
| 97 ; OPTM1: mov DWORD PTR [esp+0xc] | 100 ; OPTM1: mov DWORD PTR [esp+0xc] |
| 98 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 101 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 99 | 102 |
| 100 ; ARM32-LABEL: pass64BitArg | 103 ; ARM32-LABEL: pass64BitArg |
| 101 ; ARM32: str {{.*}}, [sp] | 104 ; ARM32: str {{.*}}, [sp] |
| 102 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline | |
| 103 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline | |
| 104 ; ARM32: mov r2, #123 | 105 ; ARM32: mov r2, #123 |
| 105 ; ARM32: blx [[CALL]] | 106 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 106 ; ARM32: str {{.*}}, [sp] | 107 ; ARM32: str {{.*}}, [sp] |
| 107 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline | |
| 108 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline | |
| 109 ; ARM32: {{mov|ldr}} r0 | 108 ; ARM32: {{mov|ldr}} r0 |
| 110 ; ARM32: {{mov|ldr}} r1 | 109 ; ARM32: {{mov|ldr}} r1 |
| 111 ; ARM32: mov r2, #123 | 110 ; ARM32: mov r2, #123 |
| 112 ; ARM32: blx [[CALL]] | 111 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 113 ; ARM32: str {{.*}}, [sp] | 112 ; ARM32: str {{.*}}, [sp] |
| 114 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline | |
| 115 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline | |
| 116 ; ARM32: {{mov|ldr}} r0 | 113 ; ARM32: {{mov|ldr}} r0 |
| 117 ; ARM32: {{mov|ldr}} r1 | 114 ; ARM32: {{mov|ldr}} r1 |
| 118 ; ARM32: mov r2, #123 | 115 ; ARM32: mov r2, #123 |
| 119 ; ARM32: blx [[CALL]] | 116 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 120 | 117 |
| 121 ; MIPS32-LABEL: pass64BitArg | 118 ; MIPS32-LABEL: pass64BitArg |
| 122 | 119 |
| 123 | 120 |
| 124 declare i32 @ignore64BitArgNoInline(i64, i32, i64) | 121 declare i32 @ignore64BitArgNoInline(i64, i32, i64) |
| 125 | 122 |
| 126 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { | 123 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { |
| 127 entry: | 124 entry: |
| 128 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672
5256) | 125 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672
5256) |
| 129 ret i32 %call | 126 ret i32 %call |
| (...skipping 21 matching lines...) Expand all Loading... |
| 151 ; OPTM1-NOT: mov | 148 ; OPTM1-NOT: mov |
| 152 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 149 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 153 | 150 |
| 154 ; ARM32-LABEL: pass64BitConstArg | 151 ; ARM32-LABEL: pass64BitConstArg |
| 155 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef | 152 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef |
| 156 ; ARM32: movt [[REG1]], {{.*}} ; 0xdead | 153 ; ARM32: movt [[REG1]], {{.*}} ; 0xdead |
| 157 ; ARM32: movw [[REG2:r.*]], {{.*}} ; 0x5678 | 154 ; ARM32: movw [[REG2:r.*]], {{.*}} ; 0x5678 |
| 158 ; ARM32: movt [[REG2]], {{.*}} ; 0x1234 | 155 ; ARM32: movt [[REG2]], {{.*}} ; 0x1234 |
| 159 ; ARM32: str [[REG1]], [sp, #4] | 156 ; ARM32: str [[REG1]], [sp, #4] |
| 160 ; ARM32: str [[REG2]], [sp] | 157 ; ARM32: str [[REG2]], [sp] |
| 161 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline | |
| 162 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline | |
| 163 ; ARM32: {{mov|ldr}} r0 | 158 ; ARM32: {{mov|ldr}} r0 |
| 164 ; ARM32: {{mov|ldr}} r1 | 159 ; ARM32: {{mov|ldr}} r1 |
| 165 ; ARM32: mov r2, #123 | 160 ; ARM32: mov r2, #123 |
| 166 ; ARM32: blx [[CALL]] | 161 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 167 | |
| 168 | 162 |
| 169 define internal i32 @pass64BitUndefArg() { | 163 define internal i32 @pass64BitUndefArg() { |
| 170 entry: | 164 entry: |
| 171 %call = call i32 @ignore64BitArgNoInline(i64 0, i32 123, i64 undef) | 165 %call = call i32 @ignore64BitArgNoInline(i64 0, i32 123, i64 undef) |
| 172 ret i32 %call | 166 ret i32 %call |
| 173 } | 167 } |
| 174 ; CHECK-LABEL: pass64BitUndefArg | 168 ; CHECK-LABEL: pass64BitUndefArg |
| 175 ; CHECK: sub esp | 169 ; CHECK: sub esp |
| 176 ; CHECK: mov DWORD PTR{{.*}},0x7b | 170 ; CHECK: mov DWORD PTR{{.*}},0x7b |
| 177 ; CHECK: mov DWORD PTR{{.*}},0x0 | 171 ; CHECK: mov DWORD PTR{{.*}},0x0 |
| 178 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 172 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 179 ; OPTM1-LABEL: pass64BitUndefArg | 173 ; OPTM1-LABEL: pass64BitUndefArg |
| 180 ; OPTM1: sub esp | 174 ; OPTM1: sub esp |
| 181 ; OPTM1: mov DWORD PTR{{.*}},0x7b | 175 ; OPTM1: mov DWORD PTR{{.*}},0x7b |
| 182 ; OPTM1: mov DWORD PTR{{.*}},0x0 | 176 ; OPTM1: mov DWORD PTR{{.*}},0x0 |
| 183 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 177 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 184 ; ARM32-LABEL: pass64BitUndefArg | 178 ; ARM32-LABEL: pass64BitUndefArg |
| 185 ; ARM32: sub sp | 179 ; ARM32: sub sp |
| 186 ; ARM32: mov {{.*}}, #0 | 180 ; ARM32: mov {{.*}}, #0 |
| 187 ; ARM32: str | 181 ; ARM32: str |
| 188 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline | |
| 189 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline | |
| 190 ; ARM32: mov {{.*}}, #123 | 182 ; ARM32: mov {{.*}}, #123 |
| 191 ; ARM32: blx [[CALL]] | 183 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 192 | 184 |
| 193 ; MIPS32-LABEL: pass64BitUndefArg | 185 ; MIPS32-LABEL: pass64BitUndefArg |
| 194 ; MIPS32: jr ra | 186 ; MIPS32: jr ra |
| 195 | 187 |
| 196 define internal i64 @return64BitArg(i64 %padding, i64 %a) { | 188 define internal i64 @return64BitArg(i64 %padding, i64 %a) { |
| 197 entry: | 189 entry: |
| 198 ret i64 %a | 190 ret i64 %a |
| 199 } | 191 } |
| 200 ; CHECK-LABEL: return64BitArg | 192 ; CHECK-LABEL: return64BitArg |
| 201 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc] | 193 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc] |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 } | 399 } |
| 408 ; CHECK-LABEL: div64BitSigned | 400 ; CHECK-LABEL: div64BitSigned |
| 409 ; CHECK: call {{.*}} R_{{.*}} __divdi3 | 401 ; CHECK: call {{.*}} R_{{.*}} __divdi3 |
| 410 | 402 |
| 411 ; OPTM1-LABEL: div64BitSigned | 403 ; OPTM1-LABEL: div64BitSigned |
| 412 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 | 404 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 |
| 413 ; | 405 ; |
| 414 ; ARM32-LABEL: div64BitSigned | 406 ; ARM32-LABEL: div64BitSigned |
| 415 ; ARM32: orrs {{r.*}}, {{r.*}} | 407 ; ARM32: orrs {{r.*}}, {{r.*}} |
| 416 ; ARM32: bne | 408 ; ARM32: bne |
| 417 ; ARM32: movw» [[CALL:r[0-9]]], {{.+}} __divdi3 | 409 ; ARM32: bl {{.*}} __divdi3 |
| 418 ; ARM32: movt» [[CALL]], {{.+}} __divdi3 | |
| 419 ; ARM32: blx [[CALL]] | |
| 420 | 410 |
| 421 define internal i64 @div64BitSignedConst(i64 %a) { | 411 define internal i64 @div64BitSignedConst(i64 %a) { |
| 422 entry: | 412 entry: |
| 423 %div = sdiv i64 %a, 12345678901234 | 413 %div = sdiv i64 %a, 12345678901234 |
| 424 ret i64 %div | 414 ret i64 %div |
| 425 } | 415 } |
| 426 ; CHECK-LABEL: div64BitSignedConst | 416 ; CHECK-LABEL: div64BitSignedConst |
| 427 ; CHECK: mov DWORD PTR [esp+0xc],0xb3a | 417 ; CHECK: mov DWORD PTR [esp+0xc],0xb3a |
| 428 ; CHECK: mov DWORD PTR [esp+0x8],0x73ce2ff2 | 418 ; CHECK: mov DWORD PTR [esp+0x8],0x73ce2ff2 |
| 429 ; CHECK: call {{.*}} R_{{.*}} __divdi3 | 419 ; CHECK: call {{.*}} R_{{.*}} __divdi3 |
| 430 ; | 420 ; |
| 431 ; OPTM1-LABEL: div64BitSignedConst | 421 ; OPTM1-LABEL: div64BitSignedConst |
| 432 ; OPTM1: mov DWORD PTR [esp+0xc],0xb3a | 422 ; OPTM1: mov DWORD PTR [esp+0xc],0xb3a |
| 433 ; OPTM1: mov DWORD PTR [esp+0x8],0x73ce2ff2 | 423 ; OPTM1: mov DWORD PTR [esp+0x8],0x73ce2ff2 |
| 434 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 | 424 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 |
| 435 ; | 425 ; |
| 436 ; ARM32-LABEL: div64BitSignedConst | 426 ; ARM32-LABEL: div64BitSignedConst |
| 437 ; For a constant, we should be able to optimize-out the divide by zero check. | 427 ; For a constant, we should be able to optimize-out the divide by zero check. |
| 438 ; ARM32-NOT: orrs | 428 ; ARM32-NOT: orrs |
| 439 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} __divdi3 | |
| 440 ; ARM32: movt [[CALL]], {{.+}} __divdi3 | |
| 441 ; ARM32: movw {{.*}} ; 0x2ff2 | 429 ; ARM32: movw {{.*}} ; 0x2ff2 |
| 442 ; ARM32: movt {{.*}} ; 0x73ce | 430 ; ARM32: movt {{.*}} ; 0x73ce |
| 443 ; ARM32: movw {{.*}} ; 0xb3a | 431 ; ARM32: movw {{.*}} ; 0xb3a |
| 444 ; ARM32: blx [[CALL]] | 432 ; ARM32: bl {{.*}} __divdi3 |
| 445 | 433 |
| 446 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { | 434 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { |
| 447 entry: | 435 entry: |
| 448 %div = udiv i64 %a, %b | 436 %div = udiv i64 %a, %b |
| 449 ret i64 %div | 437 ret i64 %div |
| 450 } | 438 } |
| 451 ; CHECK-LABEL: div64BitUnsigned | 439 ; CHECK-LABEL: div64BitUnsigned |
| 452 ; CHECK: call {{.*}} R_{{.*}} __udivdi3 | 440 ; CHECK: call {{.*}} R_{{.*}} __udivdi3 |
| 453 ; | 441 ; |
| 454 ; OPTM1-LABEL: div64BitUnsigned | 442 ; OPTM1-LABEL: div64BitUnsigned |
| 455 ; OPTM1: call {{.*}} R_{{.*}} __udivdi3 | 443 ; OPTM1: call {{.*}} R_{{.*}} __udivdi3 |
| 456 ; | 444 ; |
| 457 ; ARM32-LABEL: div64BitUnsigned | 445 ; ARM32-LABEL: div64BitUnsigned |
| 458 ; ARM32: orrs {{r.*}}, {{r.*}} | 446 ; ARM32: orrs {{r.*}}, {{r.*}} |
| 459 ; ARM32: bne | 447 ; ARM32: bne |
| 460 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} __udivdi3 | 448 ; ARM32: bl {{.*}} __udivdi3 |
| 461 ; ARM32: movt [[CALL]], {{.+}} __udivdi3 | |
| 462 ; ARM32: blx [[CALL]] | |
| 463 | 449 |
| 464 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { | 450 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { |
| 465 entry: | 451 entry: |
| 466 %rem = srem i64 %a, %b | 452 %rem = srem i64 %a, %b |
| 467 ret i64 %rem | 453 ret i64 %rem |
| 468 } | 454 } |
| 469 ; CHECK-LABEL: rem64BitSigned | 455 ; CHECK-LABEL: rem64BitSigned |
| 470 ; CHECK: call {{.*}} R_{{.*}} __moddi3 | 456 ; CHECK: call {{.*}} R_{{.*}} __moddi3 |
| 471 ; | 457 ; |
| 472 ; OPTM1-LABEL: rem64BitSigned | 458 ; OPTM1-LABEL: rem64BitSigned |
| 473 ; OPTM1: call {{.*}} R_{{.*}} __moddi3 | 459 ; OPTM1: call {{.*}} R_{{.*}} __moddi3 |
| 474 ; | 460 ; |
| 475 ; ARM32-LABEL: rem64BitSigned | 461 ; ARM32-LABEL: rem64BitSigned |
| 476 ; ARM32: orrs {{r.*}}, {{r.*}} | 462 ; ARM32: orrs {{r.*}}, {{r.*}} |
| 477 ; ARM32: bne | 463 ; ARM32: bne |
| 478 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} __moddi3 | 464 ; ARM32: bl {{.*}} __moddi3 |
| 479 ; ARM32: movt [[CALL]], {{.+}} __moddi3 | |
| 480 ; ARM32: blx [[CALL]] | |
| 481 | 465 |
| 482 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { | 466 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { |
| 483 entry: | 467 entry: |
| 484 %rem = urem i64 %a, %b | 468 %rem = urem i64 %a, %b |
| 485 ret i64 %rem | 469 ret i64 %rem |
| 486 } | 470 } |
| 487 ; CHECK-LABEL: rem64BitUnsigned | 471 ; CHECK-LABEL: rem64BitUnsigned |
| 488 ; CHECK: call {{.*}} R_{{.*}} __umoddi3 | 472 ; CHECK: call {{.*}} R_{{.*}} __umoddi3 |
| 489 ; | 473 ; |
| 490 ; OPTM1-LABEL: rem64BitUnsigned | 474 ; OPTM1-LABEL: rem64BitUnsigned |
| 491 ; OPTM1: call {{.*}} R_{{.*}} __umoddi3 | 475 ; OPTM1: call {{.*}} R_{{.*}} __umoddi3 |
| 492 ; | 476 ; |
| 493 ; ARM32-LABEL: rem64BitUnsigned | 477 ; ARM32-LABEL: rem64BitUnsigned |
| 494 ; ARM32: orrs {{r.*}}, {{r.*}} | 478 ; ARM32: orrs {{r.*}}, {{r.*}} |
| 495 ; ARM32: bne | 479 ; ARM32: bne |
| 496 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} __umoddi3 | 480 ; ARM32: bl {{.*}} __umoddi3 |
| 497 ; ARM32: movt [[CALL]], {{.+}} __umoddi3 | |
| 498 ; ARM32: blx [[CALL]] | |
| 499 | 481 |
| 500 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { | 482 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { |
| 501 entry: | 483 entry: |
| 502 %shl = shl i64 %a, %b | 484 %shl = shl i64 %a, %b |
| 503 ret i64 %shl | 485 ret i64 %shl |
| 504 } | 486 } |
| 505 ; CHECK-LABEL: shl64BitSigned | 487 ; CHECK-LABEL: shl64BitSigned |
| 506 ; CHECK: shld | 488 ; CHECK: shld |
| 507 ; CHECK: shl e | 489 ; CHECK: shl e |
| 508 ; CHECK: test {{.*}},0x20 | 490 ; CHECK: test {{.*}},0x20 |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1151 ; OPTM1-NEXT: cmp [[RESULT]],0x0 | 1133 ; OPTM1-NEXT: cmp [[RESULT]],0x0 |
| 1152 ; OPTM1-NEXT: jne | 1134 ; OPTM1-NEXT: jne |
| 1153 ; OPTM1-NEXT: jmp | 1135 ; OPTM1-NEXT: jmp |
| 1154 ; OPTM1-NEXT: call | 1136 ; OPTM1-NEXT: call |
| 1155 | 1137 |
| 1156 ; ARM32-LABEL: icmpEq64 | 1138 ; ARM32-LABEL: icmpEq64 |
| 1157 ; ARM32: cmp | 1139 ; ARM32: cmp |
| 1158 ; ARM32: cmpeq | 1140 ; ARM32: cmpeq |
| 1159 ; ARM32-OM1: tst | 1141 ; ARM32-OM1: tst |
| 1160 ; ARM32: bne | 1142 ; ARM32: bne |
| 1161 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} func | 1143 ; ARM32: bl {{.*}} <func> |
| 1162 ; ARM32: movt [[CALL]], {{.+}} func | |
| 1163 ; ARM32: blx [[CALL]] | |
| 1164 ; ARM32: cmp | 1144 ; ARM32: cmp |
| 1165 ; ARM32: cmpeq | 1145 ; ARM32: cmpeq |
| 1166 ; ARM32-OM1: tst | 1146 ; ARM32-OM1: tst |
| 1167 ; ARM32: bne | 1147 ; ARM32: bne |
| 1168 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} func | 1148 ; ARM32: bl {{.*}} <func> |
| 1169 ; ARM32: movt [[CALL]], {{.+}} func | |
| 1170 ; ARM32: blx [[CALL]] | |
| 1171 ; ARM32: bx | 1149 ; ARM32: bx |
| 1172 | 1150 |
| 1173 declare void @func() | 1151 declare void @func() |
| 1174 | 1152 |
| 1175 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1153 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 1176 entry: | 1154 entry: |
| 1177 %cmp = icmp ne i64 %a, %b | 1155 %cmp = icmp ne i64 %a, %b |
| 1178 br i1 %cmp, label %if.then, label %if.end | 1156 br i1 %cmp, label %if.then, label %if.end |
| 1179 | 1157 |
| 1180 if.then: ; preds = %entry | 1158 if.then: ; preds = %entry |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1225 ; OPTM1-NEXT: jne {{.*}} | 1203 ; OPTM1-NEXT: jne {{.*}} |
| 1226 ; OPTM1-NEXT: jmp {{.*}} | 1204 ; OPTM1-NEXT: jmp {{.*}} |
| 1227 ; OPTM1-NEXT: call | 1205 ; OPTM1-NEXT: call |
| 1228 | 1206 |
| 1229 ; ARM32-LABEL: icmpNe64 | 1207 ; ARM32-LABEL: icmpNe64 |
| 1230 ; ARM32: cmp | 1208 ; ARM32: cmp |
| 1231 ; ARM32: cmpeq | 1209 ; ARM32: cmpeq |
| 1232 ; ARM32-OM1: tst | 1210 ; ARM32-OM1: tst |
| 1233 ; ARM32-OM1: bne | 1211 ; ARM32-OM1: bne |
| 1234 ; ARM32-O2: beq | 1212 ; ARM32-O2: beq |
| 1235 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} func | 1213 ; ARM32: bl {{.*}} <func> |
| 1236 ; ARM32: movt [[CALL]], {{.+}} func | |
| 1237 ; ARM32: blx [[CALL]] | |
| 1238 ; ARM32: cmp | 1214 ; ARM32: cmp |
| 1239 ; ARM32: cmpeq | 1215 ; ARM32: cmpeq |
| 1240 ; ARM32-OM1: tst | 1216 ; ARM32-OM1: tst |
| 1241 ; ARM32-OM1: bne | 1217 ; ARM32-OM1: bne |
| 1242 ; ARM32-O2: beq | 1218 ; ARM32-O2: beq |
| 1243 ; ARM32: bl | 1219 ; ARM32: bl |
| 1244 | 1220 |
| 1245 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1221 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 1246 entry: | 1222 entry: |
| 1247 %cmp = icmp ugt i64 %a, %b | 1223 %cmp = icmp ugt i64 %a, %b |
| (...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1971 | 1947 |
| 1972 ; CHECK-LABEL: phi64Undef | 1948 ; CHECK-LABEL: phi64Undef |
| 1973 ; CHECK: mov {{.*}},0x0 | 1949 ; CHECK: mov {{.*}},0x0 |
| 1974 ; CHECK: mov {{.*}},0x0 | 1950 ; CHECK: mov {{.*}},0x0 |
| 1975 ; OPTM1-LABEL: phi64Undef | 1951 ; OPTM1-LABEL: phi64Undef |
| 1976 ; OPTM1: mov {{.*}},0x0 | 1952 ; OPTM1: mov {{.*}},0x0 |
| 1977 ; OPTM1: mov {{.*}},0x0 | 1953 ; OPTM1: mov {{.*}},0x0 |
| 1978 ; ARM32-LABEL: phi64Undef | 1954 ; ARM32-LABEL: phi64Undef |
| 1979 ; ARM32: mov {{.*}} #0 | 1955 ; ARM32: mov {{.*}} #0 |
| 1980 ; ARM32: mov {{.*}} #0 | 1956 ; ARM32: mov {{.*}} #0 |
| OLD | NEW |