13
13
14
14
# # Also verify that the store to the stack slot still exists.
15
15
16
- # CHECK-LABEL: bb.5:
17
- # CHECK: MOV64mi32 $rbp, 1, $noreg, -48, $noreg, 0 :: (store (s64) into %stack.0)
18
- # CHECK-LABEL: bb.6:
16
+ # CHECK-LABEL: bb.0:
17
+ # CHECK: MOV64mr $rbp, 1, $noreg, -48, $noreg, killed renamable $rax :: (store (s64) into %stack.0)
19
18
19
+ # # Finally, verify that when the register has a use between the restore and the
20
+ # # FAKE_USE, we do not delete the load or fake use.
21
+
22
+ # CHECK: renamable $r11 = MOV64rm $rbp, 1, $noreg, -40, $noreg :: (load (s64) from %stack.1)
23
+ # CHECK: renamable $r12d = XOR32rr $r12d, $r11d, implicit-def dead $eflags
24
+ # CHECK: FAKE_USE killed renamable $r11d
20
25
21
- --- |
22
- define void @_ZN1g1jEv(ptr %this, i1 %cmp36, ptr %ref.tmp5) {
23
- entry :
24
- ret void
25
- }
26
26
27
- ...
28
27
---
29
28
name : _ZN1g1jEv
30
29
alignment : 16
@@ -40,90 +39,36 @@ liveins:
40
39
frameInfo :
41
40
isCalleeSavedInfoValid : true
42
41
stack :
43
- - { id: 0, name: '', type: spill-slot, offset: -64, size: 8, alignment: 8,
42
+ - { id: 0, name: '', type: spill-slot, offset: -8, size: 8, alignment: 8,
43
+ stack-id : default, callee-saved-register: '', callee-saved-restored: true,
44
+ debug-info-variable : ' ' , debug-info-expression: '', debug-info-location: '' }
45
+ - { id: 1, name: '', type: spill-slot, offset: -16, size: 8, alignment: 8,
44
46
stack-id : default, callee-saved-register: '', callee-saved-restored: true,
45
47
debug-info-variable : ' ' , debug-info-expression: '', debug-info-location: '' }
46
48
body : |
47
49
bb.0:
48
- successors: %bb.2(0x80000000)
49
- liveins: $esi, $rdi, $rdx, $r15, $r14, $r13, $r12, $rbx
50
-
51
- frame-setup PUSH64r killed $rbp, implicit-def $rsp, implicit $rsp
52
- frame-setup CFI_INSTRUCTION def_cfa_offset 16
53
- frame-setup CFI_INSTRUCTION offset $rbp, -16
54
- $rbp = frame-setup MOV64rr $rsp
55
- frame-setup CFI_INSTRUCTION def_cfa_register $rbp
56
- frame-setup PUSH64r killed $r15, implicit-def $rsp, implicit $rsp
57
- frame-setup PUSH64r killed $r14, implicit-def $rsp, implicit $rsp
58
- frame-setup PUSH64r killed $r13, implicit-def $rsp, implicit $rsp
59
- frame-setup PUSH64r killed $r12, implicit-def $rsp, implicit $rsp
60
- frame-setup PUSH64r killed $rbx, implicit-def $rsp, implicit $rsp
61
- frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp
62
- CFI_INSTRUCTION offset $rbx, -56
63
- CFI_INSTRUCTION offset $r12, -48
64
- CFI_INSTRUCTION offset $r13, -40
65
- CFI_INSTRUCTION offset $r14, -32
66
- CFI_INSTRUCTION offset $r15, -24
50
+ liveins: $esi, $rdi, $rdx, $r15, $r14, $r13, $r12, $r11, $rbx
51
+
67
52
$rbx = MOV64rr $rdx
68
53
$r14d = MOV32rr $esi
69
54
$r15 = MOV64rr $rdi
70
55
renamable $r12d = XOR32rr undef $r12d, undef $r12d, implicit-def dead $eflags, implicit-def $r12
71
56
renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $rax
72
- JMP_1 %bb.2
73
-
74
- bb.1:
75
- successors: %bb.2(0x783e0f0f), %bb.6(0x07c1f0f1)
76
- liveins: $rbx, $r12, $r15, $r13d, $r14d
77
-
78
- renamable $rax = MOV64rm $rbp, 1, $noreg, -48, $noreg :: (load (s64) from %stack.0)
79
- FAKE_USE renamable $eax, implicit killed $rax
80
- renamable $eax = MOV32ri 1, implicit-def $rax
81
- TEST32rr killed renamable $r13d, renamable $r13d, implicit-def $eflags
82
- JCC_1 %bb.6, 9, implicit $eflags
83
-
84
- bb.2:
85
- successors: %bb.3(0x80000000)
86
- liveins: $rax, $rbx, $r12, $r15, $r14d
87
-
88
57
MOV64mr $rbp, 1, $noreg, -48, $noreg, killed renamable $rax :: (store (s64) into %stack.0)
58
+ MOV64mr $rbp, 1, $noreg, -40, $noreg, killed renamable $r11 :: (store (s64) into %stack.1)
89
59
renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags
90
-
91
- bb.3:
92
- successors: %bb.4(0x04000000), %bb.3(0x7c000000)
93
- liveins: $eax, $rbx, $r12, $r15, $r14d
94
-
95
60
$r13d = MOV32rr killed $eax
96
61
$rdi = MOV64rr $r15
97
62
CALL64r renamable $r12, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp
98
- dead renamable $eax = MOV32rm renamable $rbx, 1, $noreg, 0, $noreg :: (volatile load (s32) from %ir.ref.tmp5)
63
+ dead renamable $eax = MOV32rm renamable $rbx, 1, $noreg, 0, $noreg
99
64
renamable $eax = MOV32ri 1
100
65
TEST8ri renamable $r14b, 1, implicit-def $eflags
101
- JCC_1 %bb.3, 4, implicit $eflags
102
-
103
- bb.4:
104
- successors: %bb.5(0x40000000), %bb.1(0x40000000)
105
- liveins: $eflags, $rbx, $r12, $r15, $r13d, $r14d
106
-
107
- JCC_1 %bb.1, 4, implicit $eflags
108
-
109
- bb.5:
110
- successors: %bb.1(0x80000000)
111
- liveins: $rbx, $r12, $r15, $r13d, $r14d
112
-
113
- renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $rax
114
- MOV64mi32 $rbp, 1, $noreg, -48, $noreg, 0 :: (store (s64) into %stack.0)
115
- CALL64r killed renamable $rax, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def dead $eax
116
- JMP_1 %bb.1
117
-
118
- bb.6:
119
- $rsp = frame-destroy ADD64ri32 $rsp, 8, implicit-def dead $eflags
120
- $rbx = frame-destroy POP64r implicit-def $rsp, implicit $rsp
121
- $r12 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
122
- $r13 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
123
- $r14 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
124
- $r15 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
125
- $rbp = frame-destroy POP64r implicit-def $rsp, implicit $rsp
126
- frame-destroy CFI_INSTRUCTION def_cfa $rsp, 8
66
+ renamable $rax = MOV64rm $rbp, 1, $noreg, -48, $noreg :: (load (s64) from %stack.0)
67
+ FAKE_USE renamable $eax, implicit killed $rax
68
+ renamable $r11 = MOV64rm $rbp, 1, $noreg, -40, $noreg :: (load (s64) from %stack.1)
69
+ renamable $r12d = XOR32rr $r12d, $r11d, implicit-def dead $eflags
70
+ FAKE_USE killed renamable $r11d
71
+ TEST32rr killed renamable $r13d, renamable $r13d, implicit-def $eflags
127
72
RET64
128
73
129
74
...
0 commit comments