xref: /llvm-project/llvm/test/MC/AMDGPU/gfx11_asm_vopd_err.s (revision 252c42354eca54274ed7b10c32c73c6937478e8b)
1// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1100 %s 2>&1 | FileCheck %s -check-prefix=GFX11 --implicit-check-not=error: --strict-whitespace
2
3//===----------------------------------------------------------------------===//
4// A VOPD instruction can use only one literal.
5//===----------------------------------------------------------------------===//
6
7v_dual_mul_f32      v11, 0x24681357, v2          ::  v_dual_mul_f32      v10, 0xbabe, v5
8// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
9// GFX11-NEXT:{{^}}v_dual_mul_f32      v11, 0x24681357, v2          ::  v_dual_mul_f32      v10, 0xbabe, v5
10// GFX11-NEXT:{{^}}                                                                              ^
11
12//===----------------------------------------------------------------------===//
13// When 2 different literals are specified, show the location
14// of the last literal which is not a KImm, if any.
15//===----------------------------------------------------------------------===//
16
17v_dual_fmamk_f32    v122, v74, 0xa0172923, v161  ::  v_dual_lshlrev_b32  v247, 0xbabe, v99
18// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
19// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, v74, 0xa0172923, v161  ::  v_dual_lshlrev_b32  v247, 0xbabe, v99
20// GFX11-NEXT:{{^}}                                                                               ^
21
22v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, v3, v1, 0xbabe
23// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
24// GFX11-NEXT:{{^}}v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, v3, v1, 0xbabe
25// GFX11-NEXT:{{^}}                        ^
26
27v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, 0xbabe, v1, 0xbabe
28// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
29// GFX11-NEXT:{{^}}v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, 0xbabe, v1, 0xbabe
30// GFX11-NEXT:{{^}}                                                                              ^
31
32v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0x1234, v162
33// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
34// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0x1234, v162
35// GFX11-NEXT:{{^}}                                                                                   ^
36
37v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, s0, 0x1234, v162
38// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
39// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, s0, 0x1234, v162
40// GFX11-NEXT:{{^}}                          ^
41
42//===----------------------------------------------------------------------===//
43// Check that KImm operands are counted as literals
44// even if they look like inline constants.
45//===----------------------------------------------------------------------===//
46
47v_dual_fmamk_f32    v122, v74, 0, v161           ::  v_dual_lshlrev_b32  v247, 0xbabe, v99
48// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
49// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, v74, 0, v161           ::  v_dual_lshlrev_b32  v247, 0xbabe, v99
50// GFX11-NEXT:{{^}}                                                                               ^
51
52v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, v3, v1, 1.0
53// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
54// GFX11-NEXT:{{^}}v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, v3, v1, 1.0
55// GFX11-NEXT:{{^}}                        ^
56
57v_dual_fmamk_f32    v122, 0xdeadbeef, 2, v161    ::  v_dual_fmamk_f32  v123, s0, 1, v162
58// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
59// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 2, v161    ::  v_dual_fmamk_f32  v123, s0, 1, v162
60// GFX11-NEXT:{{^}}                          ^
61
62v_dual_fmamk_f32    v122, v1, 2, v161            ::  v_dual_fmamk_f32  v123, s0, 1, v162
63// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
64// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, v1, 2, v161            ::  v_dual_fmamk_f32  v123, s0, 1, v162
65// GFX11-NEXT:{{^}}                                                                                 ^
66
67//===----------------------------------------------------------------------===//
68// Check that assembler detects a different literal regardless of its location.
69//===----------------------------------------------------------------------===//
70
71v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0x1234, v162
72// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
73// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0x1234, v162
74// GFX11-NEXT:{{^}}                                                                                   ^
75
76v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0x1234, 0xdeadbeef, v162
77// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
78// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0x1234, 0xdeadbeef, v162
79// GFX11-NEXT:{{^}}                                                                                   ^
80
81v_dual_fmamk_f32    v122, 0xdeadbeef, 0x1234, v161     ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0xdeadbeef, v162
82// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
83// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0x1234, v161     ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0xdeadbeef, v162
84// GFX11-NEXT:{{^}}                                                                                   ^
85
86v_dual_fmamk_f32    v122, 0x1234, 0xdeadbeef, v161     ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0xdeadbeef, v162
87// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
88// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, 0x1234, 0xdeadbeef, v161     ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0xdeadbeef, v162
89// GFX11-NEXT:{{^}}                                                                                   ^
90
91//===----------------------------------------------------------------------===//
92// When 2 different literals are specified and all literals are KImm,
93// show the location of the last KImm literal.
94//===----------------------------------------------------------------------===//
95
96v_dual_fmamk_f32    v122, s0, 0xdeadbeef, v161   ::  v_dual_fmamk_f32  v123, s0, 0x1234, v162
97// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
98// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, s0, 0xdeadbeef, v161   ::  v_dual_fmamk_f32  v123, s0, 0x1234, v162
99// GFX11-NEXT:{{^}}                                                                                 ^
100
101//===----------------------------------------------------------------------===//
102// A VOPD instruction cannot use more than 2 scalar operands.
103//===----------------------------------------------------------------------===//
104
105// 2 different SGPRs + LITERAL
106
107v_dual_fmaak_f32    v122, s74, v161, 2.741       ::  v_dual_and_b32       v247, s75, v98
108// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
109// GFX11-NEXT:{{^}}v_dual_fmaak_f32    v122, s74, v161, 2.741       ::  v_dual_and_b32       v247, s75, v98
110// GFX11-NEXT:{{^}}                                                                                ^
111
112v_dual_mov_b32      v247, s73                    ::  v_dual_fmaak_f32     v122, s74, v161, 2.741
113// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
114// GFX11-NEXT:{{^}}v_dual_mov_b32      v247, s73                    ::  v_dual_fmaak_f32     v122, s74, v161, 2.741
115// GFX11-NEXT:{{^}}                                                                                ^
116
117v_dual_fmamk_f32    v122, s0, 0xbabe, v161       ::  v_dual_fmamk_f32     v123, s1, 0xbabe, v162
118// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
119// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v122, s0, 0xbabe, v161       ::  v_dual_fmamk_f32     v123, s1, 0xbabe, v162
120// GFX11-NEXT:{{^}}                                                                                ^
121
122// 2 different SGPRs + VCC
123
124v_dual_add_f32      v255, s1, v2                 ::  v_dual_cndmask_b32   v6, s2, v3
125// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
126// GFX11-NEXT:{{^}}v_dual_add_f32      v255, s1, v2                 ::  v_dual_cndmask_b32   v6, s2, v3
127// GFX11-NEXT:{{^}}                                                                              ^
128
129v_dual_cndmask_b32   v6, s1, v3                  ::  v_dual_add_f32       v255, s2, v2
130// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
131// GFX11-NEXT:{{^}}v_dual_cndmask_b32   v6, s1, v3                  ::  v_dual_add_f32       v255, s2, v2
132// GFX11-NEXT:{{^}}                                                                                ^
133
134v_dual_cndmask_b32  v255, s1, v2                 ::  v_dual_cndmask_b32   v6, s2, v3
135// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
136// GFX11-NEXT:{{^}}v_dual_cndmask_b32  v255, s1, v2                 ::  v_dual_cndmask_b32   v6, s2, v3
137// GFX11-NEXT:{{^}}                                                                              ^
138
139// SGPR + LITERAL + VCC
140
141v_dual_cndmask_b32  v255, s1, v2                 ::  v_dual_mov_b32       v254, 0xbabe
142// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
143// GFX11-NEXT:{{^}}v_dual_cndmask_b32  v255, s1, v2                 ::  v_dual_mov_b32       v254, 0xbabe
144// GFX11-NEXT:{{^}}                                                                                ^
145
146v_dual_cndmask_b32  v255, 0xbabe, v2             ::  v_dual_mov_b32       v254, s1
147// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
148// GFX11-NEXT:{{^}}v_dual_cndmask_b32  v255, 0xbabe, v2             ::  v_dual_mov_b32       v254, s1
149// GFX11-NEXT:{{^}}                                                                                ^
150
151v_dual_cndmask_b32  v255, s3, v2                 ::  v_dual_fmamk_f32     v254, v1, 0xbabe, v162
152// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
153// GFX11-NEXT:{{^}}v_dual_cndmask_b32  v255, s3, v2                 ::  v_dual_fmamk_f32     v254, v1, 0xbabe, v162
154// GFX11-NEXT:{{^}}                          ^
155
156v_dual_cndmask_b32  v255, v1, v2                 ::  v_dual_fmamk_f32     v254, s3, 0xbabe, v162
157// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
158// GFX11-NEXT:{{^}}v_dual_cndmask_b32  v255, v1, v2                 ::  v_dual_fmamk_f32     v254, s3, 0xbabe, v162
159// GFX11-NEXT:{{^}}                                                                                ^
160
161// SGPR + VCC + VCC_LO
162// This is a special case because implicit VCC operand has 64 bit size.
163// SP3 does not accept this instruction as well.
164
165v_dual_add_f32      v255, vcc_lo, v2             ::  v_dual_cndmask_b32   v6, s1, v3
166// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
167// GFX11-NEXT:{{^}}v_dual_add_f32      v255, vcc_lo, v2             ::  v_dual_cndmask_b32   v6, s1, v3
168// GFX11-NEXT:{{^}}                                                                              ^
169
170//===----------------------------------------------------------------------===//
171// One dst register must be even and the other odd.
172//===----------------------------------------------------------------------===//
173
174v_dual_add_f32      v0, v4, v2                   ::  v_dual_add_f32       v2, v1, v3
175// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: one dst register must be even and the other odd
176// GFX11-NEXT:{{^}}v_dual_add_f32      v0, v4, v2                   ::  v_dual_add_f32       v2, v1, v3
177// GFX11-NEXT:{{^}}                                                                          ^
178
179v_dual_mov_b32      v1, v4                       ::  v_dual_add_f32       v5, v1, v3
180// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: one dst register must be even and the other odd
181// GFX11-NEXT:{{^}}v_dual_mov_b32      v1, v4                       ::  v_dual_add_f32       v5, v1, v3
182// GFX11-NEXT:{{^}}                                                                          ^
183
184v_dual_cndmask_b32  v2, v4, v5                   ::  v_dual_add_f32       v8, v5, v6
185// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: one dst register must be even and the other odd
186// GFX11-NEXT:{{^}}v_dual_cndmask_b32  v2, v4, v5                   ::  v_dual_add_f32       v8, v5, v6
187// GFX11-NEXT:{{^}}                                                                          ^
188
189v_dual_fmac_f32     v3, v4, v5                   ::  v_dual_add_f32       v9, v5, v6
190// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: one dst register must be even and the other odd
191// GFX11-NEXT:{{^}}v_dual_fmac_f32     v3, v4, v5                   ::  v_dual_add_f32       v9, v5, v6
192// GFX11-NEXT:{{^}}                                                                          ^
193
194v_dual_fmaak_f32    v4, v4, v5, 0xaf123456       ::  v_dual_add_f32       v0, v5, v6
195// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: one dst register must be even and the other odd
196// GFX11-NEXT:{{^}}v_dual_fmaak_f32    v4, v4, v5, 0xaf123456       ::  v_dual_add_f32       v0, v5, v6
197// GFX11-NEXT:{{^}}                                                                          ^
198
199v_dual_fmamk_f32    v5, v4, 0xaf123456, v6       ::  v_dual_add_f32       v1, v5, v6
200// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: one dst register must be even and the other odd
201// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v5, v4, 0xaf123456, v6       ::  v_dual_add_f32       v1, v5, v6
202// GFX11-NEXT:{{^}}                                                                          ^
203
204//===----------------------------------------------------------------------===//
205// Src0 operands must use different VGPR banks.
206//===----------------------------------------------------------------------===//
207
208v_dual_add_f32      v1, v1, v5                   ::  v_dual_mov_b32       v2, v1
209// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src0 operands must use different VGPR banks
210// GFX11-NEXT:{{^}}v_dual_add_f32      v1, v1, v5                   ::  v_dual_mov_b32       v2, v1
211// GFX11-NEXT:{{^}}                                                                              ^
212
213v_dual_mov_b32      v1, v2                       ::  v_dual_add_f32       v2, v6, v6
214// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src0 operands must use different VGPR banks
215// GFX11-NEXT:{{^}}v_dual_mov_b32      v1, v2                       ::  v_dual_add_f32       v2, v6, v6
216// GFX11-NEXT:{{^}}                                                                              ^
217
218v_dual_cndmask_b32  v1, v3, v5                   ::  v_dual_add_f32       v2, v11, v6
219// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src0 operands must use different VGPR banks
220// GFX11-NEXT:{{^}}v_dual_cndmask_b32  v1, v3, v5                   ::  v_dual_add_f32       v2, v11, v6
221// GFX11-NEXT:{{^}}                                                                              ^
222
223v_dual_fmac_f32     v1, v4, v5                   ::  v_dual_add_f32       v2, v44, v6
224// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src0 operands must use different VGPR banks
225// GFX11-NEXT:{{^}}v_dual_fmac_f32     v1, v4, v5                   ::  v_dual_add_f32       v2, v44, v6
226// GFX11-NEXT:{{^}}                                                                              ^
227
228v_dual_fmaak_f32    v1, v5, v5, 0xaf123456       ::  v_dual_add_f32       v2, v25, v6
229// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src0 operands must use different VGPR banks
230// GFX11-NEXT:{{^}}v_dual_fmaak_f32    v1, v5, v5, 0xaf123456       ::  v_dual_add_f32       v2, v25, v6
231// GFX11-NEXT:{{^}}                                                                              ^
232
233v_dual_fmamk_f32    v1, v6, 0xaf123456, v6       ::  v_dual_add_f32       v2, v2, v6
234// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src0 operands must use different VGPR banks
235// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v1, v6, 0xaf123456, v6       ::  v_dual_add_f32       v2, v2, v6
236// GFX11-NEXT:{{^}}                                                                              ^
237
238//===----------------------------------------------------------------------===//
239// Src1 operands must use different VGPR banks.
240//===----------------------------------------------------------------------===//
241
242v_dual_add_f32      v1, v4, v0                   ::  v_dual_add_f32       v2, v5, v4
243// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src1 operands must use different VGPR banks
244// GFX11-NEXT:{{^}}v_dual_add_f32      v1, v4, v0                   ::  v_dual_add_f32       v2, v5, v4
245// GFX11-NEXT:{{^}}                                                                                  ^
246
247v_dual_cndmask_b32  v1, v4, v1                   ::  v_dual_add_f32       v2, v5, v9
248// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src1 operands must use different VGPR banks
249// GFX11-NEXT:{{^}}v_dual_cndmask_b32  v1, v4, v1                   ::  v_dual_add_f32       v2, v5, v9
250// GFX11-NEXT:{{^}}                                                                                  ^
251
252v_dual_fmac_f32     v1, v4, v2                   ::  v_dual_add_f32       v2, v5, v14
253// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src1 operands must use different VGPR banks
254// GFX11-NEXT:{{^}}v_dual_fmac_f32     v1, v4, v2                   ::  v_dual_add_f32       v2, v5, v14
255// GFX11-NEXT:{{^}}                                                                                  ^
256
257v_dual_fmaak_f32    v1, v4, v3, 0xaf123456       ::  v_dual_add_f32       v2, v5, v23
258// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src1 operands must use different VGPR banks
259// GFX11-NEXT:{{^}}v_dual_fmaak_f32    v1, v4, v3, 0xaf123456       ::  v_dual_add_f32       v2, v5, v23
260// GFX11-NEXT:{{^}}                                                                                  ^
261
262v_dual_add_f32      v2, v4, v4                   ::  v_dual_cndmask_b32   v1, v5, v0
263// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src1 operands must use different VGPR banks
264// GFX11-NEXT:{{^}}v_dual_add_f32      v2, v4, v4                   ::  v_dual_cndmask_b32   v1, v5, v0
265// GFX11-NEXT:{{^}}                                                                                  ^
266
267v_dual_add_f32      v2, v4, v5                   ::  v_dual_fmac_f32      v1, v5, v1
268// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src1 operands must use different VGPR banks
269// GFX11-NEXT:{{^}}v_dual_add_f32      v2, v4, v5                   ::  v_dual_fmac_f32      v1, v5, v1
270// GFX11-NEXT:{{^}}                                                                                  ^
271
272v_dual_fmaak_f32    v1, v4, v3, 0xaf123456       ::  v_dual_fmaak_f32     v2, v5, v23, 0xaf123456
273// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src1 operands must use different VGPR banks
274// GFX11-NEXT:{{^}}v_dual_fmaak_f32    v1, v4, v3, 0xaf123456       ::  v_dual_fmaak_f32     v2, v5, v23, 0xaf123456
275// GFX11-NEXT:{{^}}                                                                                  ^
276
277//===----------------------------------------------------------------------===//
278// Src2 operands must use different VGPR banks.
279//===----------------------------------------------------------------------===//
280
281v_dual_fmamk_f32    v6, v1, 0xaf123456, v3       :: v_dual_fmamk_f32      v5, v2, 0xaf123456, v5
282// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src2 operands must use different VGPR banks
283// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v6, v1, 0xaf123456, v3       :: v_dual_fmamk_f32      v5, v2, 0xaf123456, v5
284// GFX11-NEXT:{{^}}                                                                                              ^
285
286v_dual_fmac_f32     v7, v1, v2                   :: v_dual_fmamk_f32      v6, v2, 0xaf123456, v3
287// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src2 operands must use different VGPR banks
288// GFX11-NEXT:{{^}}v_dual_fmac_f32     v7, v1, v2                   :: v_dual_fmamk_f32      v6, v2, 0xaf123456, v3
289// GFX11-NEXT:{{^}}                                                                                              ^
290
291v_dual_fmamk_f32    v6, v1, 0xaf123456, v3       :: v_dual_fmac_f32       v5, v2, v3
292// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: src2 operands must use different VGPR banks
293// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v6, v1, 0xaf123456, v3       :: v_dual_fmac_f32       v5, v2, v3
294// GFX11-NEXT:{{^}}                                        ^
295
296//===----------------------------------------------------------------------===//
297// Check invalid VOPD syntax.
298//===----------------------------------------------------------------------===//
299
300v_dual_fmamk_f32    v6, v1, 0xaf123456, v2       : : v_dual_fmac_f32       v5, v2, v3
301// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: unknown token in expression
302// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v6, v1, 0xaf123456, v2       : : v_dual_fmac_f32       v5, v2, v3
303// GFX11-NEXT:{{^}}                                                 ^
304
305v_dual_fmamk_f32    v6, v1, 0xaf123456, v3
306// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
307// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v6, v1, 0xaf123456, v3
308// GFX11-NEXT:{{^}}^
309
310v_dual_fmamk_f32    v6, v1, 0xaf123456, v2       :: v_dual_fmac_f32
311// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
312// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v6, v1, 0xaf123456, v2       :: v_dual_fmac_f32
313// GFX11-NEXT:{{^}}^
314
315v_dual_add_f32      v255, v4 :: v_add_f32 v6, v1, v3
316// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
317// GFX11-NEXT:{{^}}v_dual_add_f32      v255, v4 :: v_add_f32 v6, v1, v3
318// GFX11-NEXT:{{^}}                             ^
319
320v_dual_fmamk_f32    v6, v1, 0xaf123456, v3 ::
321// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: expected a VOPDY instruction after ::
322// GFX11-NEXT:{{^}}v_dual_fmamk_f32    v6, v1, 0xaf123456, v3 ::
323// GFX11-NEXT:{{^}}                                             ^
324
325v_add_f32           v6, v1, v3 ::
326// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: expected a VOPDY instruction after ::
327// GFX11-NEXT:{{^}}v_add_f32           v6, v1, v3 ::
328// GFX11-NEXT:{{^}}                                 ^
329
330v_dual_add_f32      v255::
331// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: expected a VOPDY instruction after ::
332// GFX11-NEXT:{{^}}v_dual_add_f32      v255::
333// GFX11-NEXT:{{^}}                          ^
334
335v_dual_add_f32      v255, v4, v2 :: v_add_f32 v6, v1, v3
336// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid VOPDY instruction
337// GFX11-NEXT:{{^}}v_dual_add_f32      v255, v4, v2 :: v_add_f32 v6, v1, v3
338// GFX11-NEXT:{{^}}                                    ^
339