xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-extract-vector-elt.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=MOVREL %s
3# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=MOVREL %s
4# RUN: llc -mtriple=amdgcn -mcpu=fiji -amdgpu-vgpr-index-mode  -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GPRIDX %s
5# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GPRIDX %s
6# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=MOVREL %s
7# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=MOVREL %s
8
9---
10name: extract_vector_elt_s_s32_v2s32
11legalized: true
12regBankSelected: true
13
14body: |
15  bb.0:
16    liveins: $sgpr0_sgpr1, $sgpr2
17
18    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v2s32
19    ; MOVREL: liveins: $sgpr0_sgpr1, $sgpr2
20    ; MOVREL-NEXT: {{  $}}
21    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
22    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
23    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
24    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
25    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
26    ;
27    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v2s32
28    ; GPRIDX: liveins: $sgpr0_sgpr1, $sgpr2
29    ; GPRIDX-NEXT: {{  $}}
30    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
31    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
32    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
33    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
34    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
35    %0:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
36    %1:sgpr(s32) = COPY $sgpr2
37    %2:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
38    S_ENDPGM 0, implicit %2
39...
40
41---
42name: extract_vector_elt_s_s32_v3s32
43legalized: true
44regBankSelected: true
45
46body: |
47  bb.0:
48    liveins: $sgpr0_sgpr1_sgpr2, $sgpr3
49
50    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v3s32
51    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2, $sgpr3
52    ; MOVREL-NEXT: {{  $}}
53    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_96 = COPY $sgpr0_sgpr1_sgpr2
54    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
55    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
56    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
57    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
58    ;
59    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v3s32
60    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2, $sgpr3
61    ; GPRIDX-NEXT: {{  $}}
62    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_96 = COPY $sgpr0_sgpr1_sgpr2
63    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
64    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
65    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
66    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
67    %0:sgpr(<3 x s32>) = COPY $sgpr0_sgpr1_sgpr2
68    %1:sgpr(s32) = COPY $sgpr2
69    %2:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
70    S_ENDPGM 0, implicit %2
71...
72
73---
74name: extract_vector_elt_s_s32_v4s32
75legalized: true
76regBankSelected: true
77
78body: |
79  bb.0:
80    liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
81
82    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v4s32
83    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
84    ; MOVREL-NEXT: {{  $}}
85    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
86    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr4
87    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
88    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
89    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
90    ;
91    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v4s32
92    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
93    ; GPRIDX-NEXT: {{  $}}
94    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
95    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr4
96    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
97    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
98    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
99    %0:sgpr(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
100    %1:sgpr(s32) = COPY $sgpr4
101    %2:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
102    S_ENDPGM 0, implicit %2
103...
104
105---
106name: extract_vector_elt_s_s32_v8s32
107legalized: true
108regBankSelected: true
109
110body: |
111  bb.0:
112    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
113
114    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v8s32
115    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
116    ; MOVREL-NEXT: {{  $}}
117    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
118    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
119    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
120    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
121    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
122    ;
123    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v8s32
124    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
125    ; GPRIDX-NEXT: {{  $}}
126    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
127    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
128    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
129    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
130    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
131    %0:sgpr(<8 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
132    %1:sgpr(s32) = COPY $sgpr8
133    %2:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
134    S_ENDPGM 0, implicit %2
135...
136
137---
138name: extract_vector_elt_s_s32_v16s32
139legalized: true
140regBankSelected: true
141
142body: |
143  bb.0:
144    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
145
146    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v16s32
147    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
148    ; MOVREL-NEXT: {{  $}}
149    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
150    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
151    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
152    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
153    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
154    ;
155    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v16s32
156    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
157    ; GPRIDX-NEXT: {{  $}}
158    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
159    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
160    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
161    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
162    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
163    %0:sgpr(<16 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
164    %1:sgpr(s32) = COPY $sgpr8
165    %2:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
166    S_ENDPGM 0, implicit %2
167...
168
169---
170name: extract_vector_elt_s_s32_v32s32
171legalized: true
172regBankSelected: true
173
174body: |
175  bb.0:
176    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31, $sgpr40
177
178    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v32s32
179    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31, $sgpr40
180    ; MOVREL-NEXT: {{  $}}
181    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_1024 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
182    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr40
183    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
184    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
185    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
186    ;
187    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v32s32
188    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31, $sgpr40
189    ; GPRIDX-NEXT: {{  $}}
190    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_1024 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
191    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr40
192    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
193    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
194    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
195    %0:sgpr(<32 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
196    %1:sgpr(s32) = COPY $sgpr40
197    %2:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
198    S_ENDPGM 0, implicit %2
199...
200
201---
202name: extract_vector_elt_s_s64_v2s64
203legalized: true
204regBankSelected: true
205
206body: |
207  bb.0:
208    liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
209
210    ; MOVREL-LABEL: name: extract_vector_elt_s_s64_v2s64
211    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
212    ; MOVREL-NEXT: {{  $}}
213    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
214    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr4
215    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
216    ; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
217    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
218    ;
219    ; GPRIDX-LABEL: name: extract_vector_elt_s_s64_v2s64
220    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
221    ; GPRIDX-NEXT: {{  $}}
222    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
223    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr4
224    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
225    ; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
226    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
227    %0:sgpr(<2 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
228    %1:sgpr(s32) = COPY $sgpr4
229    %2:sgpr(s64) = G_EXTRACT_VECTOR_ELT %0, %1
230    S_ENDPGM 0, implicit %2
231...
232
233---
234name: extract_vector_elt_s_s64_v4s64
235legalized: true
236regBankSelected: true
237
238body: |
239  bb.0:
240    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
241
242    ; MOVREL-LABEL: name: extract_vector_elt_s_s64_v4s64
243    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
244    ; MOVREL-NEXT: {{  $}}
245    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
246    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
247    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
248    ; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
249    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
250    ;
251    ; GPRIDX-LABEL: name: extract_vector_elt_s_s64_v4s64
252    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
253    ; GPRIDX-NEXT: {{  $}}
254    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
255    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
256    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
257    ; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
258    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
259    %0:sgpr(<4 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
260    %1:sgpr(s32) = COPY $sgpr8
261    %2:sgpr(s64) = G_EXTRACT_VECTOR_ELT %0, %1
262    S_ENDPGM 0, implicit %2
263...
264
265---
266name: extract_vector_elt_s_s64_v8s64
267legalized: true
268regBankSelected: true
269
270body: |
271  bb.0:
272    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
273
274    ; MOVREL-LABEL: name: extract_vector_elt_s_s64_v8s64
275    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
276    ; MOVREL-NEXT: {{  $}}
277    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
278    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
279    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
280    ; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
281    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
282    ;
283    ; GPRIDX-LABEL: name: extract_vector_elt_s_s64_v8s64
284    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
285    ; GPRIDX-NEXT: {{  $}}
286    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
287    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
288    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
289    ; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
290    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
291    %0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
292    %1:sgpr(s32) = COPY $sgpr8
293    %2:sgpr(s64) = G_EXTRACT_VECTOR_ELT %0, %1
294    S_ENDPGM 0, implicit %2
295...
296
297---
298name: extract_vector_elt_s_s64_v16s64
299legalized: true
300regBankSelected: true
301
302body: |
303  bb.0:
304    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31, $sgpr40
305
306    ; MOVREL-LABEL: name: extract_vector_elt_s_s64_v16s64
307    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31, $sgpr40
308    ; MOVREL-NEXT: {{  $}}
309    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_1024 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
310    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr40
311    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
312    ; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
313    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
314    ;
315    ; GPRIDX-LABEL: name: extract_vector_elt_s_s64_v16s64
316    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31, $sgpr40
317    ; GPRIDX-NEXT: {{  $}}
318    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_1024 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
319    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr40
320    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
321    ; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
322    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
323    %0:sgpr(<16 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
324    %1:sgpr(s32) = COPY $sgpr40
325    %2:sgpr(s64) = G_EXTRACT_VECTOR_ELT %0, %1
326    S_ENDPGM 0, implicit %2
327...
328
329---
330name: extract_vector_elt_s_s32_v8s32_idx_offset_1
331legalized: true
332regBankSelected: true
333
334body: |
335  bb.0:
336    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
337
338    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v8s32_idx_offset_1
339    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
340    ; MOVREL-NEXT: {{  $}}
341    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
342    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
343    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
344    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub1, implicit $m0, implicit [[COPY]]
345    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
346    ;
347    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v8s32_idx_offset_1
348    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
349    ; GPRIDX-NEXT: {{  $}}
350    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
351    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
352    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
353    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub1, implicit $m0, implicit [[COPY]]
354    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
355    %0:sgpr(<8 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
356    %1:sgpr(s32) = COPY $sgpr8
357    %2:sgpr(s32) = G_CONSTANT i32 1
358    %3:sgpr(s32) = G_ADD %1, %2
359    %4:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %3
360    S_ENDPGM 0, implicit %4
361...
362
363---
364name: extract_vector_elt_s_s32_v8s32_idx_offset_m1
365legalized: true
366regBankSelected: true
367
368body: |
369  bb.0:
370    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
371
372    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v8s32_idx_offset_m1
373    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
374    ; MOVREL-NEXT: {{  $}}
375    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
376    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
377    ; MOVREL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
378    ; MOVREL-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
379    ; MOVREL-NEXT: $m0 = COPY [[S_ADD_I32_]]
380    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
381    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
382    ;
383    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v8s32_idx_offset_m1
384    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
385    ; GPRIDX-NEXT: {{  $}}
386    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
387    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
388    ; GPRIDX-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
389    ; GPRIDX-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
390    ; GPRIDX-NEXT: $m0 = COPY [[S_ADD_I32_]]
391    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
392    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
393    %0:sgpr(<8 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
394    %1:sgpr(s32) = COPY $sgpr8
395    %2:sgpr(s32) = G_CONSTANT i32 -1
396    %3:sgpr(s32) = G_ADD %1, %2
397    %4:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %3
398    S_ENDPGM 0, implicit %4
399...
400
401---
402name: extract_vector_elt_s_s32_v8s32_idx_offset_7
403legalized: true
404regBankSelected: true
405
406body: |
407  bb.0:
408    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
409
410    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v8s32_idx_offset_7
411    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
412    ; MOVREL-NEXT: {{  $}}
413    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
414    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
415    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
416    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub7, implicit $m0, implicit [[COPY]]
417    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
418    ;
419    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v8s32_idx_offset_7
420    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
421    ; GPRIDX-NEXT: {{  $}}
422    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
423    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
424    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
425    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub7, implicit $m0, implicit [[COPY]]
426    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
427    %0:sgpr(<8 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
428    %1:sgpr(s32) = COPY $sgpr8
429    %2:sgpr(s32) = G_CONSTANT i32 7
430    %3:sgpr(s32) = G_ADD %1, %2
431    %4:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %3
432    S_ENDPGM 0, implicit %4
433...
434
435---
436name: extract_vector_elt_s_s32_v8s32_idx_offset_8
437legalized: true
438regBankSelected: true
439
440body: |
441  bb.0:
442    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
443
444    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v8s32_idx_offset_8
445    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
446    ; MOVREL-NEXT: {{  $}}
447    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
448    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
449    ; MOVREL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 8
450    ; MOVREL-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
451    ; MOVREL-NEXT: $m0 = COPY [[S_ADD_I32_]]
452    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
453    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
454    ;
455    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v8s32_idx_offset_8
456    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
457    ; GPRIDX-NEXT: {{  $}}
458    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
459    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
460    ; GPRIDX-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 8
461    ; GPRIDX-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
462    ; GPRIDX-NEXT: $m0 = COPY [[S_ADD_I32_]]
463    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
464    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
465    %0:sgpr(<8 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
466    %1:sgpr(s32) = COPY $sgpr8
467    %2:sgpr(s32) = G_CONSTANT i32 8
468    %3:sgpr(s32) = G_ADD %1, %2
469    %4:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %3
470    S_ENDPGM 0, implicit %4
471...
472
473---
474name: extract_vector_elt_s_s64_v8s64_idx_offset_1
475legalized: true
476regBankSelected: true
477
478body: |
479  bb.0:
480    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
481
482    ; MOVREL-LABEL: name: extract_vector_elt_s_s64_v8s64_idx_offset_1
483    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
484    ; MOVREL-NEXT: {{  $}}
485    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
486    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
487    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
488    ; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub2_sub3, implicit $m0, implicit [[COPY]]
489    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
490    ;
491    ; GPRIDX-LABEL: name: extract_vector_elt_s_s64_v8s64_idx_offset_1
492    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
493    ; GPRIDX-NEXT: {{  $}}
494    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
495    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
496    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
497    ; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub2_sub3, implicit $m0, implicit [[COPY]]
498    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
499    %0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
500    %1:sgpr(s32) = COPY $sgpr8
501    %2:sgpr(s32) = G_CONSTANT i32 1
502    %3:sgpr(s32) = G_ADD %1, %2
503    %4:sgpr(s64) = G_EXTRACT_VECTOR_ELT %0, %3
504    S_ENDPGM 0, implicit %4
505...
506
507---
508name: extract_vector_elt_s_s64_v8s64_idx_offset_2
509legalized: true
510regBankSelected: true
511
512body: |
513  bb.0:
514    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
515
516    ; MOVREL-LABEL: name: extract_vector_elt_s_s64_v8s64_idx_offset_2
517    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
518    ; MOVREL-NEXT: {{  $}}
519    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
520    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
521    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
522    ; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub4_sub5, implicit $m0, implicit [[COPY]]
523    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
524    ;
525    ; GPRIDX-LABEL: name: extract_vector_elt_s_s64_v8s64_idx_offset_2
526    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
527    ; GPRIDX-NEXT: {{  $}}
528    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
529    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
530    ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
531    ; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub4_sub5, implicit $m0, implicit [[COPY]]
532    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
533    %0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
534    %1:sgpr(s32) = COPY $sgpr8
535    %2:sgpr(s32) = G_CONSTANT i32 2
536    %3:sgpr(s32) = G_ADD %1, %2
537    %4:sgpr(s64) = G_EXTRACT_VECTOR_ELT %0, %3
538    S_ENDPGM 0, implicit %4
539...
540
541---
542name: extract_vector_elt_s_s64_v8s64_idx_offset_m1
543legalized: true
544regBankSelected: true
545
546body: |
547  bb.0:
548    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
549
550    ; MOVREL-LABEL: name: extract_vector_elt_s_s64_v8s64_idx_offset_m1
551    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
552    ; MOVREL-NEXT: {{  $}}
553    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
554    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
555    ; MOVREL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
556    ; MOVREL-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
557    ; MOVREL-NEXT: $m0 = COPY [[S_ADD_I32_]]
558    ; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
559    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
560    ;
561    ; GPRIDX-LABEL: name: extract_vector_elt_s_s64_v8s64_idx_offset_m1
562    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
563    ; GPRIDX-NEXT: {{  $}}
564    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
565    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
566    ; GPRIDX-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
567    ; GPRIDX-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
568    ; GPRIDX-NEXT: $m0 = COPY [[S_ADD_I32_]]
569    ; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
570    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
571    %0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
572    %1:sgpr(s32) = COPY $sgpr8
573    %2:sgpr(s32) = G_CONSTANT i32 -1
574    %3:sgpr(s32) = G_ADD %1, %2
575    %4:sgpr(s64) = G_EXTRACT_VECTOR_ELT %0, %3
576    S_ENDPGM 0, implicit %4
577...
578
579---
580name: extract_vector_elt_v_s32_v2s32
581legalized: true
582regBankSelected: true
583
584body: |
585  bb.0:
586    liveins: $vgpr0_vgpr1, $sgpr2
587
588    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v2s32
589    ; MOVREL: liveins: $vgpr0_vgpr1, $sgpr2
590    ; MOVREL-NEXT: {{  $}}
591    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
592    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
593    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
594    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
595    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
596    ;
597    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v2s32
598    ; GPRIDX: liveins: $vgpr0_vgpr1, $sgpr2
599    ; GPRIDX-NEXT: {{  $}}
600    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
601    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
602    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V2_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V2 [[COPY]], [[COPY1]], 3, implicit-def $m0, implicit $m0, implicit $exec
603    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V2_]]
604    %0:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
605    %1:sgpr(s32) = COPY $sgpr2
606    %2:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
607    S_ENDPGM 0, implicit %2
608...
609
610---
611name: extract_vector_elt_v_s32_v3s32
612legalized: true
613regBankSelected: true
614
615body: |
616  bb.0:
617    liveins: $vgpr0_vgpr1_vgpr2, $sgpr3
618
619    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v3s32
620    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2, $sgpr3
621    ; MOVREL-NEXT: {{  $}}
622    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_96 = COPY $vgpr0_vgpr1_vgpr2
623    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
624    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
625    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
626    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
627    ;
628    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v3s32
629    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2, $sgpr3
630    ; GPRIDX-NEXT: {{  $}}
631    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_96 = COPY $vgpr0_vgpr1_vgpr2
632    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
633    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V3_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V3 [[COPY]], [[COPY1]], 3, implicit-def $m0, implicit $m0, implicit $exec
634    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V3_]]
635    %0:vgpr(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
636    %1:sgpr(s32) = COPY $sgpr2
637    %2:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
638    S_ENDPGM 0, implicit %2
639...
640
641---
642name: extract_vector_elt_v_s32_v4s32
643legalized: true
644regBankSelected: true
645
646body: |
647  bb.0:
648    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $sgpr4
649
650    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v4s32
651    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $sgpr4
652    ; MOVREL-NEXT: {{  $}}
653    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr3
654    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr4
655    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
656    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
657    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
658    ;
659    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v4s32
660    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $sgpr4
661    ; GPRIDX-NEXT: {{  $}}
662    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr3
663    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr4
664    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V4_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V4 [[COPY]], [[COPY1]], 3, implicit-def $m0, implicit $m0, implicit $exec
665    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V4_]]
666    %0:vgpr(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
667    %1:sgpr(s32) = COPY $sgpr4
668    %2:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
669    S_ENDPGM 0, implicit %2
670...
671
672---
673name: extract_vector_elt_v_s32_v8s32
674legalized: true
675regBankSelected: true
676
677body: |
678  bb.0:
679    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8
680
681    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v8s32
682    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8
683    ; MOVREL-NEXT: {{  $}}
684    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
685    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
686    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
687    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
688    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
689    ;
690    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v8s32
691    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8
692    ; GPRIDX-NEXT: {{  $}}
693    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
694    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
695    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V8 [[COPY]], [[COPY1]], 3, implicit-def $m0, implicit $m0, implicit $exec
696    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_]]
697    %0:vgpr(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
698    %1:sgpr(s32) = COPY $sgpr8
699    %2:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
700    S_ENDPGM 0, implicit %2
701...
702
703---
704name: extract_vector_elt_v_s32_v16s32
705legalized: true
706regBankSelected: true
707
708body: |
709  bb.0:
710    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
711
712    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v16s32
713    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
714    ; MOVREL-NEXT: {{  $}}
715    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_512 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
716    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
717    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
718    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
719    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
720    ;
721    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v16s32
722    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
723    ; GPRIDX-NEXT: {{  $}}
724    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_512 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
725    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
726    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V16_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V16 [[COPY]], [[COPY1]], 3, implicit-def $m0, implicit $m0, implicit $exec
727    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V16_]]
728    %0:vgpr(<16 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
729    %1:sgpr(s32) = COPY $sgpr8
730    %2:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
731    S_ENDPGM 0, implicit %2
732...
733
734---
735name: extract_vector_elt_v_s32_v32s32
736legalized: true
737regBankSelected: true
738
739body: |
740  bb.0:
741    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31, $sgpr40
742
743    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v32s32
744    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31, $sgpr40
745    ; MOVREL-NEXT: {{  $}}
746    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_1024 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
747    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr40
748    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
749    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
750    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
751    ;
752    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v32s32
753    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31, $sgpr40
754    ; GPRIDX-NEXT: {{  $}}
755    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_1024 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
756    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr40
757    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V32_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V32 [[COPY]], [[COPY1]], 3, implicit-def $m0, implicit $m0, implicit $exec
758    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V32_]]
759    %0:vgpr(<32 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
760    %1:sgpr(s32) = COPY $sgpr40
761    %2:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
762    S_ENDPGM 0, implicit %2
763...
764
765---
766name: extract_vector_elt_v_s32_v8s32_idx_offset_1
767legalized: true
768regBankSelected: true
769
770body: |
771  bb.0:
772    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
773
774    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v8s32_idx_offset_1
775    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
776    ; MOVREL-NEXT: {{  $}}
777    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
778    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
779    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
780    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub1, implicit $m0, implicit $exec, implicit [[COPY]]
781    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
782    ;
783    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v8s32_idx_offset_1
784    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
785    ; GPRIDX-NEXT: {{  $}}
786    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
787    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
788    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V8 [[COPY]], [[COPY1]], 11, implicit-def $m0, implicit $m0, implicit $exec
789    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_]]
790    %0:vgpr(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
791    %1:sgpr(s32) = COPY $sgpr8
792    %2:sgpr(s32) = G_CONSTANT i32 1
793    %3:sgpr(s32) = G_ADD %1, %2
794    %4:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %3
795    S_ENDPGM 0, implicit %4
796...
797
798---
799name: extract_vector_elt_v_s32_v8s32_idx_offset_m1
800legalized: true
801regBankSelected: true
802
803body: |
804  bb.0:
805    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
806
807    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v8s32_idx_offset_m1
808    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
809    ; MOVREL-NEXT: {{  $}}
810    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
811    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
812    ; MOVREL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
813    ; MOVREL-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
814    ; MOVREL-NEXT: $m0 = COPY [[S_ADD_I32_]]
815    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
816    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
817    ;
818    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v8s32_idx_offset_m1
819    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
820    ; GPRIDX-NEXT: {{  $}}
821    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
822    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
823    ; GPRIDX-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
824    ; GPRIDX-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
825    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V8 [[COPY]], [[S_ADD_I32_]], 3, implicit-def $m0, implicit $m0, implicit $exec
826    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_]]
827    %0:vgpr(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
828    %1:sgpr(s32) = COPY $sgpr8
829    %2:sgpr(s32) = G_CONSTANT i32 -1
830    %3:sgpr(s32) = G_ADD %1, %2
831    %4:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %3
832    S_ENDPGM 0, implicit %4
833...
834
835---
836name: extract_vector_elt_v_s32_v8s32_idx_offset_7
837legalized: true
838regBankSelected: true
839
840body: |
841  bb.0:
842    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
843
844    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v8s32_idx_offset_7
845    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
846    ; MOVREL-NEXT: {{  $}}
847    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
848    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
849    ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
850    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub7, implicit $m0, implicit $exec, implicit [[COPY]]
851    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
852    ;
853    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v8s32_idx_offset_7
854    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
855    ; GPRIDX-NEXT: {{  $}}
856    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
857    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
858    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V8 [[COPY]], [[COPY1]], 71, implicit-def $m0, implicit $m0, implicit $exec
859    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_]]
860    %0:vgpr(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
861    %1:sgpr(s32) = COPY $sgpr8
862    %2:sgpr(s32) = G_CONSTANT i32 7
863    %3:sgpr(s32) = G_ADD %1, %2
864    %4:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %3
865    S_ENDPGM 0, implicit %4
866...
867
868---
869name: extract_vector_elt_v_s32_v8s32_idx_offset_8
870legalized: true
871regBankSelected: true
872
873body: |
874  bb.0:
875    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
876
877    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v8s32_idx_offset_8
878    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
879    ; MOVREL-NEXT: {{  $}}
880    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
881    ; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
882    ; MOVREL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 8
883    ; MOVREL-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
884    ; MOVREL-NEXT: $m0 = COPY [[S_ADD_I32_]]
885    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
886    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
887    ;
888    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v8s32_idx_offset_8
889    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
890    ; GPRIDX-NEXT: {{  $}}
891    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
892    ; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
893    ; GPRIDX-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 8
894    ; GPRIDX-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
895    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V8 [[COPY]], [[S_ADD_I32_]], 3, implicit-def $m0, implicit $m0, implicit $exec
896    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V8_]]
897    %0:vgpr(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
898    %1:sgpr(s32) = COPY $sgpr8
899    %2:sgpr(s32) = G_CONSTANT i32 8
900    %3:sgpr(s32) = G_ADD %1, %2
901    %4:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %3
902    S_ENDPGM 0, implicit %4
903...
904
905---
906name: extract_vector_elt_s_s32_v4s32_const_idx
907legalized: true
908regBankSelected: true
909
910body: |
911  bb.0:
912    liveins: $sgpr0_sgpr1_sgpr2_sgpr3
913
914    ; MOVREL-LABEL: name: extract_vector_elt_s_s32_v4s32_const_idx
915    ; MOVREL: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
916    ; MOVREL-NEXT: {{  $}}
917    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
918    ; MOVREL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
919    ; MOVREL-NEXT: $m0 = COPY [[S_MOV_B32_]]
920    ; MOVREL-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
921    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
922    ;
923    ; GPRIDX-LABEL: name: extract_vector_elt_s_s32_v4s32_const_idx
924    ; GPRIDX: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
925    ; GPRIDX-NEXT: {{  $}}
926    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
927    ; GPRIDX-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
928    ; GPRIDX-NEXT: $m0 = COPY [[S_MOV_B32_]]
929    ; GPRIDX-NEXT: [[S_MOVRELS_B32_:%[0-9]+]]:sreg_32 = S_MOVRELS_B32 [[COPY]].sub0, implicit $m0, implicit [[COPY]]
930    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B32_]]
931    %0:sgpr(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
932    %1:sgpr(s32) = G_CONSTANT i32 0
933    %2:sgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
934    S_ENDPGM 0, implicit %2
935...
936
937---
938name: extract_vector_elt_v_s32_v4s32_const_idx
939legalized: true
940regBankSelected: true
941
942body: |
943  bb.0:
944    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
945
946    ; MOVREL-LABEL: name: extract_vector_elt_v_s32_v4s32_const_idx
947    ; MOVREL: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
948    ; MOVREL-NEXT: {{  $}}
949    ; MOVREL-NEXT: [[COPY:%[0-9]+]]:vreg_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
950    ; MOVREL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
951    ; MOVREL-NEXT: $m0 = COPY [[S_MOV_B32_]]
952    ; MOVREL-NEXT: [[V_MOVRELS_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOVRELS_B32_e32 [[COPY]].sub0, implicit $m0, implicit $exec, implicit [[COPY]]
953    ; MOVREL-NEXT: S_ENDPGM 0, implicit [[V_MOVRELS_B32_e32_]]
954    ;
955    ; GPRIDX-LABEL: name: extract_vector_elt_v_s32_v4s32_const_idx
956    ; GPRIDX: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
957    ; GPRIDX-NEXT: {{  $}}
958    ; GPRIDX-NEXT: [[COPY:%[0-9]+]]:vreg_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
959    ; GPRIDX-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
960    ; GPRIDX-NEXT: [[V_INDIRECT_REG_READ_GPR_IDX_B32_V4_:%[0-9]+]]:vgpr_32 = V_INDIRECT_REG_READ_GPR_IDX_B32_V4 [[COPY]], [[S_MOV_B32_]], 3, implicit-def $m0, implicit $m0, implicit $exec
961    ; GPRIDX-NEXT: S_ENDPGM 0, implicit [[V_INDIRECT_REG_READ_GPR_IDX_B32_V4_]]
962    %0:vgpr(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
963    %1:sgpr(s32) = G_CONSTANT i32 0
964    %2:vgpr(s32) = G_EXTRACT_VECTOR_ELT %0, %1
965    S_ENDPGM 0, implicit %2
966...
967