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