[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / copy_phys_vgpr64.mir
blob7c21b3e08580444160145c3d3f03c965d883546d
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=gfx908 -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX908 %s
3 # RUN: llc -mtriple=amdgcn -mcpu=gfx90a -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX90A %s
4 # RUN: llc -mtriple=amdgcn -mcpu=gfx940 -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX940 %s
5 # RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX10 %s
6 # RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX10 %s
8 ---
9 name: copy_v64_to_v64
10 tracksRegLiveness: true
11 body: |
12   bb.0:
13     liveins: $vgpr2_vgpr3
14     ; GFX908-LABEL: name: copy_v64_to_v64
15     ; GFX908: liveins: $vgpr2_vgpr3
16     ; GFX908-NEXT: {{  $}}
17     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
18     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
19     ;
20     ; GFX90A-LABEL: name: copy_v64_to_v64
21     ; GFX90A: liveins: $vgpr2_vgpr3
22     ; GFX90A-NEXT: {{  $}}
23     ; GFX90A-NEXT: $vgpr0_vgpr1 = V_PK_MOV_B32 8, $vgpr2_vgpr3, 12, $vgpr2_vgpr3, 0, 0, 0, 0, 0, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
24     ;
25     ; GFX940-LABEL: name: copy_v64_to_v64
26     ; GFX940: liveins: $vgpr2_vgpr3
27     ; GFX940-NEXT: {{  $}}
28     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 killed $vgpr2_vgpr3, implicit $exec, implicit $exec
29     ;
30     ; GFX10-LABEL: name: copy_v64_to_v64
31     ; GFX10: liveins: $vgpr2_vgpr3
32     ; GFX10-NEXT: {{  $}}
33     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
34     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
35     $vgpr0_vgpr1 = COPY killed $vgpr2_vgpr3, implicit $exec
36 ...
38 ---
39 name: copy_s64_to_v64
40 tracksRegLiveness: true
41 body: |
42   bb.0:
43     liveins: $sgpr2_sgpr3
44     ; GFX908-LABEL: name: copy_s64_to_v64
45     ; GFX908: liveins: $sgpr2_sgpr3
46     ; GFX908-NEXT: {{  $}}
47     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr2_sgpr3
48     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr3, implicit $exec, implicit killed $sgpr2_sgpr3, implicit $exec
49     ;
50     ; GFX90A-LABEL: name: copy_s64_to_v64
51     ; GFX90A: liveins: $sgpr2_sgpr3
52     ; GFX90A-NEXT: {{  $}}
53     ; GFX90A-NEXT: $vgpr0_vgpr1 = V_PK_MOV_B32 8, $sgpr2_sgpr3, 12, $sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec, implicit killed $sgpr2_sgpr3, implicit $exec
54     ;
55     ; GFX940-LABEL: name: copy_s64_to_v64
56     ; GFX940: liveins: $sgpr2_sgpr3
57     ; GFX940-NEXT: {{  $}}
58     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 killed $sgpr2_sgpr3, implicit $exec, implicit $exec
59     ;
60     ; GFX10-LABEL: name: copy_s64_to_v64
61     ; GFX10: liveins: $sgpr2_sgpr3
62     ; GFX10-NEXT: {{  $}}
63     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr2_sgpr3
64     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr3, implicit $exec, implicit killed $sgpr2_sgpr3, implicit $exec
65     $vgpr0_vgpr1 = COPY killed $sgpr2_sgpr3, implicit $exec
66 ...
68 ---
69 name: copy_a64_to_v64
70 tracksRegLiveness: true
71 body: |
72   bb.0:
73     liveins: $agpr2_agpr3
74     ; GFX908-LABEL: name: copy_a64_to_v64
75     ; GFX908: liveins: $agpr2_agpr3
76     ; GFX908-NEXT: {{  $}}
77     ; GFX908-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $agpr2_agpr3
78     ; GFX908-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit killed $agpr2_agpr3, implicit $exec
79     ;
80     ; GFX90A-LABEL: name: copy_a64_to_v64
81     ; GFX90A: liveins: $agpr2_agpr3
82     ; GFX90A-NEXT: {{  $}}
83     ; GFX90A-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $agpr2_agpr3
84     ; GFX90A-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit killed $agpr2_agpr3, implicit $exec
85     ;
86     ; GFX940-LABEL: name: copy_a64_to_v64
87     ; GFX940: liveins: $agpr2_agpr3
88     ; GFX940-NEXT: {{  $}}
89     ; GFX940-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $agpr2_agpr3
90     ; GFX940-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit killed $agpr2_agpr3, implicit $exec
91     ;
92     ; GFX10-LABEL: name: copy_a64_to_v64
93     ; GFX10: liveins: $agpr2_agpr3
94     ; GFX10-NEXT: {{  $}}
95     ; GFX10-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $agpr2_agpr3
96     ; GFX10-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit killed $agpr2_agpr3, implicit $exec
97     $vgpr0_vgpr1 = COPY killed $agpr2_agpr3, implicit $exec
98 ...
101 name: copy_v128_to_v128_fwd
102 tracksRegLiveness: true
103 body: |
104   bb.0:
105     liveins: $vgpr2_vgpr3_vgpr4_vgpr5
106     ; GFX908-LABEL: name: copy_v128_to_v128_fwd
107     ; GFX908: liveins: $vgpr2_vgpr3_vgpr4_vgpr5
108     ; GFX908-NEXT: {{  $}}
109     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr2_vgpr3_vgpr4_vgpr5
110     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5
111     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5
112     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
113     ;
114     ; GFX90A-LABEL: name: copy_v128_to_v128_fwd
115     ; GFX90A: liveins: $vgpr2_vgpr3_vgpr4_vgpr5
116     ; GFX90A-NEXT: {{  $}}
117     ; GFX90A-NEXT: $vgpr0_vgpr1 = V_PK_MOV_B32 8, $vgpr2_vgpr3, 12, $vgpr2_vgpr3, 0, 0, 0, 0, 0, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3
118     ; GFX90A-NEXT: $vgpr2_vgpr3 = V_PK_MOV_B32 8, $vgpr4_vgpr5, 12, $vgpr4_vgpr5, 0, 0, 0, 0, 0, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
119     ;
120     ; GFX940-LABEL: name: copy_v128_to_v128_fwd
121     ; GFX940: liveins: $vgpr2_vgpr3_vgpr4_vgpr5
122     ; GFX940-NEXT: {{  $}}
123     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 $vgpr2_vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr2_vgpr3_vgpr4_vgpr5
124     ; GFX940-NEXT: $vgpr2_vgpr3 = V_MOV_B64_e32 $vgpr4_vgpr5, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
125     ;
126     ; GFX10-LABEL: name: copy_v128_to_v128_fwd
127     ; GFX10: liveins: $vgpr2_vgpr3_vgpr4_vgpr5
128     ; GFX10-NEXT: {{  $}}
129     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr2_vgpr3_vgpr4_vgpr5
130     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5
131     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5
132     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
133     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY killed $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
137 name: copy_v128_to_v128_back
138 tracksRegLiveness: true
139 body: |
140   bb.0:
141     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
142     ; GFX908-LABEL: name: copy_v128_to_v128_back
143     ; GFX908: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
144     ; GFX908-NEXT: {{  $}}
145     ; GFX908-NEXT: $vgpr5 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr2_vgpr3_vgpr4_vgpr5, implicit $vgpr0_vgpr1_vgpr2_vgpr3
146     ; GFX908-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3
147     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr1, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3
148     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
149     ;
150     ; GFX90A-LABEL: name: copy_v128_to_v128_back
151     ; GFX90A: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
152     ; GFX90A-NEXT: {{  $}}
153     ; GFX90A-NEXT: $vgpr4_vgpr5 = V_PK_MOV_B32 8, $vgpr2_vgpr3, 12, $vgpr2_vgpr3, 0, 0, 0, 0, 0, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3, implicit-def $vgpr2_vgpr3_vgpr4_vgpr5
154     ; GFX90A-NEXT: $vgpr2_vgpr3 = V_PK_MOV_B32 8, $vgpr0_vgpr1, 12, $vgpr0_vgpr1, 0, 0, 0, 0, 0, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
155     ;
156     ; GFX940-LABEL: name: copy_v128_to_v128_back
157     ; GFX940: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
158     ; GFX940-NEXT: {{  $}}
159     ; GFX940-NEXT: $vgpr4_vgpr5 = V_MOV_B64_e32 $vgpr2_vgpr3, implicit $exec, implicit-def $vgpr2_vgpr3_vgpr4_vgpr5, implicit $vgpr0_vgpr1_vgpr2_vgpr3
160     ; GFX940-NEXT: $vgpr2_vgpr3 = V_MOV_B64_e32 $vgpr0_vgpr1, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
161     ;
162     ; GFX10-LABEL: name: copy_v128_to_v128_back
163     ; GFX10: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
164     ; GFX10-NEXT: {{  $}}
165     ; GFX10-NEXT: $vgpr5 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr2_vgpr3_vgpr4_vgpr5, implicit $vgpr0_vgpr1_vgpr2_vgpr3
166     ; GFX10-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3
167     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr1, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3
168     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
169     $vgpr2_vgpr3_vgpr4_vgpr5 = COPY killed $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
173 name: copy_v96_to_v96
174 tracksRegLiveness: true
175 body: |
176   bb.0:
177     liveins: $vgpr4_vgpr5_vgpr6
178     ; GFX908-LABEL: name: copy_v96_to_v96
179     ; GFX908: liveins: $vgpr4_vgpr5_vgpr6
180     ; GFX908-NEXT: {{  $}}
181     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr4_vgpr5_vgpr6
182     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr4_vgpr5_vgpr6
183     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit killed $vgpr4_vgpr5_vgpr6, implicit $exec
184     ;
185     ; GFX90A-LABEL: name: copy_v96_to_v96
186     ; GFX90A: liveins: $vgpr4_vgpr5_vgpr6
187     ; GFX90A-NEXT: {{  $}}
188     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr4_vgpr5_vgpr6
189     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr4_vgpr5_vgpr6
190     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit killed $vgpr4_vgpr5_vgpr6, implicit $exec
191     ;
192     ; GFX940-LABEL: name: copy_v96_to_v96
193     ; GFX940: liveins: $vgpr4_vgpr5_vgpr6
194     ; GFX940-NEXT: {{  $}}
195     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr4_vgpr5_vgpr6
196     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr4_vgpr5_vgpr6
197     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit killed $vgpr4_vgpr5_vgpr6, implicit $exec
198     ;
199     ; GFX10-LABEL: name: copy_v96_to_v96
200     ; GFX10: liveins: $vgpr4_vgpr5_vgpr6
201     ; GFX10-NEXT: {{  $}}
202     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr4_vgpr5_vgpr6
203     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr4_vgpr5_vgpr6
204     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit killed $vgpr4_vgpr5_vgpr6, implicit $exec
205     $vgpr0_vgpr1_vgpr2 = COPY killed $vgpr4_vgpr5_vgpr6, implicit $exec
209 name: copy_v64_to_v64_undef_sub0
210 tracksRegLiveness: true
211 body: |
212   bb.0:
213     liveins: $vgpr3
214     ; GFX908-LABEL: name: copy_v64_to_v64_undef_sub0
215     ; GFX908: liveins: $vgpr3
216     ; GFX908-NEXT: {{  $}}
217     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
218     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
219     ;
220     ; GFX90A-LABEL: name: copy_v64_to_v64_undef_sub0
221     ; GFX90A: liveins: $vgpr3
222     ; GFX90A-NEXT: {{  $}}
223     ; GFX90A-NEXT: $vgpr0_vgpr1 = V_PK_MOV_B32 8, $vgpr2_vgpr3, 12, $vgpr2_vgpr3, 0, 0, 0, 0, 0, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
224     ;
225     ; GFX940-LABEL: name: copy_v64_to_v64_undef_sub0
226     ; GFX940: liveins: $vgpr3
227     ; GFX940-NEXT: {{  $}}
228     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 killed $vgpr2_vgpr3, implicit $exec, implicit $exec
229     ;
230     ; GFX10-LABEL: name: copy_v64_to_v64_undef_sub0
231     ; GFX10: liveins: $vgpr3
232     ; GFX10-NEXT: {{  $}}
233     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
234     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
235     $vgpr0_vgpr1 = COPY killed $vgpr2_vgpr3, implicit $exec
239 name: copy_v64_to_v64_undef_sub1
240 tracksRegLiveness: true
241 body: |
242   bb.0:
243     liveins: $vgpr2
244     ; GFX908-LABEL: name: copy_v64_to_v64_undef_sub1
245     ; GFX908: liveins: $vgpr2
246     ; GFX908-NEXT: {{  $}}
247     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
248     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
249     ;
250     ; GFX90A-LABEL: name: copy_v64_to_v64_undef_sub1
251     ; GFX90A: liveins: $vgpr2
252     ; GFX90A-NEXT: {{  $}}
253     ; GFX90A-NEXT: $vgpr0_vgpr1 = V_PK_MOV_B32 8, $vgpr2_vgpr3, 12, $vgpr2_vgpr3, 0, 0, 0, 0, 0, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
254     ;
255     ; GFX940-LABEL: name: copy_v64_to_v64_undef_sub1
256     ; GFX940: liveins: $vgpr2
257     ; GFX940-NEXT: {{  $}}
258     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 killed $vgpr2_vgpr3, implicit $exec, implicit $exec
259     ;
260     ; GFX10-LABEL: name: copy_v64_to_v64_undef_sub1
261     ; GFX10: liveins: $vgpr2
262     ; GFX10-NEXT: {{  $}}
263     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
264     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
265     $vgpr0_vgpr1 = COPY killed $vgpr2_vgpr3, implicit $exec
269 name: copy_s128_to_v128_killed
270 tracksRegLiveness: true
271 body: |
272   bb.0:
273     liveins: $sgpr4_sgpr5_sgpr6_sgpr7
274     ; GFX908-LABEL: name: copy_s128_to_v128_killed
275     ; GFX908: liveins: $sgpr4_sgpr5_sgpr6_sgpr7
276     ; GFX908-NEXT: {{  $}}
277     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $sgpr4_sgpr5_sgpr6_sgpr7
278     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr5, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7
279     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr6, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7
280     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr7, implicit $exec, implicit killed $sgpr4_sgpr5_sgpr6_sgpr7
281     ;
282     ; GFX90A-LABEL: name: copy_s128_to_v128_killed
283     ; GFX90A: liveins: $sgpr4_sgpr5_sgpr6_sgpr7
284     ; GFX90A-NEXT: {{  $}}
285     ; GFX90A-NEXT: $vgpr0_vgpr1 = V_PK_MOV_B32 8, $sgpr4_sgpr5, 12, $sgpr4_sgpr5, 0, 0, 0, 0, 0, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3
286     ; GFX90A-NEXT: $vgpr2_vgpr3 = V_PK_MOV_B32 8, $sgpr6_sgpr7, 12, $sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit $exec, implicit killed $sgpr4_sgpr5_sgpr6_sgpr7
287     ;
288     ; GFX940-LABEL: name: copy_s128_to_v128_killed
289     ; GFX940: liveins: $sgpr4_sgpr5_sgpr6_sgpr7
290     ; GFX940-NEXT: {{  $}}
291     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 $sgpr4_sgpr5, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $sgpr4_sgpr5_sgpr6_sgpr7
292     ; GFX940-NEXT: $vgpr2_vgpr3 = V_MOV_B64_e32 $sgpr6_sgpr7, implicit $exec, implicit killed $sgpr4_sgpr5_sgpr6_sgpr7
293     ;
294     ; GFX10-LABEL: name: copy_s128_to_v128_killed
295     ; GFX10: liveins: $sgpr4_sgpr5_sgpr6_sgpr7
296     ; GFX10-NEXT: {{  $}}
297     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $sgpr4_sgpr5_sgpr6_sgpr7
298     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr5, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7
299     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr6, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7
300     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr7, implicit $exec, implicit killed $sgpr4_sgpr5_sgpr6_sgpr7
301     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY killed $sgpr4_sgpr5_sgpr6_sgpr7
305 name: copy_v64_to_v64_unaligned
306 tracksRegLiveness: true
307 body: |
308   bb.0:
309     liveins: $vgpr2_vgpr3
310     ; GFX908-LABEL: name: copy_v64_to_v64_unaligned
311     ; GFX908: liveins: $vgpr2_vgpr3
312     ; GFX908-NEXT: {{  $}}
313     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $vgpr2_vgpr3
314     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3, implicit $exec
315     ;
316     ; GFX90A-LABEL: name: copy_v64_to_v64_unaligned
317     ; GFX90A: liveins: $vgpr2_vgpr3
318     ; GFX90A-NEXT: {{  $}}
319     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $vgpr2_vgpr3
320     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3, implicit $exec
321     ;
322     ; GFX940-LABEL: name: copy_v64_to_v64_unaligned
323     ; GFX940: liveins: $vgpr2_vgpr3
324     ; GFX940-NEXT: {{  $}}
325     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $vgpr2_vgpr3
326     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3, implicit $exec
327     ;
328     ; GFX10-LABEL: name: copy_v64_to_v64_unaligned
329     ; GFX10: liveins: $vgpr2_vgpr3
330     ; GFX10-NEXT: {{  $}}
331     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $vgpr2_vgpr3
332     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3, implicit $exec
333     $vgpr1_vgpr2 = COPY killed $vgpr2_vgpr3, implicit $exec
337 name: copy_v64_unaligned_to_v64
338 tracksRegLiveness: true
339 body: |
340   bb.0:
341     liveins: $vgpr3_vgpr4
342     ; GFX908-LABEL: name: copy_v64_unaligned_to_v64
343     ; GFX908: liveins: $vgpr3_vgpr4
344     ; GFX908-NEXT: {{  $}}
345     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr3_vgpr4
346     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit killed $vgpr3_vgpr4, implicit $exec
347     ;
348     ; GFX90A-LABEL: name: copy_v64_unaligned_to_v64
349     ; GFX90A: liveins: $vgpr3_vgpr4
350     ; GFX90A-NEXT: {{  $}}
351     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr3_vgpr4
352     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit killed $vgpr3_vgpr4, implicit $exec
353     ;
354     ; GFX940-LABEL: name: copy_v64_unaligned_to_v64
355     ; GFX940: liveins: $vgpr3_vgpr4
356     ; GFX940-NEXT: {{  $}}
357     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr3_vgpr4
358     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit killed $vgpr3_vgpr4, implicit $exec
359     ;
360     ; GFX10-LABEL: name: copy_v64_unaligned_to_v64
361     ; GFX10: liveins: $vgpr3_vgpr4
362     ; GFX10-NEXT: {{  $}}
363     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr3_vgpr4
364     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit killed $vgpr3_vgpr4, implicit $exec
365     $vgpr0_vgpr1 = COPY killed $vgpr3_vgpr4, implicit $exec
369 name: copy_v128_to_v128_unaligned
370 tracksRegLiveness: true
371 body: |
372   bb.0:
373     liveins: $vgpr8_vgpr9_vgpr10_vgpr11
374     ; GFX908-LABEL: name: copy_v128_to_v128_unaligned
375     ; GFX908: liveins: $vgpr8_vgpr9_vgpr10_vgpr11
376     ; GFX908-NEXT: {{  $}}
377     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $vgpr8_vgpr9_vgpr10_vgpr11
378     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
379     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
380     ; GFX908-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr11, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
381     ;
382     ; GFX90A-LABEL: name: copy_v128_to_v128_unaligned
383     ; GFX90A: liveins: $vgpr8_vgpr9_vgpr10_vgpr11
384     ; GFX90A-NEXT: {{  $}}
385     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $vgpr8_vgpr9_vgpr10_vgpr11
386     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
387     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
388     ; GFX90A-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr11, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
389     ;
390     ; GFX940-LABEL: name: copy_v128_to_v128_unaligned
391     ; GFX940: liveins: $vgpr8_vgpr9_vgpr10_vgpr11
392     ; GFX940-NEXT: {{  $}}
393     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $vgpr8_vgpr9_vgpr10_vgpr11
394     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
395     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
396     ; GFX940-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr11, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
397     ;
398     ; GFX10-LABEL: name: copy_v128_to_v128_unaligned
399     ; GFX10: liveins: $vgpr8_vgpr9_vgpr10_vgpr11
400     ; GFX10-NEXT: {{  $}}
401     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $vgpr8_vgpr9_vgpr10_vgpr11
402     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
403     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
404     ; GFX10-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr11, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
405     $vgpr1_vgpr2_vgpr3_vgpr4 = COPY killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
409 name: copy_v128_unaligned_to_v128
410 tracksRegLiveness: true
411 body: |
412   bb.0:
413     liveins: $vgpr7_vgpr8_vgpr9_vgpr10
414     ; GFX908-LABEL: name: copy_v128_unaligned_to_v128
415     ; GFX908: liveins: $vgpr7_vgpr8_vgpr9_vgpr10
416     ; GFX908-NEXT: {{  $}}
417     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr7_vgpr8_vgpr9_vgpr10
418     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
419     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
420     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
421     ;
422     ; GFX90A-LABEL: name: copy_v128_unaligned_to_v128
423     ; GFX90A: liveins: $vgpr7_vgpr8_vgpr9_vgpr10
424     ; GFX90A-NEXT: {{  $}}
425     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr7_vgpr8_vgpr9_vgpr10
426     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
427     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
428     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
429     ;
430     ; GFX940-LABEL: name: copy_v128_unaligned_to_v128
431     ; GFX940: liveins: $vgpr7_vgpr8_vgpr9_vgpr10
432     ; GFX940-NEXT: {{  $}}
433     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr7_vgpr8_vgpr9_vgpr10
434     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
435     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
436     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
437     ;
438     ; GFX10-LABEL: name: copy_v128_unaligned_to_v128
439     ; GFX10: liveins: $vgpr7_vgpr8_vgpr9_vgpr10
440     ; GFX10-NEXT: {{  $}}
441     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr7_vgpr8_vgpr9_vgpr10
442     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
443     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
444     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
445     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
449 name: copy_s64_to_v64_unaligned
450 tracksRegLiveness: true
451 body: |
452   bb.0:
453     liveins: $sgpr8_sgpr9
454     ; GFX908-LABEL: name: copy_s64_to_v64_unaligned
455     ; GFX908: liveins: $sgpr8_sgpr9
456     ; GFX908-NEXT: {{  $}}
457     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr8_sgpr9
458     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit killed $sgpr8_sgpr9, implicit $exec
459     ;
460     ; GFX90A-LABEL: name: copy_s64_to_v64_unaligned
461     ; GFX90A: liveins: $sgpr8_sgpr9
462     ; GFX90A-NEXT: {{  $}}
463     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr8_sgpr9
464     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit killed $sgpr8_sgpr9, implicit $exec
465     ;
466     ; GFX940-LABEL: name: copy_s64_to_v64_unaligned
467     ; GFX940: liveins: $sgpr8_sgpr9
468     ; GFX940-NEXT: {{  $}}
469     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr8_sgpr9
470     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit killed $sgpr8_sgpr9, implicit $exec
471     ;
472     ; GFX10-LABEL: name: copy_s64_to_v64_unaligned
473     ; GFX10: liveins: $sgpr8_sgpr9
474     ; GFX10-NEXT: {{  $}}
475     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr8_sgpr9
476     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit killed $sgpr8_sgpr9, implicit $exec
477     $vgpr1_vgpr2 = COPY killed $sgpr8_sgpr9, implicit $exec
481 name: copy_s128_to_v128_unaligned
482 tracksRegLiveness: true
483 body: |
484   bb.0:
485     liveins: $sgpr8_sgpr9_sgpr10_sgpr11
486     ; GFX908-LABEL: name: copy_s128_to_v128_unaligned
487     ; GFX908: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
488     ; GFX908-NEXT: {{  $}}
489     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $sgpr8_sgpr9_sgpr10_sgpr11
490     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
491     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr10, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
492     ; GFX908-NEXT: $vgpr4 = V_MOV_B32_e32 $sgpr11, implicit $exec, implicit killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
493     ;
494     ; GFX90A-LABEL: name: copy_s128_to_v128_unaligned
495     ; GFX90A: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
496     ; GFX90A-NEXT: {{  $}}
497     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $sgpr8_sgpr9_sgpr10_sgpr11
498     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
499     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr10, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
500     ; GFX90A-NEXT: $vgpr4 = V_MOV_B32_e32 $sgpr11, implicit $exec, implicit killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
501     ;
502     ; GFX940-LABEL: name: copy_s128_to_v128_unaligned
503     ; GFX940: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
504     ; GFX940-NEXT: {{  $}}
505     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $sgpr8_sgpr9_sgpr10_sgpr11
506     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
507     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr10, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
508     ; GFX940-NEXT: $vgpr4 = V_MOV_B32_e32 $sgpr11, implicit $exec, implicit killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
509     ;
510     ; GFX10-LABEL: name: copy_s128_to_v128_unaligned
511     ; GFX10: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
512     ; GFX10-NEXT: {{  $}}
513     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $sgpr8_sgpr9_sgpr10_sgpr11
514     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
515     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr10, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
516     ; GFX10-NEXT: $vgpr4 = V_MOV_B32_e32 $sgpr11, implicit $exec, implicit killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
517     $vgpr1_vgpr2_vgpr3_vgpr4 = COPY killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
521 name: copy_v96_to_v96_unaligned
522 tracksRegLiveness: true
523 body: |
524   bb.0:
525     liveins: $vgpr8_vgpr9_vgpr10
526     ; GFX908-LABEL: name: copy_v96_to_v96_unaligned
527     ; GFX908: liveins: $vgpr8_vgpr9_vgpr10
528     ; GFX908-NEXT: {{  $}}
529     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $vgpr8_vgpr9_vgpr10
530     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10
531     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10, implicit $exec
532     ;
533     ; GFX90A-LABEL: name: copy_v96_to_v96_unaligned
534     ; GFX90A: liveins: $vgpr8_vgpr9_vgpr10
535     ; GFX90A-NEXT: {{  $}}
536     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $vgpr8_vgpr9_vgpr10
537     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10
538     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10, implicit $exec
539     ;
540     ; GFX940-LABEL: name: copy_v96_to_v96_unaligned
541     ; GFX940: liveins: $vgpr8_vgpr9_vgpr10
542     ; GFX940-NEXT: {{  $}}
543     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $vgpr8_vgpr9_vgpr10
544     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10
545     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10, implicit $exec
546     ;
547     ; GFX10-LABEL: name: copy_v96_to_v96_unaligned
548     ; GFX10: liveins: $vgpr8_vgpr9_vgpr10
549     ; GFX10-NEXT: {{  $}}
550     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $vgpr8_vgpr9_vgpr10
551     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10
552     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10, implicit $exec
553     $vgpr1_vgpr2_vgpr3 = COPY killed $vgpr8_vgpr9_vgpr10, implicit $exec
557 name: copy_v96_unaligned_to_v96
558 tracksRegLiveness: true
559 body: |
560   bb.0:
561     liveins: $vgpr7_vgpr8_vgpr9
562     ; GFX908-LABEL: name: copy_v96_unaligned_to_v96
563     ; GFX908: liveins: $vgpr7_vgpr8_vgpr9
564     ; GFX908-NEXT: {{  $}}
565     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr7_vgpr8_vgpr9
566     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9
567     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9, implicit $exec
568     ;
569     ; GFX90A-LABEL: name: copy_v96_unaligned_to_v96
570     ; GFX90A: liveins: $vgpr7_vgpr8_vgpr9
571     ; GFX90A-NEXT: {{  $}}
572     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr7_vgpr8_vgpr9
573     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9
574     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9, implicit $exec
575     ;
576     ; GFX940-LABEL: name: copy_v96_unaligned_to_v96
577     ; GFX940: liveins: $vgpr7_vgpr8_vgpr9
578     ; GFX940-NEXT: {{  $}}
579     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr7_vgpr8_vgpr9
580     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9
581     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9, implicit $exec
582     ;
583     ; GFX10-LABEL: name: copy_v96_unaligned_to_v96
584     ; GFX10: liveins: $vgpr7_vgpr8_vgpr9
585     ; GFX10-NEXT: {{  $}}
586     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr7_vgpr8_vgpr9
587     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9
588     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9, implicit $exec
589     $vgpr0_vgpr1_vgpr2 = COPY killed $vgpr7_vgpr8_vgpr9, implicit $exec
593 name: copy_s96_to_v96
594 tracksRegLiveness: true
595 body: |
596   bb.0:
597     liveins: $sgpr0_sgpr1_sgpr2
598     ; GFX908-LABEL: name: copy_s96_to_v96
599     ; GFX908: liveins: $sgpr0_sgpr1_sgpr2
600     ; GFX908-NEXT: {{  $}}
601     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $sgpr0_sgpr1_sgpr2
602     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
603     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
604     ;
605     ; GFX90A-LABEL: name: copy_s96_to_v96
606     ; GFX90A: liveins: $sgpr0_sgpr1_sgpr2
607     ; GFX90A-NEXT: {{  $}}
608     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $sgpr0_sgpr1_sgpr2
609     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
610     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
611     ;
612     ; GFX940-LABEL: name: copy_s96_to_v96
613     ; GFX940: liveins: $sgpr0_sgpr1_sgpr2
614     ; GFX940-NEXT: {{  $}}
615     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $sgpr0_sgpr1_sgpr2
616     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
617     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
618     ;
619     ; GFX10-LABEL: name: copy_s96_to_v96
620     ; GFX10: liveins: $sgpr0_sgpr1_sgpr2
621     ; GFX10-NEXT: {{  $}}
622     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $sgpr0_sgpr1_sgpr2
623     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
624     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
625     $vgpr0_vgpr1_vgpr2 = COPY killed $sgpr0_sgpr1_sgpr2, implicit $exec
629 name: copy_s96_to_v96_unaligned
630 tracksRegLiveness: true
631 body: |
632   bb.0:
633     liveins: $sgpr0_sgpr1_sgpr2
634     ; GFX908-LABEL: name: copy_s96_to_v96_unaligned
635     ; GFX908: liveins: $sgpr0_sgpr1_sgpr2
636     ; GFX908-NEXT: {{  $}}
637     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $sgpr0_sgpr1_sgpr2
638     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
639     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
640     ;
641     ; GFX90A-LABEL: name: copy_s96_to_v96_unaligned
642     ; GFX90A: liveins: $sgpr0_sgpr1_sgpr2
643     ; GFX90A-NEXT: {{  $}}
644     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $sgpr0_sgpr1_sgpr2
645     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
646     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
647     ;
648     ; GFX940-LABEL: name: copy_s96_to_v96_unaligned
649     ; GFX940: liveins: $sgpr0_sgpr1_sgpr2
650     ; GFX940-NEXT: {{  $}}
651     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $sgpr0_sgpr1_sgpr2
652     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
653     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
654     ;
655     ; GFX10-LABEL: name: copy_s96_to_v96_unaligned
656     ; GFX10: liveins: $sgpr0_sgpr1_sgpr2
657     ; GFX10-NEXT: {{  $}}
658     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $sgpr0_sgpr1_sgpr2
659     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
660     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
661     $vgpr1_vgpr2_vgpr3 = COPY killed $sgpr0_sgpr1_sgpr2, implicit $exec