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