aco: skip unnecessary compiler pass for the trap handler program
[mesa.git] / src / amd / compiler / tests / test_to_hw_instr.cpp
1 /*
2 * Copyright © 2020 Valve Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 *
23 */
24 #include "helpers.h"
25
26 using namespace aco;
27
28 BEGIN_TEST(to_hw_instr.swap_subdword)
29 PhysReg v0_lo{256};
30 PhysReg v0_hi{256};
31 PhysReg v0_b1{256};
32 PhysReg v0_b3{256};
33 PhysReg v1_lo{257};
34 PhysReg v1_hi{257};
35 PhysReg v1_b1{257};
36 PhysReg v1_b3{257};
37 PhysReg v2_lo{258};
38 PhysReg v3_lo{259};
39 v0_hi.reg_b += 2;
40 v1_hi.reg_b += 2;
41 v0_b1.reg_b += 1;
42 v1_b1.reg_b += 1;
43 v0_b3.reg_b += 3;
44 v1_b3.reg_b += 3;
45
46 for (unsigned i = GFX6; i <= GFX7; i++) {
47 if (!setup_cs(NULL, (chip_class)i))
48 continue;
49
50 //~gfx[67]>> p_unit_test 0
51 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
52 //~gfx[67]! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
53 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
54 bld.pseudo(aco_opcode::p_unit_test, Operand(0u));
55 bld.pseudo(aco_opcode::p_parallelcopy,
56 Definition(v0_lo, v2b), Definition(v1_lo, v2b),
57 Operand(v1_lo, v2b), Operand(v0_lo, v2b));
58
59 //~gfx[67]! p_unit_test 1
60 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
61 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xffff, %0:v[1][0:16]
62 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[1][0:16], %0:v[0][0:16]
63 //~gfx[67]! v1: %0:v[0] = v_mov_b32 %0:v[1]
64 bld.pseudo(aco_opcode::p_unit_test, Operand(1u));
65 bld.pseudo(aco_opcode::p_create_vector,
66 Definition(v0_lo, v1),
67 Operand(v1_lo, v2b), Operand(v0_lo, v2b));
68
69 //~gfx[67]! p_unit_test 2
70 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
71 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xffff, %0:v[1][0:16]
72 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[1][0:16], %0:v[0][0:16]
73 //~gfx[67]! v1: %0:v[0] = v_mov_b32 %0:v[1]
74 //~gfx[67]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[2][0:16]
75 bld.pseudo(aco_opcode::p_unit_test, Operand(2u));
76 bld.pseudo(aco_opcode::p_create_vector,
77 Definition(v0_lo, v6b), Operand(v1_lo, v2b),
78 Operand(v0_lo, v2b), Operand(v2_lo, v2b));
79
80 //~gfx[67]! p_unit_test 3
81 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
82 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xffff, %0:v[1][0:16]
83 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[1][0:16], %0:v[0][0:16]
84 //~gfx[67]! v1: %0:v[0] = v_mov_b32 %0:v[1]
85 //~gfx[67]! v1: %0:v[2] = v_and_b32 0xffff, %0:v[2][0:16]
86 //~gfx[67]! v1: %0:v[3] = v_and_b32 0xffff, %0:v[3][0:16]
87 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[2][0:16], %0:v[3][0:16]
88 bld.pseudo(aco_opcode::p_unit_test, Operand(3u));
89 bld.pseudo(aco_opcode::p_create_vector,
90 Definition(v0_lo, v2),
91 Operand(v1_lo, v2b), Operand(v0_lo, v2b),
92 Operand(v2_lo, v2b), Operand(v3_lo, v2b));
93
94 //~gfx[67]! p_unit_test 4
95 //~gfx[67]! v1: %0:v[2] = v_and_b32 0xffff, %0:v[2][0:16]
96 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xffff, %0:v[1][0:16]
97 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[1][0:16], %0:v[2][0:16]
98 //~gfx[67]! v1: %0:v[3] = v_and_b32 0xffff, %0:v[3][0:16]
99 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
100 //~gfx[67]! v1: %0:v[0] = v_cvt_pk_u16_u32 %0:v[0][0:16], %0:v[3][0:16]
101 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
102 //~gfx[67]! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
103 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
104 bld.pseudo(aco_opcode::p_unit_test, Operand(4u));
105 bld.pseudo(aco_opcode::p_create_vector,
106 Definition(v0_lo, v2),
107 Operand(v1_lo, v2b), Operand(v2_lo, v2b),
108 Operand(v0_lo, v2b), Operand(v3_lo, v2b));
109
110 //~gfx[67]! p_unit_test 5
111 //~gfx[67]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16]
112 //~gfx[67]! v2b: %0:v[0][0:16] = v_lshrrev_b32 16, %0:v[1][16:32]
113 bld.pseudo(aco_opcode::p_unit_test, Operand(5u));
114 bld.pseudo(aco_opcode::p_split_vector,
115 Definition(v1_lo, v2b), Definition(v0_lo, v2b),
116 Operand(v0_lo, v1));
117
118 //~gfx[67]! p_unit_test 6
119 //~gfx[67]! v2b: %0:v[2][0:16] = v_mov_b32 %0:v[1][0:16]
120 //~gfx[67]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16]
121 //~gfx[67]! v2b: %0:v[0][0:16] = v_lshrrev_b32 16, %0:v[1][16:32]
122 bld.pseudo(aco_opcode::p_unit_test, Operand(6u));
123 bld.pseudo(aco_opcode::p_split_vector,
124 Definition(v1_lo, v2b), Definition(v0_lo, v2b),
125 Definition(v2_lo, v2b), Operand(v0_lo, v6b));
126
127 //~gfx[67]! p_unit_test 7
128 //~gfx[67]! v2b: %0:v[2][0:16] = v_mov_b32 %0:v[1][0:16]
129 //~gfx[67]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16]
130 //~gfx[67]! v2b: %0:v[0][0:16] = v_lshrrev_b32 16, %0:v[1][16:32]
131 //~gfx[67]! v2b: %0:v[3][0:16] = v_lshrrev_b32 16, %0:v[2][16:32]
132 bld.pseudo(aco_opcode::p_unit_test, Operand(7u));
133 bld.pseudo(aco_opcode::p_split_vector,
134 Definition(v1_lo, v2b), Definition(v0_lo, v2b),
135 Definition(v2_lo, v2b), Definition(v3_lo, v2b),
136 Operand(v0_lo, v2));
137
138 //~gfx[67]! p_unit_test 8
139 //~gfx[67]! v2b: %0:v[2][0:16] = v_lshrrev_b32 16, %0:v[0][16:32]
140 //~gfx[67]! v2b: %0:v[3][0:16] = v_lshrrev_b32 16, %0:v[1][16:32]
141 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
142 //~gfx[67]! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
143 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
144 bld.pseudo(aco_opcode::p_unit_test, Operand(8u));
145 bld.pseudo(aco_opcode::p_split_vector,
146 Definition(v1_lo, v2b), Definition(v2_lo, v2b),
147 Definition(v0_lo, v2b), Definition(v3_lo, v2b),
148 Operand(v0_lo, v2));
149
150 //~gfx[67]! p_unit_test 9
151 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
152 //~gfx[67]! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
153 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
154 bld.pseudo(aco_opcode::p_unit_test, Operand(9u));
155 bld.pseudo(aco_opcode::p_parallelcopy,
156 Definition(v0_lo, v1b), Definition(v1_lo, v1b),
157 Operand(v1_lo, v1b), Operand(v0_lo, v1b));
158
159 //~gfx[67]! p_unit_test 10
160 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xff, %0:v[1][0:8]
161 //~gfx[67]! v1: %0:v[0] = v_lshlrev_b32 8, %0:v[0][0:8]
162 //~gfx[67]! v1: %0:v[1] = v_or_b32 %0:v[1][0:8], %0:v[0][0:8]
163 //~gfx[67]! v1: %0:v[0] = v_lshrrev_b32 8, %0:v[0][0:8]
164 //~gfx[67]! v2b: %0:v[0][0:16] = v_mov_b32 %0:v[1][0:16]
165 bld.pseudo(aco_opcode::p_unit_test, Operand(10u));
166 bld.pseudo(aco_opcode::p_create_vector,
167 Definition(v0_lo, v2b),
168 Operand(v1_lo, v1b), Operand(v0_lo, v1b));
169
170 //~gfx[67]! p_unit_test 11
171 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xff, %0:v[1][0:8]
172 //~gfx[67]! v1: %0:v[0] = v_lshlrev_b32 8, %0:v[0][0:8]
173 //~gfx[67]! v1: %0:v[1] = v_or_b32 %0:v[1][0:8], %0:v[0][0:8]
174 //~gfx[67]! v1: %0:v[0] = v_lshrrev_b32 8, %0:v[0][0:8]
175 //~gfx[67]! v2b: %0:v[0][0:16] = v_mov_b32 %0:v[1][0:16]
176 //~gfx[67]! v1: %0:v[2] = v_and_b32 0xffff, %0:v[2][0:8]
177 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
178 //~gfx[67]! v1: %0:v[0] = v_cvt_pk_u16_u32 %0:v[0][0:16], %0:v[2][0:8]
179 bld.pseudo(aco_opcode::p_unit_test, Operand(11u));
180 bld.pseudo(aco_opcode::p_create_vector,
181 Definition(v0_lo, v3b), Operand(v1_lo, v1b),
182 Operand(v0_lo, v1b), Operand(v2_lo, v1b));
183
184 //~gfx[67]! p_unit_test 12
185 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xff, %0:v[1][0:8]
186 //~gfx[67]! v1: %0:v[0] = v_lshlrev_b32 8, %0:v[0][0:8]
187 //~gfx[67]! v1: %0:v[1] = v_or_b32 %0:v[1][0:8], %0:v[0][0:8]
188 //~gfx[67]! v1: %0:v[0] = v_lshrrev_b32 8, %0:v[0][0:8]
189 //~gfx[67]! v2b: %0:v[0][0:16] = v_mov_b32 %0:v[1][0:16]
190 //~gfx[67]! v1: %0:v[2] = v_and_b32 0xffff, %0:v[2][0:8]
191 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
192 //~gfx[67]! v1: %0:v[0] = v_cvt_pk_u16_u32 %0:v[0][0:16], %0:v[2][0:8]
193 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffffff, %0:v[0][0:8]
194 //~gfx[67]! v1: %0:v[3] = v_lshlrev_b32 24, %0:v[3][0:8]
195 //~gfx[67]! v1: %0:v[0] = v_or_b32 %0:v[0][0:8], %0:v[3][0:8]
196 //~gfx[67]! v1: %0:v[3] = v_lshrrev_b32 24, %0:v[3][0:8]
197 bld.pseudo(aco_opcode::p_unit_test, Operand(12u));
198 bld.pseudo(aco_opcode::p_create_vector,
199 Definition(v0_lo, v1),
200 Operand(v1_lo, v1b), Operand(v0_lo, v1b),
201 Operand(v2_lo, v1b), Operand(v3_lo, v1b));
202
203 //~gfx[67]! p_unit_test 13
204 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xff, %0:v[0][0:8]
205 //~gfx[67]! v1: %0:v[0] = v_mul_u32_u24 0x101, %0:v[0][0:8]
206 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:8]
207 //~gfx[67]! v1: %0:v[0] = v_cvt_pk_u16_u32 %0:v[0][0:16], %0:v[0][0:8]
208 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffffff, %0:v[0][0:8]
209 //~gfx[67]! s1: %0:m0 = s_mov_b32 0x1000001
210 //~gfx[67]! v1: %0:v[0] = v_mul_lo_u32 %0:m0, %0:v[0][0:8]
211 bld.pseudo(aco_opcode::p_unit_test, Operand(13u));
212 Instruction* pseudo = bld.pseudo(aco_opcode::p_create_vector,
213 Definition(v0_lo, v1),
214 Operand(v0_lo, v1b), Operand(v0_lo, v1b),
215 Operand(v0_lo, v1b), Operand(v0_lo, v1b));
216 static_cast<Pseudo_instruction*>(pseudo)->scratch_sgpr = m0;
217
218 //~gfx[67]! p_unit_test 14
219 //~gfx[67]! v1b: %0:v[1][0:8] = v_mov_b32 %0:v[0][0:8]
220 //~gfx[67]! v1b: %0:v[0][0:8] = v_lshrrev_b32 8, %0:v[1][8:16]
221 bld.pseudo(aco_opcode::p_unit_test, Operand(14u));
222 bld.pseudo(aco_opcode::p_split_vector,
223 Definition(v1_lo, v1b), Definition(v0_lo, v1b),
224 Operand(v0_lo, v2b));
225
226 //~gfx[67]! p_unit_test 15
227 //~gfx[67]! v1b: %0:v[1][0:8] = v_mov_b32 %0:v[0][0:8]
228 //~gfx[67]! v1b: %0:v[0][0:8] = v_lshrrev_b32 8, %0:v[1][8:16]
229 //~gfx[67]! v1b: %0:v[2][0:8] = v_lshrrev_b32 16, %0:v[1][16:24]
230 //~gfx[67]! v1b: %0:v[3][0:8] = v_lshrrev_b32 24, %0:v[1][24:32]
231 bld.pseudo(aco_opcode::p_unit_test, Operand(15u));
232 bld.pseudo(aco_opcode::p_split_vector,
233 Definition(v1_lo, v1b), Definition(v0_lo, v1b),
234 Definition(v2_lo, v1b), Definition(v3_lo, v1b),
235 Operand(v0_lo, v1));
236
237 //~gfx[67]! s_endpgm
238
239 finish_to_hw_instr_test();
240 }
241
242 for (unsigned i = GFX8; i <= GFX9; i++) {
243 if (!setup_cs(NULL, (chip_class)i))
244 continue;
245
246 //~gfx[89]>> p_unit_test 0
247 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
248 //~gfx8! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
249 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
250 //~gfx9! v1: %0:v[0] = v_pk_add_u16 %0:v[0].yx, 0
251 bld.pseudo(aco_opcode::p_unit_test, Operand(0u));
252 bld.pseudo(aco_opcode::p_parallelcopy,
253 Definition(v0_lo, v2b), Definition(v0_hi, v2b),
254 Operand(v0_hi, v2b), Operand(v0_lo, v2b));
255
256 //~gfx[89]! p_unit_test 1
257 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
258 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
259 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
260 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
261 //~gfx[89]! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][16:32] dst_preserve
262 bld.pseudo(aco_opcode::p_unit_test, Operand(1u));
263 bld.pseudo(aco_opcode::p_parallelcopy,
264 Definition(v0_lo, v1), Definition(v1_lo, v2b),
265 Operand(v1_lo, v1), Operand(v0_lo, v2b));
266
267 //~gfx[89]! p_unit_test 2
268 //~gfx[89]! v2b: %0:v[0][16:32] = v_mov_b32 %0:v[1][16:32] dst_preserve
269 //~gfx[89]! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][0:16] dst_preserve
270 //~gfx[89]! v2b: %0:v[1][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
271 //~gfx[89]! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
272 //~gfx[89]! v2b: %0:v[1][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
273 bld.pseudo(aco_opcode::p_unit_test, Operand(2u));
274 bld.pseudo(aco_opcode::p_parallelcopy,
275 Definition(v0_lo, v1), Definition(v1_lo, v2b), Definition(v1_hi, v2b),
276 Operand(v1_lo, v1), Operand(v0_lo, v2b), Operand(v0_lo, v2b));
277
278 //~gfx[89]! p_unit_test 3
279 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
280 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
281 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
282 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
283 //~gfx[89]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16] dst_preserve
284 //~gfx[89]! v1b: %0:v[1][16:24] = v_mov_b32 %0:v[0][16:24] dst_preserve
285 bld.pseudo(aco_opcode::p_unit_test, Operand(3u));
286 bld.pseudo(aco_opcode::p_parallelcopy,
287 Definition(v0_lo, v1), Definition(v1_b3, v1b),
288 Operand(v1_lo, v1), Operand(v0_b3, v1b));
289
290 //~gfx[89]! p_unit_test 4
291 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
292 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
293 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
294 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
295 //~gfx[89]! v1b: %0:v[1][8:16] = v_mov_b32 %0:v[0][8:16] dst_preserve
296 //~gfx[89]! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][16:32] dst_preserve
297 bld.pseudo(aco_opcode::p_unit_test, Operand(4u));
298 bld.pseudo(aco_opcode::p_parallelcopy,
299 Definition(v0_lo, v1), Definition(v1_lo, v1b),
300 Operand(v1_lo, v1), Operand(v0_lo, v1b));
301
302 //~gfx[89]! p_unit_test 5
303 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
304 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[0], %0:v[1]
305 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
306 //~gfx9! v1: %0:v[1], v1: %0:v[0] = v_swap_b32 %0:v[0], %0:v[1]
307 //~gfx[89]! v1b: %0:v[0][8:16] = v_mov_b32 %0:v[1][8:16] dst_preserve
308 //~gfx[89]! v1b: %0:v[0][24:32] = v_mov_b32 %0:v[1][24:32] dst_preserve
309 bld.pseudo(aco_opcode::p_unit_test, Operand(5u));
310 bld.pseudo(aco_opcode::p_parallelcopy,
311 Definition(v0_lo, v1b), Definition(v0_hi, v1b), Definition(v1_lo, v1),
312 Operand(v1_lo, v1b), Operand(v1_hi, v1b), Operand(v0_lo, v1));
313
314 //~gfx[89]! p_unit_test 6
315 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
316 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
317 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
318 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
319 bld.pseudo(aco_opcode::p_unit_test, Operand(6u));
320 bld.pseudo(aco_opcode::p_parallelcopy,
321 Definition(v0_lo, v2b), Definition(v0_hi, v2b), Definition(v1_lo, v1),
322 Operand(v1_lo, v2b), Operand(v1_hi, v2b), Operand(v0_lo, v1));
323
324 //~gfx[89]! p_unit_test 7
325 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
326 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[0], %0:v[1]
327 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
328 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
329 //~gfx8! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
330 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
331 //~gfx9! v1: %0:v[1], v1: %0:v[0] = v_swap_b32 %0:v[0], %0:v[1]
332 //~gfx9! v1: %0:v[0] = v_pk_add_u16 %0:v[0].yx, 0
333 bld.pseudo(aco_opcode::p_unit_test, Operand(7u));
334 bld.pseudo(aco_opcode::p_parallelcopy,
335 Definition(v0_lo, v2b), Definition(v0_hi, v2b), Definition(v1_lo, v1),
336 Operand(v1_hi, v2b), Operand(v1_lo, v2b), Operand(v0_lo, v1));
337
338 //~gfx[89]! p_unit_test 8
339 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
340 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
341 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
342 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
343 //~gfx[89]! v1b: %0:v[1][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
344 //~gfx[89]! v1b: %0:v[0][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
345 //~gfx[89]! v1b: %0:v[1][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
346 bld.pseudo(aco_opcode::p_unit_test, Operand(8u));
347 bld.pseudo(aco_opcode::p_parallelcopy,
348 Definition(v0_lo, v3b), Definition(v1_lo, v3b),
349 Operand(v1_lo, v3b), Operand(v0_lo, v3b));
350
351 //~gfx[89]! p_unit_test 9
352 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
353 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
354 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
355 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
356 //~gfx[89]! v1b: %0:v[1][24:32] = v_mov_b32 %0:v[0][24:32] dst_preserve
357 bld.pseudo(aco_opcode::p_unit_test, Operand(9u));
358 bld.pseudo(aco_opcode::p_parallelcopy,
359 Definition(v0_lo, v3b), Definition(v1_lo, v3b), Definition(v0_b3, v1b),
360 Operand(v1_lo, v3b), Operand(v0_lo, v3b), Operand(v1_b3, v1b));
361
362 //~gfx[89]! p_unit_test 10
363 //~gfx[89]! v1b: %0:v[1][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
364 //~gfx[89]! v1b: %0:v[0][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
365 //~gfx[89]! v1b: %0:v[1][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
366 //~gfx[89]! v1b: %0:v[1][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
367 //~gfx[89]! v1b: %0:v[0][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
368 //~gfx[89]! v1b: %0:v[1][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
369 bld.pseudo(aco_opcode::p_unit_test, Operand(10u));
370 bld.pseudo(aco_opcode::p_parallelcopy,
371 Definition(v0_b1, v2b), Definition(v1_b1, v2b),
372 Operand(v1_b1, v2b), Operand(v0_b1, v2b));
373
374 //~gfx[89]! p_unit_test 11
375 //~gfx[89]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][16:32] dst_preserve
376 //~gfx[89]! v1: %0:v[0] = v_mov_b32 42
377 bld.pseudo(aco_opcode::p_unit_test, Operand(11u));
378 bld.pseudo(aco_opcode::p_parallelcopy,
379 Definition(v0_lo, v1), Definition(v1_lo, v2b),
380 Operand(42u), Operand(v0_hi, v2b));
381
382 //~gfx[89]! s_endpgm
383
384 finish_to_hw_instr_test();
385 }
386 END_TEST