[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / xor.ll
blob8c9dac781d5da16ea1b51708880ae9cfa8a9ca44
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=verde < %s | FileCheck -enable-var-scope -check-prefixes=SI,GCN %s
3 ; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -enable-var-scope -check-prefixes=VI,GCN %s
5 define amdgpu_kernel void @xor_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {
6 ; SI-LABEL: xor_v2i32:
7 ; SI:       ; %bb.0:
8 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
9 ; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
10 ; SI-NEXT:    s_mov_b32 s7, 0xf000
11 ; SI-NEXT:    s_mov_b32 s6, -1
12 ; SI-NEXT:    s_mov_b32 s10, s6
13 ; SI-NEXT:    s_mov_b32 s11, s7
14 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
15 ; SI-NEXT:    s_mov_b32 s12, s2
16 ; SI-NEXT:    s_mov_b32 s13, s3
17 ; SI-NEXT:    s_mov_b32 s14, s6
18 ; SI-NEXT:    s_mov_b32 s15, s7
19 ; SI-NEXT:    buffer_load_dwordx2 v[0:1], off, s[8:11], 0
20 ; SI-NEXT:    buffer_load_dwordx2 v[2:3], off, s[12:15], 0
21 ; SI-NEXT:    s_mov_b32 s4, s0
22 ; SI-NEXT:    s_mov_b32 s5, s1
23 ; SI-NEXT:    s_waitcnt vmcnt(0)
24 ; SI-NEXT:    v_xor_b32_e32 v1, v3, v1
25 ; SI-NEXT:    v_xor_b32_e32 v0, v2, v0
26 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
27 ; SI-NEXT:    s_endpgm
29 ; VI-LABEL: xor_v2i32:
30 ; VI:       ; %bb.0:
31 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
32 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
33 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
34 ; VI-NEXT:    v_mov_b32_e32 v0, s2
35 ; VI-NEXT:    v_mov_b32_e32 v1, s3
36 ; VI-NEXT:    v_mov_b32_e32 v2, s4
37 ; VI-NEXT:    v_mov_b32_e32 v3, s5
38 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
39 ; VI-NEXT:    flat_load_dwordx2 v[2:3], v[2:3]
40 ; VI-NEXT:    v_mov_b32_e32 v4, s0
41 ; VI-NEXT:    v_mov_b32_e32 v5, s1
42 ; VI-NEXT:    s_waitcnt vmcnt(0)
43 ; VI-NEXT:    v_xor_b32_e32 v1, v1, v3
44 ; VI-NEXT:    v_xor_b32_e32 v0, v0, v2
45 ; VI-NEXT:    flat_store_dwordx2 v[4:5], v[0:1]
46 ; VI-NEXT:    s_endpgm
47   %a = load <2 x i32>, ptr addrspace(1) %in0
48   %b = load <2 x i32>, ptr addrspace(1) %in1
49   %result = xor <2 x i32> %a, %b
50   store <2 x i32> %result, ptr addrspace(1) %out
51   ret void
54 define amdgpu_kernel void @xor_v4i32(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {
55 ; SI-LABEL: xor_v4i32:
56 ; SI:       ; %bb.0:
57 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
58 ; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
59 ; SI-NEXT:    s_mov_b32 s7, 0xf000
60 ; SI-NEXT:    s_mov_b32 s6, -1
61 ; SI-NEXT:    s_mov_b32 s10, s6
62 ; SI-NEXT:    s_mov_b32 s11, s7
63 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
64 ; SI-NEXT:    s_mov_b32 s12, s2
65 ; SI-NEXT:    s_mov_b32 s13, s3
66 ; SI-NEXT:    s_mov_b32 s14, s6
67 ; SI-NEXT:    s_mov_b32 s15, s7
68 ; SI-NEXT:    buffer_load_dwordx4 v[0:3], off, s[8:11], 0
69 ; SI-NEXT:    buffer_load_dwordx4 v[4:7], off, s[12:15], 0
70 ; SI-NEXT:    s_mov_b32 s4, s0
71 ; SI-NEXT:    s_mov_b32 s5, s1
72 ; SI-NEXT:    s_waitcnt vmcnt(0)
73 ; SI-NEXT:    v_xor_b32_e32 v3, v7, v3
74 ; SI-NEXT:    v_xor_b32_e32 v2, v6, v2
75 ; SI-NEXT:    v_xor_b32_e32 v1, v5, v1
76 ; SI-NEXT:    v_xor_b32_e32 v0, v4, v0
77 ; SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
78 ; SI-NEXT:    s_endpgm
80 ; VI-LABEL: xor_v4i32:
81 ; VI:       ; %bb.0:
82 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
83 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
84 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
85 ; VI-NEXT:    v_mov_b32_e32 v0, s2
86 ; VI-NEXT:    v_mov_b32_e32 v1, s3
87 ; VI-NEXT:    v_mov_b32_e32 v4, s4
88 ; VI-NEXT:    v_mov_b32_e32 v5, s5
89 ; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
90 ; VI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
91 ; VI-NEXT:    v_mov_b32_e32 v8, s0
92 ; VI-NEXT:    v_mov_b32_e32 v9, s1
93 ; VI-NEXT:    s_waitcnt vmcnt(0)
94 ; VI-NEXT:    v_xor_b32_e32 v3, v3, v7
95 ; VI-NEXT:    v_xor_b32_e32 v2, v2, v6
96 ; VI-NEXT:    v_xor_b32_e32 v1, v1, v5
97 ; VI-NEXT:    v_xor_b32_e32 v0, v0, v4
98 ; VI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
99 ; VI-NEXT:    s_endpgm
100   %a = load <4 x i32>, ptr addrspace(1) %in0
101   %b = load <4 x i32>, ptr addrspace(1) %in1
102   %result = xor <4 x i32> %a, %b
103   store <4 x i32> %result, ptr addrspace(1) %out
104   ret void
107 define amdgpu_kernel void @xor_i1(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {
108 ; SI-LABEL: xor_i1:
109 ; SI:       ; %bb.0:
110 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
111 ; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
112 ; SI-NEXT:    s_mov_b32 s7, 0xf000
113 ; SI-NEXT:    s_mov_b32 s6, -1
114 ; SI-NEXT:    s_mov_b32 s10, s6
115 ; SI-NEXT:    s_mov_b32 s11, s7
116 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
117 ; SI-NEXT:    s_mov_b32 s12, s2
118 ; SI-NEXT:    s_mov_b32 s13, s3
119 ; SI-NEXT:    s_mov_b32 s14, s6
120 ; SI-NEXT:    s_mov_b32 s15, s7
121 ; SI-NEXT:    buffer_load_dword v0, off, s[8:11], 0
122 ; SI-NEXT:    buffer_load_dword v1, off, s[12:15], 0
123 ; SI-NEXT:    s_mov_b32 s4, s0
124 ; SI-NEXT:    s_mov_b32 s5, s1
125 ; SI-NEXT:    s_waitcnt vmcnt(1)
126 ; SI-NEXT:    v_cmp_le_f32_e32 vcc, 1.0, v0
127 ; SI-NEXT:    s_waitcnt vmcnt(0)
128 ; SI-NEXT:    v_cmp_le_f32_e64 s[0:1], 0, v1
129 ; SI-NEXT:    s_xor_b64 vcc, s[0:1], vcc
130 ; SI-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
131 ; SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
132 ; SI-NEXT:    s_endpgm
134 ; VI-LABEL: xor_i1:
135 ; VI:       ; %bb.0:
136 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
137 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
138 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
139 ; VI-NEXT:    v_mov_b32_e32 v0, s2
140 ; VI-NEXT:    v_mov_b32_e32 v1, s3
141 ; VI-NEXT:    v_mov_b32_e32 v2, s4
142 ; VI-NEXT:    v_mov_b32_e32 v3, s5
143 ; VI-NEXT:    flat_load_dword v4, v[0:1]
144 ; VI-NEXT:    flat_load_dword v2, v[2:3]
145 ; VI-NEXT:    v_mov_b32_e32 v0, s0
146 ; VI-NEXT:    v_mov_b32_e32 v1, s1
147 ; VI-NEXT:    s_waitcnt vmcnt(1)
148 ; VI-NEXT:    v_cmp_le_f32_e32 vcc, 0, v4
149 ; VI-NEXT:    s_waitcnt vmcnt(0)
150 ; VI-NEXT:    v_cmp_le_f32_e64 s[0:1], 1.0, v2
151 ; VI-NEXT:    s_xor_b64 vcc, vcc, s[0:1]
152 ; VI-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
153 ; VI-NEXT:    flat_store_dword v[0:1], v2
154 ; VI-NEXT:    s_endpgm
155   %a = load float, ptr addrspace(1) %in0
156   %b = load float, ptr addrspace(1) %in1
157   %acmp = fcmp oge float %a, 0.000000e+00
158   %bcmp = fcmp oge float %b, 1.000000e+00
159   %xor = xor i1 %acmp, %bcmp
160   %result = select i1 %xor, float %a, float %b
161   store float %result, ptr addrspace(1) %out
162   ret void
165 define amdgpu_kernel void @v_xor_i1(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {
166 ; SI-LABEL: v_xor_i1:
167 ; SI:       ; %bb.0:
168 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
169 ; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
170 ; SI-NEXT:    s_mov_b32 s7, 0xf000
171 ; SI-NEXT:    s_mov_b32 s6, -1
172 ; SI-NEXT:    s_mov_b32 s14, s6
173 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
174 ; SI-NEXT:    s_mov_b32 s12, s2
175 ; SI-NEXT:    s_mov_b32 s13, s3
176 ; SI-NEXT:    s_mov_b32 s15, s7
177 ; SI-NEXT:    s_mov_b32 s10, s6
178 ; SI-NEXT:    s_mov_b32 s11, s7
179 ; SI-NEXT:    buffer_load_ubyte v0, off, s[12:15], 0 glc
180 ; SI-NEXT:    s_waitcnt vmcnt(0)
181 ; SI-NEXT:    buffer_load_ubyte v1, off, s[8:11], 0 glc
182 ; SI-NEXT:    s_waitcnt vmcnt(0)
183 ; SI-NEXT:    s_mov_b32 s4, s0
184 ; SI-NEXT:    s_mov_b32 s5, s1
185 ; SI-NEXT:    v_xor_b32_e32 v0, v0, v1
186 ; SI-NEXT:    v_and_b32_e32 v0, 1, v0
187 ; SI-NEXT:    buffer_store_byte v0, off, s[4:7], 0
188 ; SI-NEXT:    s_endpgm
190 ; VI-LABEL: v_xor_i1:
191 ; VI:       ; %bb.0:
192 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
193 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
194 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
195 ; VI-NEXT:    v_mov_b32_e32 v0, s2
196 ; VI-NEXT:    v_mov_b32_e32 v1, s3
197 ; VI-NEXT:    v_mov_b32_e32 v2, s4
198 ; VI-NEXT:    v_mov_b32_e32 v3, s5
199 ; VI-NEXT:    flat_load_ubyte v4, v[0:1] glc
200 ; VI-NEXT:    s_waitcnt vmcnt(0)
201 ; VI-NEXT:    flat_load_ubyte v2, v[2:3] glc
202 ; VI-NEXT:    s_waitcnt vmcnt(0)
203 ; VI-NEXT:    v_mov_b32_e32 v0, s0
204 ; VI-NEXT:    v_mov_b32_e32 v1, s1
205 ; VI-NEXT:    v_xor_b32_e32 v2, v4, v2
206 ; VI-NEXT:    v_and_b32_e32 v2, 1, v2
207 ; VI-NEXT:    flat_store_byte v[0:1], v2
208 ; VI-NEXT:    s_endpgm
209   %a = load volatile i1, ptr addrspace(1) %in0
210   %b = load volatile i1, ptr addrspace(1) %in1
211   %xor = xor i1 %a, %b
212   store i1 %xor, ptr addrspace(1) %out
213   ret void
216 define amdgpu_kernel void @vector_xor_i32(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {
217 ; SI-LABEL: vector_xor_i32:
218 ; SI:       ; %bb.0:
219 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
220 ; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
221 ; SI-NEXT:    s_mov_b32 s7, 0xf000
222 ; SI-NEXT:    s_mov_b32 s6, -1
223 ; SI-NEXT:    s_mov_b32 s14, s6
224 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
225 ; SI-NEXT:    s_mov_b32 s12, s2
226 ; SI-NEXT:    s_mov_b32 s13, s3
227 ; SI-NEXT:    s_mov_b32 s15, s7
228 ; SI-NEXT:    s_mov_b32 s10, s6
229 ; SI-NEXT:    s_mov_b32 s11, s7
230 ; SI-NEXT:    buffer_load_dword v0, off, s[12:15], 0
231 ; SI-NEXT:    buffer_load_dword v1, off, s[8:11], 0
232 ; SI-NEXT:    s_mov_b32 s4, s0
233 ; SI-NEXT:    s_mov_b32 s5, s1
234 ; SI-NEXT:    s_waitcnt vmcnt(0)
235 ; SI-NEXT:    v_xor_b32_e32 v0, v0, v1
236 ; SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
237 ; SI-NEXT:    s_endpgm
239 ; VI-LABEL: vector_xor_i32:
240 ; VI:       ; %bb.0:
241 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
242 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
243 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
244 ; VI-NEXT:    v_mov_b32_e32 v0, s2
245 ; VI-NEXT:    v_mov_b32_e32 v1, s3
246 ; VI-NEXT:    v_mov_b32_e32 v2, s4
247 ; VI-NEXT:    v_mov_b32_e32 v3, s5
248 ; VI-NEXT:    flat_load_dword v4, v[0:1]
249 ; VI-NEXT:    flat_load_dword v2, v[2:3]
250 ; VI-NEXT:    v_mov_b32_e32 v0, s0
251 ; VI-NEXT:    v_mov_b32_e32 v1, s1
252 ; VI-NEXT:    s_waitcnt vmcnt(0)
253 ; VI-NEXT:    v_xor_b32_e32 v2, v4, v2
254 ; VI-NEXT:    flat_store_dword v[0:1], v2
255 ; VI-NEXT:    s_endpgm
256   %a = load i32, ptr addrspace(1) %in0
257   %b = load i32, ptr addrspace(1) %in1
258   %result = xor i32 %a, %b
259   store i32 %result, ptr addrspace(1) %out
260   ret void
263 define amdgpu_kernel void @scalar_xor_i32(ptr addrspace(1) %out, i32 %a, i32 %b) {
264 ; SI-LABEL: scalar_xor_i32:
265 ; SI:       ; %bb.0:
266 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
267 ; SI-NEXT:    s_mov_b32 s7, 0xf000
268 ; SI-NEXT:    s_mov_b32 s6, -1
269 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
270 ; SI-NEXT:    s_mov_b32 s4, s0
271 ; SI-NEXT:    s_xor_b32 s0, s2, s3
272 ; SI-NEXT:    s_mov_b32 s5, s1
273 ; SI-NEXT:    v_mov_b32_e32 v0, s0
274 ; SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
275 ; SI-NEXT:    s_endpgm
277 ; VI-LABEL: scalar_xor_i32:
278 ; VI:       ; %bb.0:
279 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
280 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
281 ; VI-NEXT:    s_xor_b32 s2, s2, s3
282 ; VI-NEXT:    v_mov_b32_e32 v0, s0
283 ; VI-NEXT:    v_mov_b32_e32 v1, s1
284 ; VI-NEXT:    v_mov_b32_e32 v2, s2
285 ; VI-NEXT:    flat_store_dword v[0:1], v2
286 ; VI-NEXT:    s_endpgm
287   %result = xor i32 %a, %b
288   store i32 %result, ptr addrspace(1) %out
289   ret void
292 define amdgpu_kernel void @scalar_not_i32(ptr addrspace(1) %out, i32 %a) {
293 ; SI-LABEL: scalar_not_i32:
294 ; SI:       ; %bb.0:
295 ; SI-NEXT:    s_load_dword s6, s[4:5], 0xb
296 ; SI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9
297 ; SI-NEXT:    s_mov_b32 s3, 0xf000
298 ; SI-NEXT:    s_mov_b32 s2, -1
299 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
300 ; SI-NEXT:    s_not_b32 s4, s6
301 ; SI-NEXT:    v_mov_b32_e32 v0, s4
302 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
303 ; SI-NEXT:    s_endpgm
305 ; VI-LABEL: scalar_not_i32:
306 ; VI:       ; %bb.0:
307 ; VI-NEXT:    s_load_dword s2, s[4:5], 0x2c
308 ; VI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
309 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
310 ; VI-NEXT:    s_not_b32 s2, s2
311 ; VI-NEXT:    v_mov_b32_e32 v0, s0
312 ; VI-NEXT:    v_mov_b32_e32 v1, s1
313 ; VI-NEXT:    v_mov_b32_e32 v2, s2
314 ; VI-NEXT:    flat_store_dword v[0:1], v2
315 ; VI-NEXT:    s_endpgm
316   %result = xor i32 %a, -1
317   store i32 %result, ptr addrspace(1) %out
318   ret void
321 define amdgpu_kernel void @vector_not_i32(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {
322 ; SI-LABEL: vector_not_i32:
323 ; SI:       ; %bb.0:
324 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
325 ; SI-NEXT:    s_mov_b32 s7, 0xf000
326 ; SI-NEXT:    s_mov_b32 s6, -1
327 ; SI-NEXT:    s_mov_b32 s10, s6
328 ; SI-NEXT:    s_mov_b32 s11, s7
329 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
330 ; SI-NEXT:    s_mov_b32 s8, s2
331 ; SI-NEXT:    s_mov_b32 s9, s3
332 ; SI-NEXT:    buffer_load_dword v0, off, s[8:11], 0
333 ; SI-NEXT:    s_mov_b32 s4, s0
334 ; SI-NEXT:    s_mov_b32 s5, s1
335 ; SI-NEXT:    s_waitcnt vmcnt(0)
336 ; SI-NEXT:    v_not_b32_e32 v0, v0
337 ; SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
338 ; SI-NEXT:    s_endpgm
340 ; VI-LABEL: vector_not_i32:
341 ; VI:       ; %bb.0:
342 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
343 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
344 ; VI-NEXT:    v_mov_b32_e32 v0, s2
345 ; VI-NEXT:    v_mov_b32_e32 v1, s3
346 ; VI-NEXT:    flat_load_dword v2, v[0:1]
347 ; VI-NEXT:    v_mov_b32_e32 v0, s0
348 ; VI-NEXT:    v_mov_b32_e32 v1, s1
349 ; VI-NEXT:    s_waitcnt vmcnt(0)
350 ; VI-NEXT:    v_not_b32_e32 v2, v2
351 ; VI-NEXT:    flat_store_dword v[0:1], v2
352 ; VI-NEXT:    s_endpgm
353   %a = load i32, ptr addrspace(1) %in0
354   %b = load i32, ptr addrspace(1) %in1
355   %result = xor i32 %a, -1
356   store i32 %result, ptr addrspace(1) %out
357   ret void
360 define amdgpu_kernel void @vector_xor_i64(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {
361 ; SI-LABEL: vector_xor_i64:
362 ; SI:       ; %bb.0:
363 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
364 ; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
365 ; SI-NEXT:    s_mov_b32 s7, 0xf000
366 ; SI-NEXT:    s_mov_b32 s6, -1
367 ; SI-NEXT:    s_mov_b32 s10, s6
368 ; SI-NEXT:    s_mov_b32 s11, s7
369 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
370 ; SI-NEXT:    s_mov_b32 s12, s2
371 ; SI-NEXT:    s_mov_b32 s13, s3
372 ; SI-NEXT:    s_mov_b32 s14, s6
373 ; SI-NEXT:    s_mov_b32 s15, s7
374 ; SI-NEXT:    buffer_load_dwordx2 v[0:1], off, s[8:11], 0
375 ; SI-NEXT:    buffer_load_dwordx2 v[2:3], off, s[12:15], 0
376 ; SI-NEXT:    s_mov_b32 s4, s0
377 ; SI-NEXT:    s_mov_b32 s5, s1
378 ; SI-NEXT:    s_waitcnt vmcnt(0)
379 ; SI-NEXT:    v_xor_b32_e32 v0, v2, v0
380 ; SI-NEXT:    v_xor_b32_e32 v1, v3, v1
381 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
382 ; SI-NEXT:    s_endpgm
384 ; VI-LABEL: vector_xor_i64:
385 ; VI:       ; %bb.0:
386 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
387 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
388 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
389 ; VI-NEXT:    v_mov_b32_e32 v0, s2
390 ; VI-NEXT:    v_mov_b32_e32 v1, s3
391 ; VI-NEXT:    v_mov_b32_e32 v2, s4
392 ; VI-NEXT:    v_mov_b32_e32 v3, s5
393 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
394 ; VI-NEXT:    flat_load_dwordx2 v[2:3], v[2:3]
395 ; VI-NEXT:    v_mov_b32_e32 v4, s0
396 ; VI-NEXT:    v_mov_b32_e32 v5, s1
397 ; VI-NEXT:    s_waitcnt vmcnt(0)
398 ; VI-NEXT:    v_xor_b32_e32 v0, v0, v2
399 ; VI-NEXT:    v_xor_b32_e32 v1, v1, v3
400 ; VI-NEXT:    flat_store_dwordx2 v[4:5], v[0:1]
401 ; VI-NEXT:    s_endpgm
402   %a = load i64, ptr addrspace(1) %in0
403   %b = load i64, ptr addrspace(1) %in1
404   %result = xor i64 %a, %b
405   store i64 %result, ptr addrspace(1) %out
406   ret void
409 define amdgpu_kernel void @scalar_xor_i64(ptr addrspace(1) %out, i64 %a, i64 %b) {
410 ; SI-LABEL: scalar_xor_i64:
411 ; SI:       ; %bb.0:
412 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
413 ; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
414 ; SI-NEXT:    s_mov_b32 s7, 0xf000
415 ; SI-NEXT:    s_mov_b32 s6, -1
416 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
417 ; SI-NEXT:    s_mov_b32 s4, s0
418 ; SI-NEXT:    s_mov_b32 s5, s1
419 ; SI-NEXT:    s_xor_b64 s[0:1], s[2:3], s[8:9]
420 ; SI-NEXT:    v_mov_b32_e32 v0, s0
421 ; SI-NEXT:    v_mov_b32_e32 v1, s1
422 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
423 ; SI-NEXT:    s_endpgm
425 ; VI-LABEL: scalar_xor_i64:
426 ; VI:       ; %bb.0:
427 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
428 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
429 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
430 ; VI-NEXT:    v_mov_b32_e32 v0, s0
431 ; VI-NEXT:    v_mov_b32_e32 v1, s1
432 ; VI-NEXT:    s_xor_b64 s[0:1], s[2:3], s[4:5]
433 ; VI-NEXT:    v_mov_b32_e32 v3, s1
434 ; VI-NEXT:    v_mov_b32_e32 v2, s0
435 ; VI-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
436 ; VI-NEXT:    s_endpgm
437   %result = xor i64 %a, %b
438   store i64 %result, ptr addrspace(1) %out
439   ret void
442 define amdgpu_kernel void @scalar_not_i64(ptr addrspace(1) %out, i64 %a) {
443 ; SI-LABEL: scalar_not_i64:
444 ; SI:       ; %bb.0:
445 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
446 ; SI-NEXT:    s_mov_b32 s7, 0xf000
447 ; SI-NEXT:    s_mov_b32 s6, -1
448 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
449 ; SI-NEXT:    s_mov_b32 s4, s0
450 ; SI-NEXT:    s_mov_b32 s5, s1
451 ; SI-NEXT:    s_not_b64 s[0:1], s[2:3]
452 ; SI-NEXT:    v_mov_b32_e32 v0, s0
453 ; SI-NEXT:    v_mov_b32_e32 v1, s1
454 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
455 ; SI-NEXT:    s_endpgm
457 ; VI-LABEL: scalar_not_i64:
458 ; VI:       ; %bb.0:
459 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
460 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
461 ; VI-NEXT:    v_mov_b32_e32 v0, s0
462 ; VI-NEXT:    v_mov_b32_e32 v1, s1
463 ; VI-NEXT:    s_not_b64 s[0:1], s[2:3]
464 ; VI-NEXT:    v_mov_b32_e32 v3, s1
465 ; VI-NEXT:    v_mov_b32_e32 v2, s0
466 ; VI-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
467 ; VI-NEXT:    s_endpgm
468   %result = xor i64 %a, -1
469   store i64 %result, ptr addrspace(1) %out
470   ret void
473 define amdgpu_kernel void @vector_not_i64(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {
474 ; SI-LABEL: vector_not_i64:
475 ; SI:       ; %bb.0:
476 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
477 ; SI-NEXT:    s_mov_b32 s7, 0xf000
478 ; SI-NEXT:    s_mov_b32 s6, -1
479 ; SI-NEXT:    s_mov_b32 s10, s6
480 ; SI-NEXT:    s_mov_b32 s11, s7
481 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
482 ; SI-NEXT:    s_mov_b32 s8, s2
483 ; SI-NEXT:    s_mov_b32 s9, s3
484 ; SI-NEXT:    buffer_load_dwordx2 v[0:1], off, s[8:11], 0
485 ; SI-NEXT:    s_mov_b32 s4, s0
486 ; SI-NEXT:    s_mov_b32 s5, s1
487 ; SI-NEXT:    s_waitcnt vmcnt(0)
488 ; SI-NEXT:    v_not_b32_e32 v0, v0
489 ; SI-NEXT:    v_not_b32_e32 v1, v1
490 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
491 ; SI-NEXT:    s_endpgm
493 ; VI-LABEL: vector_not_i64:
494 ; VI:       ; %bb.0:
495 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
496 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
497 ; VI-NEXT:    v_mov_b32_e32 v0, s2
498 ; VI-NEXT:    v_mov_b32_e32 v1, s3
499 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
500 ; VI-NEXT:    v_mov_b32_e32 v2, s0
501 ; VI-NEXT:    v_mov_b32_e32 v3, s1
502 ; VI-NEXT:    s_waitcnt vmcnt(0)
503 ; VI-NEXT:    v_not_b32_e32 v0, v0
504 ; VI-NEXT:    v_not_b32_e32 v1, v1
505 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
506 ; VI-NEXT:    s_endpgm
507   %a = load i64, ptr addrspace(1) %in0
508   %b = load i64, ptr addrspace(1) %in1
509   %result = xor i64 %a, -1
510   store i64 %result, ptr addrspace(1) %out
511   ret void
514 define amdgpu_kernel void @xor_cf(ptr addrspace(1) %out, ptr addrspace(1) %in, i64 %a, i64 %b) {
515 ; SI-LABEL: xor_cf:
516 ; SI:       ; %bb.0: ; %entry
517 ; SI-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x9
518 ; SI-NEXT:    s_mov_b64 s[8:9], 0
519 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
520 ; SI-NEXT:    v_cmp_ne_u64_e64 s[10:11], s[4:5], 0
521 ; SI-NEXT:    s_and_b64 vcc, exec, s[10:11]
522 ; SI-NEXT:    s_cbranch_vccz .LBB12_4
523 ; SI-NEXT:  ; %bb.1: ; %else
524 ; SI-NEXT:    s_mov_b32 s15, 0xf000
525 ; SI-NEXT:    s_mov_b32 s14, -1
526 ; SI-NEXT:    s_mov_b32 s12, s2
527 ; SI-NEXT:    s_mov_b32 s13, s3
528 ; SI-NEXT:    buffer_load_dwordx2 v[0:1], off, s[12:15], 0
529 ; SI-NEXT:    s_andn2_b64 vcc, exec, s[8:9]
530 ; SI-NEXT:    s_cbranch_vccnz .LBB12_3
531 ; SI-NEXT:  .LBB12_2: ; %if
532 ; SI-NEXT:    s_xor_b64 s[2:3], s[4:5], s[6:7]
533 ; SI-NEXT:    s_waitcnt vmcnt(0)
534 ; SI-NEXT:    v_mov_b32_e32 v0, s2
535 ; SI-NEXT:    v_mov_b32_e32 v1, s3
536 ; SI-NEXT:  .LBB12_3: ; %endif
537 ; SI-NEXT:    s_mov_b32 s3, 0xf000
538 ; SI-NEXT:    s_mov_b32 s2, -1
539 ; SI-NEXT:    s_waitcnt vmcnt(0)
540 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
541 ; SI-NEXT:    s_endpgm
542 ; SI-NEXT:  .LBB12_4:
543 ; SI-NEXT:    ; implicit-def: $vgpr0_vgpr1
544 ; SI-NEXT:    s_branch .LBB12_2
546 ; VI-LABEL: xor_cf:
547 ; VI:       ; %bb.0: ; %entry
548 ; VI-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24
549 ; VI-NEXT:    s_mov_b64 s[8:9], 0
550 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
551 ; VI-NEXT:    s_cmp_lg_u64 s[4:5], 0
552 ; VI-NEXT:    s_cbranch_scc0 .LBB12_4
553 ; VI-NEXT:  ; %bb.1: ; %else
554 ; VI-NEXT:    v_mov_b32_e32 v0, s2
555 ; VI-NEXT:    v_mov_b32_e32 v1, s3
556 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
557 ; VI-NEXT:    s_andn2_b64 vcc, exec, s[8:9]
558 ; VI-NEXT:    s_cbranch_vccnz .LBB12_3
559 ; VI-NEXT:  .LBB12_2: ; %if
560 ; VI-NEXT:    s_xor_b64 s[2:3], s[4:5], s[6:7]
561 ; VI-NEXT:    s_waitcnt vmcnt(0)
562 ; VI-NEXT:    v_mov_b32_e32 v0, s2
563 ; VI-NEXT:    v_mov_b32_e32 v1, s3
564 ; VI-NEXT:  .LBB12_3: ; %endif
565 ; VI-NEXT:    v_mov_b32_e32 v2, s0
566 ; VI-NEXT:    v_mov_b32_e32 v3, s1
567 ; VI-NEXT:    s_waitcnt vmcnt(0)
568 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
569 ; VI-NEXT:    s_endpgm
570 ; VI-NEXT:  .LBB12_4:
571 ; VI-NEXT:    ; implicit-def: $vgpr0_vgpr1
572 ; VI-NEXT:    s_branch .LBB12_2
573 entry:
574   %0 = icmp eq i64 %a, 0
575   br i1 %0, label %if, label %else
578   %1 = xor i64 %a, %b
579   br label %endif
581 else:
582   %2 = load i64, ptr addrspace(1) %in
583   br label %endif
585 endif:
586   %3 = phi i64 [%1, %if], [%2, %else]
587   store i64 %3, ptr addrspace(1) %out
588   ret void
591 define amdgpu_kernel void @scalar_xor_literal_i64(ptr addrspace(1) %out, [8 x i32], i64 %a) {
592 ; SI-LABEL: scalar_xor_literal_i64:
593 ; SI:       ; %bb.0:
594 ; SI-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x13
595 ; SI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9
596 ; SI-NEXT:    s_mov_b32 s3, 0xf000
597 ; SI-NEXT:    s_mov_b32 s2, -1
598 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
599 ; SI-NEXT:    s_xor_b32 s4, s7, 0xf237b
600 ; SI-NEXT:    s_xor_b32 s5, s6, 0x3039
601 ; SI-NEXT:    v_mov_b32_e32 v0, s5
602 ; SI-NEXT:    v_mov_b32_e32 v1, s4
603 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
604 ; SI-NEXT:    s_endpgm
606 ; VI-LABEL: scalar_xor_literal_i64:
607 ; VI:       ; %bb.0:
608 ; VI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x4c
609 ; VI-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
610 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
611 ; VI-NEXT:    s_xor_b32 s1, s1, 0xf237b
612 ; VI-NEXT:    s_xor_b32 s0, s0, 0x3039
613 ; VI-NEXT:    v_mov_b32_e32 v2, s2
614 ; VI-NEXT:    v_mov_b32_e32 v0, s0
615 ; VI-NEXT:    v_mov_b32_e32 v1, s1
616 ; VI-NEXT:    v_mov_b32_e32 v3, s3
617 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
618 ; VI-NEXT:    s_endpgm
619   %or = xor i64 %a, 4261135838621753
620   store i64 %or, ptr addrspace(1) %out
621   ret void
624 define amdgpu_kernel void @scalar_xor_literal_multi_use_i64(ptr addrspace(1) %out, [8 x i32], i64 %a, i64 %b) {
625 ; SI-LABEL: scalar_xor_literal_multi_use_i64:
626 ; SI:       ; %bb.0:
627 ; SI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9
628 ; SI-NEXT:    s_load_dwordx4 s[4:7], s[4:5], 0x13
629 ; SI-NEXT:    s_movk_i32 s8, 0x3039
630 ; SI-NEXT:    s_mov_b32 s9, 0xf237b
631 ; SI-NEXT:    s_mov_b32 s3, 0xf000
632 ; SI-NEXT:    s_mov_b32 s2, -1
633 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
634 ; SI-NEXT:    s_xor_b64 s[4:5], s[4:5], s[8:9]
635 ; SI-NEXT:    v_mov_b32_e32 v0, s4
636 ; SI-NEXT:    v_mov_b32_e32 v1, s5
637 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
638 ; SI-NEXT:    s_add_u32 s0, s6, 0x3039
639 ; SI-NEXT:    s_addc_u32 s1, s7, 0xf237b
640 ; SI-NEXT:    s_waitcnt expcnt(0)
641 ; SI-NEXT:    v_mov_b32_e32 v0, s0
642 ; SI-NEXT:    v_mov_b32_e32 v1, s1
643 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
644 ; SI-NEXT:    s_waitcnt vmcnt(0)
645 ; SI-NEXT:    s_endpgm
647 ; VI-LABEL: scalar_xor_literal_multi_use_i64:
648 ; VI:       ; %bb.0:
649 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x4c
650 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x24
651 ; VI-NEXT:    s_movk_i32 s6, 0x3039
652 ; VI-NEXT:    s_mov_b32 s7, 0xf237b
653 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
654 ; VI-NEXT:    s_xor_b64 s[0:1], s[0:1], s[6:7]
655 ; VI-NEXT:    v_mov_b32_e32 v0, s4
656 ; VI-NEXT:    v_mov_b32_e32 v3, s1
657 ; VI-NEXT:    v_mov_b32_e32 v1, s5
658 ; VI-NEXT:    v_mov_b32_e32 v2, s0
659 ; VI-NEXT:    s_add_u32 s0, s2, 0x3039
660 ; VI-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
661 ; VI-NEXT:    s_addc_u32 s1, s3, 0xf237b
662 ; VI-NEXT:    v_mov_b32_e32 v0, s0
663 ; VI-NEXT:    v_mov_b32_e32 v1, s1
664 ; VI-NEXT:    flat_store_dwordx2 v[0:1], v[0:1]
665 ; VI-NEXT:    s_waitcnt vmcnt(0)
666 ; VI-NEXT:    s_endpgm
667   %or = xor i64 %a, 4261135838621753
668   store i64 %or, ptr addrspace(1) %out
670   %foo = add i64 %b, 4261135838621753
671   store volatile i64 %foo, ptr addrspace(1) undef
672   ret void
675 define amdgpu_kernel void @scalar_xor_inline_imm_i64(ptr addrspace(1) %out, [8 x i32], i64 %a) {
676 ; SI-LABEL: scalar_xor_inline_imm_i64:
677 ; SI:       ; %bb.0:
678 ; SI-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x13
679 ; SI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9
680 ; SI-NEXT:    s_mov_b32 s3, 0xf000
681 ; SI-NEXT:    s_mov_b32 s2, -1
682 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
683 ; SI-NEXT:    s_xor_b32 s4, s6, 63
684 ; SI-NEXT:    v_mov_b32_e32 v0, s4
685 ; SI-NEXT:    v_mov_b32_e32 v1, s7
686 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
687 ; SI-NEXT:    s_endpgm
689 ; VI-LABEL: scalar_xor_inline_imm_i64:
690 ; VI:       ; %bb.0:
691 ; VI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x4c
692 ; VI-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
693 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
694 ; VI-NEXT:    s_xor_b32 s0, s0, 63
695 ; VI-NEXT:    v_mov_b32_e32 v2, s2
696 ; VI-NEXT:    v_mov_b32_e32 v1, s1
697 ; VI-NEXT:    v_mov_b32_e32 v0, s0
698 ; VI-NEXT:    v_mov_b32_e32 v3, s3
699 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
700 ; VI-NEXT:    s_endpgm
701   %or = xor i64 %a, 63
702   store i64 %or, ptr addrspace(1) %out
703   ret void
706 define amdgpu_kernel void @scalar_xor_neg_inline_imm_i64(ptr addrspace(1) %out, [8 x i32], i64 %a) {
707 ; SI-LABEL: scalar_xor_neg_inline_imm_i64:
708 ; SI:       ; %bb.0:
709 ; SI-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x13
710 ; SI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9
711 ; SI-NEXT:    s_mov_b32 s3, 0xf000
712 ; SI-NEXT:    s_mov_b32 s2, -1
713 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
714 ; SI-NEXT:    s_xor_b64 s[4:5], s[6:7], -8
715 ; SI-NEXT:    v_mov_b32_e32 v0, s4
716 ; SI-NEXT:    v_mov_b32_e32 v1, s5
717 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
718 ; SI-NEXT:    s_endpgm
720 ; VI-LABEL: scalar_xor_neg_inline_imm_i64:
721 ; VI:       ; %bb.0:
722 ; VI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x4c
723 ; VI-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
724 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
725 ; VI-NEXT:    s_xor_b64 s[0:1], s[0:1], -8
726 ; VI-NEXT:    v_mov_b32_e32 v0, s2
727 ; VI-NEXT:    v_mov_b32_e32 v3, s1
728 ; VI-NEXT:    v_mov_b32_e32 v1, s3
729 ; VI-NEXT:    v_mov_b32_e32 v2, s0
730 ; VI-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
731 ; VI-NEXT:    s_endpgm
732   %or = xor i64 %a, -8
733   store i64 %or, ptr addrspace(1) %out
734   ret void
737 define amdgpu_kernel void @vector_xor_i64_neg_inline_imm(ptr addrspace(1) %out, ptr addrspace(1) %a, ptr addrspace(1) %b) {
738 ; SI-LABEL: vector_xor_i64_neg_inline_imm:
739 ; SI:       ; %bb.0:
740 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
741 ; SI-NEXT:    s_mov_b32 s7, 0xf000
742 ; SI-NEXT:    s_mov_b32 s6, -1
743 ; SI-NEXT:    s_mov_b32 s10, s6
744 ; SI-NEXT:    s_mov_b32 s11, s7
745 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
746 ; SI-NEXT:    s_mov_b32 s8, s2
747 ; SI-NEXT:    s_mov_b32 s9, s3
748 ; SI-NEXT:    buffer_load_dwordx2 v[0:1], off, s[8:11], 0
749 ; SI-NEXT:    s_mov_b32 s4, s0
750 ; SI-NEXT:    s_mov_b32 s5, s1
751 ; SI-NEXT:    s_waitcnt vmcnt(0)
752 ; SI-NEXT:    v_xor_b32_e32 v0, -8, v0
753 ; SI-NEXT:    v_xor_b32_e32 v1, -1, v1
754 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
755 ; SI-NEXT:    s_endpgm
757 ; VI-LABEL: vector_xor_i64_neg_inline_imm:
758 ; VI:       ; %bb.0:
759 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
760 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
761 ; VI-NEXT:    v_mov_b32_e32 v0, s2
762 ; VI-NEXT:    v_mov_b32_e32 v1, s3
763 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
764 ; VI-NEXT:    v_mov_b32_e32 v2, s0
765 ; VI-NEXT:    v_mov_b32_e32 v3, s1
766 ; VI-NEXT:    s_waitcnt vmcnt(0)
767 ; VI-NEXT:    v_xor_b32_e32 v0, -8, v0
768 ; VI-NEXT:    v_xor_b32_e32 v1, -1, v1
769 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
770 ; VI-NEXT:    s_endpgm
771   %loada = load i64, ptr addrspace(1) %a, align 8
772   %or = xor i64 %loada, -8
773   store i64 %or, ptr addrspace(1) %out
774   ret void
777 define amdgpu_kernel void @vector_xor_literal_i64(ptr addrspace(1) %out, ptr addrspace(1) %a, ptr addrspace(1) %b) {
778 ; SI-LABEL: vector_xor_literal_i64:
779 ; SI:       ; %bb.0:
780 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
781 ; SI-NEXT:    s_mov_b32 s7, 0xf000
782 ; SI-NEXT:    s_mov_b32 s6, -1
783 ; SI-NEXT:    s_mov_b32 s10, s6
784 ; SI-NEXT:    s_mov_b32 s11, s7
785 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
786 ; SI-NEXT:    s_mov_b32 s8, s2
787 ; SI-NEXT:    s_mov_b32 s9, s3
788 ; SI-NEXT:    buffer_load_dwordx2 v[0:1], off, s[8:11], 0
789 ; SI-NEXT:    s_mov_b32 s4, s0
790 ; SI-NEXT:    s_mov_b32 s5, s1
791 ; SI-NEXT:    s_waitcnt vmcnt(0)
792 ; SI-NEXT:    v_xor_b32_e32 v1, 0x146f, v1
793 ; SI-NEXT:    v_xor_b32_e32 v0, 0xdf77987f, v0
794 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
795 ; SI-NEXT:    s_endpgm
797 ; VI-LABEL: vector_xor_literal_i64:
798 ; VI:       ; %bb.0:
799 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
800 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
801 ; VI-NEXT:    v_mov_b32_e32 v0, s2
802 ; VI-NEXT:    v_mov_b32_e32 v1, s3
803 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
804 ; VI-NEXT:    v_mov_b32_e32 v2, s0
805 ; VI-NEXT:    v_mov_b32_e32 v3, s1
806 ; VI-NEXT:    s_waitcnt vmcnt(0)
807 ; VI-NEXT:    v_xor_b32_e32 v1, 0x146f, v1
808 ; VI-NEXT:    v_xor_b32_e32 v0, 0xdf77987f, v0
809 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
810 ; VI-NEXT:    s_endpgm
811   %loada = load i64, ptr addrspace(1) %a, align 8
812   %or = xor i64 %loada, 22470723082367
813   store i64 %or, ptr addrspace(1) %out
814   ret void
816 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
817 ; GCN: {{.*}}