xref: /llvm-project/llvm/test/CodeGen/AMDGPU/memcpy-param-combinations.ll (revision 173c68239d1d11f4e36c8af07a28310da67568a7)
1e1094dd8SFabian Ritter; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2e1094dd8SFabian Ritter
3e1094dd8SFabian Ritter; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 %s -o - | FileCheck %s
4e1094dd8SFabian Ritter
5e1094dd8SFabian Ritter; Testing codegen for memcpy with vector operands for all combinations of the following parameters:
6e1094dd8SFabian Ritter;     destination address space: 0, 1, 3, 5
7e1094dd8SFabian Ritter;     source address space: 0, 1, 3, 4, 5
8e1094dd8SFabian Ritter;     alignment: 1, 2, 8, 16
9e1094dd8SFabian Ritter;     sizes: 16, 31, 32
10e1094dd8SFabian Ritter
11e1094dd8SFabian Ritter
12e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz16_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
13e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz16_align_1_1:
14e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
15e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
17*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
18*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
19e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
20e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
21e1094dd8SFabian Ritterentry:
22e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 16, i1 false)
23e1094dd8SFabian Ritter  ret void
24e1094dd8SFabian Ritter}
25e1094dd8SFabian Ritter
26e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz31_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
27e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz31_align_1_1:
28e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
29e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
31*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_ubyte v9, v[2:3] offset:30
32*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_ushort v10, v[2:3] offset:28
33*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx3 v[6:8], v[2:3] offset:16
34*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
35*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3) lgkmcnt(3)
36*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v9 offset:30
37*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2) lgkmcnt(3)
38*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v10 offset:28
39*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(3)
40*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx3 v[0:1], v[6:8] offset:16
41*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(3)
42*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
43e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
44e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
45e1094dd8SFabian Ritterentry:
46e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 31, i1 false)
47e1094dd8SFabian Ritter  ret void
48e1094dd8SFabian Ritter}
49e1094dd8SFabian Ritter
50e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz32_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
51e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz32_align_1_1:
52e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
53e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
54*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
55*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:16
56*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
57*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
58*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:16
59*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
60*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
61e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
62e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
63e1094dd8SFabian Ritterentry:
64e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 32, i1 false)
65e1094dd8SFabian Ritter  ret void
66e1094dd8SFabian Ritter}
67e1094dd8SFabian Ritter
68e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz16_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
69e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz16_align_2_2:
70e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
71e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
72*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
73*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
74*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
75e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
76e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
77e1094dd8SFabian Ritterentry:
78e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 16, i1 false)
79e1094dd8SFabian Ritter  ret void
80e1094dd8SFabian Ritter}
81e1094dd8SFabian Ritter
82e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz31_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
83e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz31_align_2_2:
84e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
85e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
86*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
87*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_ubyte v9, v[2:3] offset:30
88*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_ushort v10, v[2:3] offset:28
89*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx3 v[6:8], v[2:3] offset:16
90*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
91*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3) lgkmcnt(3)
92*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v9 offset:30
93*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2) lgkmcnt(3)
94*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v10 offset:28
95*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(3)
96*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx3 v[0:1], v[6:8] offset:16
97*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(3)
98*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
99e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
100e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
101e1094dd8SFabian Ritterentry:
102e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 31, i1 false)
103e1094dd8SFabian Ritter  ret void
104e1094dd8SFabian Ritter}
105e1094dd8SFabian Ritter
106e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz32_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
107e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz32_align_2_2:
108e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
109e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
110*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
111*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:16
112*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
113*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
114*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:16
115*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
116*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
117e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
118e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
119e1094dd8SFabian Ritterentry:
120e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 32, i1 false)
121e1094dd8SFabian Ritter  ret void
122e1094dd8SFabian Ritter}
123e1094dd8SFabian Ritter
124e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz16_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
125e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz16_align_8_8:
126e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
127e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
128e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
129e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
130e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
131e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
132e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
133e1094dd8SFabian Ritterentry:
134e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 16, i1 false)
135e1094dd8SFabian Ritter  ret void
136e1094dd8SFabian Ritter}
137e1094dd8SFabian Ritter
138e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz31_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
139e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz31_align_8_8:
140e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
141e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
142*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
143*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:15
144*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
145*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
146*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:15
147*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
148*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
149e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
150e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
151e1094dd8SFabian Ritterentry:
152e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 31, i1 false)
153e1094dd8SFabian Ritter  ret void
154e1094dd8SFabian Ritter}
155e1094dd8SFabian Ritter
156e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz32_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
157e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz32_align_8_8:
158e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
159e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
160e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
161e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:16
162e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
163e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
164e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:16
165e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
166e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
167e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
168e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
169e1094dd8SFabian Ritterentry:
170e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 32, i1 false)
171e1094dd8SFabian Ritter  ret void
172e1094dd8SFabian Ritter}
173e1094dd8SFabian Ritter
174e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz16_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
175e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz16_align_16_16:
176e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
177e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
178e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
179e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
180e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
181e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
182e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
183e1094dd8SFabian Ritterentry:
184e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 16, i1 false)
185e1094dd8SFabian Ritter  ret void
186e1094dd8SFabian Ritter}
187e1094dd8SFabian Ritter
188e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz31_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
189e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz31_align_16_16:
190e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
191e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
192*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
193*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:15
194*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
195*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
196*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:15
197*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
198*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
199e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
200e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
201e1094dd8SFabian Ritterentry:
202e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 31, i1 false)
203e1094dd8SFabian Ritter  ret void
204e1094dd8SFabian Ritter}
205e1094dd8SFabian Ritter
206e1094dd8SFabian Ritterdefine void @memcpy_p0_p0_sz32_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
207e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p0_sz32_align_16_16:
208e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
209e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
210e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
211e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:16
212e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
213e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
214e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:16
215e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
216e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
217e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
218e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
219e1094dd8SFabian Ritterentry:
220e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 32, i1 false)
221e1094dd8SFabian Ritter  ret void
222e1094dd8SFabian Ritter}
223e1094dd8SFabian Ritter
224e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz16_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
225e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz16_align_1_1:
226e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
227e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
228*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
229e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
230*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
231e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
232e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
233e1094dd8SFabian Ritterentry:
234e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 16, i1 false)
235e1094dd8SFabian Ritter  ret void
236e1094dd8SFabian Ritter}
237e1094dd8SFabian Ritter
238e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz31_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
239e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz31_align_1_1:
240e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
241e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
242*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
243*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ubyte v9, v[2:3], off offset:30
244*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ushort v10, v[2:3], off offset:28
245*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx3 v[6:8], v[2:3], off offset:16
246*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
247e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
248*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v9 offset:30
249e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
250*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v10 offset:28
251e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
252*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx3 v[0:1], v[6:8] offset:16
253e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
254*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
255e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
256e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
257e1094dd8SFabian Ritterentry:
258e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 31, i1 false)
259e1094dd8SFabian Ritter  ret void
260e1094dd8SFabian Ritter}
261e1094dd8SFabian Ritter
262e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz32_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
263e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz32_align_1_1:
264e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
265e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
266*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
267*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16
268*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
269e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
270*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:16
271e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
272*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
273e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
274e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
275e1094dd8SFabian Ritterentry:
276e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 32, i1 false)
277e1094dd8SFabian Ritter  ret void
278e1094dd8SFabian Ritter}
279e1094dd8SFabian Ritter
280e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz16_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
281e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz16_align_2_2:
282e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
283e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
284*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
285e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
286*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
287e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
288e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
289e1094dd8SFabian Ritterentry:
290e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 16, i1 false)
291e1094dd8SFabian Ritter  ret void
292e1094dd8SFabian Ritter}
293e1094dd8SFabian Ritter
294e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz31_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
295e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz31_align_2_2:
296e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
297e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
298*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
299*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ubyte v9, v[2:3], off offset:30
300*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ushort v10, v[2:3], off offset:28
301*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx3 v[6:8], v[2:3], off offset:16
302*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
303e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
304*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v9 offset:30
305e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
306*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v10 offset:28
307e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
308*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx3 v[0:1], v[6:8] offset:16
309e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
310*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
311e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
312e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
313e1094dd8SFabian Ritterentry:
314e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 31, i1 false)
315e1094dd8SFabian Ritter  ret void
316e1094dd8SFabian Ritter}
317e1094dd8SFabian Ritter
318e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz32_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
319e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz32_align_2_2:
320e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
321e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
322*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
323*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16
324*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
325e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
326*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:16
327e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
328*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
329e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
330e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
331e1094dd8SFabian Ritterentry:
332e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 32, i1 false)
333e1094dd8SFabian Ritter  ret void
334e1094dd8SFabian Ritter}
335e1094dd8SFabian Ritter
336e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz16_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
337e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz16_align_8_8:
338e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
339e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
340e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
341e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
342e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
343e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
344e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
345e1094dd8SFabian Ritterentry:
346e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 16, i1 false)
347e1094dd8SFabian Ritter  ret void
348e1094dd8SFabian Ritter}
349e1094dd8SFabian Ritter
350e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz31_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
351e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz31_align_8_8:
352e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
353e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
354e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
355*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:15
356*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
357e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
358*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:15
359e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
360*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
361e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
362e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
363e1094dd8SFabian Ritterentry:
364e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 31, i1 false)
365e1094dd8SFabian Ritter  ret void
366e1094dd8SFabian Ritter}
367e1094dd8SFabian Ritter
368e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz32_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
369e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz32_align_8_8:
370e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
371e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
372e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
373e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16
374e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
375e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
376e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:16
377e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
378e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
379e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
380e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
381e1094dd8SFabian Ritterentry:
382e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 32, i1 false)
383e1094dd8SFabian Ritter  ret void
384e1094dd8SFabian Ritter}
385e1094dd8SFabian Ritter
386e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz16_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
387e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz16_align_16_16:
388e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
389e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
390e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
391e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
392e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
393e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
394e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
395e1094dd8SFabian Ritterentry:
396e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 16, i1 false)
397e1094dd8SFabian Ritter  ret void
398e1094dd8SFabian Ritter}
399e1094dd8SFabian Ritter
400e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz31_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
401e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz31_align_16_16:
402e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
403e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
404e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
405*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:15
406*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
407e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
408*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:15
409e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
410*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
411e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
412e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
413e1094dd8SFabian Ritterentry:
414e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 31, i1 false)
415e1094dd8SFabian Ritter  ret void
416e1094dd8SFabian Ritter}
417e1094dd8SFabian Ritter
418e1094dd8SFabian Ritterdefine void @memcpy_p0_p1_sz32_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
419e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p1_sz32_align_16_16:
420e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
421e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
422e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
423e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16
424e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
425e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
426e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7] offset:16
427e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
428e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
429e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
430e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
431e1094dd8SFabian Ritterentry:
432e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 32, i1 false)
433e1094dd8SFabian Ritter  ret void
434e1094dd8SFabian Ritter}
435e1094dd8SFabian Ritter
436e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz16_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
437e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz16_align_1_1:
438e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
439e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
440*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v2 offset1:1
441*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
442*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
443e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
444e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
445e1094dd8SFabian Ritterentry:
446e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 16, i1 false)
447e1094dd8SFabian Ritter  ret void
448e1094dd8SFabian Ritter}
449e1094dd8SFabian Ritter
450e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz31_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
451e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz31_align_1_1:
452e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
453e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
454*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_u8 v9, v2 offset:30
455*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b32 v8, v2 offset:24
456*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_u16 v10, v2 offset:28
457*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[6:7], v2 offset:16
458*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v2 offset1:1
459*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(4)
460*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v9 offset:30
461*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(3)
462*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v10 offset:28
463*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(3)
464*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx3 v[0:1], v[6:8] offset:16
465*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(3)
466*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
467e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
468e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
469e1094dd8SFabian Ritterentry:
470e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 31, i1 false)
471e1094dd8SFabian Ritter  ret void
472e1094dd8SFabian Ritter}
473e1094dd8SFabian Ritter
474e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz32_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
475e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz32_align_1_1:
476e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
477e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
478*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[3:6], v2 offset0:2 offset1:3
479*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[7:10], v2 offset1:1
480*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
481*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6] offset:16
482*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
483*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
484e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
485e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
486e1094dd8SFabian Ritterentry:
487e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 32, i1 false)
488e1094dd8SFabian Ritter  ret void
489e1094dd8SFabian Ritter}
490e1094dd8SFabian Ritter
491e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz16_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
492e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz16_align_2_2:
493e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
494e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
495*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v2 offset1:1
496*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
497*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
498e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
499e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
500e1094dd8SFabian Ritterentry:
501e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 16, i1 false)
502e1094dd8SFabian Ritter  ret void
503e1094dd8SFabian Ritter}
504e1094dd8SFabian Ritter
505e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz31_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
506e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz31_align_2_2:
507e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
508e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
509*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_u8 v9, v2 offset:30
510*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b32 v8, v2 offset:24
511*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_u16 v10, v2 offset:28
512*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[6:7], v2 offset:16
513*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v2 offset1:1
514*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(4)
515*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v9 offset:30
516*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(3)
517*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v10 offset:28
518*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(3)
519*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx3 v[0:1], v[6:8] offset:16
520*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(3)
521*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
522e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
523e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
524e1094dd8SFabian Ritterentry:
525e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 31, i1 false)
526e1094dd8SFabian Ritter  ret void
527e1094dd8SFabian Ritter}
528e1094dd8SFabian Ritter
529e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz32_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
530e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz32_align_2_2:
531e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
532e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
533*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[3:6], v2 offset0:2 offset1:3
534*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[7:10], v2 offset1:1
535*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
536*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6] offset:16
537*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
538*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
539e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
540e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
541e1094dd8SFabian Ritterentry:
542e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 32, i1 false)
543e1094dd8SFabian Ritter  ret void
544e1094dd8SFabian Ritter}
545e1094dd8SFabian Ritter
546e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz16_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
547e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz16_align_8_8:
548e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
549e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
550e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v2 offset1:1
551e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
552e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
553e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
554e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
555e1094dd8SFabian Ritterentry:
556e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 16, i1 false)
557e1094dd8SFabian Ritter  ret void
558e1094dd8SFabian Ritter}
559e1094dd8SFabian Ritter
560e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz31_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
561e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz31_align_8_8:
562e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
563e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
564*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2 offset:15
565*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[7:10], v2 offset1:1
566e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
567*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6] offset:15
568e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
569*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
570e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
571e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
572e1094dd8SFabian Ritterentry:
573e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 31, i1 false)
574e1094dd8SFabian Ritter  ret void
575e1094dd8SFabian Ritter}
576e1094dd8SFabian Ritter
577e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz32_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
578e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz32_align_8_8:
579e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
580e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
581e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[3:6], v2 offset0:2 offset1:3
582e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[7:10], v2 offset1:1
583e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
584e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6] offset:16
585e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
586e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
587e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
588e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
589e1094dd8SFabian Ritterentry:
590e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 32, i1 false)
591e1094dd8SFabian Ritter  ret void
592e1094dd8SFabian Ritter}
593e1094dd8SFabian Ritter
594e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz16_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
595e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz16_align_16_16:
596e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
597e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
598e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[2:5], v2
599e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
600e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
601e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
602e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
603e1094dd8SFabian Ritterentry:
604e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 16, i1 false)
605e1094dd8SFabian Ritter  ret void
606e1094dd8SFabian Ritter}
607e1094dd8SFabian Ritter
608e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz31_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
609e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz31_align_16_16:
610e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
611e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
612*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2 offset:15
613*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[7:10], v2
614e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
615*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6] offset:15
616e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
617*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
618e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
619e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
620e1094dd8SFabian Ritterentry:
621e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 31, i1 false)
622e1094dd8SFabian Ritter  ret void
623e1094dd8SFabian Ritter}
624e1094dd8SFabian Ritter
625e1094dd8SFabian Ritterdefine void @memcpy_p0_p3_sz32_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
626e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p3_sz32_align_16_16:
627e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
628e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
629e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2 offset:16
630e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[7:10], v2
631e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
632e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6] offset:16
633e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
634e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
635e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
636e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
637e1094dd8SFabian Ritterentry:
638e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 32, i1 false)
639e1094dd8SFabian Ritter  ret void
640e1094dd8SFabian Ritter}
641e1094dd8SFabian Ritter
642e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz16_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
643e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz16_align_1_1:
644e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
645e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
646*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off
647e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
648*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5]
649*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off offset:8
650*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
651*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[2:3] offset:8
652e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
653e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
654e1094dd8SFabian Ritterentry:
655e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 16, i1 false)
656e1094dd8SFabian Ritter  ret void
657e1094dd8SFabian Ritter}
658e1094dd8SFabian Ritter
659e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz31_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
660e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz31_align_1_1:
661e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
662e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
663*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off
664e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
665*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5]
666*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off offset:8
667e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
668*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5] offset:8
669*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off offset:16
670e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
671*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5] offset:16
672*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dword v4, v[2:3], off offset:24
673e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
674*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dword v[0:1], v4 offset:24
675*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ushort v4, v[2:3], off offset:28
676e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
677*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v4 offset:28
678*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ubyte v2, v[2:3], off offset:30
679e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
680*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v2 offset:30
681e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
682e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
683e1094dd8SFabian Ritterentry:
684e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 31, i1 false)
685e1094dd8SFabian Ritter  ret void
686e1094dd8SFabian Ritter}
687e1094dd8SFabian Ritter
688e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz32_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
689e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz32_align_1_1:
690e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
691e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
692*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off
693e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
694*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5]
695*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off offset:8
696e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
697*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5] offset:8
698*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off offset:16
699*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
700*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5] offset:16
701*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off offset:24
702*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
703*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[2:3] offset:24
704e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
705e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
706e1094dd8SFabian Ritterentry:
707e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 32, i1 false)
708e1094dd8SFabian Ritter  ret void
709e1094dd8SFabian Ritter}
710e1094dd8SFabian Ritter
711e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz16_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
712e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz16_align_2_2:
713e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
714e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
715*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off
716e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
717*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5]
718*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off offset:8
719e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
720*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[2:3] offset:8
721e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
722e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
723e1094dd8SFabian Ritterentry:
724e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 16, i1 false)
725e1094dd8SFabian Ritter  ret void
726e1094dd8SFabian Ritter}
727e1094dd8SFabian Ritter
728e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz31_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
729e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz31_align_2_2:
730e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
731e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
732*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off
733e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
734*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5]
735*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off offset:8
736*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
737*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5] offset:8
738*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off offset:16
739*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
740*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5] offset:16
741*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dword v4, v[2:3], off offset:24
742*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
743*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dword v[0:1], v4 offset:24
744*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ushort v4, v[2:3], off offset:28
745*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
746*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v4 offset:28
747*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ubyte v2, v[2:3], off offset:30
748*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
749*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v2 offset:30
750e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
751e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
752e1094dd8SFabian Ritterentry:
753e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 31, i1 false)
754e1094dd8SFabian Ritter  ret void
755e1094dd8SFabian Ritter}
756e1094dd8SFabian Ritter
757e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz32_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
758e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz32_align_2_2:
759e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
760e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
761*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off
762e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
763*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5]
764*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off offset:8
765*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
766*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5] offset:8
767*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[4:5], v[2:3], off offset:16
768*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
769*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[4:5] offset:16
770*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off offset:24
771*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
772*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx2 v[0:1], v[2:3] offset:24
773e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
774e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
775e1094dd8SFabian Ritterentry:
776e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 32, i1 false)
777e1094dd8SFabian Ritter  ret void
778e1094dd8SFabian Ritter}
779e1094dd8SFabian Ritter
780e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz16_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
781e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz16_align_8_8:
782e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
783e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
784e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
785e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
786e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
787e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
788e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
789e1094dd8SFabian Ritterentry:
790e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 16, i1 false)
791e1094dd8SFabian Ritter  ret void
792e1094dd8SFabian Ritter}
793e1094dd8SFabian Ritter
794e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz31_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
795e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz31_align_8_8:
796e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
797e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
798e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
799e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
800e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
801e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off offset:15
802e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
803*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5] offset:15
804e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
805e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
806e1094dd8SFabian Ritterentry:
807e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 31, i1 false)
808e1094dd8SFabian Ritter  ret void
809e1094dd8SFabian Ritter}
810e1094dd8SFabian Ritter
811e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz32_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
812e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz32_align_8_8:
813e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
814e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
815e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
816e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
817e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
818e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off offset:16
819e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
820e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5] offset:16
821e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
822e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
823e1094dd8SFabian Ritterentry:
824e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 32, i1 false)
825e1094dd8SFabian Ritter  ret void
826e1094dd8SFabian Ritter}
827e1094dd8SFabian Ritter
828e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz16_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
829e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz16_align_16_16:
830e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
831e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
832e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
833e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
834e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
835e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
836e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
837e1094dd8SFabian Ritterentry:
838e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 16, i1 false)
839e1094dd8SFabian Ritter  ret void
840e1094dd8SFabian Ritter}
841e1094dd8SFabian Ritter
842e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz31_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
843e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz31_align_16_16:
844e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
845e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
846e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
847e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
848e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
849e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off offset:15
850e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
851*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5] offset:15
852e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
853e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
854e1094dd8SFabian Ritterentry:
855e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 31, i1 false)
856e1094dd8SFabian Ritter  ret void
857e1094dd8SFabian Ritter}
858e1094dd8SFabian Ritter
859e1094dd8SFabian Ritterdefine void @memcpy_p0_p4_sz32_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
860e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p4_sz32_align_16_16:
861e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
862e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
863e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
864e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
865e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
866e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off offset:16
867e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
868e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[2:5] offset:16
869e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
870e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
871e1094dd8SFabian Ritterentry:
872e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 32, i1 false)
873e1094dd8SFabian Ritter  ret void
874e1094dd8SFabian Ritter}
875e1094dd8SFabian Ritter
876e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz16_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
877e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz16_align_1_1:
878e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
879e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
880*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
881*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
882*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
883*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
884*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
885e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
886*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
887e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
888e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
889e1094dd8SFabian Ritterentry:
890e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 16, i1 false)
891e1094dd8SFabian Ritter  ret void
892e1094dd8SFabian Ritter}
893e1094dd8SFabian Ritter
894e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz31_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
895e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz31_align_1_1:
896e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
897e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
898*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x8
899*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
900*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
901*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:24
902*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_ushort v10, v2, s[0:3], 0 offen offset:28
903*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_ubyte v11, v2, s[0:3], 0 offen offset:30
904*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
905*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
906*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
907*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
908e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
909*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v10 offset:28
910e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
911*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v11 offset:30
912*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx3 v[0:1], v[7:9] offset:16
913e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
914*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
915e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
916e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
917e1094dd8SFabian Ritterentry:
918e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 31, i1 false)
919e1094dd8SFabian Ritter  ret void
920e1094dd8SFabian Ritter}
921e1094dd8SFabian Ritter
922e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz32_align_1_1(ptr addrspace(0) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
923e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz32_align_1_1:
924e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
925e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
926*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
927*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen offset:16
928*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:20
929*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:24
930*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:28
931*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen
932*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:4
933*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:8
934*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:12
935e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
936*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6] offset:16
937e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
938*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
939e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
940e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
941e1094dd8SFabian Ritterentry:
942e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 32, i1 false)
943e1094dd8SFabian Ritter  ret void
944e1094dd8SFabian Ritter}
945e1094dd8SFabian Ritter
946e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz16_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
947e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz16_align_2_2:
948e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
949e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
950*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
951*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
952*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
953*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
954*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
955e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
956*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
957e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
958e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
959e1094dd8SFabian Ritterentry:
960e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 16, i1 false)
961e1094dd8SFabian Ritter  ret void
962e1094dd8SFabian Ritter}
963e1094dd8SFabian Ritter
964e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz31_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
965e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz31_align_2_2:
966e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
967e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
968*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x8
969*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
970*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
971*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:24
972*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_ushort v10, v2, s[0:3], 0 offen offset:28
973*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_ubyte v11, v2, s[0:3], 0 offen offset:30
974*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
975*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
976*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
977*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
978e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
979*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_short v[0:1], v10 offset:28
980e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
981*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_byte v[0:1], v11 offset:30
982*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx3 v[0:1], v[7:9] offset:16
983e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
984*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
985e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
986e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
987e1094dd8SFabian Ritterentry:
988e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 31, i1 false)
989e1094dd8SFabian Ritter  ret void
990e1094dd8SFabian Ritter}
991e1094dd8SFabian Ritter
992e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz32_align_2_2(ptr addrspace(0) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
993e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz32_align_2_2:
994e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
995e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
996*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
997*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen offset:16
998*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:20
999*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:24
1000*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:28
1001*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen
1002*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:4
1003*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:8
1004*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:12
1005e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
1006*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6] offset:16
1007e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1008*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
1009e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1010e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1011e1094dd8SFabian Ritterentry:
1012e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 32, i1 false)
1013e1094dd8SFabian Ritter  ret void
1014e1094dd8SFabian Ritter}
1015e1094dd8SFabian Ritter
1016e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz16_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
1017e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz16_align_8_8:
1018e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1019e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1020e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x3
1021e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1022e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1023e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1024e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1025e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1026e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
1027e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1028e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1029e1094dd8SFabian Ritterentry:
1030e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 16, i1 false)
1031e1094dd8SFabian Ritter  ret void
1032e1094dd8SFabian Ritter}
1033e1094dd8SFabian Ritter
1034e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz31_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
1035e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz31_align_8_8:
1036e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1037e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1038*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
1039e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1040e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1041e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1042e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1043*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:15
1044*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:19
1045*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:23
1046*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:27
1047e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
1048e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
1049*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1050*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10] offset:15
1051e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1052e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1053e1094dd8SFabian Ritterentry:
1054e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 31, i1 false)
1055e1094dd8SFabian Ritter  ret void
1056e1094dd8SFabian Ritter}
1057e1094dd8SFabian Ritter
1058e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz32_align_8_8(ptr addrspace(0) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
1059e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz32_align_8_8:
1060e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1061e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1062e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x7
1063e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1064e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1065e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1066e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1067e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
1068e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
1069e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:24
1070e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:28
1071e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
1072e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
1073e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1074e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10] offset:16
1075e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1076e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1077e1094dd8SFabian Ritterentry:
1078e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 32, i1 false)
1079e1094dd8SFabian Ritter  ret void
1080e1094dd8SFabian Ritter}
1081e1094dd8SFabian Ritter
1082e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz16_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
1083e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz16_align_16_16:
1084e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1085e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1086e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x3
1087e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1088e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1089e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1090e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1091e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1092e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
1093e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1094e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1095e1094dd8SFabian Ritterentry:
1096e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 16, i1 false)
1097e1094dd8SFabian Ritter  ret void
1098e1094dd8SFabian Ritter}
1099e1094dd8SFabian Ritter
1100e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz31_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
1101e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz31_align_16_16:
1102e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1103e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1104*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
1105e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1106e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1107e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1108e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1109*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:15
1110*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:19
1111*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:23
1112*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:27
1113e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
1114e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
1115*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1116*173c6823SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10] offset:15
1117e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1118e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1119e1094dd8SFabian Ritterentry:
1120e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 31, i1 false)
1121e1094dd8SFabian Ritter  ret void
1122e1094dd8SFabian Ritter}
1123e1094dd8SFabian Ritter
1124e1094dd8SFabian Ritterdefine void @memcpy_p0_p5_sz32_align_16_16(ptr addrspace(0) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
1125e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p0_p5_sz32_align_16_16:
1126e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1127e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1128e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x7
1129e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1130e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1131e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1132e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1133e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
1134e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
1135e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:24
1136e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:28
1137e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
1138e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
1139e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1140e1094dd8SFabian Ritter; CHECK-NEXT:    flat_store_dwordx4 v[0:1], v[7:10] offset:16
1141e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1142e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1143e1094dd8SFabian Ritterentry:
1144e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 32, i1 false)
1145e1094dd8SFabian Ritter  ret void
1146e1094dd8SFabian Ritter}
1147e1094dd8SFabian Ritter
1148e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz16_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
1149e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz16_align_1_1:
1150e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1151e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1152*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
1153e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1154e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1155e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1156e1094dd8SFabian Ritterentry:
1157e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 16, i1 false)
1158e1094dd8SFabian Ritter  ret void
1159e1094dd8SFabian Ritter}
1160e1094dd8SFabian Ritter
1161e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz31_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
1162e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz31_align_1_1:
1163e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1164e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1165*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x2
1166*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx2 v[6:7], v[2:3] offset:23
1167*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx2 v[8:9], v[2:3] offset:16
1168*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
1169e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2) lgkmcnt(2)
1170e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[6:7], off offset:23
1171*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
1172e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[8:9], off offset:16
1173*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1174e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1175e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1176e1094dd8SFabian Ritterentry:
1177e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 31, i1 false)
1178e1094dd8SFabian Ritter  ret void
1179e1094dd8SFabian Ritter}
1180e1094dd8SFabian Ritter
1181e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz32_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
1182e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz32_align_1_1:
1183e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1184e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1185*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1186*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:16
1187*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
1188*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
1189*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:16
1190e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1191*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1192e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1193e1094dd8SFabian Ritterentry:
1194e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 32, i1 false)
1195e1094dd8SFabian Ritter  ret void
1196e1094dd8SFabian Ritter}
1197e1094dd8SFabian Ritter
1198e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz16_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
1199e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz16_align_2_2:
1200e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1201e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1202*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
1203e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1204e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1205e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1206e1094dd8SFabian Ritterentry:
1207e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 16, i1 false)
1208e1094dd8SFabian Ritter  ret void
1209e1094dd8SFabian Ritter}
1210e1094dd8SFabian Ritter
1211e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz31_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
1212e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz31_align_2_2:
1213e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1214e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1215*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x2
1216*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx2 v[6:7], v[2:3] offset:23
1217*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx2 v[8:9], v[2:3] offset:16
1218*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
1219e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2) lgkmcnt(2)
1220*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[6:7], off offset:23
1221*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
1222*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[8:9], off offset:16
1223e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1224e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1225e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1226e1094dd8SFabian Ritterentry:
1227e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 31, i1 false)
1228e1094dd8SFabian Ritter  ret void
1229e1094dd8SFabian Ritter}
1230e1094dd8SFabian Ritter
1231e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz32_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
1232e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz32_align_2_2:
1233e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1234e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1235*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1236*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:16
1237*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
1238*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
1239*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:16
1240e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1241*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1242e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1243e1094dd8SFabian Ritterentry:
1244e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 32, i1 false)
1245e1094dd8SFabian Ritter  ret void
1246e1094dd8SFabian Ritter}
1247e1094dd8SFabian Ritter
1248e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz16_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
1249e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz16_align_8_8:
1250e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1251e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1252e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
1253e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1254e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1255e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1256e1094dd8SFabian Ritterentry:
1257e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 16, i1 false)
1258e1094dd8SFabian Ritter  ret void
1259e1094dd8SFabian Ritter}
1260e1094dd8SFabian Ritter
1261e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz31_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
1262e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz31_align_8_8:
1263e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1264e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1265*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1266*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:15
1267*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
1268e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
1269*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:15
1270e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1271*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1272e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1273e1094dd8SFabian Ritterentry:
1274e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 31, i1 false)
1275e1094dd8SFabian Ritter  ret void
1276e1094dd8SFabian Ritter}
1277e1094dd8SFabian Ritter
1278e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz32_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
1279e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz32_align_8_8:
1280e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1281e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1282e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1283e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:16
1284e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
1285e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
1286e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:16
1287e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1288e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1289e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1290e1094dd8SFabian Ritterentry:
1291e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 32, i1 false)
1292e1094dd8SFabian Ritter  ret void
1293e1094dd8SFabian Ritter}
1294e1094dd8SFabian Ritter
1295e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz16_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
1296e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz16_align_16_16:
1297e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1298e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1299e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[2:5], v[2:3]
1300e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1301e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1302e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1303e1094dd8SFabian Ritterentry:
1304e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 16, i1 false)
1305e1094dd8SFabian Ritter  ret void
1306e1094dd8SFabian Ritter}
1307e1094dd8SFabian Ritter
1308e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz31_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
1309e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz31_align_16_16:
1310e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1311e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1312*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1313*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:15
1314*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
1315e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
1316*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:15
1317e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1318*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1319e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1320e1094dd8SFabian Ritterentry:
1321e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 31, i1 false)
1322e1094dd8SFabian Ritter  ret void
1323e1094dd8SFabian Ritter}
1324e1094dd8SFabian Ritter
1325e1094dd8SFabian Ritterdefine void @memcpy_p1_p0_sz32_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
1326e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p0_sz32_align_16_16:
1327e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1328e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1329e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1330e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[4:7], v[2:3] offset:16
1331e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
1332e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
1333e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:16
1334e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1335e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1336e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1337e1094dd8SFabian Ritterentry:
1338e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 32, i1 false)
1339e1094dd8SFabian Ritter  ret void
1340e1094dd8SFabian Ritter}
1341e1094dd8SFabian Ritter
1342e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz16_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
1343e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz16_align_1_1:
1344e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1345e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1346e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
1347e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1348e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1349e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1350e1094dd8SFabian Ritterentry:
1351e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 16, i1 false)
1352e1094dd8SFabian Ritter  ret void
1353e1094dd8SFabian Ritter}
1354e1094dd8SFabian Ritter
1355e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz31_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
1356e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz31_align_1_1:
1357e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1358e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1359e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x2
1360e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[8:9], v[2:3], off offset:23
1361e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
1362e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off offset:16
1363e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
1364e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[8:9], off offset:23
1365e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1366e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off
1367e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1368e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off offset:16
1369e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1370e1094dd8SFabian Ritterentry:
1371e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 31, i1 false)
1372e1094dd8SFabian Ritter  ret void
1373e1094dd8SFabian Ritter}
1374e1094dd8SFabian Ritter
1375e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz32_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
1376e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz32_align_1_1:
1377e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1378e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1379e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1380e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16
1381e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
1382e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1383e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:16
1384e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1385e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1386e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1387e1094dd8SFabian Ritterentry:
1388e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 32, i1 false)
1389e1094dd8SFabian Ritter  ret void
1390e1094dd8SFabian Ritter}
1391e1094dd8SFabian Ritter
1392e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz16_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
1393e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz16_align_2_2:
1394e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1395e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1396e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
1397e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1398e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1399e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1400e1094dd8SFabian Ritterentry:
1401e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 16, i1 false)
1402e1094dd8SFabian Ritter  ret void
1403e1094dd8SFabian Ritter}
1404e1094dd8SFabian Ritter
1405e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz31_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
1406e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz31_align_2_2:
1407e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1408e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1409e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x2
1410e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[8:9], v[2:3], off offset:23
1411e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
1412e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off offset:16
1413e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
1414e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[8:9], off offset:23
1415e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1416e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off
1417e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1418e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off offset:16
1419e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1420e1094dd8SFabian Ritterentry:
1421e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 31, i1 false)
1422e1094dd8SFabian Ritter  ret void
1423e1094dd8SFabian Ritter}
1424e1094dd8SFabian Ritter
1425e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz32_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
1426e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz32_align_2_2:
1427e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1428e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1429e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1430e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16
1431e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
1432e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1433e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:16
1434e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1435e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1436e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1437e1094dd8SFabian Ritterentry:
1438e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 32, i1 false)
1439e1094dd8SFabian Ritter  ret void
1440e1094dd8SFabian Ritter}
1441e1094dd8SFabian Ritter
1442e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz16_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
1443e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz16_align_8_8:
1444e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1445e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1446e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
1447e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1448e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1449e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1450e1094dd8SFabian Ritterentry:
1451e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 16, i1 false)
1452e1094dd8SFabian Ritter  ret void
1453e1094dd8SFabian Ritter}
1454e1094dd8SFabian Ritter
1455e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz31_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
1456e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz31_align_8_8:
1457e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1458e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1459e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1460e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:15
1461e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
1462e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1463e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:15
1464e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1465e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1466e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1467e1094dd8SFabian Ritterentry:
1468e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 31, i1 false)
1469e1094dd8SFabian Ritter  ret void
1470e1094dd8SFabian Ritter}
1471e1094dd8SFabian Ritter
1472e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz32_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
1473e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz32_align_8_8:
1474e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1475e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1476e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1477e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16
1478e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
1479e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1480e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:16
1481e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1482e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1483e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1484e1094dd8SFabian Ritterentry:
1485e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 32, i1 false)
1486e1094dd8SFabian Ritter  ret void
1487e1094dd8SFabian Ritter}
1488e1094dd8SFabian Ritter
1489e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz16_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
1490e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz16_align_16_16:
1491e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1492e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1493e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
1494e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1495e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1496e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1497e1094dd8SFabian Ritterentry:
1498e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 16, i1 false)
1499e1094dd8SFabian Ritter  ret void
1500e1094dd8SFabian Ritter}
1501e1094dd8SFabian Ritter
1502e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz31_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
1503e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz31_align_16_16:
1504e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1505e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1506e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1507e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:15
1508e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
1509e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1510e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:15
1511e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1512e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1513e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1514e1094dd8SFabian Ritterentry:
1515e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 31, i1 false)
1516e1094dd8SFabian Ritter  ret void
1517e1094dd8SFabian Ritter}
1518e1094dd8SFabian Ritter
1519e1094dd8SFabian Ritterdefine void @memcpy_p1_p1_sz32_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
1520e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p1_sz32_align_16_16:
1521e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1522e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1523e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1524e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16
1525e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off
1526e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1527e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:16
1528e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1529e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off
1530e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1531e1094dd8SFabian Ritterentry:
1532e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 32, i1 false)
1533e1094dd8SFabian Ritter  ret void
1534e1094dd8SFabian Ritter}
1535e1094dd8SFabian Ritter
1536e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz16_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
1537e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz16_align_1_1:
1538e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1539e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1540e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[2:5], v2
1541e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1542e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1543e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1544e1094dd8SFabian Ritterentry:
1545e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 16, i1 false)
1546e1094dd8SFabian Ritter  ret void
1547e1094dd8SFabian Ritter}
1548e1094dd8SFabian Ritter
1549e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz31_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
1550e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz31_align_1_1:
1551e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1552e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1553e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[7:8], v2
1554e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2 offset:8
1555e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[9:10], v2 offset:23
1556e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
1557e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[7:8], off
1558e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
1559e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off offset:8
1560e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1561e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[9:10], off offset:23
1562e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1563e1094dd8SFabian Ritterentry:
1564e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 31, i1 false)
1565e1094dd8SFabian Ritter  ret void
1566e1094dd8SFabian Ritter}
1567e1094dd8SFabian Ritter
1568e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz32_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
1569e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz32_align_1_1:
1570e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1571e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1572e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2
1573e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[7:10], v2 offset:16
1574e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
1575e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1576e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1577e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:16
1578e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1579e1094dd8SFabian Ritterentry:
1580e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 32, i1 false)
1581e1094dd8SFabian Ritter  ret void
1582e1094dd8SFabian Ritter}
1583e1094dd8SFabian Ritter
1584e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz16_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
1585e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz16_align_2_2:
1586e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1587e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1588e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[2:5], v2
1589e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1590e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1591e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1592e1094dd8SFabian Ritterentry:
1593e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 16, i1 false)
1594e1094dd8SFabian Ritter  ret void
1595e1094dd8SFabian Ritter}
1596e1094dd8SFabian Ritter
1597e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz31_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
1598e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz31_align_2_2:
1599e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1600e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1601e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[7:8], v2
1602e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2 offset:8
1603e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[9:10], v2 offset:23
1604e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
1605e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[7:8], off
1606e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
1607e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off offset:8
1608e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1609e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[9:10], off offset:23
1610e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1611e1094dd8SFabian Ritterentry:
1612e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 31, i1 false)
1613e1094dd8SFabian Ritter  ret void
1614e1094dd8SFabian Ritter}
1615e1094dd8SFabian Ritter
1616e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz32_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
1617e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz32_align_2_2:
1618e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1619e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1620e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2
1621e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[7:10], v2 offset:16
1622e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
1623e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1624e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1625e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:16
1626e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1627e1094dd8SFabian Ritterentry:
1628e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 32, i1 false)
1629e1094dd8SFabian Ritter  ret void
1630e1094dd8SFabian Ritter}
1631e1094dd8SFabian Ritter
1632e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz16_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
1633e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz16_align_8_8:
1634e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1635e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1636e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v2 offset1:1
1637e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1638e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1639e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1640e1094dd8SFabian Ritterentry:
1641e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 16, i1 false)
1642e1094dd8SFabian Ritter  ret void
1643e1094dd8SFabian Ritter}
1644e1094dd8SFabian Ritter
1645e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz31_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
1646e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz31_align_8_8:
1647e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1648e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1649e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[3:6], v2 offset1:1
1650e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[7:10], v2 offset:15
1651e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
1652e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1653e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1654e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:15
1655e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1656e1094dd8SFabian Ritterentry:
1657e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 31, i1 false)
1658e1094dd8SFabian Ritter  ret void
1659e1094dd8SFabian Ritter}
1660e1094dd8SFabian Ritter
1661e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz32_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
1662e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz32_align_8_8:
1663e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1664e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1665e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[3:6], v2 offset1:1
1666e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[7:10], v2 offset0:2 offset1:3
1667e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
1668e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1669e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1670e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:16
1671e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1672e1094dd8SFabian Ritterentry:
1673e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 32, i1 false)
1674e1094dd8SFabian Ritter  ret void
1675e1094dd8SFabian Ritter}
1676e1094dd8SFabian Ritter
1677e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz16_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
1678e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz16_align_16_16:
1679e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1680e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1681e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[2:5], v2
1682e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1683e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1684e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1685e1094dd8SFabian Ritterentry:
1686e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 16, i1 false)
1687e1094dd8SFabian Ritter  ret void
1688e1094dd8SFabian Ritter}
1689e1094dd8SFabian Ritter
1690e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz31_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
1691e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz31_align_16_16:
1692e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1693e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1694e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2
1695e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[7:10], v2 offset:15
1696e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
1697e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1698e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1699e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:15
1700e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1701e1094dd8SFabian Ritterentry:
1702e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 31, i1 false)
1703e1094dd8SFabian Ritter  ret void
1704e1094dd8SFabian Ritter}
1705e1094dd8SFabian Ritter
1706e1094dd8SFabian Ritterdefine void @memcpy_p1_p3_sz32_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
1707e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p3_sz32_align_16_16:
1708e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1709e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1710e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[3:6], v2
1711e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[7:10], v2 offset:16
1712e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
1713e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1714e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
1715e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:16
1716e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1717e1094dd8SFabian Ritterentry:
1718e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 32, i1 false)
1719e1094dd8SFabian Ritter  ret void
1720e1094dd8SFabian Ritter}
1721e1094dd8SFabian Ritter
1722e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz16_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
1723e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz16_align_1_1:
1724e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1725e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1726e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
1727e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1728e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1729e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1730e1094dd8SFabian Ritterentry:
1731e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 16, i1 false)
1732e1094dd8SFabian Ritter  ret void
1733e1094dd8SFabian Ritter}
1734e1094dd8SFabian Ritter
1735e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz31_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
1736e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz31_align_1_1:
1737e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1738e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1739e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1740e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[8:9], v[2:3], off
1741e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:8
1742e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1743e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[8:9], off
1744e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1745e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:8
1746e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off offset:23
1747e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1748e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off offset:23
1749e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1750e1094dd8SFabian Ritterentry:
1751e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 31, i1 false)
1752e1094dd8SFabian Ritter  ret void
1753e1094dd8SFabian Ritter}
1754e1094dd8SFabian Ritter
1755e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz32_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
1756e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz32_align_1_1:
1757e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1758e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1759e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1760e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
1761e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off offset:16
1762e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1763e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off
1764e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1765e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off offset:16
1766e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1767e1094dd8SFabian Ritterentry:
1768e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 32, i1 false)
1769e1094dd8SFabian Ritter  ret void
1770e1094dd8SFabian Ritter}
1771e1094dd8SFabian Ritter
1772e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz16_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
1773e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz16_align_2_2:
1774e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1775e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1776e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
1777e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1778e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1779e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1780e1094dd8SFabian Ritterentry:
1781e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 16, i1 false)
1782e1094dd8SFabian Ritter  ret void
1783e1094dd8SFabian Ritter}
1784e1094dd8SFabian Ritter
1785e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz31_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
1786e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz31_align_2_2:
1787e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1788e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1789e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1790e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[8:9], v[2:3], off
1791e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:8
1792e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1793e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[8:9], off
1794e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1795e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off offset:8
1796e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off offset:23
1797e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1798e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off offset:23
1799e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1800e1094dd8SFabian Ritterentry:
1801e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 31, i1 false)
1802e1094dd8SFabian Ritter  ret void
1803e1094dd8SFabian Ritter}
1804e1094dd8SFabian Ritter
1805e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz32_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
1806e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz32_align_2_2:
1807e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1808e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1809e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
1810e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
1811e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[8:11], v[2:3], off offset:16
1812e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
1813e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off
1814e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1815e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[8:11], off offset:16
1816e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1817e1094dd8SFabian Ritterentry:
1818e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 32, i1 false)
1819e1094dd8SFabian Ritter  ret void
1820e1094dd8SFabian Ritter}
1821e1094dd8SFabian Ritter
1822e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz16_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
1823e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz16_align_8_8:
1824e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1825e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1826e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
1827e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1828e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1829e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1830e1094dd8SFabian Ritterentry:
1831e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 16, i1 false)
1832e1094dd8SFabian Ritter  ret void
1833e1094dd8SFabian Ritter}
1834e1094dd8SFabian Ritter
1835e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz31_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
1836e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz31_align_8_8:
1837e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1838e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1839e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
1840e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1841e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off
1842e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off offset:15
1843e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1844e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off offset:15
1845e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1846e1094dd8SFabian Ritterentry:
1847e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 31, i1 false)
1848e1094dd8SFabian Ritter  ret void
1849e1094dd8SFabian Ritter}
1850e1094dd8SFabian Ritter
1851e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz32_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
1852e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz32_align_8_8:
1853e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1854e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1855e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
1856e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1857e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off
1858e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off offset:16
1859e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1860e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off offset:16
1861e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1862e1094dd8SFabian Ritterentry:
1863e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 32, i1 false)
1864e1094dd8SFabian Ritter  ret void
1865e1094dd8SFabian Ritter}
1866e1094dd8SFabian Ritter
1867e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz16_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
1868e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz16_align_16_16:
1869e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1870e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1871e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off
1872e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1873e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
1874e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1875e1094dd8SFabian Ritterentry:
1876e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 16, i1 false)
1877e1094dd8SFabian Ritter  ret void
1878e1094dd8SFabian Ritter}
1879e1094dd8SFabian Ritter
1880e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz31_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
1881e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz31_align_16_16:
1882e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1883e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1884e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
1885e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1886e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off
1887e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off offset:15
1888e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1889e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off offset:15
1890e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1891e1094dd8SFabian Ritterentry:
1892e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 31, i1 false)
1893e1094dd8SFabian Ritter  ret void
1894e1094dd8SFabian Ritter}
1895e1094dd8SFabian Ritter
1896e1094dd8SFabian Ritterdefine void @memcpy_p1_p4_sz32_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
1897e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p4_sz32_align_16_16:
1898e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1899e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1900e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off
1901e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1902e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[4:7], off
1903e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off offset:16
1904e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1905e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off offset:16
1906e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1907e1094dd8SFabian Ritterentry:
1908e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 32, i1 false)
1909e1094dd8SFabian Ritter  ret void
1910e1094dd8SFabian Ritter}
1911e1094dd8SFabian Ritter
1912e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz16_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
1913e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz16_align_1_1:
1914e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1915e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1916*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
1917*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1918*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1919*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1920*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1921e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1922*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1923e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1924e1094dd8SFabian Ritterentry:
1925e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 16, i1 false)
1926e1094dd8SFabian Ritter  ret void
1927e1094dd8SFabian Ritter}
1928e1094dd8SFabian Ritter
1929e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz31_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
1930e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz31_align_1_1:
1931e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1932e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1933*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
1934*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1935*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1936*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1937*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1938*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
1939*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
1940*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:23
1941*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:27
1942*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
1943*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1944e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
1945*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[7:8], off offset:16
1946e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1947*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[9:10], off offset:23
1948e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1949e1094dd8SFabian Ritterentry:
1950e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 31, i1 false)
1951e1094dd8SFabian Ritter  ret void
1952e1094dd8SFabian Ritter}
1953e1094dd8SFabian Ritter
1954e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz32_align_1_1(ptr addrspace(1) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
1955e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz32_align_1_1:
1956e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1957e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1958*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
1959*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1960*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1961*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1962*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1963*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
1964*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
1965*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:24
1966*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:28
1967e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
1968*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1969e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1970*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:16
1971e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1972e1094dd8SFabian Ritterentry:
1973e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 32, i1 false)
1974e1094dd8SFabian Ritter  ret void
1975e1094dd8SFabian Ritter}
1976e1094dd8SFabian Ritter
1977e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz16_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
1978e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz16_align_2_2:
1979e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1980e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1981*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
1982*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
1983*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
1984*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
1985*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
1986e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
1987*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
1988e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
1989e1094dd8SFabian Ritterentry:
1990e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 16, i1 false)
1991e1094dd8SFabian Ritter  ret void
1992e1094dd8SFabian Ritter}
1993e1094dd8SFabian Ritter
1994e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz31_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
1995e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz31_align_2_2:
1996e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
1997e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1998*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
1999*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
2000*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
2001*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
2002*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
2003*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
2004*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
2005*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:23
2006*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:27
2007e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
2008*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
2009e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
2010*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[7:8], off offset:16
2011e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2012*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx2 v[0:1], v[9:10], off offset:23
2013e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2014e1094dd8SFabian Ritterentry:
2015e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 31, i1 false)
2016e1094dd8SFabian Ritter  ret void
2017e1094dd8SFabian Ritter}
2018e1094dd8SFabian Ritter
2019e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz32_align_2_2(ptr addrspace(1) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
2020e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz32_align_2_2:
2021e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2022e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2023*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
2024*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
2025*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
2026*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
2027*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
2028*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
2029*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
2030*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:24
2031*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:28
2032e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
2033*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
2034e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2035*173c6823SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:16
2036e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2037e1094dd8SFabian Ritterentry:
2038e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 32, i1 false)
2039e1094dd8SFabian Ritter  ret void
2040e1094dd8SFabian Ritter}
2041e1094dd8SFabian Ritter
2042e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz16_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
2043e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz16_align_8_8:
2044e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2045e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2046e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x3
2047e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
2048e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
2049e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
2050e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
2051e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2052e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
2053e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2054e1094dd8SFabian Ritterentry:
2055e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 16, i1 false)
2056e1094dd8SFabian Ritter  ret void
2057e1094dd8SFabian Ritter}
2058e1094dd8SFabian Ritter
2059e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz31_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
2060e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz31_align_8_8:
2061e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2062e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2063*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
2064e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
2065e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
2066e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
2067e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
2068*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:15
2069*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:19
2070*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:23
2071*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:27
2072e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
2073e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
2074*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2075e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:15
2076e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2077e1094dd8SFabian Ritterentry:
2078e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 31, i1 false)
2079e1094dd8SFabian Ritter  ret void
2080e1094dd8SFabian Ritter}
2081e1094dd8SFabian Ritter
2082e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz32_align_8_8(ptr addrspace(1) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
2083e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz32_align_8_8:
2084e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2085e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2086e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x7
2087e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
2088e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
2089e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
2090e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
2091e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
2092e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
2093e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:24
2094e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:28
2095e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
2096e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
2097e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2098e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:16
2099e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2100e1094dd8SFabian Ritterentry:
2101e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 32, i1 false)
2102e1094dd8SFabian Ritter  ret void
2103e1094dd8SFabian Ritter}
2104e1094dd8SFabian Ritter
2105e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz16_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
2106e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz16_align_16_16:
2107e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2108e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2109e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x3
2110e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
2111e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
2112e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
2113e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
2114e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2115e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
2116e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2117e1094dd8SFabian Ritterentry:
2118e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 16, i1 false)
2119e1094dd8SFabian Ritter  ret void
2120e1094dd8SFabian Ritter}
2121e1094dd8SFabian Ritter
2122e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz31_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
2123e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz31_align_16_16:
2124e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2125e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2126*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
2127e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
2128e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
2129e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
2130e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
2131*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:15
2132*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:19
2133*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:23
2134*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:27
2135e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
2136e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
2137*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2138e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:15
2139e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2140e1094dd8SFabian Ritterentry:
2141e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 31, i1 false)
2142e1094dd8SFabian Ritter  ret void
2143e1094dd8SFabian Ritter}
2144e1094dd8SFabian Ritter
2145e1094dd8SFabian Ritterdefine void @memcpy_p1_p5_sz32_align_16_16(ptr addrspace(1) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
2146e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p1_p5_sz32_align_16_16:
2147e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2148e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2149e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x7
2150e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v2, s[0:3], 0 offen
2151e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v2, s[0:3], 0 offen offset:4
2152e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v2, s[0:3], 0 offen offset:8
2153e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v2, s[0:3], 0 offen offset:12
2154e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v2, s[0:3], 0 offen offset:16
2155e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v2, s[0:3], 0 offen offset:20
2156e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v2, s[0:3], 0 offen offset:24
2157e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v10, v2, s[0:3], 0 offen offset:28
2158e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
2159e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
2160e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2161e1094dd8SFabian Ritter; CHECK-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off offset:16
2162e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2163e1094dd8SFabian Ritterentry:
2164e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 32, i1 false)
2165e1094dd8SFabian Ritter  ret void
2166e1094dd8SFabian Ritter}
2167e1094dd8SFabian Ritter
2168e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz16_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
2169e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz16_align_1_1:
2170e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2171e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2172*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
2173e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2174e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2175e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2176e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2177e1094dd8SFabian Ritterentry:
2178e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 16, i1 false)
2179e1094dd8SFabian Ritter  ret void
2180e1094dd8SFabian Ritter}
2181e1094dd8SFabian Ritter
2182e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz31_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
2183e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz31_align_1_1:
2184e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2185e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2186*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x2
2187*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx2 v[5:6], v[1:2] offset:23
2188*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx2 v[7:8], v[1:2] offset:16
2189*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
2190e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2) lgkmcnt(2)
2191*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[5:6] offset:23
2192*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(2)
2193*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[7:8] offset:16
2194*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(2)
2195*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2196e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2197e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2198e1094dd8SFabian Ritterentry:
2199e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 31, i1 false)
2200e1094dd8SFabian Ritter  ret void
2201e1094dd8SFabian Ritter}
2202e1094dd8SFabian Ritter
2203e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz32_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
2204e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz32_align_1_1:
2205e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2206e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2207*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2208*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:16
2209*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
2210*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
2211*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset0:2 offset1:3
2212*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
2213*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset1:1
2214e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2215e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2216e1094dd8SFabian Ritterentry:
2217e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 32, i1 false)
2218e1094dd8SFabian Ritter  ret void
2219e1094dd8SFabian Ritter}
2220e1094dd8SFabian Ritter
2221e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz16_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
2222e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz16_align_2_2:
2223e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2224e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2225*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
2226e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2227e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2228e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2229e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2230e1094dd8SFabian Ritterentry:
2231e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 16, i1 false)
2232e1094dd8SFabian Ritter  ret void
2233e1094dd8SFabian Ritter}
2234e1094dd8SFabian Ritter
2235e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz31_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
2236e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz31_align_2_2:
2237e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2238e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2239*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x2
2240*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx2 v[5:6], v[1:2] offset:23
2241*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx2 v[7:8], v[1:2] offset:16
2242*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
2243e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2) lgkmcnt(2)
2244*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[5:6] offset:23
2245*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(2)
2246*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[7:8] offset:16
2247*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(2)
2248*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2249e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2250e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2251e1094dd8SFabian Ritterentry:
2252e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 31, i1 false)
2253e1094dd8SFabian Ritter  ret void
2254e1094dd8SFabian Ritter}
2255e1094dd8SFabian Ritter
2256e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz32_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
2257e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz32_align_2_2:
2258e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2259e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2260*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2261*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:16
2262*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
2263*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
2264*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset0:2 offset1:3
2265*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
2266*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset1:1
2267e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2268e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2269e1094dd8SFabian Ritterentry:
2270e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 32, i1 false)
2271e1094dd8SFabian Ritter  ret void
2272e1094dd8SFabian Ritter}
2273e1094dd8SFabian Ritter
2274e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz16_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
2275e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz16_align_8_8:
2276e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2277e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2278e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
2279e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2280e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2281e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2282e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2283e1094dd8SFabian Ritterentry:
2284e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 16, i1 false)
2285e1094dd8SFabian Ritter  ret void
2286e1094dd8SFabian Ritter}
2287e1094dd8SFabian Ritter
2288e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz31_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
2289e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz31_align_8_8:
2290e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2291e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2292*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2293*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2]
2294*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2] offset:15
2295e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
2296*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2297*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
2298*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10] offset:15
2299e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2300e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2301e1094dd8SFabian Ritterentry:
2302e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 31, i1 false)
2303e1094dd8SFabian Ritter  ret void
2304e1094dd8SFabian Ritter}
2305e1094dd8SFabian Ritter
2306e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz32_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
2307e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz32_align_8_8:
2308e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2309e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2310e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2311e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:16
2312e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
2313e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
2314e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset0:2 offset1:3
2315e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
2316e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset1:1
2317e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2318e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2319e1094dd8SFabian Ritterentry:
2320e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 32, i1 false)
2321e1094dd8SFabian Ritter  ret void
2322e1094dd8SFabian Ritter}
2323e1094dd8SFabian Ritter
2324e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz16_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
2325e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz16_align_16_16:
2326e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2327e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2328e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
2329e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2330e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[1:4]
2331e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2332e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2333e1094dd8SFabian Ritterentry:
2334e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 16, i1 false)
2335e1094dd8SFabian Ritter  ret void
2336e1094dd8SFabian Ritter}
2337e1094dd8SFabian Ritter
2338e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz31_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
2339e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz31_align_16_16:
2340e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2341e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2342*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2343*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:15
2344*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
2345e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
2346*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[3:6] offset:15
2347*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
2348*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10]
2349e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2350e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2351e1094dd8SFabian Ritterentry:
2352e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 31, i1 false)
2353e1094dd8SFabian Ritter  ret void
2354e1094dd8SFabian Ritter}
2355e1094dd8SFabian Ritter
2356e1094dd8SFabian Ritterdefine void @memcpy_p3_p0_sz32_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
2357e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p0_sz32_align_16_16:
2358e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2359e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2360e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2361e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:16
2362e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
2363e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
2364e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[3:6] offset:16
2365e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(1)
2366e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10]
2367e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2368e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2369e1094dd8SFabian Ritterentry:
2370e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 32, i1 false)
2371e1094dd8SFabian Ritter  ret void
2372e1094dd8SFabian Ritter}
2373e1094dd8SFabian Ritter
2374e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz16_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
2375e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz16_align_1_1:
2376e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2377e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2378e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
2379e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2380e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2381e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2382e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2383e1094dd8SFabian Ritterentry:
2384e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 16, i1 false)
2385e1094dd8SFabian Ritter  ret void
2386e1094dd8SFabian Ritter}
2387e1094dd8SFabian Ritter
2388e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz31_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
2389e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz31_align_1_1:
2390e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2391e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2392e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x2
2393e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2394e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[7:8], v[1:2], off offset:16
2395e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[1:2], v[1:2], off offset:23
2396e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
2397e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2398e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2399e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[7:8] offset:16
2400e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2401e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[1:2] offset:23
2402e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2403e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2404e1094dd8SFabian Ritterentry:
2405e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 31, i1 false)
2406e1094dd8SFabian Ritter  ret void
2407e1094dd8SFabian Ritter}
2408e1094dd8SFabian Ritter
2409e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz32_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
2410e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz32_align_1_1:
2411e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2412e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2413e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2414e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2415e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
2416e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2417e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2418e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2419e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset0:2 offset1:3
2420e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2421e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2422e1094dd8SFabian Ritterentry:
2423e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 32, i1 false)
2424e1094dd8SFabian Ritter  ret void
2425e1094dd8SFabian Ritter}
2426e1094dd8SFabian Ritter
2427e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz16_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
2428e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz16_align_2_2:
2429e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2430e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2431e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
2432e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2433e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2434e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2435e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2436e1094dd8SFabian Ritterentry:
2437e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 16, i1 false)
2438e1094dd8SFabian Ritter  ret void
2439e1094dd8SFabian Ritter}
2440e1094dd8SFabian Ritter
2441e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz31_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
2442e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz31_align_2_2:
2443e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2444e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2445e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x2
2446e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2447e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[7:8], v[1:2], off offset:16
2448e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[1:2], v[1:2], off offset:23
2449e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
2450e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2451e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2452e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[7:8] offset:16
2453e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2454e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[1:2] offset:23
2455e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2456e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2457e1094dd8SFabian Ritterentry:
2458e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 31, i1 false)
2459e1094dd8SFabian Ritter  ret void
2460e1094dd8SFabian Ritter}
2461e1094dd8SFabian Ritter
2462e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz32_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
2463e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz32_align_2_2:
2464e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2465e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2466e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2467e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2468e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
2469e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2470e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2471e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2472e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset0:2 offset1:3
2473e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2474e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2475e1094dd8SFabian Ritterentry:
2476e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 32, i1 false)
2477e1094dd8SFabian Ritter  ret void
2478e1094dd8SFabian Ritter}
2479e1094dd8SFabian Ritter
2480e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz16_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
2481e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz16_align_8_8:
2482e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2483e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2484e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
2485e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2486e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2487e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2488e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2489e1094dd8SFabian Ritterentry:
2490e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 16, i1 false)
2491e1094dd8SFabian Ritter  ret void
2492e1094dd8SFabian Ritter}
2493e1094dd8SFabian Ritter
2494e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz31_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
2495e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz31_align_8_8:
2496e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2497e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2498e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2499e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2500e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:15
2501e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2502e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2503e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2504e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10] offset:15
2505e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2506e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2507e1094dd8SFabian Ritterentry:
2508e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 31, i1 false)
2509e1094dd8SFabian Ritter  ret void
2510e1094dd8SFabian Ritter}
2511e1094dd8SFabian Ritter
2512e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz32_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
2513e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz32_align_8_8:
2514e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2515e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2516e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2517e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2518e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
2519e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2520e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2521e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2522e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset0:2 offset1:3
2523e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2524e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2525e1094dd8SFabian Ritterentry:
2526e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 32, i1 false)
2527e1094dd8SFabian Ritter  ret void
2528e1094dd8SFabian Ritter}
2529e1094dd8SFabian Ritter
2530e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz16_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
2531e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz16_align_16_16:
2532e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2533e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2534e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
2535e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2536e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[1:4]
2537e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2538e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2539e1094dd8SFabian Ritterentry:
2540e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 16, i1 false)
2541e1094dd8SFabian Ritter  ret void
2542e1094dd8SFabian Ritter}
2543e1094dd8SFabian Ritter
2544e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz31_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
2545e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz31_align_16_16:
2546e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2547e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2548e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2549e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2550e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:15
2551e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2552e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[3:6]
2553e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2554e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10] offset:15
2555e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2556e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2557e1094dd8SFabian Ritterentry:
2558e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 31, i1 false)
2559e1094dd8SFabian Ritter  ret void
2560e1094dd8SFabian Ritter}
2561e1094dd8SFabian Ritter
2562e1094dd8SFabian Ritterdefine void @memcpy_p3_p1_sz32_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
2563e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p1_sz32_align_16_16:
2564e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2565e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2566e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2567e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2568e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
2569e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2570e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[3:6]
2571e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2572e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10] offset:16
2573e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2574e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2575e1094dd8SFabian Ritterentry:
2576e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 32, i1 false)
2577e1094dd8SFabian Ritter  ret void
2578e1094dd8SFabian Ritter}
2579e1094dd8SFabian Ritter
2580e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz16_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
2581e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz16_align_1_1:
2582e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2583e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2584e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[1:4], v1 offset1:1
2585e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2586e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2587e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2588e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2589e1094dd8SFabian Ritterentry:
2590e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 16, i1 false)
2591e1094dd8SFabian Ritter  ret void
2592e1094dd8SFabian Ritter}
2593e1094dd8SFabian Ritter
2594e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz31_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
2595e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz31_align_1_1:
2596e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2597e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2598e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[5:6], v1 offset:23
2599e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[7:8], v1 offset:16
2600e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[1:4], v1 offset1:1
2601e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
2602e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[5:6] offset:23
2603e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
2604e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[7:8] offset:16
2605e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
2606e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2607e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2608e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2609e1094dd8SFabian Ritterentry:
2610e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 31, i1 false)
2611e1094dd8SFabian Ritter  ret void
2612e1094dd8SFabian Ritter}
2613e1094dd8SFabian Ritter
2614e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz32_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
2615e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz32_align_1_1:
2616e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2617e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2618e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset0:2 offset1:3
2619e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[6:9], v1 offset1:1
2620e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2621e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset0:2 offset1:3
2622e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2623e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[6:7], v[8:9] offset1:1
2624e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2625e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2626e1094dd8SFabian Ritterentry:
2627e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 32, i1 false)
2628e1094dd8SFabian Ritter  ret void
2629e1094dd8SFabian Ritter}
2630e1094dd8SFabian Ritter
2631e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz16_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
2632e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz16_align_2_2:
2633e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2634e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2635e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[1:4], v1 offset1:1
2636e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2637e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2638e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2639e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2640e1094dd8SFabian Ritterentry:
2641e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 16, i1 false)
2642e1094dd8SFabian Ritter  ret void
2643e1094dd8SFabian Ritter}
2644e1094dd8SFabian Ritter
2645e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz31_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
2646e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz31_align_2_2:
2647e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2648e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2649e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[5:6], v1 offset:23
2650e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[7:8], v1 offset:16
2651e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[1:4], v1 offset1:1
2652e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
2653e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[5:6] offset:23
2654e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
2655e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[7:8] offset:16
2656e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
2657e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2658e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2659e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2660e1094dd8SFabian Ritterentry:
2661e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 31, i1 false)
2662e1094dd8SFabian Ritter  ret void
2663e1094dd8SFabian Ritter}
2664e1094dd8SFabian Ritter
2665e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz32_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
2666e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz32_align_2_2:
2667e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2668e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2669e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset0:2 offset1:3
2670e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[6:9], v1 offset1:1
2671e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2672e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset0:2 offset1:3
2673e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2674e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[6:7], v[8:9] offset1:1
2675e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2676e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2677e1094dd8SFabian Ritterentry:
2678e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 32, i1 false)
2679e1094dd8SFabian Ritter  ret void
2680e1094dd8SFabian Ritter}
2681e1094dd8SFabian Ritter
2682e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz16_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
2683e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz16_align_8_8:
2684e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2685e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2686e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[1:4], v1 offset1:1
2687e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2688e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2689e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2690e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2691e1094dd8SFabian Ritterentry:
2692e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 16, i1 false)
2693e1094dd8SFabian Ritter  ret void
2694e1094dd8SFabian Ritter}
2695e1094dd8SFabian Ritter
2696e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz31_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
2697e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz31_align_8_8:
2698e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2699e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2700e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset1:1
2701e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[6:9], v1 offset:15
2702e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2703e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
2704e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2705e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[6:9] offset:15
2706e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2707e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2708e1094dd8SFabian Ritterentry:
2709e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 31, i1 false)
2710e1094dd8SFabian Ritter  ret void
2711e1094dd8SFabian Ritter}
2712e1094dd8SFabian Ritter
2713e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz32_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
2714e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz32_align_8_8:
2715e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2716e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2717e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset0:2 offset1:3
2718e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[6:9], v1 offset1:1
2719e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2720e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset0:2 offset1:3
2721e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2722e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[6:7], v[8:9] offset1:1
2723e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2724e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2725e1094dd8SFabian Ritterentry:
2726e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 32, i1 false)
2727e1094dd8SFabian Ritter  ret void
2728e1094dd8SFabian Ritter}
2729e1094dd8SFabian Ritter
2730e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz16_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
2731e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz16_align_16_16:
2732e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2733e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2734e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[1:4], v1
2735e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2736e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[1:4]
2737e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2738e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2739e1094dd8SFabian Ritterentry:
2740e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 16, i1 false)
2741e1094dd8SFabian Ritter  ret void
2742e1094dd8SFabian Ritter}
2743e1094dd8SFabian Ritter
2744e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz31_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
2745e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz31_align_16_16:
2746e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2747e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2748e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[2:5], v1 offset:15
2749e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[6:9], v1
2750e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2751e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[2:5] offset:15
2752e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2753e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[6:9]
2754e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2755e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2756e1094dd8SFabian Ritterentry:
2757e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 31, i1 false)
2758e1094dd8SFabian Ritter  ret void
2759e1094dd8SFabian Ritter}
2760e1094dd8SFabian Ritter
2761e1094dd8SFabian Ritterdefine void @memcpy_p3_p3_sz32_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
2762e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p3_sz32_align_16_16:
2763e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2764e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2765e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[2:5], v1 offset:16
2766e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[6:9], v1
2767e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2768e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[2:5] offset:16
2769e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
2770e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[6:9]
2771e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2772e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2773e1094dd8SFabian Ritterentry:
2774e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 32, i1 false)
2775e1094dd8SFabian Ritter  ret void
2776e1094dd8SFabian Ritter}
2777e1094dd8SFabian Ritter
2778e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz16_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
2779e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz16_align_1_1:
2780e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2781e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2782e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
2783e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2784e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2785e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2786e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2787e1094dd8SFabian Ritterentry:
2788e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 16, i1 false)
2789e1094dd8SFabian Ritter  ret void
2790e1094dd8SFabian Ritter}
2791e1094dd8SFabian Ritter
2792e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz31_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
2793e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz31_align_1_1:
2794e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2795e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2796e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x2
2797e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2798e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[7:8], v[1:2], off offset:16
2799e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[1:2], v[1:2], off offset:23
2800e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
2801e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2802e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2803e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[7:8] offset:16
2804e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2805e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[1:2] offset:23
2806e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2807e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2808e1094dd8SFabian Ritterentry:
2809e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 31, i1 false)
2810e1094dd8SFabian Ritter  ret void
2811e1094dd8SFabian Ritter}
2812e1094dd8SFabian Ritter
2813e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz32_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
2814e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz32_align_1_1:
2815e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2816e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2817e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2818e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2819e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
2820e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2821e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2822e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2823e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset0:2 offset1:3
2824e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2825e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2826e1094dd8SFabian Ritterentry:
2827e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 32, i1 false)
2828e1094dd8SFabian Ritter  ret void
2829e1094dd8SFabian Ritter}
2830e1094dd8SFabian Ritter
2831e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz16_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
2832e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz16_align_2_2:
2833e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2834e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2835e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
2836e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2837e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2838e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2839e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2840e1094dd8SFabian Ritterentry:
2841e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 16, i1 false)
2842e1094dd8SFabian Ritter  ret void
2843e1094dd8SFabian Ritter}
2844e1094dd8SFabian Ritter
2845e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz31_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
2846e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz31_align_2_2:
2847e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2848e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2849e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x2
2850e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2851e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[7:8], v[1:2], off offset:16
2852e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx2 v[1:2], v[1:2], off offset:23
2853e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
2854e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2855e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2856e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[7:8] offset:16
2857e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2858e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[1:2] offset:23
2859e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2860e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2861e1094dd8SFabian Ritterentry:
2862e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 31, i1 false)
2863e1094dd8SFabian Ritter  ret void
2864e1094dd8SFabian Ritter}
2865e1094dd8SFabian Ritter
2866e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz32_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
2867e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz32_align_2_2:
2868e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2869e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2870e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2871e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2872e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
2873e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2874e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2875e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2876e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset0:2 offset1:3
2877e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2878e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2879e1094dd8SFabian Ritterentry:
2880e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 32, i1 false)
2881e1094dd8SFabian Ritter  ret void
2882e1094dd8SFabian Ritter}
2883e1094dd8SFabian Ritter
2884e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz16_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
2885e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz16_align_8_8:
2886e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2887e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2888e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
2889e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2890e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[1:2], v[3:4] offset1:1
2891e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2892e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2893e1094dd8SFabian Ritterentry:
2894e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 16, i1 false)
2895e1094dd8SFabian Ritter  ret void
2896e1094dd8SFabian Ritter}
2897e1094dd8SFabian Ritter
2898e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz31_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
2899e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz31_align_8_8:
2900e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2901e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2902e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2903e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2904e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:15
2905e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2906e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2907e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2908e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10] offset:15
2909e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2910e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2911e1094dd8SFabian Ritterentry:
2912e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 31, i1 false)
2913e1094dd8SFabian Ritter  ret void
2914e1094dd8SFabian Ritter}
2915e1094dd8SFabian Ritter
2916e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz32_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
2917e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz32_align_8_8:
2918e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2919e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2920e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2921e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2922e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
2923e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2924e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[3:4], v[5:6] offset1:1
2925e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2926e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[7:8], v[9:10] offset0:2 offset1:3
2927e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2928e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2929e1094dd8SFabian Ritterentry:
2930e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 32, i1 false)
2931e1094dd8SFabian Ritter  ret void
2932e1094dd8SFabian Ritter}
2933e1094dd8SFabian Ritter
2934e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz16_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
2935e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz16_align_16_16:
2936e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2937e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2938e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
2939e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2940e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[1:4]
2941e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2942e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2943e1094dd8SFabian Ritterentry:
2944e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 16, i1 false)
2945e1094dd8SFabian Ritter  ret void
2946e1094dd8SFabian Ritter}
2947e1094dd8SFabian Ritter
2948e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz31_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
2949e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz31_align_16_16:
2950e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2951e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2952e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2953e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2954e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:15
2955e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2956e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[3:6]
2957e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2958e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10] offset:15
2959e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2960e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2961e1094dd8SFabian Ritterentry:
2962e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 31, i1 false)
2963e1094dd8SFabian Ritter  ret void
2964e1094dd8SFabian Ritter}
2965e1094dd8SFabian Ritter
2966e1094dd8SFabian Ritterdefine void @memcpy_p3_p4_sz32_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
2967e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p4_sz32_align_16_16:
2968e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2969e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2970e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
2971e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
2972e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
2973e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
2974e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[3:6]
2975e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2976e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[7:10] offset:16
2977e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2978e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2979e1094dd8SFabian Ritterentry:
2980e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 32, i1 false)
2981e1094dd8SFabian Ritter  ret void
2982e1094dd8SFabian Ritter}
2983e1094dd8SFabian Ritter
2984e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz16_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
2985e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz16_align_1_1:
2986e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
2987e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2988*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
2989*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
2990*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
2991*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
2992*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
2993e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
2994*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
2995e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
2996e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
2997e1094dd8SFabian Ritterentry:
2998e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 16, i1 false)
2999e1094dd8SFabian Ritter  ret void
3000e1094dd8SFabian Ritter}
3001e1094dd8SFabian Ritter
3002e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz31_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
3003e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz31_align_1_1:
3004e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3005e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3006*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
3007*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3008*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3009*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3010*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3011*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:16
3012*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:20
3013*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:23
3014*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:27
3015*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
3016*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
3017e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
3018*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[6:7] offset:16
3019e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3020*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[8:9] offset:23
3021e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3022e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3023e1094dd8SFabian Ritterentry:
3024e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 31, i1 false)
3025e1094dd8SFabian Ritter  ret void
3026e1094dd8SFabian Ritter}
3027e1094dd8SFabian Ritter
3028e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz32_align_1_1(ptr addrspace(3) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
3029e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz32_align_1_1:
3030e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3031e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3032*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
3033*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3034*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3035*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3036*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3037*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:16
3038*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:20
3039*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:24
3040*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:28
3041e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
3042*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
3043e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3044*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[6:7], v[8:9] offset0:2 offset1:3
3045e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3046e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3047e1094dd8SFabian Ritterentry:
3048e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 32, i1 false)
3049e1094dd8SFabian Ritter  ret void
3050e1094dd8SFabian Ritter}
3051e1094dd8SFabian Ritter
3052e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz16_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
3053e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz16_align_2_2:
3054e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3055e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3056*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
3057*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3058*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3059*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3060*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3061e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3062*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
3063e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3064e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3065e1094dd8SFabian Ritterentry:
3066e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 16, i1 false)
3067e1094dd8SFabian Ritter  ret void
3068e1094dd8SFabian Ritter}
3069e1094dd8SFabian Ritter
3070e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz31_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
3071e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz31_align_2_2:
3072e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3073e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3074*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
3075*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3076*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3077*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3078*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3079*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:16
3080*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:20
3081*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:23
3082*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:27
3083e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
3084*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
3085e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
3086*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[6:7] offset:16
3087e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3088*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b64 v0, v[8:9] offset:23
3089e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3090e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3091e1094dd8SFabian Ritterentry:
3092e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 31, i1 false)
3093e1094dd8SFabian Ritter  ret void
3094e1094dd8SFabian Ritter}
3095e1094dd8SFabian Ritter
3096e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz32_align_2_2(ptr addrspace(3) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
3097e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz32_align_2_2:
3098e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3099e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3100*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
3101*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3102*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3103*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3104*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3105*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:16
3106*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:20
3107*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:24
3108*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:28
3109e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
3110*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
3111e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3112*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[6:7], v[8:9] offset0:2 offset1:3
3113e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3114e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3115e1094dd8SFabian Ritterentry:
3116e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 32, i1 false)
3117e1094dd8SFabian Ritter  ret void
3118e1094dd8SFabian Ritter}
3119e1094dd8SFabian Ritter
3120e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz16_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
3121e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz16_align_8_8:
3122e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3123e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3124e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x3
3125e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3126e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3127e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3128e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3129e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3130e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
3131e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3132e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3133e1094dd8SFabian Ritterentry:
3134e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 16, i1 false)
3135e1094dd8SFabian Ritter  ret void
3136e1094dd8SFabian Ritter}
3137e1094dd8SFabian Ritter
3138e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz31_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
3139e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz31_align_8_8:
3140e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3141e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3142*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
3143*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen
3144*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:4
3145*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:8
3146*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:12
3147*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:15
3148*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:19
3149*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:23
3150*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:27
3151e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
3152*173c6823SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[6:7], v[8:9] offset1:1
3153e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3154*173c6823SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[2:5] offset:15
3155e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3156e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3157e1094dd8SFabian Ritterentry:
3158e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 31, i1 false)
3159e1094dd8SFabian Ritter  ret void
3160e1094dd8SFabian Ritter}
3161e1094dd8SFabian Ritter
3162e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz32_align_8_8(ptr addrspace(3) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
3163e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz32_align_8_8:
3164e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3165e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3166e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x7
3167e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3168e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3169e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3170e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3171e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:16
3172e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:20
3173e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:24
3174e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:28
3175e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
3176e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[2:3], v[4:5] offset1:1
3177e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3178e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write2_b64 v0, v[6:7], v[8:9] offset0:2 offset1:3
3179e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3180e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3181e1094dd8SFabian Ritterentry:
3182e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 32, i1 false)
3183e1094dd8SFabian Ritter  ret void
3184e1094dd8SFabian Ritter}
3185e1094dd8SFabian Ritter
3186e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz16_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
3187e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz16_align_16_16:
3188e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3189e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3190e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x3
3191e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3192e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3193e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3194e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3195e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3196e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[2:5]
3197e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3198e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3199e1094dd8SFabian Ritterentry:
3200e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 16, i1 false)
3201e1094dd8SFabian Ritter  ret void
3202e1094dd8SFabian Ritter}
3203e1094dd8SFabian Ritter
3204e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz31_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
3205e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz31_align_16_16:
3206e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3207e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3208*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
3209e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3210e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3211e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3212e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3213*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:15
3214*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:19
3215*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:23
3216*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:27
3217e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
3218e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[2:5]
3219*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3220e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[6:9] offset:15
3221e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3222e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3223e1094dd8SFabian Ritterentry:
3224e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 31, i1 false)
3225e1094dd8SFabian Ritter  ret void
3226e1094dd8SFabian Ritter}
3227e1094dd8SFabian Ritter
3228e1094dd8SFabian Ritterdefine void @memcpy_p3_p5_sz32_align_16_16(ptr addrspace(3) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
3229e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p3_p5_sz32_align_16_16:
3230e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3231e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3232e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x7
3233e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
3234e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
3235e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
3236e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:12
3237e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:16
3238e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:20
3239e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:24
3240e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:28
3241e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
3242e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[2:5]
3243e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3244e1094dd8SFabian Ritter; CHECK-NEXT:    ds_write_b128 v0, v[6:9] offset:16
3245e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3246e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3247e1094dd8SFabian Ritterentry:
3248e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 32, i1 false)
3249e1094dd8SFabian Ritter  ret void
3250e1094dd8SFabian Ritter}
3251e1094dd8SFabian Ritter
3252e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz16_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
3253e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz16_align_1_1:
3254e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3255e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3256*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
3257e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3258*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3259*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3260*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3261*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3262e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3263e1094dd8SFabian Ritterentry:
3264e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 16, i1 false)
3265e1094dd8SFabian Ritter  ret void
3266e1094dd8SFabian Ritter}
3267e1094dd8SFabian Ritter
3268e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz31_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
3269e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz31_align_1_1:
3270e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3271e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3272*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
3273*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_ubyte v8, v[1:2] offset:30
3274*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_ushort v9, v[1:2] offset:28
3275*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx3 v[5:7], v[1:2] offset:16
3276*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
3277e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3) lgkmcnt(3)
3278*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v8, v0, s[0:3], 0 offen offset:30
3279e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2) lgkmcnt(2)
3280*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v9, v0, s[0:3], 0 offen offset:28
3281e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
3282*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:24
3283*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:20
3284*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:16
3285e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3286*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3287*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3288*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3289*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3290e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3291e1094dd8SFabian Ritterentry:
3292e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 31, i1 false)
3293e1094dd8SFabian Ritter  ret void
3294e1094dd8SFabian Ritter}
3295e1094dd8SFabian Ritter
3296e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz32_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(0) align 1 readonly %src) {
3297e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz32_align_1_1:
3298e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3299e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3300*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3301*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:16
3302*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
3303e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
3304*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:28
3305*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:24
3306*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:20
3307*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:16
3308e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3309*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:12
3310*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:8
3311*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:4
3312*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen
3313e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3314e1094dd8SFabian Ritterentry:
3315e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(0) noundef nonnull align 1 %src, i64 32, i1 false)
3316e1094dd8SFabian Ritter  ret void
3317e1094dd8SFabian Ritter}
3318e1094dd8SFabian Ritter
3319e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz16_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
3320e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz16_align_2_2:
3321e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3322e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3323*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
3324e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3325*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3326*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3327*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3328*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3329e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3330e1094dd8SFabian Ritterentry:
3331e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 16, i1 false)
3332e1094dd8SFabian Ritter  ret void
3333e1094dd8SFabian Ritter}
3334e1094dd8SFabian Ritter
3335e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz31_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
3336e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz31_align_2_2:
3337e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3338e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3339*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
3340*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_ubyte v8, v[1:2] offset:30
3341*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_ushort v9, v[1:2] offset:28
3342*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx3 v[5:7], v[1:2] offset:16
3343*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
3344e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3) lgkmcnt(3)
3345*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v8, v0, s[0:3], 0 offen offset:30
3346e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2) lgkmcnt(2)
3347*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v9, v0, s[0:3], 0 offen offset:28
3348e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
3349*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:24
3350*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:20
3351*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:16
3352e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3353*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3354*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3355*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3356*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3357e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3358e1094dd8SFabian Ritterentry:
3359e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 31, i1 false)
3360e1094dd8SFabian Ritter  ret void
3361e1094dd8SFabian Ritter}
3362e1094dd8SFabian Ritter
3363e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz32_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(0) align 2 readonly %src) {
3364e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz32_align_2_2:
3365e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3366e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3367*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3368*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:16
3369*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
3370e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
3371*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:28
3372*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:24
3373*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:20
3374*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:16
3375e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3376*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:12
3377*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:8
3378*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:4
3379*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen
3380e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3381e1094dd8SFabian Ritterentry:
3382e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(0) noundef nonnull align 2 %src, i64 32, i1 false)
3383e1094dd8SFabian Ritter  ret void
3384e1094dd8SFabian Ritter}
3385e1094dd8SFabian Ritter
3386e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz16_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
3387e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz16_align_8_8:
3388e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3389e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3390e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
3391e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3392e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3393e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3394e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3395e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3396e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3397e1094dd8SFabian Ritterentry:
3398e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 16, i1 false)
3399e1094dd8SFabian Ritter  ret void
3400e1094dd8SFabian Ritter}
3401e1094dd8SFabian Ritter
3402e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz31_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
3403e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz31_align_8_8:
3404e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3405e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3406*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3407*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:15
3408*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
3409e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
3410*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:27
3411*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:23
3412*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:19
3413*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:15
3414e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3415*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:12
3416*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:8
3417*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:4
3418*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen
3419e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3420e1094dd8SFabian Ritterentry:
3421e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 31, i1 false)
3422e1094dd8SFabian Ritter  ret void
3423e1094dd8SFabian Ritter}
3424e1094dd8SFabian Ritter
3425e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz32_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(0) align 8 readonly %src) {
3426e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz32_align_8_8:
3427e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3428e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3429e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3430e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:16
3431e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
3432e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
3433e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:28
3434e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:24
3435e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:20
3436e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:16
3437e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3438e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:12
3439e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:8
3440e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:4
3441e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen
3442e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3443e1094dd8SFabian Ritterentry:
3444e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(0) noundef nonnull align 8 %src, i64 32, i1 false)
3445e1094dd8SFabian Ritter  ret void
3446e1094dd8SFabian Ritter}
3447e1094dd8SFabian Ritter
3448e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz16_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
3449e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz16_align_16_16:
3450e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3451e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3452e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[1:4], v[1:2]
3453e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3454e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3455e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3456e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3457e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3458e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3459e1094dd8SFabian Ritterentry:
3460e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 16, i1 false)
3461e1094dd8SFabian Ritter  ret void
3462e1094dd8SFabian Ritter}
3463e1094dd8SFabian Ritter
3464e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz31_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
3465e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz31_align_16_16:
3466e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3467e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3468*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3469*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:15
3470*173c6823SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
3471e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
3472*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:27
3473*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:23
3474*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:19
3475*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:15
3476e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3477*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:12
3478*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:8
3479*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:4
3480*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen
3481e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3482e1094dd8SFabian Ritterentry:
3483e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 31, i1 false)
3484e1094dd8SFabian Ritter  ret void
3485e1094dd8SFabian Ritter}
3486e1094dd8SFabian Ritter
3487e1094dd8SFabian Ritterdefine void @memcpy_p5_p0_sz32_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(0) align 16 readonly %src) {
3488e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p0_sz32_align_16_16:
3489e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3490e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3491e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3492e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[3:6], v[1:2] offset:16
3493e1094dd8SFabian Ritter; CHECK-NEXT:    flat_load_dwordx4 v[7:10], v[1:2]
3494e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1) lgkmcnt(1)
3495e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:28
3496e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:24
3497e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:20
3498e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:16
3499e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3500e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:12
3501e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:8
3502e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:4
3503e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen
3504e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3505e1094dd8SFabian Ritterentry:
3506e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(0) noundef nonnull align 16 %src, i64 32, i1 false)
3507e1094dd8SFabian Ritter  ret void
3508e1094dd8SFabian Ritter}
3509e1094dd8SFabian Ritter
3510e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz16_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
3511e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz16_align_1_1:
3512e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3513e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3514*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
3515e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3516*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3517*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3518*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3519*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3520e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3521e1094dd8SFabian Ritterentry:
3522e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 16, i1 false)
3523e1094dd8SFabian Ritter  ret void
3524e1094dd8SFabian Ritter}
3525e1094dd8SFabian Ritter
3526e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz31_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
3527e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz31_align_1_1:
3528e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3529e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3530*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
3531*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx3 v[5:7], v[1:2], off offset:16
3532*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ushort v8, v[1:2], off offset:28
3533*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ubyte v9, v[1:2], off offset:30
3534*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
3535e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
3536*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:24
3537e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
3538*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v8, v0, s[0:3], 0 offen offset:28
3539e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
3540*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v9, v0, s[0:3], 0 offen offset:30
3541e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3542*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3543*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3544*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3545*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3546*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:20
3547*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:16
3548e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3549e1094dd8SFabian Ritterentry:
3550e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 31, i1 false)
3551e1094dd8SFabian Ritter  ret void
3552e1094dd8SFabian Ritter}
3553e1094dd8SFabian Ritter
3554e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz32_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(1) align 1 readonly %src) {
3555e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz32_align_1_1:
3556e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3557e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3558*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3559*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
3560*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
3561e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
3562*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
3563*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
3564*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
3565*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
3566e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3567*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:20
3568*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:16
3569*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:28
3570*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:24
3571e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3572e1094dd8SFabian Ritterentry:
3573e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(1) noundef nonnull align 1 %src, i64 32, i1 false)
3574e1094dd8SFabian Ritter  ret void
3575e1094dd8SFabian Ritter}
3576e1094dd8SFabian Ritter
3577e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz16_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
3578e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz16_align_2_2:
3579e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3580e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3581*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
3582e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3583*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3584*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3585*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3586*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3587e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3588e1094dd8SFabian Ritterentry:
3589e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 16, i1 false)
3590e1094dd8SFabian Ritter  ret void
3591e1094dd8SFabian Ritter}
3592e1094dd8SFabian Ritter
3593e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz31_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
3594e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz31_align_2_2:
3595e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3596e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3597*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
3598*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx3 v[5:7], v[1:2], off offset:16
3599*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ushort v8, v[1:2], off offset:28
3600*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ubyte v9, v[1:2], off offset:30
3601*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
3602e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
3603*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:24
3604e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
3605*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v8, v0, s[0:3], 0 offen offset:28
3606e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
3607*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v9, v0, s[0:3], 0 offen offset:30
3608e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3609*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3610*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3611*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3612*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3613*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:20
3614*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:16
3615e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3616e1094dd8SFabian Ritterentry:
3617e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 31, i1 false)
3618e1094dd8SFabian Ritter  ret void
3619e1094dd8SFabian Ritter}
3620e1094dd8SFabian Ritter
3621e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz32_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(1) align 2 readonly %src) {
3622e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz32_align_2_2:
3623e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3624e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3625*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3626*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
3627*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
3628e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
3629*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
3630*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
3631*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
3632*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
3633e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3634*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:20
3635*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:16
3636*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:28
3637*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:24
3638e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3639e1094dd8SFabian Ritterentry:
3640e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(1) noundef nonnull align 2 %src, i64 32, i1 false)
3641e1094dd8SFabian Ritter  ret void
3642e1094dd8SFabian Ritter}
3643e1094dd8SFabian Ritter
3644e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz16_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
3645e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz16_align_8_8:
3646e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3647e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3648e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
3649e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3650e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3651e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3652e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3653e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3654e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3655e1094dd8SFabian Ritterentry:
3656e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 16, i1 false)
3657e1094dd8SFabian Ritter  ret void
3658e1094dd8SFabian Ritter}
3659e1094dd8SFabian Ritter
3660e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz31_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
3661e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz31_align_8_8:
3662e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3663e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3664e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3665e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
3666e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:15
3667e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
3668e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
3669e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
3670e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
3671e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
3672e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3673*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:27
3674*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:23
3675*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:19
3676*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:15
3677e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3678e1094dd8SFabian Ritterentry:
3679e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 31, i1 false)
3680e1094dd8SFabian Ritter  ret void
3681e1094dd8SFabian Ritter}
3682e1094dd8SFabian Ritter
3683e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz32_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(1) align 8 readonly %src) {
3684e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz32_align_8_8:
3685e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3686e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3687e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3688e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
3689e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
3690e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
3691e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
3692e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
3693e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
3694e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
3695e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3696e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:28
3697e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:24
3698e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:20
3699e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:16
3700e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3701e1094dd8SFabian Ritterentry:
3702e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(1) noundef nonnull align 8 %src, i64 32, i1 false)
3703e1094dd8SFabian Ritter  ret void
3704e1094dd8SFabian Ritter}
3705e1094dd8SFabian Ritter
3706e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz16_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
3707e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz16_align_16_16:
3708e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3709e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3710e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
3711e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3712e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3713e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3714e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3715e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3716e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3717e1094dd8SFabian Ritterentry:
3718e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 16, i1 false)
3719e1094dd8SFabian Ritter  ret void
3720e1094dd8SFabian Ritter}
3721e1094dd8SFabian Ritter
3722e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz31_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
3723e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz31_align_16_16:
3724e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3725e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3726e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3727e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
3728e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:15
3729e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
3730e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
3731e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
3732e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
3733e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
3734e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3735*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:27
3736*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:23
3737*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:19
3738*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:15
3739e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3740e1094dd8SFabian Ritterentry:
3741e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 31, i1 false)
3742e1094dd8SFabian Ritter  ret void
3743e1094dd8SFabian Ritter}
3744e1094dd8SFabian Ritter
3745e1094dd8SFabian Ritterdefine void @memcpy_p5_p1_sz32_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(1) align 16 readonly %src) {
3746e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p1_sz32_align_16_16:
3747e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3748e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3749e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
3750e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
3751e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
3752e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
3753e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
3754e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
3755e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
3756e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
3757e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
3758e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:28
3759e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:24
3760e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:20
3761e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:16
3762e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3763e1094dd8SFabian Ritterentry:
3764e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(1) noundef nonnull align 16 %src, i64 32, i1 false)
3765e1094dd8SFabian Ritter  ret void
3766e1094dd8SFabian Ritter}
3767e1094dd8SFabian Ritter
3768e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz16_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
3769e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz16_align_1_1:
3770e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3771e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3772*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[1:4], v1 offset1:1
3773e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3774*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3775*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3776*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3777*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3778e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3779e1094dd8SFabian Ritterentry:
3780e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 16, i1 false)
3781e1094dd8SFabian Ritter  ret void
3782e1094dd8SFabian Ritter}
3783e1094dd8SFabian Ritter
3784e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz31_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
3785e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz31_align_1_1:
3786e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3787e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3788*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b32 v8, v1 offset:24
3789*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_u16 v9, v1 offset:28
3790*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_u8 v10, v1 offset:30
3791*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset1:1
3792*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[6:7], v1 offset:16
3793*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(4)
3794*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
3795*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(3)
3796*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v9, v0, s[0:3], 0 offen offset:28
3797*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
3798*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v10, v0, s[0:3], 0 offen offset:30
3799*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
3800*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3801*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3802*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3803*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3804e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3805*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
3806*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
3807e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3808e1094dd8SFabian Ritterentry:
3809e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 31, i1 false)
3810e1094dd8SFabian Ritter  ret void
3811e1094dd8SFabian Ritter}
3812e1094dd8SFabian Ritter
3813e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz32_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(3) align 1 readonly %src) {
3814e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz32_align_1_1:
3815e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3816e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3817*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset1:1
3818*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[6:9], v1 offset0:2 offset1:3
3819*173c6823SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
3820*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3821*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3822*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3823*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3824e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3825*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
3826*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
3827*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:28
3828*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
3829e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3830e1094dd8SFabian Ritterentry:
3831e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(3) noundef nonnull align 1 %src, i64 32, i1 false)
3832e1094dd8SFabian Ritter  ret void
3833e1094dd8SFabian Ritter}
3834e1094dd8SFabian Ritter
3835e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz16_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
3836e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz16_align_2_2:
3837e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3838e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3839*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[1:4], v1 offset1:1
3840e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3841*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3842*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3843*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3844*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3845e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3846e1094dd8SFabian Ritterentry:
3847e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 16, i1 false)
3848e1094dd8SFabian Ritter  ret void
3849e1094dd8SFabian Ritter}
3850e1094dd8SFabian Ritter
3851e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz31_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
3852e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz31_align_2_2:
3853e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3854e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3855*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b32 v8, v1 offset:24
3856*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_u16 v9, v1 offset:28
3857*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_u8 v10, v1 offset:30
3858*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset1:1
3859*173c6823SFabian Ritter; CHECK-NEXT:    ds_read_b64 v[6:7], v1 offset:16
3860e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(4)
3861*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
3862e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(3)
3863*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v9, v0, s[0:3], 0 offen offset:28
3864e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(2)
3865*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v10, v0, s[0:3], 0 offen offset:30
3866e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
3867*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3868*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3869*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3870*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3871e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3872*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
3873*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
3874e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3875e1094dd8SFabian Ritterentry:
3876e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 31, i1 false)
3877e1094dd8SFabian Ritter  ret void
3878e1094dd8SFabian Ritter}
3879e1094dd8SFabian Ritter
3880e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz32_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(3) align 2 readonly %src) {
3881e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz32_align_2_2:
3882e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3883e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3884*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset1:1
3885*173c6823SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[6:9], v1 offset0:2 offset1:3
3886e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
3887*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3888*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3889*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3890*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3891e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3892*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
3893*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
3894*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:28
3895*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
3896e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3897e1094dd8SFabian Ritterentry:
3898e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(3) noundef nonnull align 2 %src, i64 32, i1 false)
3899e1094dd8SFabian Ritter  ret void
3900e1094dd8SFabian Ritter}
3901e1094dd8SFabian Ritter
3902e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz16_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
3903e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz16_align_8_8:
3904e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3905e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3906e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[1:4], v1 offset1:1
3907e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3908e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3909e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3910e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3911e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3912e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3913e1094dd8SFabian Ritterentry:
3914e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 16, i1 false)
3915e1094dd8SFabian Ritter  ret void
3916e1094dd8SFabian Ritter}
3917e1094dd8SFabian Ritter
3918e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz31_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
3919e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz31_align_8_8:
3920e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3921e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3922e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset1:1
3923e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[6:9], v1 offset:15
3924e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
3925e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3926e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3927e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3928e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3929e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3930*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:27
3931*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:23
3932*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:19
3933*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:15
3934e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3935e1094dd8SFabian Ritterentry:
3936e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 31, i1 false)
3937e1094dd8SFabian Ritter  ret void
3938e1094dd8SFabian Ritter}
3939e1094dd8SFabian Ritter
3940e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz32_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(3) align 8 readonly %src) {
3941e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz32_align_8_8:
3942e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3943e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3944e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[2:5], v1 offset1:1
3945e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read2_b64 v[6:9], v1 offset0:2 offset1:3
3946e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
3947e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3948e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3949e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3950e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3951e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3952e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:28
3953e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
3954e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
3955e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
3956e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3957e1094dd8SFabian Ritterentry:
3958e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(3) noundef nonnull align 8 %src, i64 32, i1 false)
3959e1094dd8SFabian Ritter  ret void
3960e1094dd8SFabian Ritter}
3961e1094dd8SFabian Ritter
3962e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz16_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
3963e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz16_align_16_16:
3964e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3965e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3966e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[1:4], v1
3967e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3968e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
3969e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
3970e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
3971e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
3972e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3973e1094dd8SFabian Ritterentry:
3974e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 16, i1 false)
3975e1094dd8SFabian Ritter  ret void
3976e1094dd8SFabian Ritter}
3977e1094dd8SFabian Ritter
3978e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz31_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
3979e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz31_align_16_16:
3980e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
3981e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3982e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[2:5], v1
3983e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[6:9], v1 offset:15
3984e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
3985e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3986e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3987e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3988e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3989e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
3990*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:27
3991*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:23
3992*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:19
3993*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:15
3994e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
3995e1094dd8SFabian Ritterentry:
3996e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 31, i1 false)
3997e1094dd8SFabian Ritter  ret void
3998e1094dd8SFabian Ritter}
3999e1094dd8SFabian Ritter
4000e1094dd8SFabian Ritterdefine void @memcpy_p5_p3_sz32_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(3) align 16 readonly %src) {
4001e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p3_sz32_align_16_16:
4002e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4003e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4004e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[2:5], v1
4005e1094dd8SFabian Ritter; CHECK-NEXT:    ds_read_b128 v[6:9], v1 offset:16
4006e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(1)
4007e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
4008e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
4009e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
4010e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
4011e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
4012e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:28
4013e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
4014e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
4015e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
4016e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4017e1094dd8SFabian Ritterentry:
4018e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(3) noundef nonnull align 16 %src, i64 32, i1 false)
4019e1094dd8SFabian Ritter  ret void
4020e1094dd8SFabian Ritter}
4021e1094dd8SFabian Ritter
4022e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz16_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
4023e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz16_align_1_1:
4024e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4025e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4026*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
4027e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4028*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
4029*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
4030*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
4031*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
4032e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4033e1094dd8SFabian Ritterentry:
4034e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 16, i1 false)
4035e1094dd8SFabian Ritter  ret void
4036e1094dd8SFabian Ritter}
4037e1094dd8SFabian Ritter
4038e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz31_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
4039e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz31_align_1_1:
4040e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4041e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4042*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
4043*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx3 v[5:7], v[1:2], off offset:16
4044*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ushort v8, v[1:2], off offset:28
4045*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ubyte v9, v[1:2], off offset:30
4046*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
4047e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4048*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:24
4049e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4050*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v8, v0, s[0:3], 0 offen offset:28
4051e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4052*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v9, v0, s[0:3], 0 offen offset:30
4053e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4054*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
4055*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
4056*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
4057*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
4058*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:20
4059*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:16
4060e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4061e1094dd8SFabian Ritterentry:
4062e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 31, i1 false)
4063e1094dd8SFabian Ritter  ret void
4064e1094dd8SFabian Ritter}
4065e1094dd8SFabian Ritter
4066e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz32_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(4) align 1 readonly %src) {
4067e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz32_align_1_1:
4068e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4069e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4070*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
4071*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
4072*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
4073e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4074*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
4075*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
4076*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
4077*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
4078e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4079*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:20
4080*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:16
4081*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:28
4082*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:24
4083e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4084e1094dd8SFabian Ritterentry:
4085e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(4) noundef nonnull align 1 %src, i64 32, i1 false)
4086e1094dd8SFabian Ritter  ret void
4087e1094dd8SFabian Ritter}
4088e1094dd8SFabian Ritter
4089e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz16_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
4090e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz16_align_2_2:
4091e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4092e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4093*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
4094e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4095*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
4096*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
4097*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
4098*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
4099e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4100e1094dd8SFabian Ritterentry:
4101e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 16, i1 false)
4102e1094dd8SFabian Ritter  ret void
4103e1094dd8SFabian Ritter}
4104e1094dd8SFabian Ritter
4105e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz31_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
4106e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz31_align_2_2:
4107e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4108e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4109*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
4110*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx3 v[5:7], v[1:2], off offset:16
4111*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ushort v8, v[1:2], off offset:28
4112*173c6823SFabian Ritter; CHECK-NEXT:    global_load_ubyte v9, v[1:2], off offset:30
4113*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
4114e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4115*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:24
4116e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4117*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v8, v0, s[0:3], 0 offen offset:28
4118e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4119*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v9, v0, s[0:3], 0 offen offset:30
4120e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4121*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
4122*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
4123*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
4124*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
4125*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:20
4126*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:16
4127e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4128e1094dd8SFabian Ritterentry:
4129e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 31, i1 false)
4130e1094dd8SFabian Ritter  ret void
4131e1094dd8SFabian Ritter}
4132e1094dd8SFabian Ritter
4133e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz32_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(4) align 2 readonly %src) {
4134e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz32_align_2_2:
4135e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4136e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4137*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x1
4138*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
4139*173c6823SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
4140e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4141*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
4142*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
4143*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
4144*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
4145e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4146*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:20
4147*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:16
4148*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:28
4149*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:24
4150e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4151e1094dd8SFabian Ritterentry:
4152e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(4) noundef nonnull align 2 %src, i64 32, i1 false)
4153e1094dd8SFabian Ritter  ret void
4154e1094dd8SFabian Ritter}
4155e1094dd8SFabian Ritter
4156e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz16_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
4157e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz16_align_8_8:
4158e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4159e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4160e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
4161e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4162e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
4163e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
4164e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
4165e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
4166e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4167e1094dd8SFabian Ritterentry:
4168e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 16, i1 false)
4169e1094dd8SFabian Ritter  ret void
4170e1094dd8SFabian Ritter}
4171e1094dd8SFabian Ritter
4172e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz31_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
4173e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz31_align_8_8:
4174e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4175e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4176e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
4177e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
4178e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:15
4179e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4180e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
4181e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
4182e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
4183e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
4184e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4185*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:27
4186*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:23
4187*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:19
4188*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:15
4189e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4190e1094dd8SFabian Ritterentry:
4191e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 31, i1 false)
4192e1094dd8SFabian Ritter  ret void
4193e1094dd8SFabian Ritter}
4194e1094dd8SFabian Ritter
4195e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz32_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(4) align 8 readonly %src) {
4196e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz32_align_8_8:
4197e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4198e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4199e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
4200e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
4201e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
4202e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4203e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
4204e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
4205e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
4206e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
4207e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4208e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:28
4209e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:24
4210e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:20
4211e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:16
4212e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4213e1094dd8SFabian Ritterentry:
4214e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(4) noundef nonnull align 8 %src, i64 32, i1 false)
4215e1094dd8SFabian Ritter  ret void
4216e1094dd8SFabian Ritter}
4217e1094dd8SFabian Ritter
4218e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz16_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
4219e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz16_align_16_16:
4220e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4221e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4222e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[1:4], v[1:2], off
4223e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4224e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:12
4225e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:8
4226e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:4
4227e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
4228e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4229e1094dd8SFabian Ritterentry:
4230e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 16, i1 false)
4231e1094dd8SFabian Ritter  ret void
4232e1094dd8SFabian Ritter}
4233e1094dd8SFabian Ritter
4234e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz31_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
4235e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz31_align_16_16:
4236e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4237e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4238e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
4239e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
4240e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:15
4241e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4242e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
4243e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
4244e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
4245e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
4246e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4247*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:27
4248*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:23
4249*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:19
4250*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:15
4251e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4252e1094dd8SFabian Ritterentry:
4253e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 31, i1 false)
4254e1094dd8SFabian Ritter  ret void
4255e1094dd8SFabian Ritter}
4256e1094dd8SFabian Ritter
4257e1094dd8SFabian Ritterdefine void @memcpy_p5_p4_sz32_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(4) align 16 readonly %src) {
4258e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p4_sz32_align_16_16:
4259e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4260e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4261e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x1
4262e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[3:6], v[1:2], off
4263e1094dd8SFabian Ritter; CHECK-NEXT:    global_load_dwordx4 v[7:10], v[1:2], off offset:16
4264e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4265e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:12
4266e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:8
4267e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
4268e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
4269e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4270e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:28
4271e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:24
4272e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:20
4273e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:16
4274e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4275e1094dd8SFabian Ritterentry:
4276e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(4) noundef nonnull align 16 %src, i64 32, i1 false)
4277e1094dd8SFabian Ritter  ret void
4278e1094dd8SFabian Ritter}
4279e1094dd8SFabian Ritter
4280e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz16_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
4281e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz16_align_1_1:
4282e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4283e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4284*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
4285*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:8
4286*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:12
4287*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen
4288*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:4
4289e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4290*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:8
4291e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4292*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:12
4293e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4294*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen
4295e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4296*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:4
4297e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4298e1094dd8SFabian Ritterentry:
4299e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 16, i1 false)
4300e1094dd8SFabian Ritter  ret void
4301e1094dd8SFabian Ritter}
4302e1094dd8SFabian Ritter
4303e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz31_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
4304e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz31_align_1_1:
4305e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4306e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4307*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x8
4308*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_ushort v2, v1, s[0:3], 0 offen offset:28
4309*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:24
4310*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:16
4311*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:20
4312*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:8
4313*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:12
4314*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen
4315*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:4
4316*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_ubyte v1, v1, s[0:3], 0 offen offset:30
4317e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(8)
4318*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v2, v0, s[0:3], 0 offen offset:28
4319e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(7)
4320*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:24
4321e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(6)
4322*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:16
4323e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
4324*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:20
4325e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
4326*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:8
4327e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4328*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:12
4329e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4330*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen
4331e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4332*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:4
4333e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4334*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v1, v0, s[0:3], 0 offen offset:30
4335e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4336e1094dd8SFabian Ritterentry:
4337e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 31, i1 false)
4338e1094dd8SFabian Ritter  ret void
4339e1094dd8SFabian Ritter}
4340e1094dd8SFabian Ritter
4341e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz32_align_1_1(ptr addrspace(5) align 1 %dst, ptr addrspace(5) align 1 readonly %src) {
4342e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz32_align_1_1:
4343e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4344e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4345*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
4346*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:24
4347*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:28
4348*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:16
4349*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:20
4350*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:8
4351*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:12
4352*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen
4353*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:4
4354e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(7)
4355*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:24
4356e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(6)
4357*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:28
4358e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
4359*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:16
4360e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
4361*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:20
4362e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4363*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:8
4364e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4365*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:12
4366e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4367*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen
4368e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4369*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:4
4370e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4371e1094dd8SFabian Ritterentry:
4372e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 1 %dst, ptr addrspace(5) noundef nonnull align 1 %src, i64 32, i1 false)
4373e1094dd8SFabian Ritter  ret void
4374e1094dd8SFabian Ritter}
4375e1094dd8SFabian Ritter
4376e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz16_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
4377e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz16_align_2_2:
4378e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4379e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4380*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x3
4381*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:8
4382*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:12
4383*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen
4384*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:4
4385e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4386*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:8
4387e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4388*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:12
4389e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4390*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen
4391e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4392*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:4
4393e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4394e1094dd8SFabian Ritterentry:
4395e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 16, i1 false)
4396e1094dd8SFabian Ritter  ret void
4397e1094dd8SFabian Ritter}
4398e1094dd8SFabian Ritter
4399e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz31_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
4400e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz31_align_2_2:
4401e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4402e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4403*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x8
4404*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_ushort v2, v1, s[0:3], 0 offen offset:28
4405*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:24
4406*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:16
4407*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:20
4408*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:8
4409*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:12
4410*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen
4411*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v9, v1, s[0:3], 0 offen offset:4
4412*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_ubyte v1, v1, s[0:3], 0 offen offset:30
4413e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(8)
4414*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_short v2, v0, s[0:3], 0 offen offset:28
4415e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(7)
4416*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:24
4417e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(6)
4418*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:16
4419e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
4420*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:20
4421e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
4422*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:8
4423e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4424*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:12
4425e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4426*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen
4427e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4428*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:4
4429e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4430*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_byte v1, v0, s[0:3], 0 offen offset:30
4431e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4432e1094dd8SFabian Ritterentry:
4433e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 31, i1 false)
4434e1094dd8SFabian Ritter  ret void
4435e1094dd8SFabian Ritter}
4436e1094dd8SFabian Ritter
4437e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz32_align_2_2(ptr addrspace(5) align 2 %dst, ptr addrspace(5) align 2 readonly %src) {
4438e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz32_align_2_2:
4439e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4440e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4441*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
4442*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:24
4443*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:28
4444*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:16
4445*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:20
4446*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen offset:8
4447*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:12
4448*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen
4449*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:4
4450e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(7)
4451*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:24
4452e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(6)
4453*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:28
4454e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
4455*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:16
4456e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
4457*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:20
4458e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4459*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:8
4460e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4461*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:12
4462e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4463*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen
4464e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4465*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:4
4466e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4467e1094dd8SFabian Ritterentry:
4468e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 2 %dst, ptr addrspace(5) noundef nonnull align 2 %src, i64 32, i1 false)
4469e1094dd8SFabian Ritter  ret void
4470e1094dd8SFabian Ritter}
4471e1094dd8SFabian Ritter
4472e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz16_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
4473e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz16_align_8_8:
4474e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4475e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4476e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x3
4477e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
4478e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
4479e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
4480e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:12
4481e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4482e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
4483e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4484e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
4485e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4486e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
4487e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4488e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:12
4489e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4490e1094dd8SFabian Ritterentry:
4491e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 16, i1 false)
4492e1094dd8SFabian Ritter  ret void
4493e1094dd8SFabian Ritter}
4494e1094dd8SFabian Ritter
4495e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz31_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
4496e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz31_align_8_8:
4497e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4498e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4499*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
4500*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:15
4501*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:19
4502*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:23
4503*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:27
4504*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen
4505*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:4
4506*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:8
4507*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:12
4508e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(7)
4509*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:15
4510e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(6)
4511*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:19
4512e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
4513*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:23
4514e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
4515*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:27
4516e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4517*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen
4518e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4519*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:4
4520e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4521*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:8
4522e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4523*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:12
4524e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4525e1094dd8SFabian Ritterentry:
4526e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 31, i1 false)
4527e1094dd8SFabian Ritter  ret void
4528e1094dd8SFabian Ritter}
4529e1094dd8SFabian Ritter
4530e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz32_align_8_8(ptr addrspace(5) align 8 %dst, ptr addrspace(5) align 8 readonly %src) {
4531e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz32_align_8_8:
4532e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4533e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4534e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x7
4535e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:16
4536e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:20
4537e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:24
4538e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:28
4539e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen
4540e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:4
4541e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:8
4542e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:12
4543e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(7)
4544e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:16
4545e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(6)
4546e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:20
4547e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
4548e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:24
4549e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
4550e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:28
4551e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4552e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen
4553e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4554e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:4
4555e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4556e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:8
4557e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4558e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:12
4559e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4560e1094dd8SFabian Ritterentry:
4561e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 8 %dst, ptr addrspace(5) noundef nonnull align 8 %src, i64 32, i1 false)
4562e1094dd8SFabian Ritter  ret void
4563e1094dd8SFabian Ritter}
4564e1094dd8SFabian Ritter
4565e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz16_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
4566e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz16_align_16_16:
4567e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4568e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4569e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x3
4570e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen
4571e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:4
4572e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:8
4573e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:12
4574e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4575e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
4576e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4577e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
4578e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4579e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
4580e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4581e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:12
4582e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4583e1094dd8SFabian Ritterentry:
4584e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 16, i1 false)
4585e1094dd8SFabian Ritter  ret void
4586e1094dd8SFabian Ritter}
4587e1094dd8SFabian Ritter
4588e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz31_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
4589e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz31_align_16_16:
4590e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4591e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4592*173c6823SFabian Ritter; CHECK-NEXT:    s_clause 0x7
4593*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:15
4594*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:19
4595*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:23
4596*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:27
4597*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen
4598*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:4
4599*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:8
4600*173c6823SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:12
4601e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(7)
4602*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:15
4603e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(6)
4604*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:19
4605e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
4606*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:23
4607e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
4608*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:27
4609e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4610*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen
4611e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4612*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:4
4613e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4614*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:8
4615e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4616*173c6823SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:12
4617e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4618e1094dd8SFabian Ritterentry:
4619e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 31, i1 false)
4620e1094dd8SFabian Ritter  ret void
4621e1094dd8SFabian Ritter}
4622e1094dd8SFabian Ritter
4623e1094dd8SFabian Ritterdefine void @memcpy_p5_p5_sz32_align_16_16(ptr addrspace(5) align 16 %dst, ptr addrspace(5) align 16 readonly %src) {
4624e1094dd8SFabian Ritter; CHECK-LABEL: memcpy_p5_p5_sz32_align_16_16:
4625e1094dd8SFabian Ritter; CHECK:       ; %bb.0: ; %entry
4626e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4627e1094dd8SFabian Ritter; CHECK-NEXT:    s_clause 0x7
4628e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:16
4629e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen offset:20
4630e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen offset:24
4631e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v5, v1, s[0:3], 0 offen offset:28
4632e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v6, v1, s[0:3], 0 offen
4633e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v7, v1, s[0:3], 0 offen offset:4
4634e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v8, v1, s[0:3], 0 offen offset:8
4635e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:12
4636e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(7)
4637e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:16
4638e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(6)
4639e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:20
4640e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(5)
4641e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:24
4642e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(4)
4643e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:28
4644e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(3)
4645e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen
4646e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(2)
4647e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:4
4648e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(1)
4649e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:8
4650e1094dd8SFabian Ritter; CHECK-NEXT:    s_waitcnt vmcnt(0)
4651e1094dd8SFabian Ritter; CHECK-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:12
4652e1094dd8SFabian Ritter; CHECK-NEXT:    s_setpc_b64 s[30:31]
4653e1094dd8SFabian Ritterentry:
4654e1094dd8SFabian Ritter  tail call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noundef nonnull align 16 %dst, ptr addrspace(5) noundef nonnull align 16 %src, i64 32, i1 false)
4655e1094dd8SFabian Ritter  ret void
4656e1094dd8SFabian Ritter}
4657e1094dd8SFabian Ritter
4658e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p0.p0.i64(ptr addrspace(0) noalias nocapture writeonly, ptr addrspace(0) noalias nocapture readonly, i64, i1 immarg) #2
4659e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p0.p1.i64(ptr addrspace(0) noalias nocapture writeonly, ptr addrspace(1) noalias nocapture readonly, i64, i1 immarg) #2
4660e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p0.p3.i64(ptr addrspace(0) noalias nocapture writeonly, ptr addrspace(3) noalias nocapture readonly, i64, i1 immarg) #2
4661e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p0.p4.i64(ptr addrspace(0) noalias nocapture writeonly, ptr addrspace(4) noalias nocapture readonly, i64, i1 immarg) #2
4662e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p0.p5.i64(ptr addrspace(0) noalias nocapture writeonly, ptr addrspace(5) noalias nocapture readonly, i64, i1 immarg) #2
4663e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p1.p0.i64(ptr addrspace(1) noalias nocapture writeonly, ptr addrspace(0) noalias nocapture readonly, i64, i1 immarg) #2
4664e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) noalias nocapture writeonly, ptr addrspace(1) noalias nocapture readonly, i64, i1 immarg) #2
4665e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p1.p3.i64(ptr addrspace(1) noalias nocapture writeonly, ptr addrspace(3) noalias nocapture readonly, i64, i1 immarg) #2
4666e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p1.p4.i64(ptr addrspace(1) noalias nocapture writeonly, ptr addrspace(4) noalias nocapture readonly, i64, i1 immarg) #2
4667e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p1.p5.i64(ptr addrspace(1) noalias nocapture writeonly, ptr addrspace(5) noalias nocapture readonly, i64, i1 immarg) #2
4668e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p3.p0.i64(ptr addrspace(3) noalias nocapture writeonly, ptr addrspace(0) noalias nocapture readonly, i64, i1 immarg) #2
4669e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p3.p1.i64(ptr addrspace(3) noalias nocapture writeonly, ptr addrspace(1) noalias nocapture readonly, i64, i1 immarg) #2
4670e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noalias nocapture writeonly, ptr addrspace(3) noalias nocapture readonly, i64, i1 immarg) #2
4671e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p3.p4.i64(ptr addrspace(3) noalias nocapture writeonly, ptr addrspace(4) noalias nocapture readonly, i64, i1 immarg) #2
4672e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p3.p5.i64(ptr addrspace(3) noalias nocapture writeonly, ptr addrspace(5) noalias nocapture readonly, i64, i1 immarg) #2
4673e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p5.p0.i64(ptr addrspace(5) noalias nocapture writeonly, ptr addrspace(0) noalias nocapture readonly, i64, i1 immarg) #2
4674e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) noalias nocapture writeonly, ptr addrspace(1) noalias nocapture readonly, i64, i1 immarg) #2
4675e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) noalias nocapture writeonly, ptr addrspace(3) noalias nocapture readonly, i64, i1 immarg) #2
4676e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noalias nocapture writeonly, ptr addrspace(4) noalias nocapture readonly, i64, i1 immarg) #2
4677e1094dd8SFabian Ritterdeclare void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) noalias nocapture writeonly, ptr addrspace(5) noalias nocapture readonly, i64, i1 immarg) #2
4678e1094dd8SFabian Ritter
4679e1094dd8SFabian Ritterattributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
4680e1094dd8SFabian Ritter
4681