xref: /llvm-project/llvm/test/MC/AMDGPU/gfx12_asm_vopd_errs.s (revision a888f5e4d7d979617a47262a875f5433ee161074)
1// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1200 %s 2>&1 | FileCheck %s -check-prefix=GFX12 --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// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
9// GFX12-NEXT:{{^}}v_dual_mul_f32      v11, 0x24681357, v2          ::  v_dual_mul_f32      v10, 0xbabe, v5
10// GFX12-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// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
19// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, v74, 0xa0172923, v161  ::  v_dual_lshlrev_b32  v247, 0xbabe, v99
20// GFX12-NEXT:{{^}}                                                                               ^
21
22v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, v3, v1, 0xbabe
23// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
24// GFX12-NEXT:{{^}}v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, v3, v1, 0xbabe
25// GFX12-NEXT:{{^}}                        ^
26
27v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, 0xbabe, v1, 0xbabe
28// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
29// GFX12-NEXT:{{^}}v_dual_add_f32      v5, 0xaf123456, v2           ::  v_dual_fmaak_f32     v6, 0xbabe, v1, 0xbabe
30// GFX12-NEXT:{{^}}                                                                              ^
31
32v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0x1234, v162
33// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
34// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0x1234, v162
35// GFX12-NEXT:{{^}}                                                                                   ^
36
37v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, s0, 0x1234, v162
38// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
39// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, s0, 0x1234, v162
40// GFX12-NEXT:{{^}}                          ^
41
42//===----------------------------------------------------------------------===//
43// Check that assembler detects a different literal regardless of its location.
44//===----------------------------------------------------------------------===//
45
46v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0x1234, v162
47// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
48// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0x1234, v162
49// GFX12-NEXT:{{^}}                                                                                   ^
50
51v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0x1234, 0xdeadbeef, v162
52// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
53// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0xdeadbeef, v161 ::  v_dual_fmamk_f32  v123, 0x1234, 0xdeadbeef, v162
54// GFX12-NEXT:{{^}}                                                                                   ^
55
56v_dual_fmamk_f32    v122, 0xdeadbeef, 0x1234, v161     ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0xdeadbeef, v162
57// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
58// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, 0xdeadbeef, 0x1234, v161     ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0xdeadbeef, v162
59// GFX12-NEXT:{{^}}                                                                                   ^
60
61v_dual_fmamk_f32    v122, 0x1234, 0xdeadbeef, v161     ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0xdeadbeef, v162
62// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
63// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, 0x1234, 0xdeadbeef, v161     ::  v_dual_fmamk_f32  v123, 0xdeadbeef, 0xdeadbeef, v162
64// GFX12-NEXT:{{^}}                                                                                   ^
65
66//===----------------------------------------------------------------------===//
67// When 2 different literals are specified and all literals are KImm,
68// show the location of the last KImm literal.
69//===----------------------------------------------------------------------===//
70
71v_dual_fmamk_f32    v122, s0, 0xdeadbeef, v161   ::  v_dual_fmamk_f32  v123, s0, 0x1234, v162
72// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: only one unique literal operand is allowed
73// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, s0, 0xdeadbeef, v161   ::  v_dual_fmamk_f32  v123, s0, 0x1234, v162
74// GFX12-NEXT:{{^}}                                                                                 ^
75
76//===----------------------------------------------------------------------===//
77// A VOPD instruction cannot use more than 2 scalar operands
78//===----------------------------------------------------------------------===//
79
80// 2 different SGPRs + LITERAL
81
82v_dual_fmaak_f32    v122, s74, v161, 2.741       ::  v_dual_and_b32       v247, s75, v98
83// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
84// GFX12-NEXT:{{^}}v_dual_fmaak_f32    v122, s74, v161, 2.741       ::  v_dual_and_b32       v247, s75, v98
85// GFX12-NEXT:{{^}}                                                                                ^
86
87v_dual_mov_b32      v247, s73                    ::  v_dual_fmaak_f32     v122, s74, v161, 2.741
88// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
89// GFX12-NEXT:{{^}}v_dual_mov_b32      v247, s73                    ::  v_dual_fmaak_f32     v122, s74, v161, 2.741
90// GFX12-NEXT:{{^}}                                                                                ^
91
92v_dual_fmamk_f32    v122, s0, 0xbabe, v161       ::  v_dual_fmamk_f32     v123, s1, 0xbabe, v162
93// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
94// GFX12-NEXT:{{^}}v_dual_fmamk_f32    v122, s0, 0xbabe, v161       ::  v_dual_fmamk_f32     v123, s1, 0xbabe, v162
95// GFX12-NEXT:{{^}}                                                                                ^
96
97// 2 different SGPRs + VCC
98
99v_dual_add_f32      v255, s1, v2                 ::  v_dual_cndmask_b32   v6, s2, v3
100// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
101// GFX12-NEXT:{{^}}v_dual_add_f32      v255, s1, v2                 ::  v_dual_cndmask_b32   v6, s2, v3
102// GFX12-NEXT:{{^}}                                                                              ^
103
104v_dual_cndmask_b32   v6, s1, v3                  ::  v_dual_add_f32       v255, s2, v2
105// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
106// GFX12-NEXT:{{^}}v_dual_cndmask_b32   v6, s1, v3                  ::  v_dual_add_f32       v255, s2, v2
107// GFX12-NEXT:{{^}}                                                                                ^
108
109v_dual_cndmask_b32  v255, s1, v2                 ::  v_dual_cndmask_b32   v6, s2, v3
110// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
111// GFX12-NEXT:{{^}}v_dual_cndmask_b32  v255, s1, v2                 ::  v_dual_cndmask_b32   v6, s2, v3
112// GFX12-NEXT:{{^}}                                                                              ^
113
114// SGPR + LITERAL + VCC
115
116v_dual_cndmask_b32  v255, s1, v2                 ::  v_dual_mov_b32       v254, 0xbabe
117// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
118// GFX12-NEXT:{{^}}v_dual_cndmask_b32  v255, s1, v2                 ::  v_dual_mov_b32       v254, 0xbabe
119// GFX12-NEXT:{{^}}                                                                                ^
120
121v_dual_cndmask_b32  v255, 0xbabe, v2             ::  v_dual_mov_b32       v254, s1
122// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
123// GFX12-NEXT:{{^}}v_dual_cndmask_b32  v255, 0xbabe, v2             ::  v_dual_mov_b32       v254, s1
124// GFX12-NEXT:{{^}}                                                                                ^
125
126v_dual_cndmask_b32  v255, s3, v2                 ::  v_dual_fmamk_f32     v254, v1, 0xbabe, v162
127// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
128// GFX12-NEXT:{{^}}v_dual_cndmask_b32  v255, s3, v2                 ::  v_dual_fmamk_f32     v254, v1, 0xbabe, v162
129// GFX12-NEXT:{{^}}                          ^
130
131v_dual_cndmask_b32  v255, v1, v2                 ::  v_dual_fmamk_f32     v254, s3, 0xbabe, v162
132// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
133// GFX12-NEXT:{{^}}v_dual_cndmask_b32  v255, v1, v2                 ::  v_dual_fmamk_f32     v254, s3, 0xbabe, v162
134// GFX12-NEXT:{{^}}                                                                                ^
135
136// SGPR + VCC + VCC_LO
137// This is a special case because implicit VCC operand has 64 bit size.
138// SP3 does not accept this instruction as well.
139
140v_dual_add_f32      v255, vcc_lo, v2             ::  v_dual_cndmask_b32   v6, s1, v3
141// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand (violates constant bus restrictions)
142// GFX12-NEXT:{{^}}v_dual_add_f32      v255, vcc_lo, v2             ::  v_dual_cndmask_b32   v6, s1, v3
143// GFX12-NEXT:{{^}}                                                                              ^
144