1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -global-isel-abort=2 -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX9 %s 3# RUN: FileCheck -check-prefixes=ERR-GFX910,ERR %s < %t 4 5# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -global-isel-abort=2 -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX10 %s 6# RUN: FileCheck -check-prefixes=ERR-GFX910,ERR %s < %t 7 8# ERR-NOT: remark 9# ERR-GFX910: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_SHL %0:sgpr, %1:sgpr(<2 x s16>) (in function: shl_v2s16_ss) 10# ERR-NOT: remark 11 12--- 13name: shl_v2s16_ss 14legalized: true 15regBankSelected: true 16 17body: | 18 bb.0: 19 liveins: $sgpr0, $sgpr1 20 ; GFX6-LABEL: name: shl_v2s16_ss 21 ; GFX6: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 22 ; GFX6: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1 23 ; GFX6: [[SHL:%[0-9]+]]:sgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 24 ; GFX6: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 25 ; GFX7-LABEL: name: shl_v2s16_ss 26 ; GFX7: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 27 ; GFX7: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1 28 ; GFX7: [[SHL:%[0-9]+]]:sgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 29 ; GFX7: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 30 ; GFX8-LABEL: name: shl_v2s16_ss 31 ; GFX8: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 32 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1 33 ; GFX8: [[SHL:%[0-9]+]]:sgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 34 ; GFX8: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 35 ; GFX9-LABEL: name: shl_v2s16_ss 36 ; GFX9: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 37 ; GFX9: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1 38 ; GFX9: [[SHL:%[0-9]+]]:sgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 39 ; GFX9: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 40 ; GFX10-LABEL: name: shl_v2s16_ss 41 ; GFX10: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 42 ; GFX10: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1 43 ; GFX10: [[SHL:%[0-9]+]]:sgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 44 ; GFX10: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 45 %0:sgpr(<2 x s16>) = COPY $sgpr0 46 %1:sgpr(<2 x s16>) = COPY $sgpr1 47 %2:sgpr(<2 x s16>) = G_SHL %0, %1 48 S_ENDPGM 0, implicit %2 49... 50 51--- 52name: shl_v2s16_sv 53legalized: true 54regBankSelected: true 55 56body: | 57 bb.0: 58 liveins: $sgpr0, $vgpr0 59 ; GFX6-LABEL: name: shl_v2s16_sv 60 ; GFX6: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 61 ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 62 ; GFX6: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 63 ; GFX6: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 64 ; GFX7-LABEL: name: shl_v2s16_sv 65 ; GFX7: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 66 ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 67 ; GFX7: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 68 ; GFX7: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 69 ; GFX8-LABEL: name: shl_v2s16_sv 70 ; GFX8: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 71 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 72 ; GFX8: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 73 ; GFX8: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 74 ; GFX9-LABEL: name: shl_v2s16_sv 75 ; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 76 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 77 ; GFX9: [[V_PK_LSHLREV_B16_:%[0-9]+]]:vgpr_32 = V_PK_LSHLREV_B16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec 78 ; GFX9: S_ENDPGM 0, implicit [[V_PK_LSHLREV_B16_]] 79 ; GFX10-LABEL: name: shl_v2s16_sv 80 ; GFX10: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 81 ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 82 ; GFX10: [[V_PK_LSHLREV_B16_:%[0-9]+]]:vgpr_32 = V_PK_LSHLREV_B16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec 83 ; GFX10: S_ENDPGM 0, implicit [[V_PK_LSHLREV_B16_]] 84 %0:sgpr(<2 x s16>) = COPY $sgpr0 85 %1:vgpr(<2 x s16>) = COPY $vgpr0 86 %2:vgpr(<2 x s16>) = G_SHL %0, %1 87 S_ENDPGM 0, implicit %2 88... 89 90--- 91name: shl_v2s16_vs 92legalized: true 93regBankSelected: true 94 95body: | 96 bb.0: 97 liveins: $sgpr0, $vgpr0 98 ; GFX6-LABEL: name: shl_v2s16_vs 99 ; GFX6: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 100 ; GFX6: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 101 ; GFX6: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 102 ; GFX6: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 103 ; GFX7-LABEL: name: shl_v2s16_vs 104 ; GFX7: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 105 ; GFX7: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 106 ; GFX7: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 107 ; GFX7: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 108 ; GFX8-LABEL: name: shl_v2s16_vs 109 ; GFX8: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 110 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0 111 ; GFX8: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 112 ; GFX8: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 113 ; GFX9-LABEL: name: shl_v2s16_vs 114 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 115 ; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0 116 ; GFX9: [[V_PK_LSHLREV_B16_:%[0-9]+]]:vgpr_32 = V_PK_LSHLREV_B16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec 117 ; GFX9: S_ENDPGM 0, implicit [[V_PK_LSHLREV_B16_]] 118 ; GFX10-LABEL: name: shl_v2s16_vs 119 ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 120 ; GFX10: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0 121 ; GFX10: [[V_PK_LSHLREV_B16_:%[0-9]+]]:vgpr_32 = V_PK_LSHLREV_B16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec 122 ; GFX10: S_ENDPGM 0, implicit [[V_PK_LSHLREV_B16_]] 123 %0:vgpr(<2 x s16>) = COPY $vgpr0 124 %1:sgpr(<2 x s16>) = COPY $sgpr0 125 %2:vgpr(<2 x s16>) = G_SHL %0, %1 126 S_ENDPGM 0, implicit %2 127... 128 129--- 130name: shl_v2s16_vv 131legalized: true 132regBankSelected: true 133 134body: | 135 bb.0: 136 liveins: $vgpr0, $vgpr1 137 ; GFX6-LABEL: name: shl_v2s16_vv 138 ; GFX6: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 139 ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1 140 ; GFX6: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 141 ; GFX6: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 142 ; GFX7-LABEL: name: shl_v2s16_vv 143 ; GFX7: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 144 ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1 145 ; GFX7: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 146 ; GFX7: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 147 ; GFX8-LABEL: name: shl_v2s16_vv 148 ; GFX8: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 149 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1 150 ; GFX8: [[SHL:%[0-9]+]]:vgpr(<2 x s16>) = G_SHL [[COPY]], [[COPY1]](<2 x s16>) 151 ; GFX8: S_ENDPGM 0, implicit [[SHL]](<2 x s16>) 152 ; GFX9-LABEL: name: shl_v2s16_vv 153 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 154 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 155 ; GFX9: [[V_PK_LSHLREV_B16_:%[0-9]+]]:vgpr_32 = V_PK_LSHLREV_B16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec 156 ; GFX9: S_ENDPGM 0, implicit [[V_PK_LSHLREV_B16_]] 157 ; GFX10-LABEL: name: shl_v2s16_vv 158 ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 159 ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 160 ; GFX10: [[V_PK_LSHLREV_B16_:%[0-9]+]]:vgpr_32 = V_PK_LSHLREV_B16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec 161 ; GFX10: S_ENDPGM 0, implicit [[V_PK_LSHLREV_B16_]] 162 %0:vgpr(<2 x s16>) = COPY $vgpr0 163 %1:vgpr(<2 x s16>) = COPY $vgpr1 164 %2:vgpr(<2 x s16>) = G_SHL %0, %1 165 S_ENDPGM 0, implicit %2 166... 167