| 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. | |
| 16 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 13 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
| 17 ; RUN: --command %p2i --filetype=asm --assemble \ | 14 ; RUN: --command %p2i --filetype=obj --assemble \ |
| 18 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ | 15 ; RUN: --disassemble --target arm32 -i %s --args -O2 \ |
| 19 ; RUN: -allow-externally-defined-symbols \ | 16 ; RUN: -allow-externally-defined-symbols \ |
| 20 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 17 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
| 21 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-O2 %s | 18 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-O2 %s |
| 22 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 19 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
| 23 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ | 20 ; RUN: --command %p2i --filetype=obj --assemble --disassemble --target arm32 \ |
| 24 ; RUN: -i %s --args -Om1 --skip-unimplemented \ | 21 ; RUN: -i %s --args -Om1 \ |
| 25 ; RUN: -allow-externally-defined-symbols \ | 22 ; RUN: -allow-externally-defined-symbols \ |
| 26 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 23 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
| 27 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-OM1 %s | 24 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-OM1 %s |
| 28 | 25 |
| 29 ; TODO(rkotler): Stop skipping unimplemented parts (via --skip-unimplemented) | 26 ; TODO(rkotler): Stop skipping unimplemented parts (via --skip-unimplemented) |
| 30 ; once enough infrastructure is in. Also, switch to --filetype=obj | 27 ; once enough infrastructure is in. Also, switch to --filetype=obj |
| 31 ; when possible. | 28 ; when possible. |
| 32 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ | 29 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ |
| 33 ; RUN: --command %p2i --filetype=asm --assemble \ | 30 ; RUN: --command %p2i --filetype=asm --assemble \ |
| 34 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ | 31 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 92 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 96 ; OPTM1: mov DWORD PTR [esp+0x4] | 93 ; OPTM1: mov DWORD PTR [esp+0x4] |
| 97 ; OPTM1: mov DWORD PTR [esp] | 94 ; OPTM1: mov DWORD PTR [esp] |
| 98 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b | 95 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b |
| 99 ; OPTM1: mov DWORD PTR [esp+0x10] | 96 ; OPTM1: mov DWORD PTR [esp+0x10] |
| 100 ; OPTM1: mov DWORD PTR [esp+0xc] | 97 ; OPTM1: mov DWORD PTR [esp+0xc] |
| 101 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 98 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 102 | 99 |
| 103 ; ARM32-LABEL: pass64BitArg | 100 ; ARM32-LABEL: pass64BitArg |
| 104 ; ARM32: str {{.*}}, [sp] | 101 ; ARM32: str {{.*}}, [sp] |
| 102 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline |
| 103 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline |
| 105 ; ARM32: mov r2, #123 | 104 ; ARM32: mov r2, #123 |
| 106 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 105 ; ARM32: blx [[CALL]] |
| 107 ; ARM32: str {{.*}}, [sp] | 106 ; ARM32: str {{.*}}, [sp] |
| 107 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline |
| 108 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline |
| 108 ; ARM32: {{mov|ldr}} r0 | 109 ; ARM32: {{mov|ldr}} r0 |
| 109 ; ARM32: {{mov|ldr}} r1 | 110 ; ARM32: {{mov|ldr}} r1 |
| 110 ; ARM32: mov r2, #123 | 111 ; ARM32: mov r2, #123 |
| 111 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 112 ; ARM32: blx [[CALL]] |
| 112 ; ARM32: str {{.*}}, [sp] | 113 ; ARM32: str {{.*}}, [sp] |
| 114 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline |
| 115 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline |
| 113 ; ARM32: {{mov|ldr}} r0 | 116 ; ARM32: {{mov|ldr}} r0 |
| 114 ; ARM32: {{mov|ldr}} r1 | 117 ; ARM32: {{mov|ldr}} r1 |
| 115 ; ARM32: mov r2, #123 | 118 ; ARM32: mov r2, #123 |
| 116 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 119 ; ARM32: blx [[CALL]] |
| 117 | 120 |
| 118 ; MIPS32-LABEL: pass64BitArg | 121 ; MIPS32-LABEL: pass64BitArg |
| 119 | 122 |
| 120 | 123 |
| 121 declare i32 @ignore64BitArgNoInline(i64, i32, i64) | 124 declare i32 @ignore64BitArgNoInline(i64, i32, i64) |
| 122 | 125 |
| 123 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { | 126 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { |
| 124 entry: | 127 entry: |
| 125 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672
5256) | 128 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672
5256) |
| 126 ret i32 %call | 129 ret i32 %call |
| (...skipping 21 matching lines...) Expand all Loading... |
| 148 ; OPTM1-NOT: mov | 151 ; OPTM1-NOT: mov |
| 149 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 152 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 150 | 153 |
| 151 ; ARM32-LABEL: pass64BitConstArg | 154 ; ARM32-LABEL: pass64BitConstArg |
| 152 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef | 155 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef |
| 153 ; ARM32: movt [[REG1]], {{.*}} ; 0xdead | 156 ; ARM32: movt [[REG1]], {{.*}} ; 0xdead |
| 154 ; ARM32: movw [[REG2:r.*]], {{.*}} ; 0x5678 | 157 ; ARM32: movw [[REG2:r.*]], {{.*}} ; 0x5678 |
| 155 ; ARM32: movt [[REG2]], {{.*}} ; 0x1234 | 158 ; ARM32: movt [[REG2]], {{.*}} ; 0x1234 |
| 156 ; ARM32: str [[REG1]], [sp, #4] | 159 ; ARM32: str [[REG1]], [sp, #4] |
| 157 ; ARM32: str [[REG2]], [sp] | 160 ; ARM32: str [[REG2]], [sp] |
| 161 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline |
| 162 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline |
| 158 ; ARM32: {{mov|ldr}} r0 | 163 ; ARM32: {{mov|ldr}} r0 |
| 159 ; ARM32: {{mov|ldr}} r1 | 164 ; ARM32: {{mov|ldr}} r1 |
| 160 ; ARM32: mov r2, #123 | 165 ; ARM32: mov r2, #123 |
| 161 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 166 ; ARM32: blx [[CALL]] |
| 167 |
| 162 | 168 |
| 163 define internal i32 @pass64BitUndefArg() { | 169 define internal i32 @pass64BitUndefArg() { |
| 164 entry: | 170 entry: |
| 165 %call = call i32 @ignore64BitArgNoInline(i64 0, i32 123, i64 undef) | 171 %call = call i32 @ignore64BitArgNoInline(i64 0, i32 123, i64 undef) |
| 166 ret i32 %call | 172 ret i32 %call |
| 167 } | 173 } |
| 168 ; CHECK-LABEL: pass64BitUndefArg | 174 ; CHECK-LABEL: pass64BitUndefArg |
| 169 ; CHECK: sub esp | 175 ; CHECK: sub esp |
| 170 ; CHECK: mov DWORD PTR{{.*}},0x7b | 176 ; CHECK: mov DWORD PTR{{.*}},0x7b |
| 171 ; CHECK: mov DWORD PTR{{.*}},0x0 | 177 ; CHECK: mov DWORD PTR{{.*}},0x0 |
| 172 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 178 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 173 ; OPTM1-LABEL: pass64BitUndefArg | 179 ; OPTM1-LABEL: pass64BitUndefArg |
| 174 ; OPTM1: sub esp | 180 ; OPTM1: sub esp |
| 175 ; OPTM1: mov DWORD PTR{{.*}},0x7b | 181 ; OPTM1: mov DWORD PTR{{.*}},0x7b |
| 176 ; OPTM1: mov DWORD PTR{{.*}},0x0 | 182 ; OPTM1: mov DWORD PTR{{.*}},0x0 |
| 177 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 183 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 178 ; ARM32-LABEL: pass64BitUndefArg | 184 ; ARM32-LABEL: pass64BitUndefArg |
| 179 ; ARM32: sub sp | 185 ; ARM32: sub sp |
| 180 ; ARM32: mov {{.*}}, #0 | 186 ; ARM32: mov {{.*}}, #0 |
| 181 ; ARM32: str | 187 ; ARM32: str |
| 188 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} ignore64BitArgNoInline |
| 189 ; ARM32: movt [[CALL]], {{.+}} ignore64BitArgNoInline |
| 182 ; ARM32: mov {{.*}}, #123 | 190 ; ARM32: mov {{.*}}, #123 |
| 183 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 191 ; ARM32: blx [[CALL]] |
| 184 | 192 |
| 185 ; MIPS32-LABEL: pass64BitUndefArg | 193 ; MIPS32-LABEL: pass64BitUndefArg |
| 186 ; MIPS32: jr ra | 194 ; MIPS32: jr ra |
| 187 | 195 |
| 188 define internal i64 @return64BitArg(i64 %padding, i64 %a) { | 196 define internal i64 @return64BitArg(i64 %padding, i64 %a) { |
| 189 entry: | 197 entry: |
| 190 ret i64 %a | 198 ret i64 %a |
| 191 } | 199 } |
| 192 ; CHECK-LABEL: return64BitArg | 200 ; CHECK-LABEL: return64BitArg |
| 193 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc] | 201 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc] |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 } | 389 } |
| 382 ; CHECK-LABEL: div64BitSigned | 390 ; CHECK-LABEL: div64BitSigned |
| 383 ; CHECK: call {{.*}} R_{{.*}} __divdi3 | 391 ; CHECK: call {{.*}} R_{{.*}} __divdi3 |
| 384 | 392 |
| 385 ; OPTM1-LABEL: div64BitSigned | 393 ; OPTM1-LABEL: div64BitSigned |
| 386 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 | 394 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 |
| 387 ; | 395 ; |
| 388 ; ARM32-LABEL: div64BitSigned | 396 ; ARM32-LABEL: div64BitSigned |
| 389 ; ARM32: orrs {{r.*}}, {{r.*}} | 397 ; ARM32: orrs {{r.*}}, {{r.*}} |
| 390 ; ARM32: bne | 398 ; ARM32: bne |
| 391 ; ARM32: bl {{.*}} __divdi3 | 399 ; ARM32: movw» [[CALL:r[0-9]]], {{.+}} __divdi3 |
| 400 ; ARM32: movt» [[CALL]], {{.+}} __divdi3 |
| 401 ; ARM32: blx [[CALL]] |
| 392 | 402 |
| 393 define internal i64 @div64BitSignedConst(i64 %a) { | 403 define internal i64 @div64BitSignedConst(i64 %a) { |
| 394 entry: | 404 entry: |
| 395 %div = sdiv i64 %a, 12345678901234 | 405 %div = sdiv i64 %a, 12345678901234 |
| 396 ret i64 %div | 406 ret i64 %div |
| 397 } | 407 } |
| 398 ; CHECK-LABEL: div64BitSignedConst | 408 ; CHECK-LABEL: div64BitSignedConst |
| 399 ; CHECK: mov DWORD PTR [esp+0xc],0xb3a | 409 ; CHECK: mov DWORD PTR [esp+0xc],0xb3a |
| 400 ; CHECK: mov DWORD PTR [esp+0x8],0x73ce2ff2 | 410 ; CHECK: mov DWORD PTR [esp+0x8],0x73ce2ff2 |
| 401 ; CHECK: call {{.*}} R_{{.*}} __divdi3 | 411 ; CHECK: call {{.*}} R_{{.*}} __divdi3 |
| 402 ; | 412 ; |
| 403 ; OPTM1-LABEL: div64BitSignedConst | 413 ; OPTM1-LABEL: div64BitSignedConst |
| 404 ; OPTM1: mov DWORD PTR [esp+0xc],0xb3a | 414 ; OPTM1: mov DWORD PTR [esp+0xc],0xb3a |
| 405 ; OPTM1: mov DWORD PTR [esp+0x8],0x73ce2ff2 | 415 ; OPTM1: mov DWORD PTR [esp+0x8],0x73ce2ff2 |
| 406 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 | 416 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 |
| 407 ; | 417 ; |
| 408 ; ARM32-LABEL: div64BitSignedConst | 418 ; ARM32-LABEL: div64BitSignedConst |
| 409 ; For a constant, we should be able to optimize-out the divide by zero check. | 419 ; For a constant, we should be able to optimize-out the divide by zero check. |
| 410 ; ARM32-NOT: orrs | 420 ; ARM32-NOT: orrs |
| 421 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} __divdi3 |
| 422 ; ARM32: movt [[CALL]], {{.+}} __divdi3 |
| 411 ; ARM32: movw {{.*}} ; 0x2ff2 | 423 ; ARM32: movw {{.*}} ; 0x2ff2 |
| 412 ; ARM32: movt {{.*}} ; 0x73ce | 424 ; ARM32: movt {{.*}} ; 0x73ce |
| 413 ; ARM32: movw {{.*}} ; 0xb3a | 425 ; ARM32: movw {{.*}} ; 0xb3a |
| 414 ; ARM32: bl {{.*}} __divdi3 | 426 ; ARM32: blx [[CALL]] |
| 415 | 427 |
| 416 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { | 428 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { |
| 417 entry: | 429 entry: |
| 418 %div = udiv i64 %a, %b | 430 %div = udiv i64 %a, %b |
| 419 ret i64 %div | 431 ret i64 %div |
| 420 } | 432 } |
| 421 ; CHECK-LABEL: div64BitUnsigned | 433 ; CHECK-LABEL: div64BitUnsigned |
| 422 ; CHECK: call {{.*}} R_{{.*}} __udivdi3 | 434 ; CHECK: call {{.*}} R_{{.*}} __udivdi3 |
| 423 ; | 435 ; |
| 424 ; OPTM1-LABEL: div64BitUnsigned | 436 ; OPTM1-LABEL: div64BitUnsigned |
| 425 ; OPTM1: call {{.*}} R_{{.*}} __udivdi3 | 437 ; OPTM1: call {{.*}} R_{{.*}} __udivdi3 |
| 426 ; | 438 ; |
| 427 ; ARM32-LABEL: div64BitUnsigned | 439 ; ARM32-LABEL: div64BitUnsigned |
| 428 ; ARM32: orrs {{r.*}}, {{r.*}} | 440 ; ARM32: orrs {{r.*}}, {{r.*}} |
| 429 ; ARM32: bne | 441 ; ARM32: bne |
| 430 ; ARM32: bl {{.*}} __udivdi3 | 442 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} __udivdi3 |
| 443 ; ARM32: movt [[CALL]], {{.+}} __udivdi3 |
| 444 ; ARM32: blx [[CALL]] |
| 431 | 445 |
| 432 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { | 446 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { |
| 433 entry: | 447 entry: |
| 434 %rem = srem i64 %a, %b | 448 %rem = srem i64 %a, %b |
| 435 ret i64 %rem | 449 ret i64 %rem |
| 436 } | 450 } |
| 437 ; CHECK-LABEL: rem64BitSigned | 451 ; CHECK-LABEL: rem64BitSigned |
| 438 ; CHECK: call {{.*}} R_{{.*}} __moddi3 | 452 ; CHECK: call {{.*}} R_{{.*}} __moddi3 |
| 439 ; | 453 ; |
| 440 ; OPTM1-LABEL: rem64BitSigned | 454 ; OPTM1-LABEL: rem64BitSigned |
| 441 ; OPTM1: call {{.*}} R_{{.*}} __moddi3 | 455 ; OPTM1: call {{.*}} R_{{.*}} __moddi3 |
| 442 ; | 456 ; |
| 443 ; ARM32-LABEL: rem64BitSigned | 457 ; ARM32-LABEL: rem64BitSigned |
| 444 ; ARM32: orrs {{r.*}}, {{r.*}} | 458 ; ARM32: orrs {{r.*}}, {{r.*}} |
| 445 ; ARM32: bne | 459 ; ARM32: bne |
| 446 ; ARM32: bl {{.*}} __moddi3 | 460 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} __moddi3 |
| 461 ; ARM32: movt [[CALL]], {{.+}} __moddi3 |
| 462 ; ARM32: blx [[CALL]] |
| 447 | 463 |
| 448 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { | 464 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { |
| 449 entry: | 465 entry: |
| 450 %rem = urem i64 %a, %b | 466 %rem = urem i64 %a, %b |
| 451 ret i64 %rem | 467 ret i64 %rem |
| 452 } | 468 } |
| 453 ; CHECK-LABEL: rem64BitUnsigned | 469 ; CHECK-LABEL: rem64BitUnsigned |
| 454 ; CHECK: call {{.*}} R_{{.*}} __umoddi3 | 470 ; CHECK: call {{.*}} R_{{.*}} __umoddi3 |
| 455 ; | 471 ; |
| 456 ; OPTM1-LABEL: rem64BitUnsigned | 472 ; OPTM1-LABEL: rem64BitUnsigned |
| 457 ; OPTM1: call {{.*}} R_{{.*}} __umoddi3 | 473 ; OPTM1: call {{.*}} R_{{.*}} __umoddi3 |
| 458 ; | 474 ; |
| 459 ; ARM32-LABEL: rem64BitUnsigned | 475 ; ARM32-LABEL: rem64BitUnsigned |
| 460 ; ARM32: orrs {{r.*}}, {{r.*}} | 476 ; ARM32: orrs {{r.*}}, {{r.*}} |
| 461 ; ARM32: bne | 477 ; ARM32: bne |
| 462 ; ARM32: bl {{.*}} __umoddi3 | 478 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} __umoddi3 |
| 479 ; ARM32: movt [[CALL]], {{.+}} __umoddi3 |
| 480 ; ARM32: blx [[CALL]] |
| 463 | 481 |
| 464 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { | 482 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { |
| 465 entry: | 483 entry: |
| 466 %shl = shl i64 %a, %b | 484 %shl = shl i64 %a, %b |
| 467 ret i64 %shl | 485 ret i64 %shl |
| 468 } | 486 } |
| 469 ; CHECK-LABEL: shl64BitSigned | 487 ; CHECK-LABEL: shl64BitSigned |
| 470 ; CHECK: shld | 488 ; CHECK: shld |
| 471 ; CHECK: shl e | 489 ; CHECK: shl e |
| 472 ; CHECK: test {{.*}},0x20 | 490 ; CHECK: test {{.*}},0x20 |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1115 ; OPTM1-NEXT: cmp [[RESULT]],0x0 | 1133 ; OPTM1-NEXT: cmp [[RESULT]],0x0 |
| 1116 ; OPTM1-NEXT: jne | 1134 ; OPTM1-NEXT: jne |
| 1117 ; OPTM1-NEXT: jmp | 1135 ; OPTM1-NEXT: jmp |
| 1118 ; OPTM1-NEXT: call | 1136 ; OPTM1-NEXT: call |
| 1119 | 1137 |
| 1120 ; ARM32-LABEL: icmpEq64 | 1138 ; ARM32-LABEL: icmpEq64 |
| 1121 ; ARM32: cmp | 1139 ; ARM32: cmp |
| 1122 ; ARM32: cmpeq | 1140 ; ARM32: cmpeq |
| 1123 ; ARM32-OM1: tst | 1141 ; ARM32-OM1: tst |
| 1124 ; ARM32: bne | 1142 ; ARM32: bne |
| 1125 ; ARM32: bl {{.*}} <func> | 1143 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} func |
| 1144 ; ARM32: movt [[CALL]], {{.+}} func |
| 1145 ; ARM32: blx [[CALL]] |
| 1126 ; ARM32: cmp | 1146 ; ARM32: cmp |
| 1127 ; ARM32: cmpeq | 1147 ; ARM32: cmpeq |
| 1128 ; ARM32-OM1: tst | 1148 ; ARM32-OM1: tst |
| 1129 ; ARM32: bne | 1149 ; ARM32: bne |
| 1130 ; ARM32: bl {{.*}} <func> | 1150 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} func |
| 1151 ; ARM32: movt [[CALL]], {{.+}} func |
| 1152 ; ARM32: blx [[CALL]] |
| 1131 ; ARM32: bx | 1153 ; ARM32: bx |
| 1132 | 1154 |
| 1133 declare void @func() | 1155 declare void @func() |
| 1134 | 1156 |
| 1135 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1157 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 1136 entry: | 1158 entry: |
| 1137 %cmp = icmp ne i64 %a, %b | 1159 %cmp = icmp ne i64 %a, %b |
| 1138 br i1 %cmp, label %if.then, label %if.end | 1160 br i1 %cmp, label %if.then, label %if.end |
| 1139 | 1161 |
| 1140 if.then: ; preds = %entry | 1162 if.then: ; preds = %entry |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1185 ; OPTM1-NEXT: jne {{.*}} | 1207 ; OPTM1-NEXT: jne {{.*}} |
| 1186 ; OPTM1-NEXT: jmp {{.*}} | 1208 ; OPTM1-NEXT: jmp {{.*}} |
| 1187 ; OPTM1-NEXT: call | 1209 ; OPTM1-NEXT: call |
| 1188 | 1210 |
| 1189 ; ARM32-LABEL: icmpNe64 | 1211 ; ARM32-LABEL: icmpNe64 |
| 1190 ; ARM32: cmp | 1212 ; ARM32: cmp |
| 1191 ; ARM32: cmpeq | 1213 ; ARM32: cmpeq |
| 1192 ; ARM32-OM1: tst | 1214 ; ARM32-OM1: tst |
| 1193 ; ARM32-OM1: bne | 1215 ; ARM32-OM1: bne |
| 1194 ; ARM32-O2: beq | 1216 ; ARM32-O2: beq |
| 1195 ; ARM32: bl {{.*}} <func> | 1217 ; ARM32: movw [[CALL:r[0-9]]], {{.+}} func |
| 1218 ; ARM32: movt [[CALL]], {{.+}} func |
| 1219 ; ARM32: blx [[CALL]] |
| 1196 ; ARM32: cmp | 1220 ; ARM32: cmp |
| 1197 ; ARM32: cmpeq | 1221 ; ARM32: cmpeq |
| 1198 ; ARM32-OM1: tst | 1222 ; ARM32-OM1: tst |
| 1199 ; ARM32-OM1: bne | 1223 ; ARM32-OM1: bne |
| 1200 ; ARM32-O2: beq | 1224 ; ARM32-O2: beq |
| 1201 ; ARM32: bl | 1225 ; ARM32: bl |
| 1202 | 1226 |
| 1203 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1227 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
| 1204 entry: | 1228 entry: |
| 1205 %cmp = icmp ugt i64 %a, %b | 1229 %cmp = icmp ugt i64 %a, %b |
| (...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1930 ; CHECK-LABEL: phi64Undef | 1954 ; CHECK-LABEL: phi64Undef |
| 1931 ; CHECK: mov {{.*}},0x0 | 1955 ; CHECK: mov {{.*}},0x0 |
| 1932 ; CHECK: mov {{.*}},0x0 | 1956 ; CHECK: mov {{.*}},0x0 |
| 1933 ; OPTM1-LABEL: phi64Undef | 1957 ; OPTM1-LABEL: phi64Undef |
| 1934 ; OPTM1: mov {{.*}},0x0 | 1958 ; OPTM1: mov {{.*}},0x0 |
| 1935 ; OPTM1: mov {{.*}},0x0 | 1959 ; OPTM1: mov {{.*}},0x0 |
| 1936 ; ARM32-LABEL: phi64Undef | 1960 ; ARM32-LABEL: phi64Undef |
| 1937 ; ARM32: mov {{.*}} #0 | 1961 ; ARM32: mov {{.*}} #0 |
| 1938 ; ARM32: mov {{.*}} #0 | 1962 ; ARM32: mov {{.*}} #0 |
| 1939 | 1963 |
| OLD | NEW |