Skip to content

Commit 8df0575

Browse files
authored
AMDGPU: Add peephole opt baseline tests (llvm#161309)
Add tests which show missed folds of subregister extracts with intermediate full copies.
1 parent f4d18c0 commit 8df0575

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed

llvm/test/CodeGen/AMDGPU/peephole-opt-regseq-removal.mir

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,151 @@ body: |
8080
%4:vreg_128 = REG_SEQUENCE %3.sub0, %subreg.sub0, %3.sub1, %subreg.sub1, %3.sub2, %subreg.sub2, %3.sub3, %subreg.sub3
8181
KILL implicit %4
8282
...
83+
84+
---
85+
name: copy_vreg_64_subreg_from_vgpr_reg_sequence
86+
body: |
87+
bb.0:
88+
liveins: $vgpr0, $vgpr1
89+
; GCN-LABEL: name: copy_vreg_64_subreg_from_vgpr_reg_sequence
90+
; GCN: liveins: $vgpr0, $vgpr1
91+
; GCN-NEXT: {{ $}}
92+
; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
93+
; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
94+
; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
95+
; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]]
96+
; GCN-NEXT: $vgpr0 = COPY [[COPY2]]
97+
%0:vgpr_32 = COPY $vgpr0
98+
%1:vgpr_32 = COPY $vgpr1
99+
%2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1
100+
%3:vgpr_32 = COPY %2.sub0
101+
$vgpr0 = COPY %3
102+
...
103+
104+
---
105+
name: copy_vreg_64_subreg_from_vgpr_reg_sequence_extra_copy
106+
body: |
107+
bb.0:
108+
liveins: $vgpr0, $vgpr1
109+
; GCN-LABEL: name: copy_vreg_64_subreg_from_vgpr_reg_sequence_extra_copy
110+
; GCN: liveins: $vgpr0, $vgpr1
111+
; GCN-NEXT: {{ $}}
112+
; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
113+
; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
114+
; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
115+
; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
116+
; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY2]].sub0
117+
; GCN-NEXT: $vgpr0 = COPY [[COPY3]]
118+
%0:vgpr_32 = COPY $vgpr0
119+
%1:vgpr_32 = COPY $vgpr1
120+
%2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1
121+
%3:vreg_64 = COPY %2
122+
%4:vgpr_32 = COPY %3.sub0
123+
$vgpr0 = COPY %4
124+
...
125+
126+
---
127+
name: copy_av_64_subreg_from_vgpr_reg_sequence
128+
body: |
129+
bb.0:
130+
liveins: $vgpr0, $vgpr1
131+
; GCN-LABEL: name: copy_av_64_subreg_from_vgpr_reg_sequence
132+
; GCN: liveins: $vgpr0, $vgpr1
133+
; GCN-NEXT: {{ $}}
134+
; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
135+
; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
136+
; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
137+
; GCN-NEXT: [[COPY2:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE]]
138+
; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY2]].sub0
139+
; GCN-NEXT: $vgpr0 = COPY [[COPY3]]
140+
%0:vgpr_32 = COPY $vgpr0
141+
%1:vgpr_32 = COPY $vgpr1
142+
%2:vreg_64_align2 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1
143+
%3:av_64_align2 = COPY %2
144+
%4:vgpr_32 = COPY %3.sub0
145+
$vgpr0 = COPY %4
146+
...
147+
148+
---
149+
name: copy_vreg_64_subreg_from_vgpr_reg_sequence_with_sub0_compose
150+
body: |
151+
bb.0:
152+
liveins: $vgpr0_vgpr1
153+
; GCN-LABEL: name: copy_vreg_64_subreg_from_vgpr_reg_sequence_with_sub0_compose
154+
; GCN: liveins: $vgpr0_vgpr1
155+
; GCN-NEXT: {{ $}}
156+
; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
157+
; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
158+
; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]].sub0, %subreg.sub0, [[COPY1]], %subreg.sub1
159+
; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
160+
; GCN-NEXT: $vgpr0 = COPY [[COPY2]]
161+
%0:vreg_64 = COPY $vgpr0_vgpr1
162+
%1:vgpr_32 = COPY $vgpr1
163+
%2:vreg_64 = REG_SEQUENCE %0.sub0, %subreg.sub0, %1, %subreg.sub1
164+
%3:vgpr_32 = COPY %2.sub0
165+
$vgpr0 = COPY %3
166+
...
167+
168+
---
169+
name: copy_vreg_64_subreg_from_vgpr_reg_sequence_with_sub1_compose
170+
body: |
171+
bb.0:
172+
liveins: $vgpr0_vgpr1
173+
; GCN-LABEL: name: copy_vreg_64_subreg_from_vgpr_reg_sequence_with_sub1_compose
174+
; GCN: liveins: $vgpr0_vgpr1
175+
; GCN-NEXT: {{ $}}
176+
; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
177+
; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
178+
; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]].sub1, %subreg.sub0, [[COPY1]], %subreg.sub1
179+
; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
180+
; GCN-NEXT: $vgpr0 = COPY [[COPY2]]
181+
%0:vreg_64 = COPY $vgpr0_vgpr1
182+
%1:vgpr_32 = COPY $vgpr1
183+
%2:vreg_64 = REG_SEQUENCE %0.sub1, %subreg.sub0, %1, %subreg.sub1
184+
%3:vgpr_32 = COPY %2.sub0
185+
$vgpr0 = COPY %3
186+
...
187+
188+
---
189+
name: copy_vreg_64_subreg_from_multiple_vgpr_reg_sequence
190+
body: |
191+
bb.0:
192+
liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
193+
; GCN-LABEL: name: copy_vreg_64_subreg_from_multiple_vgpr_reg_sequence
194+
; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
195+
; GCN-NEXT: {{ $}}
196+
; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
197+
; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
198+
; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
199+
; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
200+
; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
201+
; GCN-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY3]], %subreg.sub1
202+
; GCN-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[REG_SEQUENCE]], %subreg.sub0_sub1, [[REG_SEQUENCE1]], %subreg.sub2_sub3
203+
; GCN-NEXT: [[COPY4:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
204+
; GCN-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE2]].sub1_sub2
205+
; GCN-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
206+
; GCN-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
207+
; GCN-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
208+
; GCN-NEXT: $vgpr0_vgpr1 = COPY [[COPY4]]
209+
; GCN-NEXT: $vgpr2_vgpr3 = COPY [[COPY5]]
210+
; GCN-NEXT: $vgpr4_vgpr5 = COPY [[COPY6]]
211+
; GCN-NEXT: $vgpr6 = COPY [[COPY7]]
212+
; GCN-NEXT: $vgpr6 = COPY [[COPY8]]
213+
%0:vgpr_32 = COPY $vgpr0
214+
%1:vgpr_32 = COPY $vgpr1
215+
%2:vgpr_32 = COPY $vgpr2
216+
%3:vgpr_32 = COPY $vgpr3
217+
%4:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1
218+
%5:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %3, %subreg.sub1
219+
%6:vreg_128 = REG_SEQUENCE %4, %subreg.sub0_sub1, %5, %subreg.sub2_sub3
220+
%7:vreg_64 = COPY %6.sub0_sub1
221+
%8:vreg_64 = COPY %6.sub1_sub2
222+
%9:vreg_64 = COPY %6.sub2_sub3
223+
%10:vgpr_32 = COPY %6.sub2
224+
%11:vgpr_32 = COPY %6.sub0
225+
$vgpr0_vgpr1 = COPY %7
226+
$vgpr2_vgpr3 = COPY %8
227+
$vgpr4_vgpr5 = COPY %9
228+
$vgpr6 = COPY %10
229+
$vgpr6 = COPY %11
230+
...

0 commit comments

Comments
 (0)