Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / copy_phys_vgpr64.mir
blob3ba805a5531eb49e95ae19deb7b79f0cdd53ce12
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=gfx908 -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX908 %s
3 # RUN: llc -march=amdgcn -mcpu=gfx90a -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX90A %s
4 # RUN: llc -march=amdgcn -mcpu=gfx940 -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX940 %s
5 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass postrapseudos -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX10 %s
6 # RUN: llc -march=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     ; GFX90A-LABEL: name: copy_v64_to_v64
20     ; GFX90A: liveins: $vgpr2_vgpr3
21     ; GFX90A-NEXT: {{  $}}
22     ; 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
23     ; GFX940-LABEL: name: copy_v64_to_v64
24     ; GFX940: liveins: $vgpr2_vgpr3
25     ; GFX940-NEXT: {{  $}}
26     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 killed $vgpr2_vgpr3, implicit $exec, implicit $exec
27     ; GFX10-LABEL: name: copy_v64_to_v64
28     ; GFX10: liveins: $vgpr2_vgpr3
29     ; GFX10-NEXT: {{  $}}
30     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
31     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
32     $vgpr0_vgpr1 = COPY killed $vgpr2_vgpr3, implicit $exec
33 ...
35 ---
36 name: copy_s64_to_v64
37 tracksRegLiveness: true
38 body: |
39   bb.0:
40     liveins: $sgpr2_sgpr3
41     ; GFX908-LABEL: name: copy_s64_to_v64
42     ; GFX908: liveins: $sgpr2_sgpr3
43     ; GFX908-NEXT: {{  $}}
44     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr2_sgpr3
45     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr3, implicit $exec, implicit killed $sgpr2_sgpr3, implicit $exec
46     ; GFX90A-LABEL: name: copy_s64_to_v64
47     ; GFX90A: liveins: $sgpr2_sgpr3
48     ; GFX90A-NEXT: {{  $}}
49     ; 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
50     ; GFX940-LABEL: name: copy_s64_to_v64
51     ; GFX940: liveins: $sgpr2_sgpr3
52     ; GFX940-NEXT: {{  $}}
53     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 killed $sgpr2_sgpr3, implicit $exec, implicit $exec
54     ; GFX10-LABEL: name: copy_s64_to_v64
55     ; GFX10: liveins: $sgpr2_sgpr3
56     ; GFX10-NEXT: {{  $}}
57     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr2_sgpr3
58     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr3, implicit $exec, implicit killed $sgpr2_sgpr3, implicit $exec
59     $vgpr0_vgpr1 = COPY killed $sgpr2_sgpr3, implicit $exec
60 ...
62 ---
63 name: copy_a64_to_v64
64 tracksRegLiveness: true
65 body: |
66   bb.0:
67     liveins: $agpr2_agpr3
68     ; GFX908-LABEL: name: copy_a64_to_v64
69     ; GFX908: liveins: $agpr2_agpr3
70     ; GFX908-NEXT: {{  $}}
71     ; GFX908-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $agpr2_agpr3
72     ; GFX908-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit killed $agpr2_agpr3, implicit $exec
73     ; GFX90A-LABEL: name: copy_a64_to_v64
74     ; GFX90A: liveins: $agpr2_agpr3
75     ; GFX90A-NEXT: {{  $}}
76     ; GFX90A-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $agpr2_agpr3
77     ; GFX90A-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit killed $agpr2_agpr3, implicit $exec
78     ; GFX940-LABEL: name: copy_a64_to_v64
79     ; GFX940: liveins: $agpr2_agpr3
80     ; GFX940-NEXT: {{  $}}
81     ; GFX940-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $agpr2_agpr3
82     ; GFX940-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit killed $agpr2_agpr3, implicit $exec
83     ; GFX10-LABEL: name: copy_a64_to_v64
84     ; GFX10: liveins: $agpr2_agpr3
85     ; GFX10-NEXT: {{  $}}
86     ; GFX10-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $agpr2_agpr3
87     ; GFX10-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit killed $agpr2_agpr3, implicit $exec
88     $vgpr0_vgpr1 = COPY killed $agpr2_agpr3, implicit $exec
89 ...
91 ---
92 name: copy_v128_to_v128_fwd
93 tracksRegLiveness: true
94 body: |
95   bb.0:
96     liveins: $vgpr2_vgpr3_vgpr4_vgpr5
97     ; GFX908-LABEL: name: copy_v128_to_v128_fwd
98     ; GFX908: liveins: $vgpr2_vgpr3_vgpr4_vgpr5
99     ; GFX908-NEXT: {{  $}}
100     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr2_vgpr3_vgpr4_vgpr5
101     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5
102     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5
103     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
104     ; GFX90A-LABEL: name: copy_v128_to_v128_fwd
105     ; GFX90A: liveins: $vgpr2_vgpr3_vgpr4_vgpr5
106     ; GFX90A-NEXT: {{  $}}
107     ; 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
108     ; 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
109     ; GFX940-LABEL: name: copy_v128_to_v128_fwd
110     ; GFX940: liveins: $vgpr2_vgpr3_vgpr4_vgpr5
111     ; GFX940-NEXT: {{  $}}
112     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 $vgpr2_vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr2_vgpr3_vgpr4_vgpr5
113     ; GFX940-NEXT: $vgpr2_vgpr3 = V_MOV_B64_e32 $vgpr4_vgpr5, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
114     ; GFX10-LABEL: name: copy_v128_to_v128_fwd
115     ; GFX10: liveins: $vgpr2_vgpr3_vgpr4_vgpr5
116     ; GFX10-NEXT: {{  $}}
117     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr2_vgpr3_vgpr4_vgpr5
118     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5
119     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5
120     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
121     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY killed $vgpr2_vgpr3_vgpr4_vgpr5, implicit $exec
125 name: copy_v128_to_v128_back
126 tracksRegLiveness: true
127 body: |
128   bb.0:
129     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
130     ; GFX908-LABEL: name: copy_v128_to_v128_back
131     ; GFX908: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
132     ; GFX908-NEXT: {{  $}}
133     ; GFX908-NEXT: $vgpr5 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr2_vgpr3_vgpr4_vgpr5, implicit $vgpr0_vgpr1_vgpr2_vgpr3
134     ; GFX908-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3
135     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr1, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3
136     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
137     ; GFX90A-LABEL: name: copy_v128_to_v128_back
138     ; GFX90A: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
139     ; GFX90A-NEXT: {{  $}}
140     ; 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
141     ; 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
142     ; GFX940-LABEL: name: copy_v128_to_v128_back
143     ; GFX940: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
144     ; GFX940-NEXT: {{  $}}
145     ; GFX940-NEXT: $vgpr4_vgpr5 = V_MOV_B64_e32 $vgpr2_vgpr3, implicit $exec, implicit-def $vgpr2_vgpr3_vgpr4_vgpr5, implicit $vgpr0_vgpr1_vgpr2_vgpr3
146     ; GFX940-NEXT: $vgpr2_vgpr3 = V_MOV_B64_e32 $vgpr0_vgpr1, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
147     ; GFX10-LABEL: name: copy_v128_to_v128_back
148     ; GFX10: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
149     ; GFX10-NEXT: {{  $}}
150     ; GFX10-NEXT: $vgpr5 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr2_vgpr3_vgpr4_vgpr5, implicit $vgpr0_vgpr1_vgpr2_vgpr3
151     ; GFX10-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3
152     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr1, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3
153     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec, implicit $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
154     $vgpr2_vgpr3_vgpr4_vgpr5 = COPY killed $vgpr0_vgpr1_vgpr2_vgpr3, implicit $exec
158 name: copy_v96_to_v96
159 tracksRegLiveness: true
160 body: |
161   bb.0:
162     liveins: $vgpr4_vgpr5_vgpr6
163     ; GFX908-LABEL: name: copy_v96_to_v96
164     ; GFX908: liveins: $vgpr4_vgpr5_vgpr6
165     ; GFX908-NEXT: {{  $}}
166     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr4_vgpr5_vgpr6
167     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr4_vgpr5_vgpr6
168     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit killed $vgpr4_vgpr5_vgpr6, implicit $exec
169     ; GFX90A-LABEL: name: copy_v96_to_v96
170     ; GFX90A: liveins: $vgpr4_vgpr5_vgpr6
171     ; GFX90A-NEXT: {{  $}}
172     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr4_vgpr5_vgpr6
173     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr4_vgpr5_vgpr6
174     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit killed $vgpr4_vgpr5_vgpr6, implicit $exec
175     ; GFX940-LABEL: name: copy_v96_to_v96
176     ; GFX940: liveins: $vgpr4_vgpr5_vgpr6
177     ; GFX940-NEXT: {{  $}}
178     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr4_vgpr5_vgpr6
179     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr4_vgpr5_vgpr6
180     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit killed $vgpr4_vgpr5_vgpr6, implicit $exec
181     ; GFX10-LABEL: name: copy_v96_to_v96
182     ; GFX10: liveins: $vgpr4_vgpr5_vgpr6
183     ; GFX10-NEXT: {{  $}}
184     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr4_vgpr5_vgpr6
185     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr5, implicit $exec, implicit $vgpr4_vgpr5_vgpr6
186     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit killed $vgpr4_vgpr5_vgpr6, implicit $exec
187     $vgpr0_vgpr1_vgpr2 = COPY killed $vgpr4_vgpr5_vgpr6, implicit $exec
191 name: copy_v64_to_v64_undef_sub0
192 tracksRegLiveness: true
193 body: |
194   bb.0:
195     liveins: $vgpr3
196     ; GFX908-LABEL: name: copy_v64_to_v64_undef_sub0
197     ; GFX908: liveins: $vgpr3
198     ; GFX908-NEXT: {{  $}}
199     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
200     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
201     ; GFX90A-LABEL: name: copy_v64_to_v64_undef_sub0
202     ; GFX90A: liveins: $vgpr3
203     ; GFX90A-NEXT: {{  $}}
204     ; 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
205     ; GFX940-LABEL: name: copy_v64_to_v64_undef_sub0
206     ; GFX940: liveins: $vgpr3
207     ; GFX940-NEXT: {{  $}}
208     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 killed $vgpr2_vgpr3, implicit $exec, implicit $exec
209     ; GFX10-LABEL: name: copy_v64_to_v64_undef_sub0
210     ; GFX10: liveins: $vgpr3
211     ; GFX10-NEXT: {{  $}}
212     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
213     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
214     $vgpr0_vgpr1 = COPY killed $vgpr2_vgpr3, implicit $exec
218 name: copy_v64_to_v64_undef_sub1
219 tracksRegLiveness: true
220 body: |
221   bb.0:
222     liveins: $vgpr2
223     ; GFX908-LABEL: name: copy_v64_to_v64_undef_sub1
224     ; GFX908: liveins: $vgpr2
225     ; GFX908-NEXT: {{  $}}
226     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
227     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
228     ; GFX90A-LABEL: name: copy_v64_to_v64_undef_sub1
229     ; GFX90A: liveins: $vgpr2
230     ; GFX90A-NEXT: {{  $}}
231     ; 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
232     ; GFX940-LABEL: name: copy_v64_to_v64_undef_sub1
233     ; GFX940: liveins: $vgpr2
234     ; GFX940-NEXT: {{  $}}
235     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 killed $vgpr2_vgpr3, implicit $exec, implicit $exec
236     ; GFX10-LABEL: name: copy_v64_to_v64_undef_sub1
237     ; GFX10: liveins: $vgpr2
238     ; GFX10-NEXT: {{  $}}
239     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr2_vgpr3
240     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit killed $vgpr2_vgpr3, implicit $exec
241     $vgpr0_vgpr1 = COPY killed $vgpr2_vgpr3, implicit $exec
245 name: copy_s128_to_v128_killed
246 tracksRegLiveness: true
247 body: |
248   bb.0:
249     liveins: $sgpr4_sgpr5_sgpr6_sgpr7
250     ; GFX908-LABEL: name: copy_s128_to_v128_killed
251     ; GFX908: liveins: $sgpr4_sgpr5_sgpr6_sgpr7
252     ; GFX908-NEXT: {{  $}}
253     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $sgpr4_sgpr5_sgpr6_sgpr7
254     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr5, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7
255     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr6, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7
256     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr7, implicit $exec, implicit killed $sgpr4_sgpr5_sgpr6_sgpr7
257     ; GFX90A-LABEL: name: copy_s128_to_v128_killed
258     ; GFX90A: liveins: $sgpr4_sgpr5_sgpr6_sgpr7
259     ; GFX90A-NEXT: {{  $}}
260     ; 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
261     ; 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
262     ; GFX940-LABEL: name: copy_s128_to_v128_killed
263     ; GFX940: liveins: $sgpr4_sgpr5_sgpr6_sgpr7
264     ; GFX940-NEXT: {{  $}}
265     ; GFX940-NEXT: $vgpr0_vgpr1 = V_MOV_B64_e32 $sgpr4_sgpr5, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $sgpr4_sgpr5_sgpr6_sgpr7
266     ; GFX940-NEXT: $vgpr2_vgpr3 = V_MOV_B64_e32 $sgpr6_sgpr7, implicit $exec, implicit killed $sgpr4_sgpr5_sgpr6_sgpr7
267     ; GFX10-LABEL: name: copy_s128_to_v128_killed
268     ; GFX10: liveins: $sgpr4_sgpr5_sgpr6_sgpr7
269     ; GFX10-NEXT: {{  $}}
270     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr4, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $sgpr4_sgpr5_sgpr6_sgpr7
271     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr5, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7
272     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr6, implicit $exec, implicit $sgpr4_sgpr5_sgpr6_sgpr7
273     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr7, implicit $exec, implicit killed $sgpr4_sgpr5_sgpr6_sgpr7
274     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY killed $sgpr4_sgpr5_sgpr6_sgpr7
278 name: copy_v64_to_v64_unaligned
279 tracksRegLiveness: true
280 body: |
281   bb.0:
282     liveins: $vgpr2_vgpr3
283     ; GFX908-LABEL: name: copy_v64_to_v64_unaligned
284     ; GFX908: liveins: $vgpr2_vgpr3
285     ; GFX908-NEXT: {{  $}}
286     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $vgpr2_vgpr3
287     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3, implicit $exec
288     ; GFX90A-LABEL: name: copy_v64_to_v64_unaligned
289     ; GFX90A: liveins: $vgpr2_vgpr3
290     ; GFX90A-NEXT: {{  $}}
291     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $vgpr2_vgpr3
292     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3, implicit $exec
293     ; GFX940-LABEL: name: copy_v64_to_v64_unaligned
294     ; GFX940: liveins: $vgpr2_vgpr3
295     ; GFX940-NEXT: {{  $}}
296     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $vgpr2_vgpr3
297     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3, implicit $exec
298     ; GFX10-LABEL: name: copy_v64_to_v64_unaligned
299     ; GFX10: liveins: $vgpr2_vgpr3
300     ; GFX10-NEXT: {{  $}}
301     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $vgpr2_vgpr3
302     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit $vgpr2_vgpr3, implicit $exec
303     $vgpr1_vgpr2 = COPY killed $vgpr2_vgpr3, implicit $exec
307 name: copy_v64_unaligned_to_v64
308 tracksRegLiveness: true
309 body: |
310   bb.0:
311     liveins: $vgpr3_vgpr4
312     ; GFX908-LABEL: name: copy_v64_unaligned_to_v64
313     ; GFX908: liveins: $vgpr3_vgpr4
314     ; GFX908-NEXT: {{  $}}
315     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr3_vgpr4
316     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit killed $vgpr3_vgpr4, implicit $exec
317     ; GFX90A-LABEL: name: copy_v64_unaligned_to_v64
318     ; GFX90A: liveins: $vgpr3_vgpr4
319     ; GFX90A-NEXT: {{  $}}
320     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr3_vgpr4
321     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit killed $vgpr3_vgpr4, implicit $exec
322     ; GFX940-LABEL: name: copy_v64_unaligned_to_v64
323     ; GFX940: liveins: $vgpr3_vgpr4
324     ; GFX940-NEXT: {{  $}}
325     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr3_vgpr4
326     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit killed $vgpr3_vgpr4, implicit $exec
327     ; GFX10-LABEL: name: copy_v64_unaligned_to_v64
328     ; GFX10: liveins: $vgpr3_vgpr4
329     ; GFX10-NEXT: {{  $}}
330     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr3, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr3_vgpr4
331     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr4, implicit $exec, implicit killed $vgpr3_vgpr4, implicit $exec
332     $vgpr0_vgpr1 = COPY killed $vgpr3_vgpr4, implicit $exec
336 name: copy_v128_to_v128_unaligned
337 tracksRegLiveness: true
338 body: |
339   bb.0:
340     liveins: $vgpr8_vgpr9_vgpr10_vgpr11
341     ; GFX908-LABEL: name: copy_v128_to_v128_unaligned
342     ; GFX908: liveins: $vgpr8_vgpr9_vgpr10_vgpr11
343     ; GFX908-NEXT: {{  $}}
344     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $vgpr8_vgpr9_vgpr10_vgpr11
345     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
346     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
347     ; GFX908-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr11, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
348     ; GFX90A-LABEL: name: copy_v128_to_v128_unaligned
349     ; GFX90A: liveins: $vgpr8_vgpr9_vgpr10_vgpr11
350     ; GFX90A-NEXT: {{  $}}
351     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $vgpr8_vgpr9_vgpr10_vgpr11
352     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
353     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
354     ; GFX90A-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr11, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
355     ; GFX940-LABEL: name: copy_v128_to_v128_unaligned
356     ; GFX940: liveins: $vgpr8_vgpr9_vgpr10_vgpr11
357     ; GFX940-NEXT: {{  $}}
358     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $vgpr8_vgpr9_vgpr10_vgpr11
359     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
360     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
361     ; GFX940-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr11, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
362     ; GFX10-LABEL: name: copy_v128_to_v128_unaligned
363     ; GFX10: liveins: $vgpr8_vgpr9_vgpr10_vgpr11
364     ; GFX10-NEXT: {{  $}}
365     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $vgpr8_vgpr9_vgpr10_vgpr11
366     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
367     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit $vgpr8_vgpr9_vgpr10_vgpr11
368     ; GFX10-NEXT: $vgpr4 = V_MOV_B32_e32 $vgpr11, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
369     $vgpr1_vgpr2_vgpr3_vgpr4 = COPY killed $vgpr8_vgpr9_vgpr10_vgpr11, implicit $exec
373 name: copy_v128_unaligned_to_v128
374 tracksRegLiveness: true
375 body: |
376   bb.0:
377     liveins: $vgpr7_vgpr8_vgpr9_vgpr10
378     ; GFX908-LABEL: name: copy_v128_unaligned_to_v128
379     ; GFX908: liveins: $vgpr7_vgpr8_vgpr9_vgpr10
380     ; GFX908-NEXT: {{  $}}
381     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr7_vgpr8_vgpr9_vgpr10
382     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
383     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
384     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
385     ; GFX90A-LABEL: name: copy_v128_unaligned_to_v128
386     ; GFX90A: liveins: $vgpr7_vgpr8_vgpr9_vgpr10
387     ; GFX90A-NEXT: {{  $}}
388     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr7_vgpr8_vgpr9_vgpr10
389     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
390     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
391     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
392     ; GFX940-LABEL: name: copy_v128_unaligned_to_v128
393     ; GFX940: liveins: $vgpr7_vgpr8_vgpr9_vgpr10
394     ; GFX940-NEXT: {{  $}}
395     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr7_vgpr8_vgpr9_vgpr10
396     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
397     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
398     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
399     ; GFX10-LABEL: name: copy_v128_unaligned_to_v128
400     ; GFX10: liveins: $vgpr7_vgpr8_vgpr9_vgpr10
401     ; GFX10-NEXT: {{  $}}
402     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr7_vgpr8_vgpr9_vgpr10
403     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
404     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr7_vgpr8_vgpr9_vgpr10
405     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
406     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY killed $vgpr7_vgpr8_vgpr9_vgpr10, implicit $exec
410 name: copy_s64_to_v64_unaligned
411 tracksRegLiveness: true
412 body: |
413   bb.0:
414     liveins: $sgpr8_sgpr9
415     ; GFX908-LABEL: name: copy_s64_to_v64_unaligned
416     ; GFX908: liveins: $sgpr8_sgpr9
417     ; GFX908-NEXT: {{  $}}
418     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr8_sgpr9
419     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit killed $sgpr8_sgpr9, implicit $exec
420     ; GFX90A-LABEL: name: copy_s64_to_v64_unaligned
421     ; GFX90A: liveins: $sgpr8_sgpr9
422     ; GFX90A-NEXT: {{  $}}
423     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr8_sgpr9
424     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit killed $sgpr8_sgpr9, implicit $exec
425     ; GFX940-LABEL: name: copy_s64_to_v64_unaligned
426     ; GFX940: liveins: $sgpr8_sgpr9
427     ; GFX940-NEXT: {{  $}}
428     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr8_sgpr9
429     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit killed $sgpr8_sgpr9, implicit $exec
430     ; GFX10-LABEL: name: copy_s64_to_v64_unaligned
431     ; GFX10: liveins: $sgpr8_sgpr9
432     ; GFX10-NEXT: {{  $}}
433     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr8_sgpr9
434     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit killed $sgpr8_sgpr9, implicit $exec
435     $vgpr1_vgpr2 = COPY killed $sgpr8_sgpr9, implicit $exec
439 name: copy_s128_to_v128_unaligned
440 tracksRegLiveness: true
441 body: |
442   bb.0:
443     liveins: $sgpr8_sgpr9_sgpr10_sgpr11
444     ; GFX908-LABEL: name: copy_s128_to_v128_unaligned
445     ; GFX908: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
446     ; GFX908-NEXT: {{  $}}
447     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $sgpr8_sgpr9_sgpr10_sgpr11
448     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
449     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr10, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
450     ; GFX908-NEXT: $vgpr4 = V_MOV_B32_e32 $sgpr11, implicit $exec, implicit killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
451     ; GFX90A-LABEL: name: copy_s128_to_v128_unaligned
452     ; GFX90A: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
453     ; GFX90A-NEXT: {{  $}}
454     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $sgpr8_sgpr9_sgpr10_sgpr11
455     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
456     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr10, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
457     ; GFX90A-NEXT: $vgpr4 = V_MOV_B32_e32 $sgpr11, implicit $exec, implicit killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
458     ; GFX940-LABEL: name: copy_s128_to_v128_unaligned
459     ; GFX940: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
460     ; GFX940-NEXT: {{  $}}
461     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $sgpr8_sgpr9_sgpr10_sgpr11
462     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
463     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr10, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
464     ; GFX940-NEXT: $vgpr4 = V_MOV_B32_e32 $sgpr11, implicit $exec, implicit killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
465     ; GFX10-LABEL: name: copy_s128_to_v128_unaligned
466     ; GFX10: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
467     ; GFX10-NEXT: {{  $}}
468     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3_vgpr4, implicit $sgpr8_sgpr9_sgpr10_sgpr11
469     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr9, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
470     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr10, implicit $exec, implicit $sgpr8_sgpr9_sgpr10_sgpr11
471     ; GFX10-NEXT: $vgpr4 = V_MOV_B32_e32 $sgpr11, implicit $exec, implicit killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
472     $vgpr1_vgpr2_vgpr3_vgpr4 = COPY killed $sgpr8_sgpr9_sgpr10_sgpr11, implicit $exec
476 name: copy_v96_to_v96_unaligned
477 tracksRegLiveness: true
478 body: |
479   bb.0:
480     liveins: $vgpr8_vgpr9_vgpr10
481     ; GFX908-LABEL: name: copy_v96_to_v96_unaligned
482     ; GFX908: liveins: $vgpr8_vgpr9_vgpr10
483     ; GFX908-NEXT: {{  $}}
484     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $vgpr8_vgpr9_vgpr10
485     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10
486     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10, implicit $exec
487     ; GFX90A-LABEL: name: copy_v96_to_v96_unaligned
488     ; GFX90A: liveins: $vgpr8_vgpr9_vgpr10
489     ; GFX90A-NEXT: {{  $}}
490     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $vgpr8_vgpr9_vgpr10
491     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10
492     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10, implicit $exec
493     ; GFX940-LABEL: name: copy_v96_to_v96_unaligned
494     ; GFX940: liveins: $vgpr8_vgpr9_vgpr10
495     ; GFX940-NEXT: {{  $}}
496     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $vgpr8_vgpr9_vgpr10
497     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10
498     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10, implicit $exec
499     ; GFX10-LABEL: name: copy_v96_to_v96_unaligned
500     ; GFX10: liveins: $vgpr8_vgpr9_vgpr10
501     ; GFX10-NEXT: {{  $}}
502     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $vgpr8_vgpr9_vgpr10
503     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit $vgpr8_vgpr9_vgpr10
504     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr10, implicit $exec, implicit killed $vgpr8_vgpr9_vgpr10, implicit $exec
505     $vgpr1_vgpr2_vgpr3 = COPY killed $vgpr8_vgpr9_vgpr10, implicit $exec
509 name: copy_v96_unaligned_to_v96
510 tracksRegLiveness: true
511 body: |
512   bb.0:
513     liveins: $vgpr7_vgpr8_vgpr9
514     ; GFX908-LABEL: name: copy_v96_unaligned_to_v96
515     ; GFX908: liveins: $vgpr7_vgpr8_vgpr9
516     ; GFX908-NEXT: {{  $}}
517     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr7_vgpr8_vgpr9
518     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9
519     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9, implicit $exec
520     ; GFX90A-LABEL: name: copy_v96_unaligned_to_v96
521     ; GFX90A: liveins: $vgpr7_vgpr8_vgpr9
522     ; GFX90A-NEXT: {{  $}}
523     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr7_vgpr8_vgpr9
524     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9
525     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9, implicit $exec
526     ; GFX940-LABEL: name: copy_v96_unaligned_to_v96
527     ; GFX940: liveins: $vgpr7_vgpr8_vgpr9
528     ; GFX940-NEXT: {{  $}}
529     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr7_vgpr8_vgpr9
530     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9
531     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9, implicit $exec
532     ; GFX10-LABEL: name: copy_v96_unaligned_to_v96
533     ; GFX10: liveins: $vgpr7_vgpr8_vgpr9
534     ; GFX10-NEXT: {{  $}}
535     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $vgpr7_vgpr8_vgpr9
536     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr8, implicit $exec, implicit $vgpr7_vgpr8_vgpr9
537     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr9, implicit $exec, implicit killed $vgpr7_vgpr8_vgpr9, implicit $exec
538     $vgpr0_vgpr1_vgpr2 = COPY killed $vgpr7_vgpr8_vgpr9, implicit $exec
542 name: copy_s96_to_v96
543 tracksRegLiveness: true
544 body: |
545   bb.0:
546     liveins: $sgpr0_sgpr1_sgpr2
547     ; GFX908-LABEL: name: copy_s96_to_v96
548     ; GFX908: liveins: $sgpr0_sgpr1_sgpr2
549     ; GFX908-NEXT: {{  $}}
550     ; GFX908-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $sgpr0_sgpr1_sgpr2
551     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
552     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
553     ; GFX90A-LABEL: name: copy_s96_to_v96
554     ; GFX90A: liveins: $sgpr0_sgpr1_sgpr2
555     ; GFX90A-NEXT: {{  $}}
556     ; GFX90A-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $sgpr0_sgpr1_sgpr2
557     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
558     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
559     ; GFX940-LABEL: name: copy_s96_to_v96
560     ; GFX940: liveins: $sgpr0_sgpr1_sgpr2
561     ; GFX940-NEXT: {{  $}}
562     ; GFX940-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $sgpr0_sgpr1_sgpr2
563     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
564     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
565     ; GFX10-LABEL: name: copy_s96_to_v96
566     ; GFX10: liveins: $sgpr0_sgpr1_sgpr2
567     ; GFX10-NEXT: {{  $}}
568     ; GFX10-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2, implicit $sgpr0_sgpr1_sgpr2
569     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
570     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
571     $vgpr0_vgpr1_vgpr2 = COPY killed $sgpr0_sgpr1_sgpr2, implicit $exec
575 name: copy_s96_to_v96_unaligned
576 tracksRegLiveness: true
577 body: |
578   bb.0:
579     liveins: $sgpr0_sgpr1_sgpr2
580     ; GFX908-LABEL: name: copy_s96_to_v96_unaligned
581     ; GFX908: liveins: $sgpr0_sgpr1_sgpr2
582     ; GFX908-NEXT: {{  $}}
583     ; GFX908-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $sgpr0_sgpr1_sgpr2
584     ; GFX908-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
585     ; GFX908-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
586     ; GFX90A-LABEL: name: copy_s96_to_v96_unaligned
587     ; GFX90A: liveins: $sgpr0_sgpr1_sgpr2
588     ; GFX90A-NEXT: {{  $}}
589     ; GFX90A-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $sgpr0_sgpr1_sgpr2
590     ; GFX90A-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
591     ; GFX90A-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
592     ; GFX940-LABEL: name: copy_s96_to_v96_unaligned
593     ; GFX940: liveins: $sgpr0_sgpr1_sgpr2
594     ; GFX940-NEXT: {{  $}}
595     ; GFX940-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $sgpr0_sgpr1_sgpr2
596     ; GFX940-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
597     ; GFX940-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
598     ; GFX10-LABEL: name: copy_s96_to_v96_unaligned
599     ; GFX10: liveins: $sgpr0_sgpr1_sgpr2
600     ; GFX10-NEXT: {{  $}}
601     ; GFX10-NEXT: $vgpr3 = V_MOV_B32_e32 $sgpr2, implicit $exec, implicit-def $vgpr1_vgpr2_vgpr3, implicit $sgpr0_sgpr1_sgpr2
602     ; GFX10-NEXT: $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1_sgpr2
603     ; GFX10-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit killed $sgpr0_sgpr1_sgpr2, implicit $exec
604     $vgpr1_vgpr2_vgpr3 = COPY killed $sgpr0_sgpr1_sgpr2, implicit $exec