1# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -global-isel-abort=2 -pass-remarks-missed='gisel*' -verify-machineinstrs -o /dev/null %s 2>&1 | FileCheck -check-prefix=ERR %s
2
3# Make sure v2s16 SALU operations fail to select
4
5# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_ADD %0:sgpr, %1:sgpr (in function: s_add_v2s16)
6# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_SUB %0:sgpr, %1:sgpr (in function: s_sub_v2s16)
7# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_MUL %0:sgpr, %1:sgpr (in function: s_mul_v2s16)
8# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_SHL %0:sgpr, %1:sgpr(<2 x s16>) (in function: s_shl_v2s16)
9# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_LSHR %0:sgpr, %1:sgpr(<2 x s16>) (in function: s_lshr_v2s16)
10# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_ASHR %0:sgpr, %1:sgpr(<2 x s16>) (in function: s_ashr_v2s16)
11# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_SMIN %0:sgpr, %1:sgpr (in function: s_smin_v2s16)
12# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_SMAX %0:sgpr, %1:sgpr (in function: s_smax_v2s16)
13# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_UMIN %0:sgpr, %1:sgpr (in function: s_umin_v2s16)
14# ERR: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_UMAX %0:sgpr, %1:sgpr (in function: s_umax_v2s16)
15
16---
17name:            s_add_v2s16
18legalized:       true
19regBankSelected: true
20tracksRegLiveness: true
21
22body: |
23  bb.0:
24    liveins: $sgpr0, $sgpr1
25
26    %0:sgpr(<2 x s16>) = COPY $sgpr0
27    %1:sgpr(<2 x s16>) = COPY $sgpr1
28    %2:sgpr(<2 x s16>) = G_ADD %0, %1
29    S_ENDPGM 0, implicit %2
30
31...
32
33---
34name:            s_sub_v2s16
35legalized:       true
36regBankSelected: true
37tracksRegLiveness: true
38
39body: |
40  bb.0:
41    liveins: $sgpr0, $sgpr1
42
43    %0:sgpr(<2 x s16>) = COPY $sgpr0
44    %1:sgpr(<2 x s16>) = COPY $sgpr1
45    %2:sgpr(<2 x s16>) = G_SUB %0, %1
46    S_ENDPGM 0, implicit %2
47
48...
49
50---
51name:            s_mul_v2s16
52legalized:       true
53regBankSelected: true
54tracksRegLiveness: true
55
56body: |
57  bb.0:
58    liveins: $sgpr0, $sgpr1
59
60    %0:sgpr(<2 x s16>) = COPY $sgpr0
61    %1:sgpr(<2 x s16>) = COPY $sgpr1
62    %2:sgpr(<2 x s16>) = G_MUL %0, %1
63    S_ENDPGM 0, implicit %2
64
65...
66
67---
68name:            s_shl_v2s16
69legalized:       true
70regBankSelected: true
71tracksRegLiveness: true
72
73body: |
74  bb.0:
75    liveins: $sgpr0, $sgpr1
76
77    %0:sgpr(<2 x s16>) = COPY $sgpr0
78    %1:sgpr(<2 x s16>) = COPY $sgpr1
79    %2:sgpr(<2 x s16>) = G_SHL %0, %1
80    S_ENDPGM 0, implicit %2
81
82...
83
84---
85name:            s_lshr_v2s16
86legalized:       true
87regBankSelected: true
88tracksRegLiveness: true
89
90body: |
91  bb.0:
92    liveins: $sgpr0, $sgpr1
93
94    %0:sgpr(<2 x s16>) = COPY $sgpr0
95    %1:sgpr(<2 x s16>) = COPY $sgpr1
96    %2:sgpr(<2 x s16>) = G_LSHR %0, %1
97    S_ENDPGM 0, implicit %2
98
99...
100
101---
102name:            s_ashr_v2s16
103legalized:       true
104regBankSelected: true
105tracksRegLiveness: true
106
107body: |
108  bb.0:
109    liveins: $sgpr0, $sgpr1
110
111    %0:sgpr(<2 x s16>) = COPY $sgpr0
112    %1:sgpr(<2 x s16>) = COPY $sgpr1
113    %2:sgpr(<2 x s16>) = G_ASHR %0, %1
114    S_ENDPGM 0, implicit %2
115
116...
117
118---
119name:            s_smin_v2s16
120legalized:       true
121regBankSelected: true
122tracksRegLiveness: true
123
124body: |
125  bb.0:
126    liveins: $sgpr0, $sgpr1
127
128    %0:sgpr(<2 x s16>) = COPY $sgpr0
129    %1:sgpr(<2 x s16>) = COPY $sgpr1
130    %2:sgpr(<2 x s16>) = G_SMIN %0, %1
131    S_ENDPGM 0, implicit %2
132
133...
134
135---
136name:            s_smax_v2s16
137legalized:       true
138regBankSelected: true
139tracksRegLiveness: true
140
141body: |
142  bb.0:
143    liveins: $sgpr0, $sgpr1
144
145    %0:sgpr(<2 x s16>) = COPY $sgpr0
146    %1:sgpr(<2 x s16>) = COPY $sgpr1
147    %2:sgpr(<2 x s16>) = G_SMAX %0, %1
148    S_ENDPGM 0, implicit %2
149
150...
151
152---
153name:            s_umin_v2s16
154legalized:       true
155regBankSelected: true
156tracksRegLiveness: true
157
158body: |
159  bb.0:
160    liveins: $sgpr0, $sgpr1
161
162    %0:sgpr(<2 x s16>) = COPY $sgpr0
163    %1:sgpr(<2 x s16>) = COPY $sgpr1
164    %2:sgpr(<2 x s16>) = G_UMIN %0, %1
165    S_ENDPGM 0, implicit %2
166
167...
168
169---
170name:            s_umax_v2s16
171legalized:       true
172regBankSelected: true
173tracksRegLiveness: true
174
175body: |
176  bb.0:
177    liveins: $sgpr0, $sgpr1
178
179    %0:sgpr(<2 x s16>) = COPY $sgpr0
180    %1:sgpr(<2 x s16>) = COPY $sgpr1
181    %2:sgpr(<2 x s16>) = G_UMAX %0, %1
182    S_ENDPGM 0, implicit %2
183
184...
185