blob: 9abdaca7ec11430c71935eed83a488eb4c6f43f6 [file] [log] [blame]
Matt Arsenault0084adc2018-04-30 19:08:16 +00001// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx800 -show-encoding %s 2>&1 | FileCheck %s
2// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s 2>&1 | FileCheck %s
3// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx906 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=GFX906
4
5//
6// Test unsupported GPUs.
7//
8
9// CHECK: error: instruction not supported on this GPU
10v_fmac_f32 v0, v1, v2
11// CHECK: error: instruction not supported on this GPU
12v_xnor_b32 v0, v1, v2
13// CHECK: error: instruction not supported on this GPU
14v_dot2_f32_f16 v0, v1, v2, v3
15// CHECK: error: instruction not supported on this GPU
16v_dot2_i32_i16 v0, v1, v2, v3
17// CHECK: error: instruction not supported on this GPU
18v_dot2_u32_u16 v0, v1, v2, v3
19// CHECK: error: instruction not supported on this GPU
20v_dot4_i32_i8 v0, v1, v2, v3
21// CHECK: error: instruction not supported on this GPU
22v_dot4_u32_u8 v0, v1, v2, v3
23// CHECK: error: instruction not supported on this GPU
24v_dot8_i32_i4 v0, v1, v2, v3
25// CHECK: error: instruction not supported on this GPU
26v_dot8_u32_u4 v0, v1, v2, v3
27
28//
29// Test invalid operands.
30//
31
32// GFX906: error: failed parsing operand
33v_dot2_f32_f16 v0, v1, v2, v3 op_sel
34// GFX906: error: failed parsing operand
35v_dot2_f32_f16 v0, v1, v2, v3 op_sel:
36// GFX906: error: failed parsing operand
37v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[
38// GFX906: error: failed parsing operand
39v_dot2_f32_f16 v0, v1, v2, v3 op_sel:]
40// GFX906: error: failed parsing operand
41v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[]
42// GFX906: error: failed parsing operand
43v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[,]
44// GFX906: error: failed parsing operand
45v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[,0]
46// GFX906: error: failed parsing operand
47v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,2]
48// GFX906: error: failed parsing operand
49v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[2,0]
50// GFX906: error: failed parsing operand
51v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[2,2]
52// GFX906: error: failed parsing operand
53v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,-1]
54// GFX906: error: failed parsing operand
55v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[-1,0]
56// GFX906: error: failed parsing operand
57v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[-1,-1]
58// GFX906: error: not a valid operand
59v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,0,0,0,0]
60// GFX906: error: failed parsing operand
61v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi
62// GFX906: error: failed parsing operand
63v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:
64// GFX906: error: failed parsing operand
65v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[
66// GFX906: error: failed parsing operand
67v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:]
68// GFX906: error: failed parsing operand
69v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[]
70// GFX906: error: failed parsing operand
71v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[,]
72// GFX906: error: failed parsing operand
73v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[,0]
74// GFX906: error: failed parsing operand
75v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,2]
76// GFX906: error: failed parsing operand
77v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[2,0]
78// GFX906: error: failed parsing operand
79v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[2,2]
80// GFX906: error: failed parsing operand
81v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,-1]
82// GFX906: error: failed parsing operand
83v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[-1,0]
84// GFX906: error: failed parsing operand
85v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[-1,-1]
86// GFX906: error: not a valid operand
87v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0]
88// GFX906: error: failed parsing operand
89v_dot2_f32_f16 v0, v1, v2, v3 neg_lo
90// GFX906: error: failed parsing operand
91v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:
92// GFX906: error: failed parsing operand
93v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[
94// GFX906: error: failed parsing operand
95v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:]
96// GFX906: error: failed parsing operand
97v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[]
98// GFX906: error: failed parsing operand
99v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[,]
100// GFX906: error: failed parsing operand
101v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[,0]
102// GFX906: error: failed parsing operand
103v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,2]
104// GFX906: error: failed parsing operand
105v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[2,0]
106// GFX906: error: failed parsing operand
107v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[2,2]
108// GFX906: error: failed parsing operand
109v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,-1]
110// GFX906: error: failed parsing operand
111v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[-1,0]
112// GFX906: error: failed parsing operand
113v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[-1,-1]
114// GFX906: error: not a valid operand
115v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,0,0,0,0]
116// GFX906: error: failed parsing operand
117v_dot2_f32_f16 v0, v1, v2, v3 neg_hi
118// GFX906: error: failed parsing operand
119v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:
120// GFX906: error: failed parsing operand
121v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[
122// GFX906: error: failed parsing operand
123v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:]
124// GFX906: error: failed parsing operand
125v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[]
126// GFX906: error: failed parsing operand
127v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[,]
128// GFX906: error: failed parsing operand
129v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[,0]
130// GFX906: error: failed parsing operand
131v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,2]
132// GFX906: error: failed parsing operand
133v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[2,0]
134// GFX906: error: failed parsing operand
135v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[2,2]
136// GFX906: error: failed parsing operand
137v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,-1]
138// GFX906: error: failed parsing operand
139v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[-1,0]
140// GFX906: error: failed parsing operand
141v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[-1,-1]
142// GFX906: error: not a valid operand
143v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,0,0,0,0]
144// GFX906: error: failed parsing operand
145v_dot2_i32_i16 v0, v1, v2, v3 op_sel
146// GFX906: error: failed parsing operand
147v_dot2_i32_i16 v0, v1, v2, v3 op_sel:
148// GFX906: error: failed parsing operand
149v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[
150// GFX906: error: failed parsing operand
151v_dot2_i32_i16 v0, v1, v2, v3 op_sel:]
152// GFX906: error: failed parsing operand
153v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[]
154// GFX906: error: failed parsing operand
155v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[,]
156// GFX906: error: failed parsing operand
157v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[,0]
158// GFX906: error: failed parsing operand
159v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,2]
160// GFX906: error: failed parsing operand
161v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[2,0]
162// GFX906: error: failed parsing operand
163v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[2,2]
164// GFX906: error: failed parsing operand
165v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,-1]
166// GFX906: error: failed parsing operand
167v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[-1,0]
168// GFX906: error: failed parsing operand
169v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[-1,-1]
170// GFX906: error: not a valid operand
171v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,0,0,0,0]
172// GFX906: error: failed parsing operand
173v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi
174// GFX906: error: failed parsing operand
175v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:
176// GFX906: error: failed parsing operand
177v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[
178// GFX906: error: failed parsing operand
179v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:]
180// GFX906: error: failed parsing operand
181v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[]
182// GFX906: error: failed parsing operand
183v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[,]
184// GFX906: error: failed parsing operand
185v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[,0]
186// GFX906: error: failed parsing operand
187v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,2]
188// GFX906: error: failed parsing operand
189v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[2,0]
190// GFX906: error: failed parsing operand
191v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[2,2]
192// GFX906: error: failed parsing operand
193v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,-1]
194// GFX906: error: failed parsing operand
195v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[-1,0]
196// GFX906: error: failed parsing operand
197v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[-1,-1]
198// GFX906: error: not a valid operand
199v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0]
200// FIXME-GFX906: error: invalid operand for instruction
201v_dot2_i32_i16 v0, v1, v2, v3 neg_lo:[0,0]
202// FIXME-GFX906: error: invalid operand for instruction
203v_dot2_i32_i16 v0, v1, v2, v3 neg_hi:[0,0]
204// GFX906: error: failed parsing operand
205v_dot2_u32_u16 v0, v1, v2, v3 op_sel
206// GFX906: error: failed parsing operand
207v_dot2_u32_u16 v0, v1, v2, v3 op_sel:
208// GFX906: error: failed parsing operand
209v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[
210// GFX906: error: failed parsing operand
211v_dot2_u32_u16 v0, v1, v2, v3 op_sel:]
212// GFX906: error: failed parsing operand
213v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[]
214// GFX906: error: failed parsing operand
215v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[,]
216// GFX906: error: failed parsing operand
217v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[,0]
218// GFX906: error: failed parsing operand
219v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,2]
220// GFX906: error: failed parsing operand
221v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[2,0]
222// GFX906: error: failed parsing operand
223v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[2,2]
224// GFX906: error: failed parsing operand
225v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,-1]
226// GFX906: error: failed parsing operand
227v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[-1,0]
228// GFX906: error: failed parsing operand
229v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[-1,-1]
230// GFX906: error: not a valid operand
231v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,0,0,0,0]
232// GFX906: error: failed parsing operand
233v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi
234// GFX906: error: failed parsing operand
235v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:
236// GFX906: error: failed parsing operand
237v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[
238// GFX906: error: failed parsing operand
239v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:]
240// GFX906: error: failed parsing operand
241v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[]
242// GFX906: error: failed parsing operand
243v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[,]
244// GFX906: error: failed parsing operand
245v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[,0]
246// GFX906: error: failed parsing operand
247v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,2]
248// GFX906: error: failed parsing operand
249v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[2,0]
250// GFX906: error: failed parsing operand
251v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[2,2]
252// GFX906: error: failed parsing operand
253v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,-1]
254// GFX906: error: failed parsing operand
255v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[-1,0]
256// GFX906: error: failed parsing operand
257v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[-1,-1]
258// GFX906: error: not a valid operand
259v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0]
260// FIXME-GFX906: error: invalid operand for instruction
261v_dot2_u32_u16 v0, v1, v2, v3 neg_lo:[0,0]
262// FIXME-GFX906: error: invalid operand for instruction
263v_dot2_u32_u16 v0, v1, v2, v3 neg_hi:[0,0]
264
265//
266// Test regular modifiers.
267//
268
269// GFX906: error: not a valid operand
270v_dot2_f32_f16 v0, |v1|, v2, v3
271// GFX906: error: not a valid operand
272v_dot2_f32_f16 v0, v1, |v2|, v3
273// GFX906: error: not a valid operand
274v_dot2_f32_f16 v0, v1, v2, |v3|
275// GFX906: error: not a valid operand
276v_dot2_f32_f16 v0, |v1|, |v2|, v3
277// GFX906: error: not a valid operand
278v_dot2_f32_f16 v0, |v1|, v2, |v3|
279// GFX906: error: not a valid operand
280v_dot2_f32_f16 v0, |v1|, |v2|, |v3|
281// GFX906: error: invalid operand for instruction
282v_dot2_f32_f16 v0, abs(v1), v2, v3
283// GFX906: error: invalid operand for instruction
284v_dot2_f32_f16 v0, v1, abs(v2), v3
285// GFX906: error: invalid operand for instruction
286v_dot2_f32_f16 v0, v1, v2, abs(v3)
287// GFX906: error: invalid operand for instruction
288v_dot2_f32_f16 v0, abs(v1), abs(v2), v3
289// GFX906: error: invalid operand for instruction
290v_dot2_f32_f16 v0, abs(v1), v2, abs(v3)
291// GFX906: error: invalid operand for instruction
292v_dot2_f32_f16 v0, abs(v1), abs(v2), abs(v3)
293// GFX906: error: invalid operand for instruction
294v_dot2_f32_f16 v0, -v1, v2, v3
295// GFX906: error: invalid operand for instruction
296v_dot2_f32_f16 v0, v1, -v2, v3
297// GFX906: error: invalid operand for instruction
298v_dot2_f32_f16 v0, v1, v2, -v3
299// GFX906: error: invalid operand for instruction
300v_dot2_f32_f16 v0, -v1, -v2, v3
301// GFX906: error: invalid operand for instruction
302v_dot2_f32_f16 v0, -v1, v2, -v3
303// GFX906: error: invalid operand for instruction
304v_dot2_f32_f16 v0, -v1, -v2, -v3
305// GFX906: error: not a valid operand
306v_dot2_i32_i16 v0, |v1|, v2, v3
307// GFX906: error: not a valid operand
308v_dot2_i32_i16 v0, v1, |v2|, v3
309// GFX906: error: not a valid operand
310v_dot2_i32_i16 v0, v1, v2, |v3|
311// GFX906: error: not a valid operand
312v_dot2_i32_i16 v0, |v1|, |v2|, v3
313// GFX906: error: not a valid operand
314v_dot2_i32_i16 v0, |v1|, v2, |v3|
315// GFX906: error: not a valid operand
316v_dot2_i32_i16 v0, |v1|, |v2|, |v3|
317// GFX906: error: invalid operand for instruction
318v_dot2_i32_i16 v0, abs(v1), v2, v3
319// GFX906: error: invalid operand for instruction
320v_dot2_i32_i16 v0, v1, abs(v2), v3
321// GFX906: error: invalid operand for instruction
322v_dot2_i32_i16 v0, v1, v2, abs(v3)
323// GFX906: error: invalid operand for instruction
324v_dot2_i32_i16 v0, abs(v1), abs(v2), v3
325// GFX906: error: invalid operand for instruction
326v_dot2_i32_i16 v0, abs(v1), v2, abs(v3)
327// GFX906: error: invalid operand for instruction
328v_dot2_i32_i16 v0, abs(v1), abs(v2), abs(v3)
329// GFX906: error: invalid operand for instruction
330v_dot2_i32_i16 v0, -v1, v2, v3
331// GFX906: error: invalid operand for instruction
332v_dot2_i32_i16 v0, v1, -v2, v3
333// GFX906: error: invalid operand for instruction
334v_dot2_i32_i16 v0, v1, v2, -v3
335// GFX906: error: invalid operand for instruction
336v_dot2_i32_i16 v0, -v1, -v2, v3
337// GFX906: error: invalid operand for instruction
338v_dot2_i32_i16 v0, -v1, v2, -v3
339// GFX906: error: invalid operand for instruction
340v_dot2_i32_i16 v0, -v1, -v2, -v3
341// GFX906: error: not a valid operand
342v_dot2_u32_u16 v0, |v1|, v2, v3
343// GFX906: error: not a valid operand
344v_dot2_u32_u16 v0, v1, |v2|, v3
345// GFX906: error: not a valid operand
346v_dot2_u32_u16 v0, v1, v2, |v3|
347// GFX906: error: not a valid operand
348v_dot2_u32_u16 v0, |v1|, |v2|, v3
349// GFX906: error: not a valid operand
350v_dot2_u32_u16 v0, |v1|, v2, |v3|
351// GFX906: error: not a valid operand
352v_dot2_u32_u16 v0, |v1|, |v2|, |v3|
353// GFX906: error: invalid operand for instruction
354v_dot2_u32_u16 v0, abs(v1), v2, v3
355// GFX906: error: invalid operand for instruction
356v_dot2_u32_u16 v0, v1, abs(v2), v3
357// GFX906: error: invalid operand for instruction
358v_dot2_u32_u16 v0, v1, v2, abs(v3)
359// GFX906: error: invalid operand for instruction
360v_dot2_u32_u16 v0, abs(v1), abs(v2), v3
361// GFX906: error: invalid operand for instruction
362v_dot2_u32_u16 v0, abs(v1), v2, abs(v3)
363// GFX906: error: invalid operand for instruction
364v_dot2_u32_u16 v0, abs(v1), abs(v2), abs(v3)
365// GFX906: error: invalid operand for instruction
366v_dot2_u32_u16 v0, -v1, v2, v3
367// GFX906: error: invalid operand for instruction
368v_dot2_u32_u16 v0, v1, -v2, v3
369// GFX906: error: invalid operand for instruction
370v_dot2_u32_u16 v0, v1, v2, -v3
371// GFX906: error: invalid operand for instruction
372v_dot2_u32_u16 v0, -v1, -v2, v3
373// GFX906: error: invalid operand for instruction
374v_dot2_u32_u16 v0, -v1, v2, -v3
375// GFX906: error: invalid operand for instruction
376v_dot2_u32_u16 v0, -v1, -v2, -v3
377
378//
379// Test constant bus restrictions.
380//
381
382// GFX906: error: invalid operand (violates constant bus restrictions)
383v_dot2_f32_f16 v255, s1, s2, s3
384// GFX906: error: invalid operand (violates constant bus restrictions)
385v_dot2_i32_i16 v255, s1, s2, s3
386// GFX906: error: invalid operand (violates constant bus restrictions)
387v_dot2_u32_u16 v255, s1, s2, s3