# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=instruction-select -o - %s | FileCheck -check-prefix=GFX9 %s # RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -run-pass=instruction-select -o - %s | FileCheck -check-prefix=GFX9 %s # RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -run-pass=instruction-select -o - %s | FileCheck -check-prefix=GFX11 %s --- name: v_shufflevector_v2s16_v2s16_u_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_u_u ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF ; GFX9-NEXT: $vgpr0 = COPY [[DEF]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_u_u ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF ; GFX11-NEXT: $vgpr0 = COPY [[DEF]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, undef) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_0_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_0_u ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX9-NEXT: $vgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_0_u ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX11-NEXT: $vgpr0 = COPY [[COPY]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, undef) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_u_0 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_u_0 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX9-NEXT: [[V_LSHLREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 16, [[COPY]], implicit $exec ; GFX9-NEXT: $vgpr0 = COPY [[V_LSHLREV_B32_e64_]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_u_0 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX11-NEXT: [[V_LSHLREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 16, [[COPY]], implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_LSHLREV_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 0) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_1_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_1_u ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX9-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[COPY]], implicit $exec ; GFX9-NEXT: $vgpr0 = COPY [[V_LSHRREV_B32_e64_]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_1_u ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX11-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[COPY]], implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_LSHRREV_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, undef) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_u_1 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_u_1 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX9-NEXT: $vgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_u_1 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX11-NEXT: $vgpr0 = COPY [[COPY]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 1) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_2_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_2_u ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX9-NEXT: $vgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_2_u ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX11-NEXT: $vgpr0 = COPY [[COPY]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, undef) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_u_2 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_u_2 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX9-NEXT: [[V_LSHLREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 16, [[COPY]], implicit $exec ; GFX9-NEXT: $vgpr0 = COPY [[V_LSHLREV_B32_e64_]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_u_2 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX11-NEXT: [[V_LSHLREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 16, [[COPY]], implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_LSHLREV_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 2) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_3_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_3_u ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX9-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[COPY]], implicit $exec ; GFX9-NEXT: $vgpr0 = COPY [[V_LSHRREV_B32_e64_]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_3_u ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX11-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[COPY]], implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_LSHRREV_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, undef) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_u_3 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_u_3 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX9-NEXT: $vgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_u_3 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX11-NEXT: $vgpr0 = COPY [[COPY]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 3) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_0_0 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_0_0 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX9-NEXT: [[V_MOV_B32_sdwa:%[0-9]+]]:vgpr_32 = V_MOV_B32_sdwa 0, [[COPY]], 0, 5, 2, 4, implicit $exec, implicit [[COPY]](tied-def 0) ; GFX9-NEXT: $vgpr0 = COPY [[V_MOV_B32_sdwa]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_0_0 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX11-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 65535, [[COPY]], implicit $exec ; GFX11-NEXT: [[V_LSHL_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHL_OR_B32_e64 [[V_AND_B32_e32_]], 16, [[V_AND_B32_e32_]], implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_LSHL_OR_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 0) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_0_1 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_0_1 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX9-NEXT: $vgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_0_1 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX11-NEXT: $vgpr0 = COPY [[COPY]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 1) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_1_0 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_1_0 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX9-NEXT: [[V_ALIGNBIT_B32_e64_:%[0-9]+]]:vgpr_32 = V_ALIGNBIT_B32_e64 [[COPY]], [[COPY]], 16, implicit $exec ; GFX9-NEXT: $vgpr0 = COPY [[V_ALIGNBIT_B32_e64_]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_1_0 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX11-NEXT: [[V_ALIGNBIT_B32_e64_:%[0-9]+]]:vgpr_32 = V_ALIGNBIT_B32_e64 [[COPY]], [[COPY]], 16, implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_ALIGNBIT_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 0) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_1_1 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_1_1 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX9-NEXT: [[V_MOV_B32_sdwa:%[0-9]+]]:vgpr_32 = V_MOV_B32_sdwa 0, [[COPY]], 0, 4, 2, 5, implicit $exec, implicit [[COPY]](tied-def 0) ; GFX9-NEXT: $vgpr0 = COPY [[V_MOV_B32_sdwa]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_1_1 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 ; GFX11-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[COPY]], implicit $exec ; GFX11-NEXT: [[V_LSHL_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHL_OR_B32_e64 [[V_LSHRREV_B32_e64_]], 16, [[V_LSHRREV_B32_e64_]], implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_LSHL_OR_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 1) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_2_2 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_2_2 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX9-NEXT: [[V_MOV_B32_sdwa:%[0-9]+]]:vgpr_32 = V_MOV_B32_sdwa 0, [[COPY]], 0, 5, 2, 4, implicit $exec, implicit [[COPY]](tied-def 0) ; GFX9-NEXT: $vgpr0 = COPY [[V_MOV_B32_sdwa]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_2_2 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX11-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 65535, [[COPY]], implicit $exec ; GFX11-NEXT: [[V_LSHL_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHL_OR_B32_e64 [[V_AND_B32_e32_]], 16, [[V_AND_B32_e32_]], implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_LSHL_OR_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 2) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_2_3 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_2_3 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX9-NEXT: $vgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_2_3 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX11-NEXT: $vgpr0 = COPY [[COPY]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 3) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_3_2 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_3_2 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX9-NEXT: [[V_ALIGNBIT_B32_e64_:%[0-9]+]]:vgpr_32 = V_ALIGNBIT_B32_e64 [[COPY]], [[COPY]], 16, implicit $exec ; GFX9-NEXT: $vgpr0 = COPY [[V_ALIGNBIT_B32_e64_]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_3_2 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX11-NEXT: [[V_ALIGNBIT_B32_e64_:%[0-9]+]]:vgpr_32 = V_ALIGNBIT_B32_e64 [[COPY]], [[COPY]], 16, implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_ALIGNBIT_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 2) $vgpr0 = COPY %2 ... --- name: v_shufflevector_v2s16_v2s16_3_3 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $vgpr0, $vgpr1 ; GFX9-LABEL: name: v_shufflevector_v2s16_v2s16_3_3 ; GFX9: liveins: $vgpr0, $vgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX9-NEXT: [[V_MOV_B32_sdwa:%[0-9]+]]:vgpr_32 = V_MOV_B32_sdwa 0, [[COPY]], 0, 4, 2, 5, implicit $exec, implicit [[COPY]](tied-def 0) ; GFX9-NEXT: $vgpr0 = COPY [[V_MOV_B32_sdwa]] ; GFX11-LABEL: name: v_shufflevector_v2s16_v2s16_3_3 ; GFX11: liveins: $vgpr0, $vgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1 ; GFX11-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[COPY]], implicit $exec ; GFX11-NEXT: [[V_LSHL_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHL_OR_B32_e64 [[V_LSHRREV_B32_e64_]], 16, [[V_LSHRREV_B32_e64_]], implicit $exec ; GFX11-NEXT: $vgpr0 = COPY [[V_LSHL_OR_B32_e64_]] %0:vgpr(<2 x s16>) = COPY $vgpr0 %1:vgpr(<2 x s16>) = COPY $vgpr1 %2:vgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 3) $vgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_u_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_u_u ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF ; GFX9-NEXT: $sgpr0 = COPY [[DEF]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_u_u ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF ; GFX11-NEXT: $sgpr0 = COPY [[DEF]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, undef) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_0_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_0_u ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX9-NEXT: $sgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_0_u ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX11-NEXT: $sgpr0 = COPY [[COPY]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, undef) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_u_0 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_u_0 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX9-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY]], 16, implicit-def $scc ; GFX9-NEXT: $sgpr0 = COPY [[S_LSHL_B32_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_u_0 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX11-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY]], 16, implicit-def $scc ; GFX11-NEXT: $sgpr0 = COPY [[S_LSHL_B32_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 0) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_1_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_1_u ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX9-NEXT: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], 16, implicit-def $scc ; GFX9-NEXT: $sgpr0 = COPY [[S_LSHR_B32_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_1_u ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX11-NEXT: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], 16, implicit-def $scc ; GFX11-NEXT: $sgpr0 = COPY [[S_LSHR_B32_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, undef) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_u_1 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_u_1 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX9-NEXT: $sgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_u_1 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX11-NEXT: $sgpr0 = COPY [[COPY]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 1) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_2_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_2_u ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX9-NEXT: $sgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_2_u ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX11-NEXT: $sgpr0 = COPY [[COPY]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, undef) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_u_2 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_u_2 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX9-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY]], 16, implicit-def $scc ; GFX9-NEXT: $sgpr0 = COPY [[S_LSHL_B32_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_u_2 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX11-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY]], 16, implicit-def $scc ; GFX11-NEXT: $sgpr0 = COPY [[S_LSHL_B32_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 2) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_3_u tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_3_u ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX9-NEXT: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], 16, implicit-def $scc ; GFX9-NEXT: $sgpr0 = COPY [[S_LSHR_B32_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_3_u ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX11-NEXT: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], 16, implicit-def $scc ; GFX11-NEXT: $sgpr0 = COPY [[S_LSHR_B32_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, undef) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_u_3 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_u_3 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX9-NEXT: $sgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_u_3 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX11-NEXT: $sgpr0 = COPY [[COPY]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 3) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_0_0 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_0_0 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX9-NEXT: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[COPY]] ; GFX9-NEXT: $sgpr0 = COPY [[S_PACK_LL_B32_B16_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_0_0 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX11-NEXT: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[COPY]] ; GFX11-NEXT: $sgpr0 = COPY [[S_PACK_LL_B32_B16_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 0) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_0_1 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_0_1 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX9-NEXT: $sgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_0_1 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX11-NEXT: $sgpr0 = COPY [[COPY]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 1) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_1_0 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_1_0 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX9-NEXT: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], 16, implicit-def $scc ; GFX9-NEXT: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_LSHR_B32_]], [[COPY]] ; GFX9-NEXT: $sgpr0 = COPY [[S_PACK_LL_B32_B16_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_1_0 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX11-NEXT: [[S_PACK_HL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_HL_B32_B16 [[COPY]], [[COPY]] ; GFX11-NEXT: $sgpr0 = COPY [[S_PACK_HL_B32_B16_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 0) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_1_1 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_1_1 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX9-NEXT: [[S_PACK_HH_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_HH_B32_B16 [[COPY]], [[COPY]] ; GFX9-NEXT: $sgpr0 = COPY [[S_PACK_HH_B32_B16_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_1_1 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 ; GFX11-NEXT: [[S_PACK_HH_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_HH_B32_B16 [[COPY]], [[COPY]] ; GFX11-NEXT: $sgpr0 = COPY [[S_PACK_HH_B32_B16_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 1) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_2_2 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_2_2 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX9-NEXT: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[COPY]] ; GFX9-NEXT: $sgpr0 = COPY [[S_PACK_LL_B32_B16_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_2_2 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX11-NEXT: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[COPY]] ; GFX11-NEXT: $sgpr0 = COPY [[S_PACK_LL_B32_B16_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 2) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_2_3 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_2_3 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX9-NEXT: $sgpr0 = COPY [[COPY]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_2_3 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX11-NEXT: $sgpr0 = COPY [[COPY]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 3) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_3_2 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_3_2 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX9-NEXT: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], 16, implicit-def $scc ; GFX9-NEXT: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_LSHR_B32_]], [[COPY]] ; GFX9-NEXT: $sgpr0 = COPY [[S_PACK_LL_B32_B16_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_3_2 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX11-NEXT: [[S_PACK_HL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_HL_B32_B16 [[COPY]], [[COPY]] ; GFX11-NEXT: $sgpr0 = COPY [[S_PACK_HL_B32_B16_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 2) $sgpr0 = COPY %2 ... --- name: s_shufflevector_v2s16_v2s16_3_3 tracksRegLiveness: true legalized: true regBankSelected: true body: | bb.0: liveins: $sgpr0, $sgpr1 ; GFX9-LABEL: name: s_shufflevector_v2s16_v2s16_3_3 ; GFX9: liveins: $sgpr0, $sgpr1 ; GFX9-NEXT: {{ $}} ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX9-NEXT: [[S_PACK_HH_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_HH_B32_B16 [[COPY]], [[COPY]] ; GFX9-NEXT: $sgpr0 = COPY [[S_PACK_HH_B32_B16_]] ; GFX11-LABEL: name: s_shufflevector_v2s16_v2s16_3_3 ; GFX11: liveins: $sgpr0, $sgpr1 ; GFX11-NEXT: {{ $}} ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1 ; GFX11-NEXT: [[S_PACK_HH_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_HH_B32_B16 [[COPY]], [[COPY]] ; GFX11-NEXT: $sgpr0 = COPY [[S_PACK_HH_B32_B16_]] %0:sgpr(<2 x s16>) = COPY $sgpr0 %1:sgpr(<2 x s16>) = COPY $sgpr1 %2:sgpr(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 3) $sgpr0 = COPY %2 ...