11# 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
33
44# Verify that the original COPY in bb.1 is reappropriated as the PHI source in bb.2,
55# instead of creating a new COPY with the same source register.
@@ -13,18 +13,18 @@ body: |
1313 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
1414 ; CHECK-NEXT: liveins: $nzcv, $w0
1515 ; CHECK-NEXT: {{ $}}
16- ; CHECK-NEXT: %a:gpr32 = COPY $w0
16+ ; CHECK-NEXT: %a:gpr32 = COPY killed $w0
1717 ; 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
1919 ; CHECK-NEXT: {{ $}}
2020 ; CHECK-NEXT: bb.1:
2121 ; CHECK-NEXT: successors: %bb.2(0x80000000)
2222 ; CHECK-NEXT: {{ $}}
23- ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr32 = COPY %a
23+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr32 = COPY killed %a
2424 ; CHECK-NEXT: {{ $}}
2525 ; 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
2828 bb.0:
2929 liveins: $nzcv, $w0
3030 %a:gpr32 = COPY $w0
@@ -46,16 +46,16 @@ body: |
4646 ; CHECK-NEXT: liveins: $nzcv, $w0
4747 ; CHECK-NEXT: {{ $}}
4848 ; 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
5050 ; CHECK-NEXT: {{ $}}
5151 ; CHECK-NEXT: bb.1:
5252 ; CHECK-NEXT: successors: %bb.2(0x80000000)
5353 ; 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
5656 ; CHECK-NEXT: {{ $}}
5757 ; CHECK-NEXT: bb.2:
58- ; CHECK-NEXT: %b:gpr32 = COPY [[DEF]]
58+ ; CHECK-NEXT: dead %b:gpr32 = COPY killed [[DEF]]
5959 bb.0:
6060 liveins: $nzcv, $w0
6161 Bcc 8, %bb.2, implicit $nzcv
@@ -83,15 +83,15 @@ body: |
8383 ; CHECK-NEXT: bb.1:
8484 ; CHECK-NEXT: successors: %bb.2(0x80000000)
8585 ; 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
8888 ; CHECK-NEXT: B %bb.2
8989 ; CHECK-NEXT: {{ $}}
9090 ; CHECK-NEXT: bb.2:
9191 ; CHECK-NEXT: successors: %bb.1(0x80000000)
9292 ; 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
9595 ; CHECK-NEXT: B %bb.1
9696 bb.0:
9797 liveins: $wzr, $xzr
@@ -117,3 +117,77 @@ body: |
117117
118118 ...
119119
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