1167 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer -global-isel-abort=0 %s -o - | FileCheck %s3 4---5name: test_extract_s32_s64_offset06body: |7 bb.0:8 liveins: $vgpr0_vgpr19 10 ; CHECK-LABEL: name: test_extract_s32_s64_offset011 ; CHECK: liveins: $vgpr0_vgpr112 ; CHECK-NEXT: {{ $}}13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr114 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 015 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)16 %0:_(s64) = COPY $vgpr0_vgpr117 %1:_(s32) = G_EXTRACT %0, 018 $vgpr0 = COPY %119...20---21name: test_extract_s32_s64_offset3222body: |23 bb.0:24 liveins: $vgpr0_vgpr125 26 ; CHECK-LABEL: name: test_extract_s32_s64_offset3227 ; CHECK: liveins: $vgpr0_vgpr128 ; CHECK-NEXT: {{ $}}29 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr130 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 3231 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)32 %0:_(s64) = COPY $vgpr0_vgpr133 %1:_(s32) = G_EXTRACT %0, 3234 $vgpr0 = COPY %135...36 37---38name: test_extract_s8_s15_offset039body: |40 bb.0:41 liveins: $vgpr0_vgpr142 43 ; CHECK-LABEL: name: test_extract_s8_s15_offset044 ; CHECK: liveins: $vgpr0_vgpr145 ; CHECK-NEXT: {{ $}}46 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr147 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)48 ; CHECK-NEXT: $vgpr0 = COPY [[TRUNC]](s32)49 %0:_(s64) = COPY $vgpr0_vgpr150 %1:_(s31) = G_TRUNC %051 %2:_(s8) = G_EXTRACT %1, 052 %3:_(s32) = G_ANYEXT %253 $vgpr0 = COPY %354...55 56---57name: test_extract_s16_s31_offset058body: |59 bb.0:60 liveins: $vgpr0_vgpr161 62 ; CHECK-LABEL: name: test_extract_s16_s31_offset063 ; CHECK: liveins: $vgpr0_vgpr164 ; CHECK-NEXT: {{ $}}65 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr166 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)67 ; CHECK-NEXT: $vgpr0 = COPY [[TRUNC]](s32)68 %0:_(s64) = COPY $vgpr0_vgpr169 %1:_(s31) = G_TRUNC %070 %2:_(s16) = G_EXTRACT %1, 071 %3:_(s32) = G_ANYEXT %272 $vgpr0 = COPY %373...74 75---76name: test_extract_s32_s48_offset077body: |78 bb.0:79 liveins: $vgpr0_vgpr180 81 ; CHECK-LABEL: name: test_extract_s32_s48_offset082 ; CHECK: liveins: $vgpr0_vgpr183 ; CHECK-NEXT: {{ $}}84 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr185 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 086 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)87 %0:_(s64) = COPY $vgpr0_vgpr188 %1:_(s48) = G_TRUNC %089 %2:_(s32) = G_EXTRACT %1, 090 $vgpr0 = COPY %291...92 93---94name: test_extract_s32_s96_offset095body: |96 bb.0:97 liveins: $vgpr0_vgpr1_vgpr298 99 ; CHECK-LABEL: name: test_extract_s32_s96_offset0100 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2101 ; CHECK-NEXT: {{ $}}102 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2103 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 0104 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)105 %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2106 %1:_(s32) = G_EXTRACT %0, 0107 $vgpr0 = COPY %1108...109---110name: test_extract_s32_s96_offset32111body: |112 bb.0:113 liveins: $vgpr0_vgpr1_vgpr2114 115 ; CHECK-LABEL: name: test_extract_s32_s96_offset32116 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2117 ; CHECK-NEXT: {{ $}}118 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2119 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 32120 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)121 %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2122 %1:_(s32) = G_EXTRACT %0, 32123 $vgpr0 = COPY %1124...125---126name: test_extract_s32_s96_offset64127body: |128 bb.0:129 liveins: $vgpr0_vgpr1_vgpr2130 131 ; CHECK-LABEL: name: test_extract_s32_s96_offset64132 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2133 ; CHECK-NEXT: {{ $}}134 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2135 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 64136 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)137 %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2138 %1:_(s32) = G_EXTRACT %0, 64139 $vgpr0 = COPY %1140...141---142name: test_extract_s32_s128_offset0143body: |144 bb.0:145 liveins: $vgpr0_vgpr1_vgpr2_vgpr3146 147 ; CHECK-LABEL: name: test_extract_s32_s128_offset0148 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3149 ; CHECK-NEXT: {{ $}}150 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3151 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 0152 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)153 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3154 %1:_(s32) = G_EXTRACT %0, 0155 $vgpr0 = COPY %1156...157---158name: test_extract_s32_s128_offset32159body: |160 bb.0:161 liveins: $vgpr0_vgpr1_vgpr2_vgpr3162 163 ; CHECK-LABEL: name: test_extract_s32_s128_offset32164 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3165 ; CHECK-NEXT: {{ $}}166 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3167 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 32168 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)169 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3170 %1:_(s32) = G_EXTRACT %0, 32171 $vgpr0 = COPY %1172...173---174name: test_extract_s32_s128_offset64175body: |176 bb.0:177 liveins: $vgpr0_vgpr1_vgpr2_vgpr3178 179 ; CHECK-LABEL: name: test_extract_s32_s128_offset64180 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3181 ; CHECK-NEXT: {{ $}}182 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3183 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 64184 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)185 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3186 %1:_(s32) = G_EXTRACT %0, 64187 $vgpr0 = COPY %1188...189---190name: test_extract_s32_s128_offset96191body: |192 bb.0:193 liveins: $vgpr0_vgpr1_vgpr2_vgpr3194 195 ; CHECK-LABEL: name: test_extract_s32_s128_offset96196 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3197 ; CHECK-NEXT: {{ $}}198 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3199 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 96200 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)201 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3202 %1:_(s32) = G_EXTRACT %0, 96203 $vgpr0 = COPY %1204...205 206---207name: test_extract_s32_v2s32_offset0208body: |209 bb.0:210 liveins: $vgpr0_vgpr1211 212 ; CHECK-LABEL: name: test_extract_s32_v2s32_offset0213 ; CHECK: liveins: $vgpr0_vgpr1214 ; CHECK-NEXT: {{ $}}215 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1216 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)217 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV]](s32)218 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)219 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1220 %1:_(s32) = G_EXTRACT %0, 0221 $vgpr0 = COPY %1222...223---224name: test_extract_s32_v2s32_offset32225body: |226 bb.0:227 liveins: $vgpr0_vgpr1228 229 ; CHECK-LABEL: name: test_extract_s32_v2s32_offset32230 ; CHECK: liveins: $vgpr0_vgpr1231 ; CHECK-NEXT: {{ $}}232 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1233 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)234 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)235 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)236 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1237 %1:_(s32) = G_EXTRACT %0, 32238 $vgpr0 = COPY %1239...240---241name: test_extract_s32_v3s32_offset0242body: |243 bb.0:244 liveins: $vgpr0_vgpr1_vgpr2245 246 ; CHECK-LABEL: name: test_extract_s32_v3s32_offset0247 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2248 ; CHECK-NEXT: {{ $}}249 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2250 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)251 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV]](s32)252 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)253 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2254 %1:_(s32) = G_EXTRACT %0, 0255 $vgpr0 = COPY %1256...257---258name: test_extract_s32_v3s32_offset32259body: |260 bb.0:261 liveins: $vgpr0_vgpr1_vgpr2262 263 ; CHECK-LABEL: name: test_extract_s32_v3s32_offset32264 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2265 ; CHECK-NEXT: {{ $}}266 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2267 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)268 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)269 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)270 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2271 %1:_(s32) = G_EXTRACT %0, 32272 $vgpr0 = COPY %1273...274---275name: test_extract_s32_v3s32_offset64276body: |277 bb.0:278 liveins: $vgpr0_vgpr1_vgpr2279 280 ; CHECK-LABEL: name: test_extract_s32_v3s32_offset64281 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2282 ; CHECK-NEXT: {{ $}}283 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2284 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)285 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)286 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)287 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2288 %1:_(s32) = G_EXTRACT %0, 64289 $vgpr0 = COPY %1290...291---292name: test_extract_s32_v4s32_offset0293body: |294 bb.0:295 liveins: $vgpr0_vgpr1_vgpr2_vgpr3296 297 ; CHECK-LABEL: name: test_extract_s32_v4s32_offset0298 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3299 ; CHECK-NEXT: {{ $}}300 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3301 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)302 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV]](s32)303 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)304 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3305 %1:_(s32) = G_EXTRACT %0, 0306 $vgpr0 = COPY %1307...308---309name: test_extract_s32_v4s32_offset32310body: |311 bb.0:312 liveins: $vgpr0_vgpr1_vgpr2_vgpr3313 314 ; CHECK-LABEL: name: test_extract_s32_v4s32_offset32315 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3316 ; CHECK-NEXT: {{ $}}317 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3318 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 32319 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)320 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3321 %1:_(s32) = G_EXTRACT %0, 32322 $vgpr0 = COPY %1323...324---325name: test_extract_s32_v4s32_offset64326body: |327 bb.0:328 liveins: $vgpr0_vgpr1_vgpr2_vgpr3329 330 ; CHECK-LABEL: name: test_extract_s32_v4s32_offset64331 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3332 ; CHECK-NEXT: {{ $}}333 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3334 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 64335 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)336 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3337 %1:_(s32) = G_EXTRACT %0, 64338 $vgpr0 = COPY %1339...340---341name: test_extract_s32_v4s32_offset96342body: |343 bb.0:344 liveins: $vgpr0_vgpr1_vgpr2_vgpr3345 346 ; CHECK-LABEL: name: test_extract_s32_v4s32_offset96347 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3348 ; CHECK-NEXT: {{ $}}349 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3350 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 96351 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)352 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3353 %1:_(s32) = G_EXTRACT %0, 96354 $vgpr0 = COPY %1355...356---357name: test_extract_v2s32_v4s32_offset0358body: |359 bb.0:360 liveins: $vgpr0_vgpr1_vgpr2_vgpr3361 362 ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset0363 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3364 ; CHECK-NEXT: {{ $}}365 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3366 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)367 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[UV]](<2 x s32>)368 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3369 %1:_(<2 x s32>) = G_EXTRACT %0, 0370 $vgpr0_vgpr1 = COPY %1371...372 373---374name: test_extract_v2s32_v4s32_offset32375body: |376 bb.0:377 liveins: $vgpr0_vgpr1_vgpr2_vgpr3378 379 ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset32380 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3381 ; CHECK-NEXT: {{ $}}382 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3383 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)384 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UV1]](s32), [[UV2]](s32)385 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)386 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3387 %1:_(<2 x s32>) = G_EXTRACT %0, 32388 $vgpr0_vgpr1 = COPY %1389...390 391---392name: test_extract_v2s32_v4s32_offset64393body: |394 bb.0:395 liveins: $vgpr0_vgpr1_vgpr2_vgpr3396 397 ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset64398 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3399 ; CHECK-NEXT: {{ $}}400 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3401 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)402 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[UV1]](<2 x s32>)403 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3404 %1:_(<2 x s32>) = G_EXTRACT %0, 64405 $vgpr0_vgpr1 = COPY %1406...407---408name: test_extract_s64_v4s32_offset0409body: |410 bb.0:411 liveins: $vgpr0_vgpr1_vgpr2_vgpr3412 413 ; CHECK-LABEL: name: test_extract_s64_v4s32_offset0414 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3415 ; CHECK-NEXT: {{ $}}416 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3417 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)418 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)419 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[MV]](s64)420 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3421 %1:_(s64) = G_EXTRACT %0, 0422 $vgpr0_vgpr1 = COPY %1423...424 425---426name: test_extract_s64_v4s32_offset32427body: |428 bb.0:429 liveins: $vgpr0_vgpr1_vgpr2_vgpr3430 431 ; CHECK-LABEL: name: test_extract_s64_v4s32_offset32432 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3433 ; CHECK-NEXT: {{ $}}434 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3435 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)436 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV1]](s32), [[UV2]](s32)437 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[MV]](s64)438 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3439 %1:_(s64) = G_EXTRACT %0, 32440 $vgpr0_vgpr1 = COPY %1441...442 443---444name: test_extract_s64_v4s32_offset64445body: |446 bb.0:447 liveins: $vgpr0_vgpr1_vgpr2_vgpr3448 449 ; CHECK-LABEL: name: test_extract_s64_v4s32_offset64450 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3451 ; CHECK-NEXT: {{ $}}452 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3453 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)454 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV2]](s32), [[UV3]](s32)455 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[MV]](s64)456 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3457 %1:_(s64) = G_EXTRACT %0, 64458 $vgpr0_vgpr1 = COPY %1459...460---461name: test_extract_p0_v4s32_offset0462body: |463 bb.0:464 liveins: $vgpr0_vgpr1_vgpr2_vgpr3465 466 ; CHECK-LABEL: name: test_extract_p0_v4s32_offset0467 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3468 ; CHECK-NEXT: {{ $}}469 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3470 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)471 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)472 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0)473 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3474 %1:_(p0) = G_EXTRACT %0, 0475 $vgpr0_vgpr1 = COPY %1476...477 478---479name: test_extract_p0_v4s32_offset32480body: |481 bb.0:482 liveins: $vgpr0_vgpr1_vgpr2_vgpr3483 484 ; CHECK-LABEL: name: test_extract_p0_v4s32_offset32485 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3486 ; CHECK-NEXT: {{ $}}487 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3488 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)489 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[UV1]](s32), [[UV2]](s32)490 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0)491 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3492 %1:_(p0) = G_EXTRACT %0, 32493 $vgpr0_vgpr1 = COPY %1494...495 496---497name: test_extract_p0_v4s32_offset64498body: |499 bb.0:500 liveins: $vgpr0_vgpr1_vgpr2_vgpr3501 502 ; CHECK-LABEL: name: test_extract_p0_v4s32_offset64503 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3504 ; CHECK-NEXT: {{ $}}505 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3506 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)507 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[UV2]](s32), [[UV3]](s32)508 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[MV]](p0)509 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3510 %1:_(p0) = G_EXTRACT %0, 64511 $vgpr0_vgpr1 = COPY %1512...513 514---515name: extract_s8_v4s8_offset0516body: |517 bb.0:518 ; CHECK-LABEL: name: extract_s8_v4s8_offset0519 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF520 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](s32)521 %0:_(<4 x s8>) = G_IMPLICIT_DEF522 %1:_(s8) = G_EXTRACT %0, 0523 %2:_(s32) = G_ANYEXT %1524 $vgpr0 = COPY %2525...526 527---528name: extract_s8_v4s8_offset8529body: |530 bb.0:531 ; CHECK-LABEL: name: extract_s8_v4s8_offset8532 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF533 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](s32)534 %0:_(<4 x s8>) = G_IMPLICIT_DEF535 %1:_(s8) = G_EXTRACT %0, 8536 %2:_(s32) = G_ANYEXT %1537 $vgpr0 = COPY %2538...539 540---541name: extract_s8_v4s8_offset16542body: |543 bb.0:544 ; CHECK-LABEL: name: extract_s8_v4s8_offset16545 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF546 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](s32)547 %0:_(<4 x s8>) = G_IMPLICIT_DEF548 %1:_(s8) = G_EXTRACT %0, 16549 %2:_(s32) = G_ANYEXT %1550 $vgpr0 = COPY %2551...552 553---554name: extract_s8_v4s8_offset24555body: |556 bb.0:557 ; CHECK-LABEL: name: extract_s8_v4s8_offset24558 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF559 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](s32)560 %0:_(<4 x s8>) = G_IMPLICIT_DEF561 %1:_(s8) = G_EXTRACT %0, 24562 %2:_(s32) = G_ANYEXT %1563 $vgpr0 = COPY %2564...565 566# FIXME: Leaves behind dead G_TRUNC567---568name: extract_s8_v3s8_offset16569body: |570 bb.0:571 ; CHECK-LABEL: name: extract_s8_v3s8_offset16572 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF573 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](s32)574 %0:_(<3 x s8>) = G_IMPLICIT_DEF575 %1:_(s8) = G_EXTRACT %0, 16576 %2:_(s32) = G_ANYEXT %1577 $vgpr0 = COPY %2578...579 580---581name: extract_s8_v5s1_offset4582body: |583 bb.0:584 ; CHECK-LABEL: name: extract_s8_v5s1_offset4585 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF586 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](s32)587 %0:_(<5 x s1>) = G_IMPLICIT_DEF588 %1:_(s1) = G_EXTRACT %0, 4589 %2:_(s32) = G_ANYEXT %1590 $vgpr0 = COPY %2591...592 593---594name: extract_v2s16_v4s16_offset32595body: |596 bb.0:597 ; CHECK-LABEL: name: extract_v2s16_v4s16_offset32598 ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF599 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](<2 x s16>)600 %0:_(<4 x s16>) = G_IMPLICIT_DEF601 %1:_(<2 x s16>) = G_EXTRACT %0, 32602 $vgpr0 = COPY %1603...604 605---606name: extract_v2s16_v6s16_offset32607body: |608 bb.0:609 ; CHECK-LABEL: name: extract_v2s16_v6s16_offset32610 ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF611 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](<2 x s16>)612 %0:_(<6 x s16>) = G_IMPLICIT_DEF613 %1:_(<2 x s16>) = G_EXTRACT %0, 32614 $vgpr0 = COPY %1615...616 617---618name: test_extract_s8_s16_offset0619body: |620 bb.0:621 liveins: $vgpr0622 ; CHECK-LABEL: name: test_extract_s8_s16_offset0623 ; CHECK: liveins: $vgpr0624 ; CHECK-NEXT: {{ $}}625 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0626 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32)627 %0:_(s32) = COPY $vgpr0628 %1:_(s16) = G_TRUNC %0629 %2:_(s8) = G_EXTRACT %1, 0630 %3:_(s32) = G_ANYEXT %2631 $vgpr0 = COPY %3632...633 634---635name: test_extract_s8_s16_offset1636body: |637 bb.0:638 liveins: $vgpr0639 ; CHECK-LABEL: name: test_extract_s8_s16_offset1640 ; CHECK: liveins: $vgpr0641 ; CHECK-NEXT: {{ $}}642 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0643 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)644 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 1645 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16)646 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16)647 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)648 %0:_(s32) = COPY $vgpr0649 %1:_(s16) = G_TRUNC %0650 %2:_(s8) = G_EXTRACT %1, 1651 %3:_(s32) = G_ANYEXT %2652 $vgpr0 = COPY %3653...654 655---656name: test_extract_s8_s16_offset8657body: |658 bb.0:659 liveins: $vgpr0660 ; CHECK-LABEL: name: test_extract_s8_s16_offset8661 ; CHECK: liveins: $vgpr0662 ; CHECK-NEXT: {{ $}}663 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0664 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)665 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 8666 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16)667 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16)668 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)669 %0:_(s32) = COPY $vgpr0670 %1:_(s16) = G_TRUNC %0671 %2:_(s8) = G_EXTRACT %1, 8672 %3:_(s32) = G_ANYEXT %2673 $vgpr0 = COPY %3674...675 676---677name: test_extract_s8_s32_offset0678body: |679 bb.0:680 liveins: $vgpr0681 ; CHECK-LABEL: name: test_extract_s8_s32_offset0682 ; CHECK: liveins: $vgpr0683 ; CHECK-NEXT: {{ $}}684 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0685 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32)686 %0:_(s32) = COPY $vgpr0687 %1:_(s8) = G_EXTRACT %0, 0688 %2:_(s32) = G_ANYEXT %1689 $vgpr0 = COPY %2690...691 692---693name: test_extract_s8_s32_offset1694body: |695 bb.0:696 liveins: $vgpr0697 ; CHECK-LABEL: name: test_extract_s8_s32_offset1698 ; CHECK: liveins: $vgpr0699 ; CHECK-NEXT: {{ $}}700 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0701 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1702 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)703 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)704 %0:_(s32) = COPY $vgpr0705 %1:_(s8) = G_EXTRACT %0, 1706 %2:_(s32) = G_ANYEXT %1707 $vgpr0 = COPY %2708...709 710---711name: test_extract_s8_s32_offset8712body: |713 bb.0:714 liveins: $vgpr0715 ; CHECK-LABEL: name: test_extract_s8_s32_offset8716 ; CHECK: liveins: $vgpr0717 ; CHECK-NEXT: {{ $}}718 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0719 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8720 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)721 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)722 %0:_(s32) = COPY $vgpr0723 %1:_(s8) = G_EXTRACT %0, 8724 %2:_(s32) = G_ANYEXT %1725 $vgpr0 = COPY %2726...727 728---729name: test_extract_s8_s32_offset16730body: |731 bb.0:732 liveins: $vgpr0733 ; CHECK-LABEL: name: test_extract_s8_s32_offset16734 ; CHECK: liveins: $vgpr0735 ; CHECK-NEXT: {{ $}}736 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0737 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16738 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)739 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)740 %0:_(s32) = COPY $vgpr0741 %1:_(s8) = G_EXTRACT %0, 16742 %2:_(s32) = G_ANYEXT %1743 $vgpr0 = COPY %2744...745 746---747name: test_extract_s8_s32_offset24748body: |749 bb.0:750 liveins: $vgpr0751 ; CHECK-LABEL: name: test_extract_s8_s32_offset24752 ; CHECK: liveins: $vgpr0753 ; CHECK-NEXT: {{ $}}754 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0755 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16756 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)757 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)758 %0:_(s32) = COPY $vgpr0759 %1:_(s8) = G_EXTRACT %0, 16760 %2:_(s32) = G_ANYEXT %1761 $vgpr0 = COPY %2762...763 764---765name: test_extract_s8_p3_offset0766body: |767 bb.0:768 liveins: $vgpr0769 ; CHECK-LABEL: name: test_extract_s8_p3_offset0770 ; CHECK: liveins: $vgpr0771 ; CHECK-NEXT: {{ $}}772 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0773 ; CHECK-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p3)774 ; CHECK-NEXT: $vgpr0 = COPY [[PTRTOINT]](s32)775 %0:_(p3) = COPY $vgpr0776 %1:_(s8) = G_EXTRACT %0, 0777 %2:_(s32) = G_ANYEXT %1778 $vgpr0 = COPY %2779...780 781---782name: test_extract_s8_p3_offset8783body: |784 bb.0:785 liveins: $vgpr0786 ; CHECK-LABEL: name: test_extract_s8_p3_offset8787 ; CHECK: liveins: $vgpr0788 ; CHECK-NEXT: {{ $}}789 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0790 ; CHECK-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p3)791 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8792 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[PTRTOINT]], [[C]](s32)793 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)794 %0:_(p3) = COPY $vgpr0795 %1:_(s8) = G_EXTRACT %0, 8796 %2:_(s32) = G_ANYEXT %1797 $vgpr0 = COPY %2798...799 800---801name: test_extract_s1_s8_offset0802body: |803 bb.0:804 liveins: $vgpr0805 ; CHECK-LABEL: name: test_extract_s1_s8_offset0806 ; CHECK: liveins: $vgpr0807 ; CHECK-NEXT: {{ $}}808 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0809 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32)810 %0:_(s32) = COPY $vgpr0811 %1:_(s8) = G_TRUNC %0812 %2:_(s1) = G_EXTRACT %1, 0813 %3:_(s32) = G_ANYEXT %2814 $vgpr0 = COPY %3815...816 817---818name: test_extract_s1_s8_offset2819body: |820 bb.0:821 liveins: $vgpr0822 ; CHECK-LABEL: name: test_extract_s1_s8_offset2823 ; CHECK: liveins: $vgpr0824 ; CHECK-NEXT: {{ $}}825 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0826 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)827 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 2828 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16)829 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16)830 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)831 %0:_(s32) = COPY $vgpr0832 %1:_(s8) = G_TRUNC %0833 %2:_(s1) = G_EXTRACT %1, 2834 %3:_(s32) = G_ANYEXT %2835 $vgpr0 = COPY %3836...837 838---839name: test_extract_s8_s64_offset2840body: |841 bb.0:842 liveins: $vgpr0_vgpr1843 ; CHECK-LABEL: name: test_extract_s8_s64_offset2844 ; CHECK: liveins: $vgpr0_vgpr1845 ; CHECK-NEXT: {{ $}}846 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1847 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2848 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[C]](s32)849 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)850 ; CHECK-NEXT: $vgpr0 = COPY [[TRUNC]](s32)851 %0:_(s64) = COPY $vgpr0_vgpr1852 %1:_(s8) = G_EXTRACT %0, 2853 %2:_(s32) = G_ANYEXT %1854 $vgpr0 = COPY %2855...856 857---858name: extract_s16_v3s16_offset0859body: |860 bb.0:861 862 ; CHECK-LABEL: name: extract_s16_v3s16_offset0863 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF864 ; CHECK-NEXT: $vgpr0 = COPY [[DEF]](s32)865 %0:_(<3 x s16>) = G_IMPLICIT_DEF866 %1:_(s16) = G_EXTRACT %0, 0867 %2:_(s32) = G_ANYEXT %1868 $vgpr0 = COPY %2869...870 871---872name: test_extract_s8_s64_offset16873body: |874 bb.0:875 liveins: $vgpr0_vgpr1876 ; CHECK-LABEL: name: test_extract_s8_s64_offset16877 ; CHECK: liveins: $vgpr0_vgpr1878 ; CHECK-NEXT: {{ $}}879 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1880 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16881 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[C]](s32)882 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)883 ; CHECK-NEXT: $vgpr0 = COPY [[TRUNC]](s32)884 %0:_(s64) = COPY $vgpr0_vgpr1885 %1:_(s8) = G_EXTRACT %0, 16886 %2:_(s32) = G_ANYEXT %1887 $vgpr0 = COPY %2888...889 890---891name: test_extract_s16_s64_offset16892body: |893 bb.0:894 liveins: $vgpr0_vgpr1895 ; CHECK-LABEL: name: test_extract_s16_s64_offset16896 ; CHECK: liveins: $vgpr0_vgpr1897 ; CHECK-NEXT: {{ $}}898 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1899 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](s64), 16900 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)901 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)902 %0:_(s64) = COPY $vgpr0_vgpr1903 %1:_(s16) = G_EXTRACT %0, 16904 %2:_(s32) = G_ANYEXT %1905 $vgpr0 = COPY %2906...907 908---909name: test_extract_s16_s64_offset32910body: |911 bb.0:912 liveins: $vgpr0_vgpr1913 ; CHECK-LABEL: name: test_extract_s16_s64_offset32914 ; CHECK: liveins: $vgpr0_vgpr1915 ; CHECK-NEXT: {{ $}}916 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1917 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](s64), 32918 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)919 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)920 %0:_(s64) = COPY $vgpr0_vgpr1921 %1:_(s16) = G_EXTRACT %0, 32922 %2:_(s32) = G_ANYEXT %1923 $vgpr0 = COPY %2924...925 926---927name: test_extract_s16_s64_offset48928body: |929 bb.0:930 liveins: $vgpr0_vgpr1931 ; CHECK-LABEL: name: test_extract_s16_s64_offset48932 ; CHECK: liveins: $vgpr0_vgpr1933 ; CHECK-NEXT: {{ $}}934 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1935 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](s64), 48936 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)937 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)938 %0:_(s64) = COPY $vgpr0_vgpr1939 %1:_(s16) = G_EXTRACT %0, 48940 %2:_(s32) = G_ANYEXT %1941 $vgpr0 = COPY %2942...943 944---945name: extract_v2s16_v3s16_offset0946body: |947 bb.0:948 949 ; CHECK-LABEL: name: extract_v2s16_v3s16_offset0950 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0951 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16952 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C]], [[C1]](s32)953 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[C]], [[SHL]]954 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)955 ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST]](<2 x s16>)956 %0:_(<3 x s16>) = G_IMPLICIT_DEF957 %1:_(<2 x s16>) = G_EXTRACT %0, 0958 $vgpr0 = COPY %1959...960 961---962name: extract_v2s16_v5s16_offset0963body: |964 bb.0:965 966 ; CHECK-LABEL: name: extract_v2s16_v5s16_offset0967 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0968 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16969 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C]], [[C1]](s32)970 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[C]], [[SHL]]971 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)972 ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST]](<2 x s16>)973 %0:_(<5 x s16>) = G_IMPLICIT_DEF974 %1:_(<2 x s16>) = G_EXTRACT %0, 0975 $vgpr0 = COPY %1976...977 978---979name: extract_s16_v2s16_offset0980body: |981 bb.0:982 liveins: $vgpr0983 984 ; CHECK-LABEL: name: extract_s16_v2s16_offset0985 ; CHECK: liveins: $vgpr0986 ; CHECK-NEXT: {{ $}}987 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0988 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)989 ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST]](s32)990 %0:_(<2 x s16>) = COPY $vgpr0991 %1:_(s16) = G_EXTRACT %0, 0992 %2:_(s32) = G_ANYEXT %1993 $vgpr0 = COPY %2994...995 996---997name: extract_s16_v2s16_offset1998body: |999 bb.0:1000 liveins: $vgpr01001 1002 ; CHECK-LABEL: name: extract_s16_v2s16_offset11003 ; CHECK: liveins: $vgpr01004 ; CHECK-NEXT: {{ $}}1005 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01006 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)1007 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 11008 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)1009 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)1010 %0:_(<2 x s16>) = COPY $vgpr01011 %1:_(s16) = G_EXTRACT %0, 11012 %2:_(s32) = G_ANYEXT %11013 $vgpr0 = COPY %21014...1015 1016---1017name: extract_s16_v2s16_offset81018body: |1019 bb.0:1020 liveins: $vgpr01021 1022 ; CHECK-LABEL: name: extract_s16_v2s16_offset81023 ; CHECK: liveins: $vgpr01024 ; CHECK-NEXT: {{ $}}1025 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01026 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)1027 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 81028 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)1029 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)1030 %0:_(<2 x s16>) = COPY $vgpr01031 %1:_(s16) = G_EXTRACT %0, 81032 %2:_(s32) = G_ANYEXT %11033 $vgpr0 = COPY %21034...1035 1036---1037name: extract_s16_v2s16_offset161038body: |1039 bb.0:1040 liveins: $vgpr01041 1042 ; CHECK-LABEL: name: extract_s16_v2s16_offset161043 ; CHECK: liveins: $vgpr01044 ; CHECK-NEXT: {{ $}}1045 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01046 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)1047 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 161048 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)1049 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)1050 %0:_(<2 x s16>) = COPY $vgpr01051 %1:_(s16) = G_EXTRACT %0, 161052 %2:_(s32) = G_ANYEXT %11053 $vgpr0 = COPY %21054...1055 1056---1057name: extract_s16_s32_offset01058body: |1059 bb.0:1060 liveins: $vgpr01061 1062 ; CHECK-LABEL: name: extract_s16_s32_offset01063 ; CHECK: liveins: $vgpr01064 ; CHECK-NEXT: {{ $}}1065 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01066 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32)1067 %0:_(s32) = COPY $vgpr01068 %1:_(s16) = G_EXTRACT %0, 01069 %2:_(s32) = G_ANYEXT %11070 $vgpr0 = COPY %21071...1072 1073---1074name: extract_s16_s32_offset11075body: |1076 bb.0:1077 liveins: $vgpr01078 1079 ; CHECK-LABEL: name: extract_s16_s32_offset11080 ; CHECK: liveins: $vgpr01081 ; CHECK-NEXT: {{ $}}1082 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01083 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 11084 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)1085 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)1086 %0:_(s32) = COPY $vgpr01087 %1:_(s16) = G_EXTRACT %0, 11088 %2:_(s32) = G_ANYEXT %11089 $vgpr0 = COPY %21090...1091 1092---1093name: extract_s16_s32_offset81094body: |1095 bb.0:1096 liveins: $vgpr01097 1098 ; CHECK-LABEL: name: extract_s16_s32_offset81099 ; CHECK: liveins: $vgpr01100 ; CHECK-NEXT: {{ $}}1101 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01102 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 81103 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)1104 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)1105 %0:_(s32) = COPY $vgpr01106 %1:_(s16) = G_EXTRACT %0, 81107 %2:_(s32) = G_ANYEXT %11108 $vgpr0 = COPY %21109...1110 1111---1112name: extract_s16_s32_offset161113body: |1114 bb.0:1115 liveins: $vgpr01116 1117 ; CHECK-LABEL: name: extract_s16_s32_offset161118 ; CHECK: liveins: $vgpr01119 ; CHECK-NEXT: {{ $}}1120 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01121 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 161122 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)1123 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)1124 %0:_(s32) = COPY $vgpr01125 %1:_(s16) = G_EXTRACT %0, 161126 %2:_(s32) = G_ANYEXT %11127 $vgpr0 = COPY %21128...1129 1130---1131name: extract_s16_p3_offset01132body: |1133 bb.0:1134 liveins: $vgpr01135 1136 ; CHECK-LABEL: name: extract_s16_p3_offset01137 ; CHECK: liveins: $vgpr01138 ; CHECK-NEXT: {{ $}}1139 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr01140 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](p3), 01141 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)1142 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)1143 %0:_(p3) = COPY $vgpr01144 %1:_(s16) = G_EXTRACT %0, 01145 %2:_(s32) = G_ANYEXT %11146 $vgpr0 = COPY %21147...1148 1149---1150name: extract_s16_p3_offset11151body: |1152 bb.0:1153 liveins: $vgpr01154 1155 ; CHECK-LABEL: name: extract_s16_p3_offset11156 ; CHECK: liveins: $vgpr01157 ; CHECK-NEXT: {{ $}}1158 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr01159 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](p3), 11160 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)1161 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)1162 %0:_(p3) = COPY $vgpr01163 %1:_(s16) = G_EXTRACT %0, 11164 %2:_(s32) = G_ANYEXT %11165 $vgpr0 = COPY %21166...1167