1
1
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2
- # RUN: llc -run-pass=phi-node-elimination -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s
2
+ # RUN: llc -run-pass=livevars, phi-node-elimination -verify-machineinstrs -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s
3
3
4
4
# Verify that the original COPY in bb.1 is reappropriated as the PHI source in bb.2,
5
5
# instead of creating a new COPY with the same source register.
@@ -13,18 +13,18 @@ body: |
13
13
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
14
14
; CHECK-NEXT: liveins: $nzcv, $w0
15
15
; CHECK-NEXT: {{ $}}
16
- ; CHECK-NEXT: %a:gpr32 = COPY $w0
16
+ ; CHECK-NEXT: %a:gpr32 = COPY killed $w0
17
17
; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr32 = IMPLICIT_DEF
18
- ; CHECK-NEXT: Bcc 8, %bb.2, implicit $nzcv
18
+ ; CHECK-NEXT: Bcc 8, %bb.2, implicit killed $nzcv
19
19
; CHECK-NEXT: {{ $}}
20
20
; CHECK-NEXT: bb.1:
21
21
; CHECK-NEXT: successors: %bb.2(0x80000000)
22
22
; CHECK-NEXT: {{ $}}
23
- ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr32 = COPY %a
23
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr32 = COPY killed %a
24
24
; CHECK-NEXT: {{ $}}
25
25
; CHECK-NEXT: bb.2:
26
- ; CHECK-NEXT: %c:gpr32 = COPY [[DEF]]
27
- ; CHECK-NEXT: %d:gpr32 = COPY %c
26
+ ; CHECK-NEXT: %c:gpr32 = COPY killed [[DEF]]
27
+ ; CHECK-NEXT: dead %d:gpr32 = COPY killed %c
28
28
bb.0:
29
29
liveins: $nzcv, $w0
30
30
%a:gpr32 = COPY $w0
@@ -46,16 +46,16 @@ body: |
46
46
; CHECK-NEXT: liveins: $nzcv, $w0
47
47
; CHECK-NEXT: {{ $}}
48
48
; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr32 = IMPLICIT_DEF
49
- ; CHECK-NEXT: Bcc 8, %bb.2, implicit $nzcv
49
+ ; CHECK-NEXT: Bcc 8, %bb.2, implicit killed $nzcv
50
50
; CHECK-NEXT: {{ $}}
51
51
; CHECK-NEXT: bb.1:
52
52
; CHECK-NEXT: successors: %bb.2(0x80000000)
53
53
; CHECK-NEXT: {{ $}}
54
- ; CHECK-NEXT: $x0 = IMPLICIT_DEF
55
- ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr32 = COPY $w0
54
+ ; CHECK-NEXT: dead $x0 = IMPLICIT_DEF implicit-def $w0
55
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr32 = COPY killed $w0
56
56
; CHECK-NEXT: {{ $}}
57
57
; CHECK-NEXT: bb.2:
58
- ; CHECK-NEXT: %b:gpr32 = COPY [[DEF]]
58
+ ; CHECK-NEXT: dead %b:gpr32 = COPY killed [[DEF]]
59
59
bb.0:
60
60
liveins: $nzcv, $w0
61
61
Bcc 8, %bb.2, implicit $nzcv
@@ -83,15 +83,15 @@ body: |
83
83
; CHECK-NEXT: bb.1:
84
84
; CHECK-NEXT: successors: %bb.2(0x80000000)
85
85
; CHECK-NEXT: {{ $}}
86
- ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr64 = IMPLICIT_DEF
87
- ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gpr64 = IMPLICIT_DEF
86
+ ; CHECK-NEXT: dead [[DEF:%[0-9]+]]:gpr64 = IMPLICIT_DEF
87
+ ; CHECK-NEXT: dead [[DEF1:%[0-9]+]]:gpr64 = IMPLICIT_DEF
88
88
; CHECK-NEXT: B %bb.2
89
89
; CHECK-NEXT: {{ $}}
90
90
; CHECK-NEXT: bb.2:
91
91
; CHECK-NEXT: successors: %bb.1(0x80000000)
92
92
; CHECK-NEXT: {{ $}}
93
- ; CHECK-NEXT: [[DEF2:%[0-9]+]]:gpr64 = IMPLICIT_DEF
94
- ; CHECK-NEXT: [[DEF3:%[0-9]+]]:gpr64 = IMPLICIT_DEF
93
+ ; CHECK-NEXT: dead [[DEF2:%[0-9]+]]:gpr64 = IMPLICIT_DEF
94
+ ; CHECK-NEXT: dead [[DEF3:%[0-9]+]]:gpr64 = IMPLICIT_DEF
95
95
; CHECK-NEXT: B %bb.1
96
96
bb.0:
97
97
liveins: $wzr, $xzr
@@ -117,3 +117,77 @@ body: |
117
117
118
118
...
119
119
120
+ ---
121
+ name : update_livevars
122
+ tracksRegLiveness : true
123
+ body : |
124
+ ; CHECK-LABEL: name: update_livevars
125
+ ; CHECK: bb.0:
126
+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
127
+ ; CHECK-NEXT: liveins: $w0, $w1, $nzcv
128
+ ; CHECK-NEXT: {{ $}}
129
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY killed $w0
130
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY killed $w1
131
+ ; CHECK-NEXT: B %bb.1
132
+ ; CHECK-NEXT: {{ $}}
133
+ ; CHECK-NEXT: bb.1:
134
+ ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
135
+ ; CHECK-NEXT: liveins: $nzcv
136
+ ; CHECK-NEXT: {{ $}}
137
+ ; CHECK-NEXT: dead [[COPY2:%[0-9]+]]:gpr32 = COPY killed [[COPY1]]
138
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]
139
+ ; CHECK-NEXT: Bcc 1, %bb.1, implicit $nzcv
140
+ ; CHECK-NEXT: {{ $}}
141
+ ; CHECK-NEXT: bb.2:
142
+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
143
+ ; CHECK-NEXT: liveins: $nzcv
144
+ ; CHECK-NEXT: {{ $}}
145
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = IMPLICIT_DEF
146
+ ; CHECK-NEXT: B %bb.1
147
+ bb.0:
148
+ successors: %bb.1
149
+ liveins: $w0, $w1, $nzcv
150
+
151
+ %0:gpr32 = COPY killed $w0
152
+ %1:gpr32 = COPY killed $w1
153
+ B %bb.1
154
+
155
+ bb.1:
156
+ successors: %bb.2, %bb.1
157
+ liveins: $nzcv
158
+
159
+ %2:gpr32 = PHI %3, %bb.2, %1, %bb.0, %3, %bb.1
160
+ %3:gpr32 = COPY %0
161
+ Bcc 1, %bb.1, implicit $nzcv
162
+
163
+ bb.2:
164
+ successors: %bb.1
165
+ liveins: $nzcv
166
+
167
+ B %bb.1
168
+ ...
169
+
170
+ ---
171
+ name : copy_subreg
172
+ tracksRegLiveness : true
173
+ body : |
174
+ ; CHECK-LABEL: name: copy_subreg
175
+ ; CHECK: bb.0:
176
+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
177
+ ; CHECK-NEXT: liveins: $x0
178
+ ; CHECK-NEXT: {{ $}}
179
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY killed $x0
180
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY killed [[COPY]]
181
+ ; CHECK-NEXT: {{ $}}
182
+ ; CHECK-NEXT: bb.1:
183
+ ; CHECK-NEXT: dead [[COPY2:%[0-9]+]]:gpr32 = COPY killed [[COPY1]].sub_32
184
+ bb.0:
185
+ successors: %bb.1
186
+ liveins: $x0
187
+
188
+ %0:gpr64 = COPY killed $x0
189
+ %1:gpr64 = COPY killed %0
190
+
191
+ bb.1:
192
+ %2:gpr32 = PHI %1.sub_32, %bb.0
193
+ ...
0 commit comments