508 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: FileCheck --check-prefix=ERR %s < %t11 12# 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 %s13# RUN: FileCheck --check-prefix=ERR %s < %t14 15# ERR-NOT: remark16# ERR: remark: <unknown>:0:0: cannot select: %4:sgpr(s16) = G_ASHR %2:sgpr, %3:sgpr(s16) (in function: ashr_s16_s16_ss)17# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_ASHR %2:vgpr, %1:vgpr(s32) (in function: ashr_s16_s32_vv)18# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:sgpr(s16) = G_ASHR %2:sgpr, %1:sgpr(s32) (in function: ashr_s16_s32_ss)19# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_ASHR %2:sgpr, %1:vgpr(s32) (in function: ashr_s16_s32_sv)20# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_ASHR %2:vgpr, %1:sgpr(s32) (in function: ashr_s16_s32_vs)21# ERR-NOT: remark22 23---24name: ashr_s16_s16_ss25legalized: true26regBankSelected: true27 28body: |29 bb.0:30 liveins: $sgpr0, $sgpr131 32 ; GFX8-LABEL: name: ashr_s16_s16_ss33 ; GFX8: liveins: $sgpr0, $sgpr134 ; GFX8-NEXT: {{ $}}35 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr036 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr137 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)38 ; GFX8-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)39 ; GFX8-NEXT: [[ASHR:%[0-9]+]]:sgpr(s16) = G_ASHR [[TRUNC]], [[TRUNC1]](s16)40 ; GFX8-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)41 ; GFX9-LABEL: name: ashr_s16_s16_ss42 ; GFX9: liveins: $sgpr0, $sgpr143 ; GFX9-NEXT: {{ $}}44 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr045 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr146 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)47 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)48 ; GFX9-NEXT: [[ASHR:%[0-9]+]]:sgpr(s16) = G_ASHR [[TRUNC]], [[TRUNC1]](s16)49 ; GFX9-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)50 ; GFX10-LABEL: name: ashr_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: [[ASHR:%[0-9]+]]:sgpr(s16) = G_ASHR [[TRUNC]], [[TRUNC1]](s16)58 ; GFX10-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)59 ; GFX11-LABEL: name: ashr_s16_s16_ss60 ; GFX11: liveins: $sgpr0, $sgpr161 ; GFX11-NEXT: {{ $}}62 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr063 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr164 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)65 ; GFX11-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)66 ; GFX11-NEXT: [[ASHR:%[0-9]+]]:sgpr(s16) = G_ASHR [[TRUNC]], [[TRUNC1]](s16)67 ; GFX11-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)68 %0:sgpr(s32) = COPY $sgpr069 %1:sgpr(s32) = COPY $sgpr170 %2:sgpr(s16) = G_TRUNC %071 %3:sgpr(s16) = G_TRUNC %172 %4:sgpr(s16) = G_ASHR %2, %373 S_ENDPGM 0, implicit %474...75 76---77name: ashr_s16_s16_vs78legalized: true79regBankSelected: true80 81body: |82 bb.0:83 liveins: $sgpr0, $vgpr084 ; GFX8-LABEL: name: ashr_s16_s16_vs85 ; GFX8: liveins: $sgpr0, $vgpr086 ; GFX8-NEXT: {{ $}}87 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr088 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr089 ; GFX8-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec90 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]91 ; GFX9-LABEL: name: ashr_s16_s16_vs92 ; GFX9: liveins: $sgpr0, $vgpr093 ; GFX9-NEXT: {{ $}}94 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr095 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr096 ; GFX9-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec97 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]98 ; GFX10-LABEL: name: ashr_s16_s16_vs99 ; GFX10: liveins: $sgpr0, $vgpr0100 ; GFX10-NEXT: {{ $}}101 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0102 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0103 ; GFX10-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec104 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]105 ; GFX11-LABEL: name: ashr_s16_s16_vs106 ; GFX11: liveins: $sgpr0, $vgpr0107 ; GFX11-NEXT: {{ $}}108 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0109 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0110 ; GFX11-NEXT: [[V_ASHRREV_I16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec111 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_fake16_e64_]]112 %0:vgpr(s32) = COPY $vgpr0113 %1:sgpr(s32) = COPY $sgpr0114 %2:vgpr(s16) = G_TRUNC %0115 %3:sgpr(s16) = G_TRUNC %1116 %4:vgpr(s16) = G_ASHR %2, %3117 S_ENDPGM 0, implicit %4118...119 120---121name: ashr_s16_s32_vv122legalized: true123regBankSelected: true124 125body: |126 bb.0:127 liveins: $vgpr0, $vgpr1128 129 ; GFX8-LABEL: name: ashr_s16_s32_vv130 ; GFX8: liveins: $vgpr0, $vgpr1131 ; GFX8-NEXT: {{ $}}132 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0133 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1134 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)135 ; GFX8-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)136 ; GFX8-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)137 ; GFX9-LABEL: name: ashr_s16_s32_vv138 ; GFX9: liveins: $vgpr0, $vgpr1139 ; GFX9-NEXT: {{ $}}140 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0141 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1142 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)143 ; GFX9-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)144 ; GFX9-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)145 ; GFX10-LABEL: name: ashr_s16_s32_vv146 ; GFX10: liveins: $vgpr0, $vgpr1147 ; GFX10-NEXT: {{ $}}148 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0149 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1150 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)151 ; GFX10-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)152 ; GFX10-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)153 ; GFX11-LABEL: name: ashr_s16_s32_vv154 ; GFX11: liveins: $vgpr0, $vgpr1155 ; GFX11-NEXT: {{ $}}156 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0157 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1158 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)159 ; GFX11-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)160 ; GFX11-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)161 %0:vgpr(s32) = COPY $vgpr0162 %1:vgpr(s32) = COPY $vgpr1163 %2:vgpr(s16) = G_TRUNC %0164 %3:vgpr(s16) = G_ASHR %2, %1165 S_ENDPGM 0, implicit %3166...167 168---169name: ashr_s16_s16_vv170legalized: true171regBankSelected: true172 173body: |174 bb.0:175 liveins: $vgpr0, $vgpr1176 177 ; GFX8-LABEL: name: ashr_s16_s16_vv178 ; GFX8: liveins: $vgpr0, $vgpr1179 ; GFX8-NEXT: {{ $}}180 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0181 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1182 ; GFX8-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec183 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]184 ; GFX9-LABEL: name: ashr_s16_s16_vv185 ; GFX9: liveins: $vgpr0, $vgpr1186 ; GFX9-NEXT: {{ $}}187 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0188 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1189 ; GFX9-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec190 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]191 ; GFX10-LABEL: name: ashr_s16_s16_vv192 ; GFX10: liveins: $vgpr0, $vgpr1193 ; GFX10-NEXT: {{ $}}194 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0195 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1196 ; GFX10-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec197 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]198 ; GFX11-LABEL: name: ashr_s16_s16_vv199 ; GFX11: liveins: $vgpr0, $vgpr1200 ; GFX11-NEXT: {{ $}}201 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0202 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1203 ; GFX11-NEXT: [[V_ASHRREV_I16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec204 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_fake16_e64_]]205 %0:vgpr(s32) = COPY $vgpr0206 %1:vgpr(s32) = COPY $vgpr1207 %2:vgpr(s16) = G_TRUNC %0208 %3:vgpr(s16) = G_TRUNC %1209 %4:vgpr(s16) = G_ASHR %2, %3210 S_ENDPGM 0, implicit %4211...212 213---214name: ashr_s16_s16_vv_zext_to_s32215legalized: true216regBankSelected: true217 218body: |219 bb.0:220 liveins: $vgpr0, $vgpr1221 222 ; GFX8-LABEL: name: ashr_s16_s16_vv_zext_to_s32223 ; GFX8: liveins: $vgpr0, $vgpr1224 ; GFX8-NEXT: {{ $}}225 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0226 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1227 ; GFX8-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec228 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]229 ; GFX9-LABEL: name: ashr_s16_s16_vv_zext_to_s32230 ; GFX9: liveins: $vgpr0, $vgpr1231 ; GFX9-NEXT: {{ $}}232 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0233 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1234 ; GFX9-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec235 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]236 ; GFX10-LABEL: name: ashr_s16_s16_vv_zext_to_s32237 ; GFX10: liveins: $vgpr0, $vgpr1238 ; GFX10-NEXT: {{ $}}239 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0240 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1241 ; GFX10-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec242 ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535243 ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_]], [[V_ASHRREV_I16_e64_]], implicit $exec244 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_AND_B32_e64_]]245 ; GFX11-LABEL: name: ashr_s16_s16_vv_zext_to_s32246 ; GFX11: liveins: $vgpr0, $vgpr1247 ; GFX11-NEXT: {{ $}}248 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0249 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1250 ; GFX11-NEXT: [[V_ASHRREV_I16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec251 ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535252 ; GFX11-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_]], [[V_ASHRREV_I16_fake16_e64_]], implicit $exec253 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_AND_B32_e64_]]254 %0:vgpr(s32) = COPY $vgpr0255 %1:vgpr(s32) = COPY $vgpr1256 %2:vgpr(s16) = G_TRUNC %0257 %3:vgpr(s16) = G_TRUNC %1258 %4:vgpr(s16) = G_ASHR %2, %3259 %5:vgpr(s32) = G_ZEXT %4260 S_ENDPGM 0, implicit %5261...262 263---264name: ashr_s16_vv_zext_to_s64265legalized: true266regBankSelected: true267 268body: |269 bb.0:270 liveins: $vgpr0, $vgpr1271 272 ; GFX8-LABEL: name: ashr_s16_vv_zext_to_s64273 ; GFX8: liveins: $vgpr0, $vgpr1274 ; GFX8-NEXT: {{ $}}275 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0276 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1277 ; GFX8-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec278 ; GFX8-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec279 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ASHRREV_I16_e64_]], %subreg.sub0, [[V_MOV_B32_e32_]], %subreg.sub1280 ; GFX8-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]281 ; GFX9-LABEL: name: ashr_s16_vv_zext_to_s64282 ; GFX9: liveins: $vgpr0, $vgpr1283 ; GFX9-NEXT: {{ $}}284 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0285 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1286 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec287 ; GFX9-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec288 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ASHRREV_I16_e64_]], %subreg.sub0, [[V_MOV_B32_e32_]], %subreg.sub1289 ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]290 ; GFX10-LABEL: name: ashr_s16_vv_zext_to_s64291 ; GFX10: liveins: $vgpr0, $vgpr1292 ; GFX10-NEXT: {{ $}}293 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0294 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1295 ; GFX10-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec296 ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0297 ; GFX10-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 65535298 ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_1]], [[V_ASHRREV_I16_e64_]], implicit $exec299 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]300 ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_AND_B32_e64_]], %subreg.sub0, [[COPY2]], %subreg.sub1301 ; GFX10-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]302 ; GFX11-LABEL: name: ashr_s16_vv_zext_to_s64303 ; GFX11: liveins: $vgpr0, $vgpr1304 ; GFX11-NEXT: {{ $}}305 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0306 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1307 ; GFX11-NEXT: [[V_ASHRREV_I16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec308 ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0309 ; GFX11-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 65535310 ; GFX11-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_1]], [[V_ASHRREV_I16_fake16_e64_]], implicit $exec311 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]312 ; GFX11-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_AND_B32_e64_]], %subreg.sub0, [[COPY2]], %subreg.sub1313 ; GFX11-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]314 %0:vgpr(s32) = COPY $vgpr0315 %1:vgpr(s32) = COPY $vgpr1316 %2:vgpr(s16) = G_TRUNC %0317 %3:vgpr(s16) = G_TRUNC %1318 %4:vgpr(s16) = G_ASHR %2, %3319 %5:vgpr(s64) = G_ZEXT %4320 S_ENDPGM 0, implicit %5321...322 323---324name: ashr_s16_s32_ss325legalized: true326regBankSelected: true327 328body: |329 bb.0:330 liveins: $sgpr0, $sgpr1331 332 ; GFX8-LABEL: name: ashr_s16_s32_ss333 ; GFX8: liveins: $sgpr0, $sgpr1334 ; GFX8-NEXT: {{ $}}335 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0336 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1337 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)338 ; GFX8-NEXT: [[ASHR:%[0-9]+]]:sgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)339 ; GFX8-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)340 ; GFX9-LABEL: name: ashr_s16_s32_ss341 ; GFX9: liveins: $sgpr0, $sgpr1342 ; GFX9-NEXT: {{ $}}343 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0344 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1345 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)346 ; GFX9-NEXT: [[ASHR:%[0-9]+]]:sgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)347 ; GFX9-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)348 ; GFX10-LABEL: name: ashr_s16_s32_ss349 ; GFX10: liveins: $sgpr0, $sgpr1350 ; GFX10-NEXT: {{ $}}351 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0352 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1353 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)354 ; GFX10-NEXT: [[ASHR:%[0-9]+]]:sgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)355 ; GFX10-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)356 ; GFX11-LABEL: name: ashr_s16_s32_ss357 ; GFX11: liveins: $sgpr0, $sgpr1358 ; GFX11-NEXT: {{ $}}359 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0360 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1361 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)362 ; GFX11-NEXT: [[ASHR:%[0-9]+]]:sgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)363 ; GFX11-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)364 %0:sgpr(s32) = COPY $sgpr0365 %1:sgpr(s32) = COPY $sgpr1366 %2:sgpr(s16) = G_TRUNC %0367 %3:sgpr(s16) = G_ASHR %2, %1368 S_ENDPGM 0, implicit %3369...370 371---372name: ashr_s16_s32_sv373legalized: true374regBankSelected: true375 376body: |377 bb.0:378 liveins: $sgpr0, $vgpr0379 ; GFX8-LABEL: name: ashr_s16_s32_sv380 ; GFX8: liveins: $sgpr0, $vgpr0381 ; GFX8-NEXT: {{ $}}382 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0383 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0384 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)385 ; GFX8-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)386 ; GFX8-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)387 ; GFX9-LABEL: name: ashr_s16_s32_sv388 ; GFX9: liveins: $sgpr0, $vgpr0389 ; GFX9-NEXT: {{ $}}390 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0391 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0392 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)393 ; GFX9-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)394 ; GFX9-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)395 ; GFX10-LABEL: name: ashr_s16_s32_sv396 ; GFX10: liveins: $sgpr0, $vgpr0397 ; GFX10-NEXT: {{ $}}398 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0399 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0400 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)401 ; GFX10-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)402 ; GFX10-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)403 ; GFX11-LABEL: name: ashr_s16_s32_sv404 ; GFX11: liveins: $sgpr0, $vgpr0405 ; GFX11-NEXT: {{ $}}406 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0407 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0408 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)409 ; GFX11-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)410 ; GFX11-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)411 %0:sgpr(s32) = COPY $sgpr0412 %1:vgpr(s32) = COPY $vgpr0413 %2:sgpr(s16) = G_TRUNC %0414 %3:vgpr(s16) = G_ASHR %2, %1415 S_ENDPGM 0, implicit %3416...417 418---419name: ashr_s16_s16_sv420legalized: true421regBankSelected: true422 423body: |424 bb.0:425 liveins: $sgpr0, $vgpr0426 ; GFX8-LABEL: name: ashr_s16_s16_sv427 ; GFX8: liveins: $sgpr0, $vgpr0428 ; GFX8-NEXT: {{ $}}429 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0430 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0431 ; GFX8-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec432 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]433 ; GFX9-LABEL: name: ashr_s16_s16_sv434 ; GFX9: liveins: $sgpr0, $vgpr0435 ; GFX9-NEXT: {{ $}}436 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0437 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0438 ; GFX9-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_e64 [[COPY1]], [[COPY]], implicit $exec439 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]440 ; GFX10-LABEL: name: ashr_s16_s16_sv441 ; GFX10: liveins: $sgpr0, $vgpr0442 ; GFX10-NEXT: {{ $}}443 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0444 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0445 ; GFX10-NEXT: [[V_ASHRREV_I16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_opsel_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $exec446 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_e64_]]447 ; GFX11-LABEL: name: ashr_s16_s16_sv448 ; GFX11: liveins: $sgpr0, $vgpr0449 ; GFX11-NEXT: {{ $}}450 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0451 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0452 ; GFX11-NEXT: [[V_ASHRREV_I16_fake16_e64_:%[0-9]+]]:vgpr_32 = V_ASHRREV_I16_fake16_e64 [[COPY1]], [[COPY]], implicit $exec453 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_ASHRREV_I16_fake16_e64_]]454 %0:sgpr(s32) = COPY $sgpr0455 %1:vgpr(s32) = COPY $vgpr0456 %2:sgpr(s16) = G_TRUNC %0457 %3:vgpr(s16) = G_TRUNC %1458 %4:vgpr(s16) = G_ASHR %2, %3459 S_ENDPGM 0, implicit %4460...461 462---463name: ashr_s16_s32_vs464legalized: true465regBankSelected: true466 467body: |468 bb.0:469 liveins: $sgpr0, $vgpr0470 ; GFX8-LABEL: name: ashr_s16_s32_vs471 ; GFX8: liveins: $sgpr0, $vgpr0472 ; GFX8-NEXT: {{ $}}473 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0474 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0475 ; GFX8-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)476 ; GFX8-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)477 ; GFX8-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)478 ; GFX9-LABEL: name: ashr_s16_s32_vs479 ; GFX9: liveins: $sgpr0, $vgpr0480 ; GFX9-NEXT: {{ $}}481 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0482 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0483 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)484 ; GFX9-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)485 ; GFX9-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)486 ; GFX10-LABEL: name: ashr_s16_s32_vs487 ; GFX10: liveins: $sgpr0, $vgpr0488 ; GFX10-NEXT: {{ $}}489 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0490 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0491 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)492 ; GFX10-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)493 ; GFX10-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)494 ; GFX11-LABEL: name: ashr_s16_s32_vs495 ; GFX11: liveins: $sgpr0, $vgpr0496 ; GFX11-NEXT: {{ $}}497 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0498 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0499 ; GFX11-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)500 ; GFX11-NEXT: [[ASHR:%[0-9]+]]:vgpr(s16) = G_ASHR [[TRUNC]], [[COPY1]](s32)501 ; GFX11-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)502 %0:vgpr(s32) = COPY $vgpr0503 %1:sgpr(s32) = COPY $sgpr0504 %2:vgpr(s16) = G_TRUNC %0505 %3:vgpr(s16) = G_ASHR %2, %1506 S_ENDPGM 0, implicit %3507...508