1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2 3# RUN: llc -march=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 %s 4# RUN: FileCheck --check-prefix=ERR %s < %t 5 6# RUN: llc -march=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 %s 7# RUN: FileCheck --check-prefix=ERR %s < %t 8 9# RUN: llc -march=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 %s 10# RUN: FileCheck --check-prefix=ERR %s < %t 11 12# ERR-NOT: remark 13# ERR: remark: <unknown>:0:0: cannot select: %4:sgpr(s16) = G_LSHR %2:sgpr, %3:sgpr(s16) (in function: lshr_s16_s16_ss) 14# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_LSHR %2:vgpr, %1:vgpr(s32) (in function: lshr_s16_s32_vv) 15# ERR-NEXT: remark: <unknown>:0:0: cannot select: %5:vgpr(s64) = G_ZEXT %4:vgpr(s16) (in function: lshr_s16_vv_zext_to_s64) 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: remark 20 21--- 22name: lshr_s16_s16_ss 23legalized: true 24regBankSelected: true 25 26body: | 27 bb.0: 28 liveins: $sgpr0, $sgpr1 29 30 ; GFX8-LABEL: name: lshr_s16_s16_ss 31 ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 32 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 33 ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 34 ; GFX8: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32) 35 ; GFX8: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16) 36 ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16) 37 ; GFX9-LABEL: name: lshr_s16_s16_ss 38 ; GFX9: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 39 ; GFX9: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 40 ; GFX9: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 41 ; GFX9: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32) 42 ; GFX9: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16) 43 ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16) 44 ; GFX10-LABEL: name: lshr_s16_s16_ss 45 ; GFX10: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 46 ; GFX10: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 47 ; GFX10: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 48 ; GFX10: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32) 49 ; GFX10: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16) 50 ; GFX10: S_ENDPGM 0, implicit [[LSHR]](s16) 51 %0:sgpr(s32) = COPY $sgpr0 52 %1:sgpr(s32) = COPY $sgpr1 53 %2:sgpr(s16) = G_TRUNC %0 54 %3:sgpr(s16) = G_TRUNC %1 55 %4:sgpr(s16) = G_LSHR %2, %3 56 S_ENDPGM 0, implicit %4 57... 58 59--- 60name: lshr_s16_s16_vs 61legalized: true 62regBankSelected: true 63 64body: | 65 bb.0: 66 liveins: $sgpr0, $vgpr0 67 ; GFX8-LABEL: name: lshr_s16_s16_vs 68 ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 69 ; GFX8: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0 70 ; GFX8: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 71 ; GFX8: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 72 ; GFX9-LABEL: name: lshr_s16_s16_vs 73 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 74 ; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0 75 ; GFX9: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 76 ; GFX9: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 77 ; GFX10-LABEL: name: lshr_s16_s16_vs 78 ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 79 ; GFX10: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0 80 ; GFX10: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 81 ; GFX10: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 82 %0:vgpr(s32) = COPY $vgpr0 83 %1:sgpr(s32) = COPY $sgpr0 84 %2:vgpr(s16) = G_TRUNC %0 85 %3:sgpr(s16) = G_TRUNC %1 86 %4:vgpr(s16) = G_LSHR %2, %3 87 S_ENDPGM 0, implicit %4 88... 89 90--- 91name: lshr_s16_s32_vv 92legalized: true 93regBankSelected: true 94 95body: | 96 bb.0: 97 liveins: $vgpr0, $vgpr1 98 99 ; GFX8-LABEL: name: lshr_s16_s32_vv 100 ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 101 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 102 ; GFX8: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 103 ; GFX8: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 104 ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16) 105 ; GFX9-LABEL: name: lshr_s16_s32_vv 106 ; GFX9: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 107 ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 108 ; GFX9: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 109 ; GFX9: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 110 ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16) 111 ; GFX10-LABEL: name: lshr_s16_s32_vv 112 ; GFX10: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 113 ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 114 ; GFX10: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 115 ; GFX10: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 116 ; GFX10: S_ENDPGM 0, implicit [[LSHR]](s16) 117 %0:vgpr(s32) = COPY $vgpr0 118 %1:vgpr(s32) = COPY $vgpr1 119 %2:vgpr(s16) = G_TRUNC %0 120 %3:vgpr(s16) = G_LSHR %2, %1 121 S_ENDPGM 0, implicit %3 122... 123 124--- 125name: lshr_s16_s16_vv 126legalized: true 127regBankSelected: true 128 129body: | 130 bb.0: 131 liveins: $vgpr0, $vgpr1 132 133 ; GFX8-LABEL: name: lshr_s16_s16_vv 134 ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 135 ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 136 ; GFX8: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 137 ; GFX8: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 138 ; GFX9-LABEL: name: lshr_s16_s16_vv 139 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 140 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 141 ; GFX9: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 142 ; GFX9: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 143 ; GFX10-LABEL: name: lshr_s16_s16_vv 144 ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 145 ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 146 ; GFX10: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 147 ; GFX10: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 148 %0:vgpr(s32) = COPY $vgpr0 149 %1:vgpr(s32) = COPY $vgpr1 150 %2:vgpr(s16) = G_TRUNC %0 151 %3:vgpr(s16) = G_TRUNC %1 152 %4:vgpr(s16) = G_LSHR %2, %3 153 S_ENDPGM 0, implicit %4 154... 155 156--- 157name: lshr_s16_s16_vv_zext_to_s32 158legalized: true 159regBankSelected: true 160 161body: | 162 bb.0: 163 liveins: $vgpr0, $vgpr1 164 165 ; GFX8-LABEL: name: lshr_s16_s16_vv_zext_to_s32 166 ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 167 ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 168 ; GFX8: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 169 ; GFX8: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 170 ; GFX9-LABEL: name: lshr_s16_s16_vv_zext_to_s32 171 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 172 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 173 ; GFX9: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 174 ; GFX9: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 175 ; GFX10-LABEL: name: lshr_s16_s16_vv_zext_to_s32 176 ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 177 ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 178 ; GFX10: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 179 ; GFX10: [[V_BFE_U32_e64_:%[0-9]+]]:vgpr_32 = V_BFE_U32_e64 [[V_LSHRREV_B16_e64_]], 0, 16, implicit $exec 180 ; GFX10: S_ENDPGM 0, implicit [[V_BFE_U32_e64_]] 181 %0:vgpr(s32) = COPY $vgpr0 182 %1:vgpr(s32) = COPY $vgpr1 183 %2:vgpr(s16) = G_TRUNC %0 184 %3:vgpr(s16) = G_TRUNC %1 185 %4:vgpr(s16) = G_LSHR %2, %3 186 %5:vgpr(s32) = G_ZEXT %4 187 S_ENDPGM 0, implicit %5 188... 189 190--- 191name: lshr_s16_vv_zext_to_s64 192legalized: true 193regBankSelected: true 194 195body: | 196 bb.0: 197 liveins: $vgpr0, $vgpr1 198 199 ; GFX8-LABEL: name: lshr_s16_vv_zext_to_s64 200 ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 201 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 202 ; GFX8: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 203 ; GFX8: [[TRUNC1:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY1]](s32) 204 ; GFX8: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16) 205 ; GFX8: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[LSHR]](s16) 206 ; GFX8: S_ENDPGM 0, implicit [[ZEXT]](s64) 207 ; GFX9-LABEL: name: lshr_s16_vv_zext_to_s64 208 ; GFX9: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 209 ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 210 ; GFX9: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 211 ; GFX9: [[TRUNC1:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY1]](s32) 212 ; GFX9: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16) 213 ; GFX9: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[LSHR]](s16) 214 ; GFX9: S_ENDPGM 0, implicit [[ZEXT]](s64) 215 ; GFX10-LABEL: name: lshr_s16_vv_zext_to_s64 216 ; GFX10: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 217 ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 218 ; GFX10: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 219 ; GFX10: [[TRUNC1:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY1]](s32) 220 ; GFX10: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16) 221 ; GFX10: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[LSHR]](s16) 222 ; GFX10: S_ENDPGM 0, implicit [[ZEXT]](s64) 223 %0:vgpr(s32) = COPY $vgpr0 224 %1:vgpr(s32) = COPY $vgpr1 225 %2:vgpr(s16) = G_TRUNC %0 226 %3:vgpr(s16) = G_TRUNC %1 227 %4:vgpr(s16) = G_LSHR %2, %3 228 %5:vgpr(s64) = G_ZEXT %4 229 S_ENDPGM 0, implicit %5 230... 231 232--- 233name: lshr_s16_s32_ss 234legalized: true 235regBankSelected: true 236 237body: | 238 bb.0: 239 liveins: $sgpr0, $sgpr1 240 241 ; GFX8-LABEL: name: lshr_s16_s32_ss 242 ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 243 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 244 ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 245 ; GFX8: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 246 ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16) 247 ; GFX9-LABEL: name: lshr_s16_s32_ss 248 ; GFX9: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 249 ; GFX9: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 250 ; GFX9: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 251 ; GFX9: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 252 ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16) 253 ; GFX10-LABEL: name: lshr_s16_s32_ss 254 ; GFX10: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 255 ; GFX10: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 256 ; GFX10: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 257 ; GFX10: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 258 ; GFX10: S_ENDPGM 0, implicit [[LSHR]](s16) 259 %0:sgpr(s32) = COPY $sgpr0 260 %1:sgpr(s32) = COPY $sgpr1 261 %2:sgpr(s16) = G_TRUNC %0 262 %3:sgpr(s16) = G_LSHR %2, %1 263 S_ENDPGM 0, implicit %3 264... 265 266--- 267name: lshr_s16_s32_sv 268legalized: true 269regBankSelected: true 270 271body: | 272 bb.0: 273 liveins: $sgpr0, $vgpr0 274 ; GFX8-LABEL: name: lshr_s16_s32_sv 275 ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 276 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 277 ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 278 ; GFX8: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 279 ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16) 280 ; GFX9-LABEL: name: lshr_s16_s32_sv 281 ; GFX9: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 282 ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 283 ; GFX9: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 284 ; GFX9: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 285 ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16) 286 ; GFX10-LABEL: name: lshr_s16_s32_sv 287 ; GFX10: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 288 ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 289 ; GFX10: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 290 ; GFX10: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 291 ; GFX10: S_ENDPGM 0, implicit [[LSHR]](s16) 292 %0:sgpr(s32) = COPY $sgpr0 293 %1:vgpr(s32) = COPY $vgpr0 294 %2:sgpr(s16) = G_TRUNC %0 295 %3:vgpr(s16) = G_LSHR %2, %1 296 S_ENDPGM 0, implicit %3 297... 298 299--- 300name: lshr_s16_s16_sv 301legalized: true 302regBankSelected: true 303 304body: | 305 bb.0: 306 liveins: $sgpr0, $vgpr0 307 ; GFX8-LABEL: name: lshr_s16_s16_sv 308 ; GFX8: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 309 ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 310 ; GFX8: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 311 ; GFX8: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 312 ; GFX9-LABEL: name: lshr_s16_s16_sv 313 ; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 314 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 315 ; GFX9: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 316 ; GFX9: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 317 ; GFX10-LABEL: name: lshr_s16_s16_sv 318 ; GFX10: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 319 ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 320 ; GFX10: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec 321 ; GFX10: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]] 322 %0:sgpr(s32) = COPY $sgpr0 323 %1:vgpr(s32) = COPY $vgpr0 324 %2:sgpr(s16) = G_TRUNC %0 325 %3:vgpr(s16) = G_TRUNC %1 326 %4:vgpr(s16) = G_LSHR %2, %3 327 S_ENDPGM 0, implicit %4 328... 329 330--- 331name: lshr_s16_s32_vs 332legalized: true 333regBankSelected: true 334 335body: | 336 bb.0: 337 liveins: $sgpr0, $vgpr0 338 ; GFX8-LABEL: name: lshr_s16_s32_vs 339 ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 340 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 341 ; GFX8: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 342 ; GFX8: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 343 ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16) 344 ; GFX9-LABEL: name: lshr_s16_s32_vs 345 ; GFX9: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 346 ; GFX9: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 347 ; GFX9: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 348 ; GFX9: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 349 ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16) 350 ; GFX10-LABEL: name: lshr_s16_s32_vs 351 ; GFX10: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 352 ; GFX10: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 353 ; GFX10: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 354 ; GFX10: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32) 355 ; GFX10: S_ENDPGM 0, implicit [[LSHR]](s16) 356 %0:vgpr(s32) = COPY $vgpr0 357 %1:sgpr(s32) = COPY $sgpr0 358 %2:vgpr(s16) = G_TRUNC %0 359 %3:vgpr(s16) = G_LSHR %2, %1 360 S_ENDPGM 0, implicit %3 361... 362