|
1 | 1 | # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
|
2 | 2 | # Ensure that loads into FAKE_USEs are correctly removed by the
|
3 | 3 | # remove-loads-into-fake-uses pass.
|
4 |
| -# RUN: llc -run-pass remove-loads-into-fake-uses -mtriple=x86_64-unknown-linux -debug-only=remove-loads-into-fake-uses 2>&1 -o - %s | FileCheck %s |
| 4 | +# RUN: llc -run-pass remove-loads-into-fake-uses -mtriple=x86_64-unknown-linux -debug-only=remove-loads-into-fake-uses 2>&1 -o - %s | FileCheck %s --check-prefix=ENABLED |
| 5 | +# RUN: llc -run-pass remove-loads-into-fake-uses -mtriple=x86_64-unknown-linux -debug-only=remove-loads-into-fake-uses -experimental-debug-variable-locations=false 2>&1 -o - %s | FileCheck %s --check-prefixes=DISABLED |
5 | 6 | # REQUIRES: asserts
|
6 | 7 | #
|
7 | 8 | ## We verify that:
|
@@ -39,35 +40,66 @@ body: |
|
39 | 40 | bb.0:
|
40 | 41 | liveins: $esi, $rdi, $rdx, $r15, $r14, $r13, $r12, $r11, $rbx
|
41 | 42 |
|
42 |
| - ; CHECK-LABEL: name: _ZN1g1jEv |
43 |
| - ; CHECK: liveins: $esi, $rdi, $rdx, $r15, $r14, $r13, $r12, $r11, $rbx |
44 |
| - ; CHECK-NEXT: {{ $}} |
45 |
| - ; CHECK-NEXT: $rbx = MOV64rr $rdx |
46 |
| - ; CHECK-NEXT: $r14d = MOV32rr $esi |
47 |
| - ; CHECK-NEXT: $r15 = MOV64rr $rdi |
48 |
| - ; CHECK-NEXT: renamable $r12d = XOR32rr undef $r12d, undef $r12d, implicit-def dead $eflags, implicit-def $r12 |
49 |
| - ; CHECK-NEXT: renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $rax |
| 43 | +
|
| 44 | +
|
| 45 | +
|
| 46 | +
|
| 47 | + ; ENABLED-LABEL: name: _ZN1g1jEv |
| 48 | + ; ENABLED: liveins: $esi, $rdi, $rdx, $r15, $r14, $r13, $r12, $r11, $rbx |
| 49 | + ; ENABLED-NEXT: {{ $}} |
| 50 | + ; ENABLED-NEXT: $rbx = MOV64rr $rdx |
| 51 | + ; ENABLED-NEXT: $r14d = MOV32rr $esi |
| 52 | + ; ENABLED-NEXT: $r15 = MOV64rr $rdi |
| 53 | + ; ENABLED-NEXT: renamable $r12d = XOR32rr undef $r12d, undef $r12d, implicit-def dead $eflags, implicit-def $r12 |
| 54 | + ; ENABLED-NEXT: renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $rax |
50 | 55 |
|
51 | 56 | ;; The store to the stack slot is still present.
|
52 |
| - ; CHECK-NEXT: MOV64mr $rbp, 1, $noreg, -48, $noreg, killed renamable $rax :: (store (s64) into %stack.0) |
53 |
| - |
54 |
| - ; CHECK-NEXT: MOV64mr $rbp, 1, $noreg, -40, $noreg, killed renamable $r11 :: (store (s64) into %stack.1) |
55 |
| - ; CHECK-NEXT: renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags |
56 |
| - ; CHECK-NEXT: $r13d = MOV32rr killed $eax |
57 |
| - ; CHECK-NEXT: $rdi = MOV64rr $r15 |
58 |
| - ; CHECK-NEXT: CALL64r renamable $r12, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp |
59 |
| - ; CHECK-NEXT: dead renamable $eax = MOV32rm renamable $rbx, 1, $noreg, 0, $noreg |
60 |
| - ; CHECK-NEXT: renamable $eax = MOV32ri 1 |
61 |
| - ; CHECK-NEXT: TEST8ri renamable $r14b, 1, implicit-def $eflags |
| 57 | + ; ENABLED-NEXT: MOV64mr $rbp, 1, $noreg, -48, $noreg, killed renamable $rax :: (store (s64) into %stack.0) |
| 58 | +
|
| 59 | + ; ENABLED-NEXT: MOV64mr $rbp, 1, $noreg, -40, $noreg, killed renamable $r11 :: (store (s64) into %stack.1) |
| 60 | + ; ENABLED-NEXT: renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags |
| 61 | + ; ENABLED-NEXT: $r13d = MOV32rr killed $eax |
| 62 | + ; ENABLED-NEXT: $rdi = MOV64rr $r15 |
| 63 | + ; ENABLED-NEXT: CALL64r renamable $r12, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp |
| 64 | + ; ENABLED-NEXT: dead renamable $eax = MOV32rm renamable $rbx, 1, $noreg, 0, $noreg |
| 65 | + ; ENABLED-NEXT: renamable $eax = MOV32ri 1 |
| 66 | + ; ENABLED-NEXT: TEST8ri renamable $r14b, 1, implicit-def $eflags |
62 | 67 |
|
63 | 68 | ;; First FAKE_USE and its corresponding load are removed; second FAKE_USE of
|
64 | 69 | ;; a restored value that is also used is preserved.
|
65 |
| - ; CHECK-NEXT: renamable $r11 = MOV64rm $rbp, 1, $noreg, -40, $noreg :: (load (s64) from %stack.1) |
66 |
| - ; CHECK-NEXT: renamable $r12d = XOR32rr $r12d, $r11d, implicit-def dead $eflags |
67 |
| - ; CHECK-NEXT: FAKE_USE killed renamable $r11d |
| 70 | + ; ENABLED-NEXT: renamable $r11 = MOV64rm $rbp, 1, $noreg, -40, $noreg :: (load (s64) from %stack.1) |
| 71 | + ; ENABLED-NEXT: renamable $r12d = XOR32rr $r12d, $r11d, implicit-def dead $eflags |
| 72 | + ; ENABLED-NEXT: FAKE_USE killed renamable $r11d |
| 73 | +
|
| 74 | + ; ENABLED-NEXT: TEST32rr killed renamable $r13d, renamable $r13d, implicit-def $eflags |
| 75 | + ; ENABLED-NEXT: RET64 |
| 76 | + ; |
| 77 | + ; DISABLED-LABEL: name: _ZN1g1jEv |
| 78 | + ; DISABLED: liveins: $esi, $rdi, $rdx, $r15, $r14, $r13, $r12, $r11, $rbx |
| 79 | + ; DISABLED-NEXT: {{ $}} |
| 80 | + ; DISABLED-NEXT: $rbx = MOV64rr $rdx |
| 81 | + ; DISABLED-NEXT: $r14d = MOV32rr $esi |
| 82 | + ; DISABLED-NEXT: $r15 = MOV64rr $rdi |
| 83 | + ; DISABLED-NEXT: renamable $r12d = XOR32rr undef $r12d, undef $r12d, implicit-def dead $eflags, implicit-def $r12 |
| 84 | + ; DISABLED-NEXT: renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $rax |
| 85 | + ; DISABLED-NEXT: MOV64mr $rbp, 1, $noreg, -48, $noreg, killed renamable $rax :: (store (s64) into %stack.0) |
| 86 | + ; DISABLED-NEXT: MOV64mr $rbp, 1, $noreg, -40, $noreg, killed renamable $r11 :: (store (s64) into %stack.1) |
| 87 | + ; DISABLED-NEXT: renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags |
| 88 | + ; DISABLED-NEXT: $r13d = MOV32rr killed $eax |
| 89 | + ; DISABLED-NEXT: $rdi = MOV64rr $r15 |
| 90 | + ; DISABLED-NEXT: CALL64r renamable $r12, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp |
| 91 | + ; DISABLED-NEXT: dead renamable $eax = MOV32rm renamable $rbx, 1, $noreg, 0, $noreg |
| 92 | + ; DISABLED-NEXT: renamable $eax = MOV32ri 1 |
| 93 | + ; DISABLED-NEXT: TEST8ri renamable $r14b, 1, implicit-def $eflags |
68 | 94 |
|
69 |
| - ; CHECK-NEXT: TEST32rr killed renamable $r13d, renamable $r13d, implicit-def $eflags |
70 |
| - ; CHECK-NEXT: RET64 |
| 95 | + ;; Verify that when instr-ref is disabled, we do not remove fake uses. |
| 96 | + ; DISABLED-NEXT: renamable $rax = MOV64rm $rbp, 1, $noreg, -48, $noreg :: (load (s64) from %stack.0) |
| 97 | + ; DISABLED-NEXT: FAKE_USE renamable $eax, implicit killed $rax |
| 98 | + ; DISABLED-NEXT: renamable $r11 = MOV64rm $rbp, 1, $noreg, -40, $noreg :: (load (s64) from %stack.1) |
| 99 | + ; DISABLED-NEXT: renamable $r12d = XOR32rr $r12d, $r11d, implicit-def dead $eflags |
| 100 | + ; DISABLED-NEXT: FAKE_USE killed renamable $r11d |
| 101 | + ; DISABLED-NEXT: TEST32rr killed renamable $r13d, renamable $r13d, implicit-def $eflags |
| 102 | + ; DISABLED-NEXT: RET64 |
71 | 103 | $rbx = MOV64rr $rdx
|
72 | 104 | $r14d = MOV32rr $esi
|
73 | 105 | $r15 = MOV64rr $rdi
|
|
0 commit comments