1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
3 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -global-isel-abort=2 -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX8 %s
4 # RUN: FileCheck -check-prefixes=ERR-GFX8,ERR %s < %t
6 # 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
7 # RUN: FileCheck -check-prefixes=ERR-GFX910,ERR %s < %t
9 # 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
10 # RUN: FileCheck -check-prefixes=ERR-GFX910,ERR %s < %t
13 # ERR-GFX8: remark: <unknown>:0:0: cannot select: %3:sgpr(s16) = G_SHL %2:sgpr, %1:sgpr(s32) (in function: shl_s16_ss)
14 # ERR-GFX8-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:sgpr, %1:vgpr(s32) (in function: shl_s16_sv)
15 # ERR-GFX8-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:vgpr, %1:sgpr(s32) (in function: shl_s16_vs)
16 # ERR-GFX8-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:vgpr, %1:vgpr(s32) (in function: shl_s16_vv)
18 # ERR-GFX910: remark: <unknown>:0:0: cannot select: %3:sgpr(s16) = G_SHL %2:sgpr, %1:sgpr(s32) (in function: shl_s16_ss)
19 # ERR-GFX910-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:sgpr, %1:vgpr(s32) (in function: shl_s16_sv)
20 # ERR-GFX910-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:vgpr, %1:sgpr(s32) (in function: shl_s16_vs)
21 # ERR-GFX910-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:vgpr, %1:vgpr(s32) (in function: shl_s16_vv)
32 liveins: $sgpr0, $sgpr1
33 ; GFX6-LABEL: name: shl_s16_ss
34 ; GFX6: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
35 ; GFX6: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
36 ; GFX6: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
37 ; GFX6: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
38 ; GFX6: S_ENDPGM 0, implicit [[SHL]](s16)
39 ; GFX7-LABEL: name: shl_s16_ss
40 ; GFX7: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
41 ; GFX7: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
42 ; GFX7: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
43 ; GFX7: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
44 ; GFX7: S_ENDPGM 0, implicit [[SHL]](s16)
45 ; GFX8-LABEL: name: shl_s16_ss
46 ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
47 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
48 ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
49 ; GFX8: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
50 ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
51 ; GFX9-LABEL: name: shl_s16_ss
52 ; GFX9: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
53 ; GFX9: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
54 ; GFX9: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
55 ; GFX9: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
56 ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
57 ; GFX10-LABEL: name: shl_s16_ss
58 ; GFX10: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
59 ; GFX10: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
60 ; GFX10: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
61 ; GFX10: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
62 ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
63 %0:sgpr(s32) = COPY $sgpr0
64 %1:sgpr(s32) = COPY $sgpr1
65 %2:sgpr(s16) = G_TRUNC %0
66 %3:sgpr(s16) = G_SHL %2, %1
67 S_ENDPGM 0, implicit %3
77 liveins: $sgpr0, $vgpr0
78 ; GFX6-LABEL: name: shl_s16_sv
79 ; GFX6: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
80 ; GFX6: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
81 ; GFX6: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
82 ; GFX6: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
83 ; GFX6: S_ENDPGM 0, implicit [[SHL]](s16)
84 ; GFX7-LABEL: name: shl_s16_sv
85 ; GFX7: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
86 ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
87 ; GFX7: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
88 ; GFX7: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
89 ; GFX7: S_ENDPGM 0, implicit [[SHL]](s16)
90 ; GFX8-LABEL: name: shl_s16_sv
91 ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
92 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
93 ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
94 ; GFX8: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
95 ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
96 ; GFX9-LABEL: name: shl_s16_sv
97 ; GFX9: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
98 ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
99 ; GFX9: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
100 ; GFX9: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
101 ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
102 ; GFX10-LABEL: name: shl_s16_sv
103 ; GFX10: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
104 ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
105 ; GFX10: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
106 ; GFX10: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
107 ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
108 %0:sgpr(s32) = COPY $sgpr0
109 %1:vgpr(s32) = COPY $vgpr0
110 %2:sgpr(s16) = G_TRUNC %0
111 %3:vgpr(s16) = G_SHL %2, %1
112 S_ENDPGM 0, implicit %3
118 regBankSelected: true
122 liveins: $sgpr0, $vgpr0
123 ; GFX6-LABEL: name: shl_s16_vs
124 ; GFX6: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
125 ; GFX6: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
126 ; GFX6: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
127 ; GFX6: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
128 ; GFX6: S_ENDPGM 0, implicit [[SHL]](s16)
129 ; GFX7-LABEL: name: shl_s16_vs
130 ; GFX7: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
131 ; GFX7: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
132 ; GFX7: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
133 ; GFX7: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
134 ; GFX7: S_ENDPGM 0, implicit [[SHL]](s16)
135 ; GFX8-LABEL: name: shl_s16_vs
136 ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
137 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
138 ; GFX8: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
139 ; GFX8: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
140 ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
141 ; GFX9-LABEL: name: shl_s16_vs
142 ; GFX9: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
143 ; GFX9: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
144 ; GFX9: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
145 ; GFX9: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
146 ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
147 ; GFX10-LABEL: name: shl_s16_vs
148 ; GFX10: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
149 ; GFX10: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
150 ; GFX10: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
151 ; GFX10: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
152 ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
153 %0:vgpr(s32) = COPY $vgpr0
154 %1:sgpr(s32) = COPY $sgpr0
155 %2:vgpr(s16) = G_TRUNC %0
156 %3:vgpr(s16) = G_SHL %2, %1
157 S_ENDPGM 0, implicit %3
163 regBankSelected: true
167 liveins: $vgpr0, $vgpr1
168 ; GFX6-LABEL: name: shl_s16_vv
169 ; GFX6: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
170 ; GFX6: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
171 ; GFX6: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
172 ; GFX6: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
173 ; GFX6: S_ENDPGM 0, implicit [[SHL]](s16)
174 ; GFX7-LABEL: name: shl_s16_vv
175 ; GFX7: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
176 ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
177 ; GFX7: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
178 ; GFX7: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
179 ; GFX7: S_ENDPGM 0, implicit [[SHL]](s16)
180 ; GFX8-LABEL: name: shl_s16_vv
181 ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
182 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
183 ; GFX8: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
184 ; GFX8: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
185 ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
186 ; GFX9-LABEL: name: shl_s16_vv
187 ; GFX9: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
188 ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
189 ; GFX9: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
190 ; GFX9: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
191 ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
192 ; GFX10-LABEL: name: shl_s16_vv
193 ; GFX10: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
194 ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
195 ; GFX10: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
196 ; GFX10: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
197 ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
198 %0:vgpr(s32) = COPY $vgpr0
199 %1:vgpr(s32) = COPY $vgpr1
200 %2:vgpr(s16) = G_TRUNC %0
201 %3:vgpr(s16) = G_SHL %2, %1
202 S_ENDPGM 0, implicit %3