536 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2 3# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -global-isel-abort=2 -disable-gisel-legality-check -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX8 %s4# RUN: FileCheck --check-prefix=ERR %s < %t5 6# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -global-isel-abort=2 -disable-gisel-legality-check -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX9 %s7# RUN: FileCheck --check-prefix=ERR %s < %t8 9# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -global-isel-abort=2 -disable-gisel-legality-check -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX10 %s10# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -run-pass=instruction-select -global-isel-abort=2 -disable-gisel-legality-check -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefixes=GFX11 %s11# RUN: FileCheck --check-prefix=ERR %s < %t12 13# ERR-NOT: remark14# ERR: remark: <unknown>:0:0: cannot select: %4:sgpr(s16) = G_SHL %2:sgpr, %3:sgpr(s16) (in function: shl_s16_s16_ss)15# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:vgpr, %1:vgpr(s32) (in function: shl_s16_s32_vv)16# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:sgpr(s16) = G_SHL %2:sgpr, %1:sgpr(s32) (in function: shl_s16_s32_ss)17# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:sgpr, %1:vgpr(s32) (in function: shl_s16_s32_sv)18# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:vgpr, %1:sgpr(s32) (in function: shl_s16_s32_vs)19# ERR-NOT: remark20 21---22name: shl_s16_s16_ss23legalized: true24regBankSelected: true25 26body: |27 bb.0:28 liveins: $sgpr0, $sgpr129 30 ; GFX8-LABEL: name: shl_s16_s16_ss31 ; GFX8: liveins: $sgpr0, $sgpr132 ; GFX8-NEXT: {{ $}}33 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr034 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr135 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)36 ; GFX8-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)37 ; GFX8-NEXT: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)38 ; GFX8-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)39 ;40 ; GFX9-LABEL: name: shl_s16_s16_ss41 ; GFX9: liveins: $sgpr0, $sgpr142 ; GFX9-NEXT: {{ $}}43 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr044 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr145 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)46 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)47 ; GFX9-NEXT: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)48 ; GFX9-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)49 ;50 ; GFX10-LABEL: name: shl_s16_s16_ss51 ; GFX10: liveins: $sgpr0, $sgpr152 ; GFX10-NEXT: {{ $}}53 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr054 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr155 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)56 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)57 ; GFX10-NEXT: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)58 ; GFX10-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)59 ;60 ; GFX11-LABEL: name: shl_s16_s16_ss61 ; GFX11: liveins: $sgpr0, $sgpr162 ; GFX11-NEXT: {{ $}}63 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr064 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr165 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)66 ; GFX11-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)67 ; GFX11-NEXT: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)68 ; GFX11-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)69 %0:sgpr(s32) = COPY $sgpr070 %1:sgpr(s32) = COPY $sgpr171 %2:sgpr(s16) = G_TRUNC %072 %3:sgpr(s16) = G_TRUNC %173 %4:sgpr(s16) = G_SHL %2, %374 S_ENDPGM 0, implicit %475...76 77---78name: shl_s16_s16_vs79legalized: true80regBankSelected: true81 82body: |83 bb.0:84 liveins: $sgpr0, $vgpr085 ; GFX8-LABEL: name: shl_s16_s16_vs86 ; GFX8: liveins: $sgpr0, $vgpr087 ; GFX8-NEXT: {{ $}}88 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr089 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr090 ; GFX8-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec91 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]92 ;93 ; GFX9-LABEL: name: shl_s16_s16_vs94 ; GFX9: liveins: $sgpr0, $vgpr095 ; GFX9-NEXT: {{ $}}96 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr097 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr098 ; GFX9-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec99 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]100 ;101 ; GFX10-LABEL: name: shl_s16_s16_vs102 ; GFX10: liveins: $sgpr0, $vgpr0103 ; GFX10-NEXT: {{ $}}104 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0105 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0106 ; GFX10-NEXT: [[V_LSHLREV_B16_opsel_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec107 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_opsel_e64_]]108 ;109 ; GFX11-LABEL: name: shl_s16_s16_vs110 ; GFX11: liveins: $sgpr0, $vgpr0111 ; GFX11-NEXT: {{ $}}112 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0113 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0114 ; GFX11-NEXT: [[V_LSHLREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec115 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_fake16_e64_]]116 %0:vgpr(s32) = COPY $vgpr0117 %1:sgpr(s32) = COPY $sgpr0118 %2:vgpr(s16) = G_TRUNC %0119 %3:sgpr(s16) = G_TRUNC %1120 %4:vgpr(s16) = G_SHL %2, %3121 S_ENDPGM 0, implicit %4122...123 124---125name: shl_s16_s32_vv126legalized: true127regBankSelected: true128 129body: |130 bb.0:131 liveins: $vgpr0, $vgpr1132 133 ; GFX8-LABEL: name: shl_s16_s32_vv134 ; GFX8: liveins: $vgpr0, $vgpr1135 ; GFX8-NEXT: {{ $}}136 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0137 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1138 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)139 ; GFX8-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)140 ; GFX8-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)141 ;142 ; GFX9-LABEL: name: shl_s16_s32_vv143 ; GFX9: liveins: $vgpr0, $vgpr1144 ; GFX9-NEXT: {{ $}}145 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0146 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1147 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)148 ; GFX9-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)149 ; GFX9-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)150 ;151 ; GFX10-LABEL: name: shl_s16_s32_vv152 ; GFX10: liveins: $vgpr0, $vgpr1153 ; GFX10-NEXT: {{ $}}154 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0155 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1156 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)157 ; GFX10-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)158 ; GFX10-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)159 ;160 ; GFX11-LABEL: name: shl_s16_s32_vv161 ; GFX11: liveins: $vgpr0, $vgpr1162 ; GFX11-NEXT: {{ $}}163 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0164 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1165 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)166 ; GFX11-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)167 ; GFX11-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)168 %0:vgpr(s32) = COPY $vgpr0169 %1:vgpr(s32) = COPY $vgpr1170 %2:vgpr(s16) = G_TRUNC %0171 %3:vgpr(s16) = G_SHL %2, %1172 S_ENDPGM 0, implicit %3173...174 175---176name: shl_s16_s16_vv177legalized: true178regBankSelected: true179 180body: |181 bb.0:182 liveins: $vgpr0, $vgpr1183 184 ; GFX8-LABEL: name: shl_s16_s16_vv185 ; GFX8: liveins: $vgpr0, $vgpr1186 ; GFX8-NEXT: {{ $}}187 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0188 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1189 ; GFX8-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec190 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]191 ;192 ; GFX9-LABEL: name: shl_s16_s16_vv193 ; GFX9: liveins: $vgpr0, $vgpr1194 ; GFX9-NEXT: {{ $}}195 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0196 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1197 ; GFX9-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec198 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]199 ;200 ; GFX10-LABEL: name: shl_s16_s16_vv201 ; GFX10: liveins: $vgpr0, $vgpr1202 ; GFX10-NEXT: {{ $}}203 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0204 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1205 ; GFX10-NEXT: [[V_LSHLREV_B16_opsel_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec206 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_opsel_e64_]]207 ;208 ; GFX11-LABEL: name: shl_s16_s16_vv209 ; GFX11: liveins: $vgpr0, $vgpr1210 ; GFX11-NEXT: {{ $}}211 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0212 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1213 ; GFX11-NEXT: [[V_LSHLREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec214 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_fake16_e64_]]215 %0:vgpr(s32) = COPY $vgpr0216 %1:vgpr(s32) = COPY $vgpr1217 %2:vgpr(s16) = G_TRUNC %0218 %3:vgpr(s16) = G_TRUNC %1219 %4:vgpr(s16) = G_SHL %2, %3220 S_ENDPGM 0, implicit %4221...222 223---224name: shl_s16_s16_vv_zext_to_s32225legalized: true226regBankSelected: true227 228body: |229 bb.0:230 liveins: $vgpr0, $vgpr1231 232 ; GFX8-LABEL: name: shl_s16_s16_vv_zext_to_s32233 ; GFX8: liveins: $vgpr0, $vgpr1234 ; GFX8-NEXT: {{ $}}235 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0236 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1237 ; GFX8-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec238 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]239 ;240 ; GFX9-LABEL: name: shl_s16_s16_vv_zext_to_s32241 ; GFX9: liveins: $vgpr0, $vgpr1242 ; GFX9-NEXT: {{ $}}243 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0244 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1245 ; GFX9-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec246 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]247 ;248 ; GFX10-LABEL: name: shl_s16_s16_vv_zext_to_s32249 ; GFX10: liveins: $vgpr0, $vgpr1250 ; GFX10-NEXT: {{ $}}251 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0252 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1253 ; GFX10-NEXT: [[V_LSHLREV_B16_opsel_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec254 ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535255 ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_]], [[V_LSHLREV_B16_opsel_e64_]], implicit $exec256 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_AND_B32_e64_]]257 ;258 ; GFX11-LABEL: name: shl_s16_s16_vv_zext_to_s32259 ; GFX11: liveins: $vgpr0, $vgpr1260 ; GFX11-NEXT: {{ $}}261 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0262 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1263 ; GFX11-NEXT: [[V_LSHLREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec264 ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535265 ; GFX11-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_]], [[V_LSHLREV_B16_fake16_e64_]], implicit $exec266 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_AND_B32_e64_]]267 %0:vgpr(s32) = COPY $vgpr0268 %1:vgpr(s32) = COPY $vgpr1269 %2:vgpr(s16) = G_TRUNC %0270 %3:vgpr(s16) = G_TRUNC %1271 %4:vgpr(s16) = G_SHL %2, %3272 %5:vgpr(s32) = G_ZEXT %4273 S_ENDPGM 0, implicit %5274...275 276---277name: shl_s16_vv_zext_to_s64278legalized: true279regBankSelected: true280 281body: |282 bb.0:283 liveins: $vgpr0, $vgpr1284 285 ; GFX8-LABEL: name: shl_s16_vv_zext_to_s64286 ; GFX8: liveins: $vgpr0, $vgpr1287 ; GFX8-NEXT: {{ $}}288 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0289 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1290 ; GFX8-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec291 ; GFX8-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec292 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_LSHLREV_B16_e64_]], %subreg.sub0, [[V_MOV_B32_e32_]], %subreg.sub1293 ; GFX8-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]294 ;295 ; GFX9-LABEL: name: shl_s16_vv_zext_to_s64296 ; GFX9: liveins: $vgpr0, $vgpr1297 ; GFX9-NEXT: {{ $}}298 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0299 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1300 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec301 ; GFX9-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec302 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_LSHLREV_B16_e64_]], %subreg.sub0, [[V_MOV_B32_e32_]], %subreg.sub1303 ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]304 ;305 ; GFX10-LABEL: name: shl_s16_vv_zext_to_s64306 ; GFX10: liveins: $vgpr0, $vgpr1307 ; GFX10-NEXT: {{ $}}308 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0309 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1310 ; GFX10-NEXT: [[V_LSHLREV_B16_opsel_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec311 ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0312 ; GFX10-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 65535313 ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_1]], [[V_LSHLREV_B16_opsel_e64_]], implicit $exec314 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]315 ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_AND_B32_e64_]], %subreg.sub0, [[COPY2]], %subreg.sub1316 ; GFX10-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]317 ;318 ; GFX11-LABEL: name: shl_s16_vv_zext_to_s64319 ; GFX11: liveins: $vgpr0, $vgpr1320 ; GFX11-NEXT: {{ $}}321 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0322 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1323 ; GFX11-NEXT: [[V_LSHLREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec324 ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0325 ; GFX11-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 65535326 ; GFX11-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_1]], [[V_LSHLREV_B16_fake16_e64_]], implicit $exec327 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]328 ; GFX11-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_AND_B32_e64_]], %subreg.sub0, [[COPY2]], %subreg.sub1329 ; GFX11-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]330 %0:vgpr(s32) = COPY $vgpr0331 %1:vgpr(s32) = COPY $vgpr1332 %2:vgpr(s16) = G_TRUNC %0333 %3:vgpr(s16) = G_TRUNC %1334 %4:vgpr(s16) = G_SHL %2, %3335 %5:vgpr(s64) = G_ZEXT %4336 S_ENDPGM 0, implicit %5337...338 339---340name: shl_s16_s32_ss341legalized: true342regBankSelected: true343 344body: |345 bb.0:346 liveins: $sgpr0, $sgpr1347 348 ; GFX8-LABEL: name: shl_s16_s32_ss349 ; GFX8: liveins: $sgpr0, $sgpr1350 ; GFX8-NEXT: {{ $}}351 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0352 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1353 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)354 ; GFX8-NEXT: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)355 ; GFX8-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)356 ;357 ; GFX9-LABEL: name: shl_s16_s32_ss358 ; GFX9: liveins: $sgpr0, $sgpr1359 ; GFX9-NEXT: {{ $}}360 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0361 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1362 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)363 ; GFX9-NEXT: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)364 ; GFX9-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)365 ;366 ; GFX10-LABEL: name: shl_s16_s32_ss367 ; GFX10: liveins: $sgpr0, $sgpr1368 ; GFX10-NEXT: {{ $}}369 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0370 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1371 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)372 ; GFX10-NEXT: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)373 ; GFX10-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)374 ;375 ; GFX11-LABEL: name: shl_s16_s32_ss376 ; GFX11: liveins: $sgpr0, $sgpr1377 ; GFX11-NEXT: {{ $}}378 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0379 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1380 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)381 ; GFX11-NEXT: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)382 ; GFX11-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)383 %0:sgpr(s32) = COPY $sgpr0384 %1:sgpr(s32) = COPY $sgpr1385 %2:sgpr(s16) = G_TRUNC %0386 %3:sgpr(s16) = G_SHL %2, %1387 S_ENDPGM 0, implicit %3388...389 390---391name: shl_s16_s32_sv392legalized: true393regBankSelected: true394 395body: |396 bb.0:397 liveins: $sgpr0, $vgpr0398 ; GFX8-LABEL: name: shl_s16_s32_sv399 ; GFX8: liveins: $sgpr0, $vgpr0400 ; GFX8-NEXT: {{ $}}401 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0402 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0403 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)404 ; GFX8-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)405 ; GFX8-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)406 ;407 ; GFX9-LABEL: name: shl_s16_s32_sv408 ; GFX9: liveins: $sgpr0, $vgpr0409 ; GFX9-NEXT: {{ $}}410 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0411 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0412 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)413 ; GFX9-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)414 ; GFX9-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)415 ;416 ; GFX10-LABEL: name: shl_s16_s32_sv417 ; GFX10: liveins: $sgpr0, $vgpr0418 ; GFX10-NEXT: {{ $}}419 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0420 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0421 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)422 ; GFX10-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)423 ; GFX10-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)424 ;425 ; GFX11-LABEL: name: shl_s16_s32_sv426 ; GFX11: liveins: $sgpr0, $vgpr0427 ; GFX11-NEXT: {{ $}}428 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0429 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0430 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)431 ; GFX11-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)432 ; GFX11-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)433 %0:sgpr(s32) = COPY $sgpr0434 %1:vgpr(s32) = COPY $vgpr0435 %2:sgpr(s16) = G_TRUNC %0436 %3:vgpr(s16) = G_SHL %2, %1437 S_ENDPGM 0, implicit %3438...439 440---441name: shl_s16_s16_sv442legalized: true443regBankSelected: true444 445body: |446 bb.0:447 liveins: $sgpr0, $vgpr0448 ; GFX8-LABEL: name: shl_s16_s16_sv449 ; GFX8: liveins: $sgpr0, $vgpr0450 ; GFX8-NEXT: {{ $}}451 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0452 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0453 ; GFX8-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec454 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]455 ;456 ; GFX9-LABEL: name: shl_s16_s16_sv457 ; GFX9: liveins: $sgpr0, $vgpr0458 ; GFX9-NEXT: {{ $}}459 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0460 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0461 ; GFX9-NEXT: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec462 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]463 ;464 ; GFX10-LABEL: name: shl_s16_s16_sv465 ; GFX10: liveins: $sgpr0, $vgpr0466 ; GFX10-NEXT: {{ $}}467 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0468 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0469 ; GFX10-NEXT: [[V_LSHLREV_B16_opsel_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec470 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_opsel_e64_]]471 ;472 ; GFX11-LABEL: name: shl_s16_s16_sv473 ; GFX11: liveins: $sgpr0, $vgpr0474 ; GFX11-NEXT: {{ $}}475 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0476 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0477 ; GFX11-NEXT: [[V_LSHLREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec478 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_LSHLREV_B16_fake16_e64_]]479 %0:sgpr(s32) = COPY $sgpr0480 %1:vgpr(s32) = COPY $vgpr0481 %2:sgpr(s16) = G_TRUNC %0482 %3:vgpr(s16) = G_TRUNC %1483 %4:vgpr(s16) = G_SHL %2, %3484 S_ENDPGM 0, implicit %4485...486 487---488name: shl_s16_s32_vs489legalized: true490regBankSelected: true491 492body: |493 bb.0:494 liveins: $sgpr0, $vgpr0495 ; GFX8-LABEL: name: shl_s16_s32_vs496 ; GFX8: liveins: $sgpr0, $vgpr0497 ; GFX8-NEXT: {{ $}}498 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0499 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0500 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)501 ; GFX8-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)502 ; GFX8-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)503 ;504 ; GFX9-LABEL: name: shl_s16_s32_vs505 ; GFX9: liveins: $sgpr0, $vgpr0506 ; GFX9-NEXT: {{ $}}507 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0508 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0509 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)510 ; GFX9-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)511 ; GFX9-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)512 ;513 ; GFX10-LABEL: name: shl_s16_s32_vs514 ; GFX10: liveins: $sgpr0, $vgpr0515 ; GFX10-NEXT: {{ $}}516 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0517 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0518 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)519 ; GFX10-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)520 ; GFX10-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)521 ;522 ; GFX11-LABEL: name: shl_s16_s32_vs523 ; GFX11: liveins: $sgpr0, $vgpr0524 ; GFX11-NEXT: {{ $}}525 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0526 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0527 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)528 ; GFX11-NEXT: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)529 ; GFX11-NEXT: S_ENDPGM 0, implicit [[SHL]](s16)530 %0:vgpr(s32) = COPY $vgpr0531 %1:sgpr(s32) = COPY $sgpr0532 %2:vgpr(s16) = G_TRUNC %0533 %3:vgpr(s16) = G_SHL %2, %1534 S_ENDPGM 0, implicit %3535...536