506 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_LSHR %2:sgpr, %3:sgpr(s16) (in function: lshr_s16_s16_ss)15# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_LSHR %2:vgpr, %1:vgpr(s32) (in function: lshr_s16_s32_vv)16# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:sgpr(s16) = G_LSHR %2:sgpr, %1:sgpr(s32) (in function: lshr_s16_s32_ss)17# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_LSHR %2:sgpr, %1:vgpr(s32) (in function: lshr_s16_s32_sv)18# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_LSHR %2:vgpr, %1:sgpr(s32) (in function: lshr_s16_s32_vs)19# ERR-NOT: remark20 21---22name: lshr_s16_s16_ss23legalized: true24regBankSelected: true25 26body: |27 bb.0:28 liveins: $sgpr0, $sgpr129 30 ; GFX8-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)38 ; GFX8-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)39 ; GFX9-LABEL: name: lshr_s16_s16_ss40 ; GFX9: liveins: $sgpr0, $sgpr141 ; GFX9-NEXT: {{ $}}42 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr043 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr144 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)45 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)46 ; GFX9-NEXT: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)47 ; GFX9-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)48 ; GFX10-LABEL: name: lshr_s16_s16_ss49 ; GFX10: liveins: $sgpr0, $sgpr150 ; GFX10-NEXT: {{ $}}51 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr052 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr153 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)54 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)55 ; GFX10-NEXT: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)56 ; GFX10-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)57 ; GFX11-LABEL: name: lshr_s16_s16_ss58 ; GFX11: liveins: $sgpr0, $sgpr159 ; GFX11-NEXT: {{ $}}60 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr061 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr162 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)63 ; GFX11-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)64 ; GFX11-NEXT: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)65 ; GFX11-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)66 %0:sgpr(s32) = COPY $sgpr067 %1:sgpr(s32) = COPY $sgpr168 %2:sgpr(s16) = G_TRUNC %069 %3:sgpr(s16) = G_TRUNC %170 %4:sgpr(s16) = G_LSHR %2, %371 S_ENDPGM 0, implicit %472...73 74---75name: lshr_s16_s16_vs76legalized: true77regBankSelected: true78 79body: |80 bb.0:81 liveins: $sgpr0, $vgpr082 ; GFX8-LABEL: name: lshr_s16_s16_vs83 ; GFX8: liveins: $sgpr0, $vgpr084 ; GFX8-NEXT: {{ $}}85 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr086 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr087 ; GFX8-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec88 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]89 ; GFX9-LABEL: name: lshr_s16_s16_vs90 ; GFX9: liveins: $sgpr0, $vgpr091 ; GFX9-NEXT: {{ $}}92 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr093 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr094 ; GFX9-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec95 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]96 ; GFX10-LABEL: name: lshr_s16_s16_vs97 ; GFX10: liveins: $sgpr0, $vgpr098 ; GFX10-NEXT: {{ $}}99 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0100 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0101 ; GFX10-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec102 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]103 ; GFX11-LABEL: name: lshr_s16_s16_vs104 ; GFX11: liveins: $sgpr0, $vgpr0105 ; GFX11-NEXT: {{ $}}106 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0107 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0108 ; GFX11-NEXT: [[V_LSHRREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec109 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_fake16_e64_]]110 %0:vgpr(s32) = COPY $vgpr0111 %1:sgpr(s32) = COPY $sgpr0112 %2:vgpr(s16) = G_TRUNC %0113 %3:sgpr(s16) = G_TRUNC %1114 %4:vgpr(s16) = G_LSHR %2, %3115 S_ENDPGM 0, implicit %4116...117 118---119name: lshr_s16_s32_vv120legalized: true121regBankSelected: true122 123body: |124 bb.0:125 liveins: $vgpr0, $vgpr1126 127 ; GFX8-LABEL: name: lshr_s16_s32_vv128 ; GFX8: liveins: $vgpr0, $vgpr1129 ; GFX8-NEXT: {{ $}}130 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0131 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1132 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)133 ; GFX8-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)134 ; GFX8-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)135 ; GFX9-LABEL: name: lshr_s16_s32_vv136 ; GFX9: liveins: $vgpr0, $vgpr1137 ; GFX9-NEXT: {{ $}}138 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0139 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1140 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)141 ; GFX9-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)142 ; GFX9-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)143 ; GFX10-LABEL: name: lshr_s16_s32_vv144 ; GFX10: liveins: $vgpr0, $vgpr1145 ; GFX10-NEXT: {{ $}}146 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0147 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1148 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)149 ; GFX10-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)150 ; GFX10-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)151 ; GFX11-LABEL: name: lshr_s16_s32_vv152 ; GFX11: liveins: $vgpr0, $vgpr1153 ; GFX11-NEXT: {{ $}}154 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0155 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1156 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)157 ; GFX11-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)158 ; GFX11-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)159 %0:vgpr(s32) = COPY $vgpr0160 %1:vgpr(s32) = COPY $vgpr1161 %2:vgpr(s16) = G_TRUNC %0162 %3:vgpr(s16) = G_LSHR %2, %1163 S_ENDPGM 0, implicit %3164...165 166---167name: lshr_s16_s16_vv168legalized: true169regBankSelected: true170 171body: |172 bb.0:173 liveins: $vgpr0, $vgpr1174 175 ; GFX8-LABEL: name: lshr_s16_s16_vv176 ; GFX8: liveins: $vgpr0, $vgpr1177 ; GFX8-NEXT: {{ $}}178 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0179 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1180 ; GFX8-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec181 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]182 ; GFX9-LABEL: name: lshr_s16_s16_vv183 ; GFX9: liveins: $vgpr0, $vgpr1184 ; GFX9-NEXT: {{ $}}185 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0186 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1187 ; GFX9-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec188 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]189 ; GFX10-LABEL: name: lshr_s16_s16_vv190 ; GFX10: liveins: $vgpr0, $vgpr1191 ; GFX10-NEXT: {{ $}}192 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0193 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1194 ; GFX10-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec195 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]196 ; GFX11-LABEL: name: lshr_s16_s16_vv197 ; GFX11: liveins: $vgpr0, $vgpr1198 ; GFX11-NEXT: {{ $}}199 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0200 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1201 ; GFX11-NEXT: [[V_LSHRREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec202 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_fake16_e64_]]203 %0:vgpr(s32) = COPY $vgpr0204 %1:vgpr(s32) = COPY $vgpr1205 %2:vgpr(s16) = G_TRUNC %0206 %3:vgpr(s16) = G_TRUNC %1207 %4:vgpr(s16) = G_LSHR %2, %3208 S_ENDPGM 0, implicit %4209...210 211---212name: lshr_s16_s16_vv_zext_to_s32213legalized: true214regBankSelected: true215 216body: |217 bb.0:218 liveins: $vgpr0, $vgpr1219 220 ; GFX8-LABEL: name: lshr_s16_s16_vv_zext_to_s32221 ; GFX8: liveins: $vgpr0, $vgpr1222 ; GFX8-NEXT: {{ $}}223 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0224 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1225 ; GFX8-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec226 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]227 ; GFX9-LABEL: name: lshr_s16_s16_vv_zext_to_s32228 ; GFX9: liveins: $vgpr0, $vgpr1229 ; GFX9-NEXT: {{ $}}230 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0231 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1232 ; GFX9-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec233 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]234 ; GFX10-LABEL: name: lshr_s16_s16_vv_zext_to_s32235 ; GFX10: liveins: $vgpr0, $vgpr1236 ; GFX10-NEXT: {{ $}}237 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0238 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1239 ; GFX10-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec240 ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535241 ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_]], [[V_LSHRREV_B16_e64_]], implicit $exec242 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_AND_B32_e64_]]243 ; GFX11-LABEL: name: lshr_s16_s16_vv_zext_to_s32244 ; GFX11: liveins: $vgpr0, $vgpr1245 ; GFX11-NEXT: {{ $}}246 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0247 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1248 ; GFX11-NEXT: [[V_LSHRREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec249 ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535250 ; GFX11-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_]], [[V_LSHRREV_B16_fake16_e64_]], implicit $exec251 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_AND_B32_e64_]]252 %0:vgpr(s32) = COPY $vgpr0253 %1:vgpr(s32) = COPY $vgpr1254 %2:vgpr(s16) = G_TRUNC %0255 %3:vgpr(s16) = G_TRUNC %1256 %4:vgpr(s16) = G_LSHR %2, %3257 %5:vgpr(s32) = G_ZEXT %4258 S_ENDPGM 0, implicit %5259...260 261---262name: lshr_s16_vv_zext_to_s64263legalized: true264regBankSelected: true265 266body: |267 bb.0:268 liveins: $vgpr0, $vgpr1269 270 ; GFX8-LABEL: name: lshr_s16_vv_zext_to_s64271 ; GFX8: liveins: $vgpr0, $vgpr1272 ; GFX8-NEXT: {{ $}}273 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0274 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1275 ; GFX8-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec276 ; GFX8-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec277 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_LSHRREV_B16_e64_]], %subreg.sub0, [[V_MOV_B32_e32_]], %subreg.sub1278 ; GFX8-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]279 ; GFX9-LABEL: name: lshr_s16_vv_zext_to_s64280 ; GFX9: liveins: $vgpr0, $vgpr1281 ; GFX9-NEXT: {{ $}}282 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0283 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1284 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec285 ; GFX9-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec286 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_LSHRREV_B16_e64_]], %subreg.sub0, [[V_MOV_B32_e32_]], %subreg.sub1287 ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]288 ; GFX10-LABEL: name: lshr_s16_vv_zext_to_s64289 ; GFX10: liveins: $vgpr0, $vgpr1290 ; GFX10-NEXT: {{ $}}291 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0292 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1293 ; GFX10-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec294 ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0295 ; GFX10-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 65535296 ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_1]], [[V_LSHRREV_B16_e64_]], implicit $exec297 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]298 ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_AND_B32_e64_]], %subreg.sub0, [[COPY2]], %subreg.sub1299 ; GFX10-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]300 ; GFX11-LABEL: name: lshr_s16_vv_zext_to_s64301 ; GFX11: liveins: $vgpr0, $vgpr1302 ; GFX11-NEXT: {{ $}}303 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0304 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1305 ; GFX11-NEXT: [[V_LSHRREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec306 ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0307 ; GFX11-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 65535308 ; GFX11-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_1]], [[V_LSHRREV_B16_fake16_e64_]], implicit $exec309 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]310 ; GFX11-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_AND_B32_e64_]], %subreg.sub0, [[COPY2]], %subreg.sub1311 ; GFX11-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]312 %0:vgpr(s32) = COPY $vgpr0313 %1:vgpr(s32) = COPY $vgpr1314 %2:vgpr(s16) = G_TRUNC %0315 %3:vgpr(s16) = G_TRUNC %1316 %4:vgpr(s16) = G_LSHR %2, %3317 %5:vgpr(s64) = G_ZEXT %4318 S_ENDPGM 0, implicit %5319...320 321---322name: lshr_s16_s32_ss323legalized: true324regBankSelected: true325 326body: |327 bb.0:328 liveins: $sgpr0, $sgpr1329 330 ; GFX8-LABEL: name: lshr_s16_s32_ss331 ; GFX8: liveins: $sgpr0, $sgpr1332 ; GFX8-NEXT: {{ $}}333 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0334 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1335 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)336 ; GFX8-NEXT: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)337 ; GFX8-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)338 ; GFX9-LABEL: name: lshr_s16_s32_ss339 ; GFX9: liveins: $sgpr0, $sgpr1340 ; GFX9-NEXT: {{ $}}341 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0342 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1343 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)344 ; GFX9-NEXT: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)345 ; GFX9-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)346 ; GFX10-LABEL: name: lshr_s16_s32_ss347 ; GFX10: liveins: $sgpr0, $sgpr1348 ; GFX10-NEXT: {{ $}}349 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0350 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1351 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)352 ; GFX10-NEXT: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)353 ; GFX10-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)354 ; GFX11-LABEL: name: lshr_s16_s32_ss355 ; GFX11: liveins: $sgpr0, $sgpr1356 ; GFX11-NEXT: {{ $}}357 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0358 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1359 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)360 ; GFX11-NEXT: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)361 ; GFX11-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)362 %0:sgpr(s32) = COPY $sgpr0363 %1:sgpr(s32) = COPY $sgpr1364 %2:sgpr(s16) = G_TRUNC %0365 %3:sgpr(s16) = G_LSHR %2, %1366 S_ENDPGM 0, implicit %3367...368 369---370name: lshr_s16_s32_sv371legalized: true372regBankSelected: true373 374body: |375 bb.0:376 liveins: $sgpr0, $vgpr0377 ; GFX8-LABEL: name: lshr_s16_s32_sv378 ; GFX8: liveins: $sgpr0, $vgpr0379 ; GFX8-NEXT: {{ $}}380 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0381 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0382 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)383 ; GFX8-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)384 ; GFX8-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)385 ; GFX9-LABEL: name: lshr_s16_s32_sv386 ; GFX9: liveins: $sgpr0, $vgpr0387 ; GFX9-NEXT: {{ $}}388 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0389 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0390 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)391 ; GFX9-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)392 ; GFX9-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)393 ; GFX10-LABEL: name: lshr_s16_s32_sv394 ; GFX10: liveins: $sgpr0, $vgpr0395 ; GFX10-NEXT: {{ $}}396 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0397 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0398 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)399 ; GFX10-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)400 ; GFX10-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)401 ; GFX11-LABEL: name: lshr_s16_s32_sv402 ; GFX11: liveins: $sgpr0, $vgpr0403 ; GFX11-NEXT: {{ $}}404 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0405 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0406 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)407 ; GFX11-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)408 ; GFX11-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)409 %0:sgpr(s32) = COPY $sgpr0410 %1:vgpr(s32) = COPY $vgpr0411 %2:sgpr(s16) = G_TRUNC %0412 %3:vgpr(s16) = G_LSHR %2, %1413 S_ENDPGM 0, implicit %3414...415 416---417name: lshr_s16_s16_sv418legalized: true419regBankSelected: true420 421body: |422 bb.0:423 liveins: $sgpr0, $vgpr0424 ; GFX8-LABEL: name: lshr_s16_s16_sv425 ; GFX8: liveins: $sgpr0, $vgpr0426 ; GFX8-NEXT: {{ $}}427 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0428 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0429 ; GFX8-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec430 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]431 ; GFX9-LABEL: name: lshr_s16_s16_sv432 ; GFX9: liveins: $sgpr0, $vgpr0433 ; GFX9-NEXT: {{ $}}434 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0435 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0436 ; GFX9-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec437 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]438 ; GFX10-LABEL: name: lshr_s16_s16_sv439 ; GFX10: liveins: $sgpr0, $vgpr0440 ; GFX10-NEXT: {{ $}}441 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0442 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0443 ; GFX10-NEXT: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec444 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]445 ; GFX11-LABEL: name: lshr_s16_s16_sv446 ; GFX11: liveins: $sgpr0, $vgpr0447 ; GFX11-NEXT: {{ $}}448 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0449 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0450 ; GFX11-NEXT: [[V_LSHRREV_B16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec451 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_LSHRREV_B16_fake16_e64_]]452 %0:sgpr(s32) = COPY $sgpr0453 %1:vgpr(s32) = COPY $vgpr0454 %2:sgpr(s16) = G_TRUNC %0455 %3:vgpr(s16) = G_TRUNC %1456 %4:vgpr(s16) = G_LSHR %2, %3457 S_ENDPGM 0, implicit %4458...459 460---461name: lshr_s16_s32_vs462legalized: true463regBankSelected: true464 465body: |466 bb.0:467 liveins: $sgpr0, $vgpr0468 ; GFX8-LABEL: name: lshr_s16_s32_vs469 ; GFX8: liveins: $sgpr0, $vgpr0470 ; GFX8-NEXT: {{ $}}471 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0472 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0473 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)474 ; GFX8-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)475 ; GFX8-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)476 ; GFX9-LABEL: name: lshr_s16_s32_vs477 ; GFX9: liveins: $sgpr0, $vgpr0478 ; GFX9-NEXT: {{ $}}479 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0480 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0481 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)482 ; GFX9-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)483 ; GFX9-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)484 ; GFX10-LABEL: name: lshr_s16_s32_vs485 ; GFX10: liveins: $sgpr0, $vgpr0486 ; GFX10-NEXT: {{ $}}487 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0488 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0489 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)490 ; GFX10-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)491 ; GFX10-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)492 ; GFX11-LABEL: name: lshr_s16_s32_vs493 ; GFX11: liveins: $sgpr0, $vgpr0494 ; GFX11-NEXT: {{ $}}495 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0496 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0497 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)498 ; GFX11-NEXT: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)499 ; GFX11-NEXT: S_ENDPGM 0, implicit [[LSHR]](s16)500 %0:vgpr(s32) = COPY $vgpr0501 %1:sgpr(s32) = COPY $sgpr0502 %2:vgpr(s16) = G_TRUNC %0503 %3:vgpr(s16) = G_LSHR %2, %1504 S_ENDPGM 0, implicit %3505...506