[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-extract-vector-elt.mir
blob49bfa53a2d1f8ce787ae1ad4b964531a463ce5ec
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=MOVREL %s
3 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=MOVREL %s
4 # RUN: llc -march=amdgcn -mcpu=fiji -amdgpu-vgpr-index-mode  -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GPRIDX %s
5 # RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GPRIDX %s
6 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=MOVREL %s
7 # RUN: llc -march=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=MOVREL %s
9 ---
10 name: extract_vector_elt_s_s32_v2s32
11 legalized: true
12 regBankSelected: true
14 body: |
15   bb.0:
16     liveins: $sgpr0_sgpr1, $sgpr2
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 ...
41 ---
42 name: extract_vector_elt_s_s32_v3s32
43 legalized: true
44 regBankSelected: true
46 body: |
47   bb.0:
48     liveins: $sgpr0_sgpr1_sgpr2, $sgpr3
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 ...
73 ---
74 name: extract_vector_elt_s_s32_v4s32
75 legalized: true
76 regBankSelected: true
78 body: |
79   bb.0:
80     liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
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
106 name: extract_vector_elt_s_s32_v8s32
107 legalized: true
108 regBankSelected: true
110 body: |
111   bb.0:
112     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
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
138 name: extract_vector_elt_s_s32_v16s32
139 legalized: true
140 regBankSelected: true
142 body: |
143   bb.0:
144     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
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
170 name: extract_vector_elt_s_s32_v32s32
171 legalized: true
172 regBankSelected: true
174 body: |
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
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
202 name: extract_vector_elt_s_s64_v2s64
203 legalized: true
204 regBankSelected: true
206 body: |
207   bb.0:
208     liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
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
234 name: extract_vector_elt_s_s64_v4s64
235 legalized: true
236 regBankSelected: true
238 body: |
239   bb.0:
240     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
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
266 name: extract_vector_elt_s_s64_v8s64
267 legalized: true
268 regBankSelected: true
270 body: |
271   bb.0:
272     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
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
298 name: extract_vector_elt_s_s64_v16s64
299 legalized: true
300 regBankSelected: true
302 body: |
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
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
330 name: extract_vector_elt_s_s32_v8s32_idx_offset_1
331 legalized: true
332 regBankSelected: true
334 body: |
335   bb.0:
336     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
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
364 name: extract_vector_elt_s_s32_v8s32_idx_offset_m1
365 legalized: true
366 regBankSelected: true
368 body: |
369   bb.0:
370     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
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
402 name: extract_vector_elt_s_s32_v8s32_idx_offset_7
403 legalized: true
404 regBankSelected: true
406 body: |
407   bb.0:
408     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
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
436 name: extract_vector_elt_s_s32_v8s32_idx_offset_8
437 legalized: true
438 regBankSelected: true
440 body: |
441   bb.0:
442     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8
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
474 name: extract_vector_elt_s_s64_v8s64_idx_offset_1
475 legalized: true
476 regBankSelected: true
478 body: |
479   bb.0:
480     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
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
508 name: extract_vector_elt_s_s64_v8s64_idx_offset_2
509 legalized: true
510 regBankSelected: true
512 body: |
513   bb.0:
514     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
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
542 name: extract_vector_elt_s_s64_v8s64_idx_offset_m1
543 legalized: true
544 regBankSelected: true
546 body: |
547   bb.0:
548     liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
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
580 name: extract_vector_elt_v_s32_v2s32
581 legalized: true
582 regBankSelected: true
584 body: |
585   bb.0:
586     liveins: $vgpr0_vgpr1, $sgpr2
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
611 name: extract_vector_elt_v_s32_v3s32
612 legalized: true
613 regBankSelected: true
615 body: |
616   bb.0:
617     liveins: $vgpr0_vgpr1_vgpr2, $sgpr3
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
642 name: extract_vector_elt_v_s32_v4s32
643 legalized: true
644 regBankSelected: true
646 body: |
647   bb.0:
648     liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $sgpr4
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
673 name: extract_vector_elt_v_s32_v8s32
674 legalized: true
675 regBankSelected: true
677 body: |
678   bb.0:
679     liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8
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
704 name: extract_vector_elt_v_s32_v16s32
705 legalized: true
706 regBankSelected: true
708 body: |
709   bb.0:
710     liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
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
735 name: extract_vector_elt_v_s32_v32s32
736 legalized: true
737 regBankSelected: true
739 body: |
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
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
766 name: extract_vector_elt_v_s32_v8s32_idx_offset_1
767 legalized: true
768 regBankSelected: true
770 body: |
771   bb.0:
772     liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
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
799 name: extract_vector_elt_v_s32_v8s32_idx_offset_m1
800 legalized: true
801 regBankSelected: true
803 body: |
804   bb.0:
805     liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
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
836 name: extract_vector_elt_v_s32_v8s32_idx_offset_7
837 legalized: true
838 regBankSelected: true
840 body: |
841   bb.0:
842     liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
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
869 name: extract_vector_elt_v_s32_v8s32_idx_offset_8
870 legalized: true
871 regBankSelected: true
873 body: |
874   bb.0:
875     liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $sgpr8
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
906 name: extract_vector_elt_s_s32_v4s32_const_idx
907 legalized: true
908 regBankSelected: true
910 body: |
911   bb.0:
912     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
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
938 name: extract_vector_elt_v_s32_v4s32_const_idx
939 legalized: true
940 regBankSelected: true
942 body: |
943   bb.0:
944     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
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