xref: /llvm-project/llvm/test/CodeGen/AMDGPU/freeze.ll (revision 4f951503b9b6519906bfe4608bf151057a210b22)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -global-isel=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10,GFX10-SDAG  %s
3; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10,GFX10-GISEL %s
4; RUN: llc -global-isel=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 < %s | FileCheck -check-prefixes=GFX11,GFX11-SDAG %s
5; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 < %s | FileCheck -check-prefixes=GFX11,GFX11-GISEL %s
6
7define void @freeze_v2i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
8; GFX10-LABEL: freeze_v2i32:
9; GFX10:       ; %bb.0:
10; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
12; GFX10-NEXT:    s_waitcnt vmcnt(0)
13; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
14; GFX10-NEXT:    s_setpc_b64 s[30:31]
15;
16; GFX11-LABEL: freeze_v2i32:
17; GFX11:       ; %bb.0:
18; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
20; GFX11-NEXT:    s_waitcnt vmcnt(0)
21; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
22; GFX11-NEXT:    s_setpc_b64 s[30:31]
23  %a = load <2 x i32>, ptr addrspace(1) %ptra, align 4
24  %freeze = freeze <2 x i32> %a
25  store <2 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
26  ret void
27}
28
29define void @freeze_v3i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
30; GFX10-LABEL: freeze_v3i32:
31; GFX10:       ; %bb.0:
32; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33; GFX10-NEXT:    global_load_dwordx3 v[4:6], v[0:1], off
34; GFX10-NEXT:    s_waitcnt vmcnt(0)
35; GFX10-NEXT:    global_store_dwordx3 v[2:3], v[4:6], off
36; GFX10-NEXT:    s_setpc_b64 s[30:31]
37;
38; GFX11-LABEL: freeze_v3i32:
39; GFX11:       ; %bb.0:
40; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41; GFX11-NEXT:    global_load_b96 v[4:6], v[0:1], off
42; GFX11-NEXT:    s_waitcnt vmcnt(0)
43; GFX11-NEXT:    global_store_b96 v[2:3], v[4:6], off
44; GFX11-NEXT:    s_setpc_b64 s[30:31]
45  %a = load <3 x i32>, ptr addrspace(1) %ptra, align 4
46  %freeze = freeze <3 x i32> %a
47  store <3 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
48  ret void
49}
50
51define void @freeze_v4i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
52; GFX10-LABEL: freeze_v4i32:
53; GFX10:       ; %bb.0:
54; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
56; GFX10-NEXT:    s_waitcnt vmcnt(0)
57; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
58; GFX10-NEXT:    s_setpc_b64 s[30:31]
59;
60; GFX11-LABEL: freeze_v4i32:
61; GFX11:       ; %bb.0:
62; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
63; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
64; GFX11-NEXT:    s_waitcnt vmcnt(0)
65; GFX11-NEXT:    global_store_b128 v[2:3], v[4:7], off
66; GFX11-NEXT:    s_setpc_b64 s[30:31]
67  %a = load <4 x i32>, ptr addrspace(1) %ptra, align 4
68  %freeze = freeze <4 x i32> %a
69  store <4 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
70  ret void
71}
72
73define void @freeze_v5i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
74; GFX10-SDAG-LABEL: freeze_v5i32:
75; GFX10-SDAG:       ; %bb.0:
76; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
77; GFX10-SDAG-NEXT:    s_clause 0x1
78; GFX10-SDAG-NEXT:    global_load_dword v8, v[0:1], off offset:16
79; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
80; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
81; GFX10-SDAG-NEXT:    global_store_dword v[2:3], v8, off offset:16
82; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
83; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
84; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
85;
86; GFX10-GISEL-LABEL: freeze_v5i32:
87; GFX10-GISEL:       ; %bb.0:
88; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
89; GFX10-GISEL-NEXT:    s_clause 0x1
90; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
91; GFX10-GISEL-NEXT:    global_load_dword v8, v[0:1], off offset:16
92; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
93; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
94; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
95; GFX10-GISEL-NEXT:    global_store_dword v[2:3], v8, off offset:16
96; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
97;
98; GFX11-SDAG-LABEL: freeze_v5i32:
99; GFX11-SDAG:       ; %bb.0:
100; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
101; GFX11-SDAG-NEXT:    s_clause 0x1
102; GFX11-SDAG-NEXT:    global_load_b32 v8, v[0:1], off offset:16
103; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off
104; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
105; GFX11-SDAG-NEXT:    global_store_b32 v[2:3], v8, off offset:16
106; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
107; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off
108; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
109;
110; GFX11-GISEL-LABEL: freeze_v5i32:
111; GFX11-GISEL:       ; %bb.0:
112; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
113; GFX11-GISEL-NEXT:    s_clause 0x1
114; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
115; GFX11-GISEL-NEXT:    global_load_b32 v0, v[0:1], off offset:16
116; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
117; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
118; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
119; GFX11-GISEL-NEXT:    global_store_b32 v[2:3], v0, off offset:16
120; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
121  %a = load <5 x i32>, ptr addrspace(1) %ptra, align 4
122  %freeze = freeze <5 x i32> %a
123  store <5 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
124  ret void
125}
126
127define void @freeze_v6i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
128; GFX10-SDAG-LABEL: freeze_v6i32:
129; GFX10-SDAG:       ; %bb.0:
130; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
131; GFX10-SDAG-NEXT:    s_clause 0x1
132; GFX10-SDAG-NEXT:    global_load_dwordx2 v[8:9], v[0:1], off offset:16
133; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
134; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
135; GFX10-SDAG-NEXT:    global_store_dwordx2 v[2:3], v[8:9], off offset:16
136; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
137; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
138; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
139;
140; GFX10-GISEL-LABEL: freeze_v6i32:
141; GFX10-GISEL:       ; %bb.0:
142; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
143; GFX10-GISEL-NEXT:    s_clause 0x1
144; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
145; GFX10-GISEL-NEXT:    global_load_dwordx2 v[8:9], v[0:1], off offset:16
146; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
147; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
148; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
149; GFX10-GISEL-NEXT:    global_store_dwordx2 v[2:3], v[8:9], off offset:16
150; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
151;
152; GFX11-SDAG-LABEL: freeze_v6i32:
153; GFX11-SDAG:       ; %bb.0:
154; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
155; GFX11-SDAG-NEXT:    s_clause 0x1
156; GFX11-SDAG-NEXT:    global_load_b64 v[8:9], v[0:1], off offset:16
157; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off
158; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
159; GFX11-SDAG-NEXT:    global_store_b64 v[2:3], v[8:9], off offset:16
160; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
161; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off
162; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
163;
164; GFX11-GISEL-LABEL: freeze_v6i32:
165; GFX11-GISEL:       ; %bb.0:
166; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
167; GFX11-GISEL-NEXT:    s_clause 0x1
168; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
169; GFX11-GISEL-NEXT:    global_load_b64 v[0:1], v[0:1], off offset:16
170; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
171; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
172; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
173; GFX11-GISEL-NEXT:    global_store_b64 v[2:3], v[0:1], off offset:16
174; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
175  %a = load <6 x i32>, ptr addrspace(1) %ptra, align 4
176  %freeze = freeze <6 x i32> %a
177  store <6 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
178  ret void
179}
180
181define void @freeze_v7i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
182; GFX10-SDAG-LABEL: freeze_v7i32:
183; GFX10-SDAG:       ; %bb.0:
184; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
185; GFX10-SDAG-NEXT:    s_clause 0x1
186; GFX10-SDAG-NEXT:    global_load_dwordx3 v[8:10], v[0:1], off offset:16
187; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
188; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
189; GFX10-SDAG-NEXT:    global_store_dwordx3 v[2:3], v[8:10], off offset:16
190; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
191; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
192; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
193;
194; GFX10-GISEL-LABEL: freeze_v7i32:
195; GFX10-GISEL:       ; %bb.0:
196; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
197; GFX10-GISEL-NEXT:    s_clause 0x1
198; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
199; GFX10-GISEL-NEXT:    global_load_dwordx3 v[8:10], v[0:1], off offset:16
200; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
201; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
202; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
203; GFX10-GISEL-NEXT:    global_store_dwordx3 v[2:3], v[8:10], off offset:16
204; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
205;
206; GFX11-SDAG-LABEL: freeze_v7i32:
207; GFX11-SDAG:       ; %bb.0:
208; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
209; GFX11-SDAG-NEXT:    s_clause 0x1
210; GFX11-SDAG-NEXT:    global_load_b96 v[8:10], v[0:1], off offset:16
211; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off
212; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
213; GFX11-SDAG-NEXT:    global_store_b96 v[2:3], v[8:10], off offset:16
214; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
215; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off
216; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
217;
218; GFX11-GISEL-LABEL: freeze_v7i32:
219; GFX11-GISEL:       ; %bb.0:
220; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
221; GFX11-GISEL-NEXT:    s_clause 0x1
222; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
223; GFX11-GISEL-NEXT:    global_load_b96 v[8:10], v[0:1], off offset:16
224; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
225; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
226; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
227; GFX11-GISEL-NEXT:    global_store_b96 v[2:3], v[8:10], off offset:16
228; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
229  %a = load <7 x i32>, ptr addrspace(1) %ptra, align 4
230  %freeze = freeze <7 x i32> %a
231  store <7 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
232  ret void
233}
234
235define void @freeze_v8i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
236; GFX10-SDAG-LABEL: freeze_v8i32:
237; GFX10-SDAG:       ; %bb.0:
238; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
239; GFX10-SDAG-NEXT:    s_clause 0x1
240; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:16
241; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
242; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
243; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:16
244; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
245; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
246; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
247;
248; GFX10-GISEL-LABEL: freeze_v8i32:
249; GFX10-GISEL:       ; %bb.0:
250; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
251; GFX10-GISEL-NEXT:    s_clause 0x1
252; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
253; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
254; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
255; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
256; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
257; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
258; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
259;
260; GFX11-SDAG-LABEL: freeze_v8i32:
261; GFX11-SDAG:       ; %bb.0:
262; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
263; GFX11-SDAG-NEXT:    s_clause 0x1
264; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:16
265; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off
266; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
267; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:16
268; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
269; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off
270; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
271;
272; GFX11-GISEL-LABEL: freeze_v8i32:
273; GFX11-GISEL:       ; %bb.0:
274; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
275; GFX11-GISEL-NEXT:    s_clause 0x1
276; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
277; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
278; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
279; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
280; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
281; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
282; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
283  %a = load <8 x i32>, ptr addrspace(1) %ptra, align 4
284  %freeze = freeze <8 x i32> %a
285  store <8 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
286  ret void
287}
288
289define void @freeze_v9i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
290; GFX10-SDAG-LABEL: freeze_v9i32:
291; GFX10-SDAG:       ; %bb.0:
292; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
293; GFX10-SDAG-NEXT:    s_clause 0x2
294; GFX10-SDAG-NEXT:    global_load_dword v12, v[0:1], off offset:32
295; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
296; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
297; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
298; GFX10-SDAG-NEXT:    global_store_dword v[2:3], v12, off offset:32
299; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
300; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
301; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
302; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
303; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
304;
305; GFX10-GISEL-LABEL: freeze_v9i32:
306; GFX10-GISEL:       ; %bb.0:
307; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
308; GFX10-GISEL-NEXT:    s_clause 0x2
309; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
310; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
311; GFX10-GISEL-NEXT:    global_load_dword v12, v[0:1], off offset:32
312; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
313; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
314; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
315; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
316; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
317; GFX10-GISEL-NEXT:    global_store_dword v[2:3], v12, off offset:32
318; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
319;
320; GFX11-SDAG-LABEL: freeze_v9i32:
321; GFX11-SDAG:       ; %bb.0:
322; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
323; GFX11-SDAG-NEXT:    s_clause 0x2
324; GFX11-SDAG-NEXT:    global_load_b32 v12, v[0:1], off offset:32
325; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off
326; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
327; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
328; GFX11-SDAG-NEXT:    global_store_b32 v[2:3], v12, off offset:32
329; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
330; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off
331; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
332; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
333; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
334;
335; GFX11-GISEL-LABEL: freeze_v9i32:
336; GFX11-GISEL:       ; %bb.0:
337; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
338; GFX11-GISEL-NEXT:    s_clause 0x2
339; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
340; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
341; GFX11-GISEL-NEXT:    global_load_b32 v0, v[0:1], off offset:32
342; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
343; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
344; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
345; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
346; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
347; GFX11-GISEL-NEXT:    global_store_b32 v[2:3], v0, off offset:32
348; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
349  %a = load <9 x i32>, ptr addrspace(1) %ptra, align 4
350  %freeze = freeze <9 x i32> %a
351  store <9 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
352  ret void
353}
354
355define void @freeze_v10i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
356; GFX10-LABEL: freeze_v10i32:
357; GFX10:       ; %bb.0:
358; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
359; GFX10-NEXT:    s_clause 0x2
360; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
361; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
362; GFX10-NEXT:    global_load_dwordx2 v[12:13], v[0:1], off offset:32
363; GFX10-NEXT:    s_waitcnt vmcnt(2)
364; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
365; GFX10-NEXT:    s_waitcnt vmcnt(1)
366; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
367; GFX10-NEXT:    s_waitcnt vmcnt(0)
368; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[12:13], off offset:32
369; GFX10-NEXT:    s_setpc_b64 s[30:31]
370;
371; GFX11-LABEL: freeze_v10i32:
372; GFX11:       ; %bb.0:
373; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
374; GFX11-NEXT:    s_clause 0x2
375; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
376; GFX11-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
377; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off offset:32
378; GFX11-NEXT:    s_waitcnt vmcnt(2)
379; GFX11-NEXT:    global_store_b128 v[2:3], v[4:7], off
380; GFX11-NEXT:    s_waitcnt vmcnt(1)
381; GFX11-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
382; GFX11-NEXT:    s_waitcnt vmcnt(0)
383; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off offset:32
384; GFX11-NEXT:    s_setpc_b64 s[30:31]
385  %a = load <10 x i32>, ptr addrspace(1) %ptra, align 4
386  %freeze = freeze <10 x i32> %a
387  store <10 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
388  ret void
389}
390
391define void @freeze_v11i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
392; GFX10-LABEL: freeze_v11i32:
393; GFX10:       ; %bb.0:
394; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
395; GFX10-NEXT:    s_clause 0x2
396; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
397; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
398; GFX10-NEXT:    global_load_dwordx3 v[12:14], v[0:1], off offset:32
399; GFX10-NEXT:    s_waitcnt vmcnt(2)
400; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
401; GFX10-NEXT:    s_waitcnt vmcnt(1)
402; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
403; GFX10-NEXT:    s_waitcnt vmcnt(0)
404; GFX10-NEXT:    global_store_dwordx3 v[2:3], v[12:14], off offset:32
405; GFX10-NEXT:    s_setpc_b64 s[30:31]
406;
407; GFX11-LABEL: freeze_v11i32:
408; GFX11:       ; %bb.0:
409; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
410; GFX11-NEXT:    s_clause 0x2
411; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
412; GFX11-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
413; GFX11-NEXT:    global_load_b96 v[12:14], v[0:1], off offset:32
414; GFX11-NEXT:    s_waitcnt vmcnt(2)
415; GFX11-NEXT:    global_store_b128 v[2:3], v[4:7], off
416; GFX11-NEXT:    s_waitcnt vmcnt(1)
417; GFX11-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
418; GFX11-NEXT:    s_waitcnt vmcnt(0)
419; GFX11-NEXT:    global_store_b96 v[2:3], v[12:14], off offset:32
420; GFX11-NEXT:    s_setpc_b64 s[30:31]
421  %a = load <11 x i32>, ptr addrspace(1) %ptra, align 4
422  %freeze = freeze <11 x i32> %a
423  store <11 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
424  ret void
425}
426
427define void @freeze_v12i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
428; GFX10-LABEL: freeze_v12i32:
429; GFX10:       ; %bb.0:
430; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
431; GFX10-NEXT:    s_clause 0x2
432; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
433; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
434; GFX10-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
435; GFX10-NEXT:    s_waitcnt vmcnt(2)
436; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
437; GFX10-NEXT:    s_waitcnt vmcnt(1)
438; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
439; GFX10-NEXT:    s_waitcnt vmcnt(0)
440; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
441; GFX10-NEXT:    s_setpc_b64 s[30:31]
442;
443; GFX11-LABEL: freeze_v12i32:
444; GFX11:       ; %bb.0:
445; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
446; GFX11-NEXT:    s_clause 0x2
447; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
448; GFX11-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
449; GFX11-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
450; GFX11-NEXT:    s_waitcnt vmcnt(2)
451; GFX11-NEXT:    global_store_b128 v[2:3], v[4:7], off
452; GFX11-NEXT:    s_waitcnt vmcnt(1)
453; GFX11-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
454; GFX11-NEXT:    s_waitcnt vmcnt(0)
455; GFX11-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
456; GFX11-NEXT:    s_setpc_b64 s[30:31]
457  %a = load <12 x i32>, ptr addrspace(1) %ptra, align 4
458  %freeze = freeze <12 x i32> %a
459  store <12 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
460  ret void
461}
462define void @freeze_v13i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
463; GFX10-SDAG-LABEL: freeze_v13i32:
464; GFX10-SDAG:       ; %bb.0:
465; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
466; GFX10-SDAG-NEXT:    s_clause 0x3
467; GFX10-SDAG-NEXT:    global_load_dword v16, v[0:1], off offset:48
468; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:32
469; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
470; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:16
471; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
472; GFX10-SDAG-NEXT:    global_store_dword v[2:3], v16, off offset:48
473; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
474; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:32
475; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
476; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
477; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
478; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:16
479; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
480;
481; GFX10-GISEL-LABEL: freeze_v13i32:
482; GFX10-GISEL:       ; %bb.0:
483; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
484; GFX10-GISEL-NEXT:    s_clause 0x3
485; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
486; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
487; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
488; GFX10-GISEL-NEXT:    global_load_dword v16, v[0:1], off offset:48
489; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
490; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
491; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
492; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
493; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
494; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
495; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
496; GFX10-GISEL-NEXT:    global_store_dword v[2:3], v16, off offset:48
497; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
498;
499; GFX11-SDAG-LABEL: freeze_v13i32:
500; GFX11-SDAG:       ; %bb.0:
501; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
502; GFX11-SDAG-NEXT:    s_clause 0x3
503; GFX11-SDAG-NEXT:    global_load_b32 v16, v[0:1], off offset:48
504; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:32
505; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off
506; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:16
507; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
508; GFX11-SDAG-NEXT:    global_store_b32 v[2:3], v16, off offset:48
509; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
510; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:32
511; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
512; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off
513; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
514; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:16
515; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
516;
517; GFX11-GISEL-LABEL: freeze_v13i32:
518; GFX11-GISEL:       ; %bb.0:
519; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
520; GFX11-GISEL-NEXT:    s_clause 0x3
521; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
522; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
523; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
524; GFX11-GISEL-NEXT:    global_load_b32 v0, v[0:1], off offset:48
525; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
526; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
527; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
528; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
529; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
530; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
531; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
532; GFX11-GISEL-NEXT:    global_store_b32 v[2:3], v0, off offset:48
533; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
534  %a = load <13 x i32>, ptr addrspace(1) %ptra, align 4
535  %freeze = freeze <13 x i32> %a
536  store <13 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
537  ret void
538}
539
540define void @freeze_v14i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
541; GFX10-SDAG-LABEL: freeze_v14i32:
542; GFX10-SDAG:       ; %bb.0:
543; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
544; GFX10-SDAG-NEXT:    s_clause 0x3
545; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:32
546; GFX10-SDAG-NEXT:    global_load_dwordx2 v[16:17], v[0:1], off offset:48
547; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
548; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:16
549; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
550; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:32
551; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
552; GFX10-SDAG-NEXT:    global_store_dwordx2 v[2:3], v[16:17], off offset:48
553; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
554; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
555; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
556; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:16
557; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
558;
559; GFX10-GISEL-LABEL: freeze_v14i32:
560; GFX10-GISEL:       ; %bb.0:
561; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
562; GFX10-GISEL-NEXT:    s_clause 0x3
563; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
564; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
565; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
566; GFX10-GISEL-NEXT:    global_load_dwordx2 v[16:17], v[0:1], off offset:48
567; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
568; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
569; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
570; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
571; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
572; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
573; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
574; GFX10-GISEL-NEXT:    global_store_dwordx2 v[2:3], v[16:17], off offset:48
575; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
576;
577; GFX11-SDAG-LABEL: freeze_v14i32:
578; GFX11-SDAG:       ; %bb.0:
579; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
580; GFX11-SDAG-NEXT:    s_clause 0x3
581; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:32
582; GFX11-SDAG-NEXT:    global_load_b64 v[16:17], v[0:1], off offset:48
583; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off
584; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:16
585; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
586; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:32
587; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
588; GFX11-SDAG-NEXT:    global_store_b64 v[2:3], v[16:17], off offset:48
589; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
590; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off
591; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
592; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:16
593; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
594;
595; GFX11-GISEL-LABEL: freeze_v14i32:
596; GFX11-GISEL:       ; %bb.0:
597; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
598; GFX11-GISEL-NEXT:    s_clause 0x3
599; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
600; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
601; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
602; GFX11-GISEL-NEXT:    global_load_b64 v[0:1], v[0:1], off offset:48
603; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
604; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
605; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
606; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
607; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
608; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
609; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
610; GFX11-GISEL-NEXT:    global_store_b64 v[2:3], v[0:1], off offset:48
611; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
612  %a = load <14 x i32>, ptr addrspace(1) %ptra, align 4
613  %freeze = freeze <14 x i32> %a
614  store <14 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
615  ret void
616}
617
618define void @freeze_v15i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
619; GFX10-SDAG-LABEL: freeze_v15i32:
620; GFX10-SDAG:       ; %bb.0:
621; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
622; GFX10-SDAG-NEXT:    s_clause 0x3
623; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:32
624; GFX10-SDAG-NEXT:    global_load_dwordx3 v[16:18], v[0:1], off offset:48
625; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
626; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:16
627; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
628; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:32
629; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
630; GFX10-SDAG-NEXT:    global_store_dwordx3 v[2:3], v[16:18], off offset:48
631; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
632; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
633; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
634; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:16
635; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
636;
637; GFX10-GISEL-LABEL: freeze_v15i32:
638; GFX10-GISEL:       ; %bb.0:
639; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
640; GFX10-GISEL-NEXT:    s_clause 0x3
641; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
642; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
643; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
644; GFX10-GISEL-NEXT:    global_load_dwordx3 v[16:18], v[0:1], off offset:48
645; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
646; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
647; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
648; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
649; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
650; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
651; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
652; GFX10-GISEL-NEXT:    global_store_dwordx3 v[2:3], v[16:18], off offset:48
653; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
654;
655; GFX11-SDAG-LABEL: freeze_v15i32:
656; GFX11-SDAG:       ; %bb.0:
657; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
658; GFX11-SDAG-NEXT:    s_clause 0x3
659; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:32
660; GFX11-SDAG-NEXT:    global_load_b96 v[16:18], v[0:1], off offset:48
661; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off
662; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:16
663; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
664; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:32
665; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
666; GFX11-SDAG-NEXT:    global_store_b96 v[2:3], v[16:18], off offset:48
667; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
668; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off
669; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
670; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:16
671; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
672;
673; GFX11-GISEL-LABEL: freeze_v15i32:
674; GFX11-GISEL:       ; %bb.0:
675; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
676; GFX11-GISEL-NEXT:    s_clause 0x3
677; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
678; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
679; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
680; GFX11-GISEL-NEXT:    global_load_b96 v[16:18], v[0:1], off offset:48
681; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
682; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
683; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
684; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
685; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
686; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
687; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
688; GFX11-GISEL-NEXT:    global_store_b96 v[2:3], v[16:18], off offset:48
689; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
690  %a = load <15 x i32>, ptr addrspace(1) %ptra, align 4
691  %freeze = freeze <15 x i32> %a
692  store <15 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
693  ret void
694}
695
696define void @freeze_v16i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
697; GFX10-SDAG-LABEL: freeze_v16i32:
698; GFX10-SDAG:       ; %bb.0:
699; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
700; GFX10-SDAG-NEXT:    s_clause 0x3
701; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:32
702; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:48
703; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off
704; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:16
705; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
706; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:32
707; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
708; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:48
709; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
710; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off
711; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
712; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:16
713; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
714;
715; GFX10-GISEL-LABEL: freeze_v16i32:
716; GFX10-GISEL:       ; %bb.0:
717; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
718; GFX10-GISEL-NEXT:    s_clause 0x3
719; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
720; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
721; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
722; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
723; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
724; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
725; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
726; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
727; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
728; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
729; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
730; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
731; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
732;
733; GFX11-SDAG-LABEL: freeze_v16i32:
734; GFX11-SDAG:       ; %bb.0:
735; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
736; GFX11-SDAG-NEXT:    s_clause 0x3
737; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:32
738; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:48
739; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off
740; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:16
741; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
742; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:32
743; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
744; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:48
745; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
746; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off
747; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
748; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:16
749; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
750;
751; GFX11-GISEL-LABEL: freeze_v16i32:
752; GFX11-GISEL:       ; %bb.0:
753; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
754; GFX11-GISEL-NEXT:    s_clause 0x3
755; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
756; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
757; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
758; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
759; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
760; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
761; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
762; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
763; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
764; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
765; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
766; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
767; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
768  %a = load <16 x i32>, ptr addrspace(1) %ptra, align 4
769  %freeze = freeze <16 x i32> %a
770  store <16 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
771  ret void
772}
773
774define void @freeze_v17i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
775; GFX10-SDAG-LABEL: freeze_v17i32:
776; GFX10-SDAG:       ; %bb.0:
777; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
778; GFX10-SDAG-NEXT:    s_clause 0x4
779; GFX10-SDAG-NEXT:    global_load_dword v20, v[0:1], off offset:64
780; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:32
781; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:48
782; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off
783; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:16
784; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
785; GFX10-SDAG-NEXT:    global_store_dword v[2:3], v20, off offset:64
786; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
787; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:32
788; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
789; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:48
790; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
791; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off
792; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
793; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:16
794; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
795;
796; GFX10-GISEL-LABEL: freeze_v17i32:
797; GFX10-GISEL:       ; %bb.0:
798; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
799; GFX10-GISEL-NEXT:    s_clause 0x4
800; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
801; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
802; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
803; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
804; GFX10-GISEL-NEXT:    global_load_dword v20, v[0:1], off offset:64
805; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
806; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
807; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
808; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
809; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
810; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
811; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
812; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
813; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
814; GFX10-GISEL-NEXT:    global_store_dword v[2:3], v20, off offset:64
815; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
816;
817; GFX11-SDAG-LABEL: freeze_v17i32:
818; GFX11-SDAG:       ; %bb.0:
819; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
820; GFX11-SDAG-NEXT:    s_clause 0x4
821; GFX11-SDAG-NEXT:    global_load_b32 v20, v[0:1], off offset:64
822; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:32
823; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:48
824; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off
825; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:16
826; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
827; GFX11-SDAG-NEXT:    global_store_b32 v[2:3], v20, off offset:64
828; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
829; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:32
830; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
831; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:48
832; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
833; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off
834; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
835; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:16
836; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
837;
838; GFX11-GISEL-LABEL: freeze_v17i32:
839; GFX11-GISEL:       ; %bb.0:
840; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
841; GFX11-GISEL-NEXT:    s_clause 0x4
842; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
843; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
844; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
845; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
846; GFX11-GISEL-NEXT:    global_load_b32 v0, v[0:1], off offset:64
847; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
848; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
849; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
850; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
851; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
852; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
853; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
854; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
855; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
856; GFX11-GISEL-NEXT:    global_store_b32 v[2:3], v0, off offset:64
857; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
858  %a = load <17 x i32>, ptr addrspace(1) %ptra, align 4
859  %freeze = freeze <17 x i32> %a
860  store <17 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
861  ret void
862}
863
864define void @freeze_v18i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
865; GFX10-SDAG-LABEL: freeze_v18i32:
866; GFX10-SDAG:       ; %bb.0:
867; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
868; GFX10-SDAG-NEXT:    s_clause 0x4
869; GFX10-SDAG-NEXT:    global_load_dwordx2 v[20:21], v[0:1], off offset:64
870; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:32
871; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:48
872; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off
873; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:16
874; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
875; GFX10-SDAG-NEXT:    global_store_dwordx2 v[2:3], v[20:21], off offset:64
876; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
877; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:32
878; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
879; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:48
880; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
881; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off
882; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
883; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:16
884; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
885;
886; GFX10-GISEL-LABEL: freeze_v18i32:
887; GFX10-GISEL:       ; %bb.0:
888; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
889; GFX10-GISEL-NEXT:    s_clause 0x4
890; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
891; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
892; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
893; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
894; GFX10-GISEL-NEXT:    global_load_dwordx2 v[20:21], v[0:1], off offset:64
895; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
896; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
897; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
898; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
899; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
900; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
901; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
902; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
903; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
904; GFX10-GISEL-NEXT:    global_store_dwordx2 v[2:3], v[20:21], off offset:64
905; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
906;
907; GFX11-SDAG-LABEL: freeze_v18i32:
908; GFX11-SDAG:       ; %bb.0:
909; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
910; GFX11-SDAG-NEXT:    s_clause 0x4
911; GFX11-SDAG-NEXT:    global_load_b64 v[20:21], v[0:1], off offset:64
912; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:32
913; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:48
914; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off
915; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:16
916; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
917; GFX11-SDAG-NEXT:    global_store_b64 v[2:3], v[20:21], off offset:64
918; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
919; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:32
920; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
921; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:48
922; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
923; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off
924; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
925; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:16
926; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
927;
928; GFX11-GISEL-LABEL: freeze_v18i32:
929; GFX11-GISEL:       ; %bb.0:
930; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
931; GFX11-GISEL-NEXT:    s_clause 0x4
932; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
933; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
934; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
935; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
936; GFX11-GISEL-NEXT:    global_load_b64 v[0:1], v[0:1], off offset:64
937; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
938; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
939; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
940; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
941; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
942; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
943; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
944; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
945; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
946; GFX11-GISEL-NEXT:    global_store_b64 v[2:3], v[0:1], off offset:64
947; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
948  %a = load <18 x i32>, ptr addrspace(1) %ptra, align 4
949  %freeze = freeze <18 x i32> %a
950  store <18 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
951  ret void
952}
953
954define void @freeze_v19i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
955; GFX10-SDAG-LABEL: freeze_v19i32:
956; GFX10-SDAG:       ; %bb.0:
957; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
958; GFX10-SDAG-NEXT:    s_clause 0x4
959; GFX10-SDAG-NEXT:    global_load_dwordx3 v[20:22], v[0:1], off offset:64
960; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:32
961; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:48
962; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off
963; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:16
964; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
965; GFX10-SDAG-NEXT:    global_store_dwordx3 v[2:3], v[20:22], off offset:64
966; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
967; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:32
968; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
969; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:48
970; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
971; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off
972; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
973; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:16
974; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
975;
976; GFX10-GISEL-LABEL: freeze_v19i32:
977; GFX10-GISEL:       ; %bb.0:
978; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
979; GFX10-GISEL-NEXT:    s_clause 0x4
980; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
981; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
982; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
983; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
984; GFX10-GISEL-NEXT:    global_load_dwordx3 v[20:22], v[0:1], off offset:64
985; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
986; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
987; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
988; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
989; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
990; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
991; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
992; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
993; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
994; GFX10-GISEL-NEXT:    global_store_dwordx3 v[2:3], v[20:22], off offset:64
995; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
996;
997; GFX11-SDAG-LABEL: freeze_v19i32:
998; GFX11-SDAG:       ; %bb.0:
999; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1000; GFX11-SDAG-NEXT:    s_clause 0x4
1001; GFX11-SDAG-NEXT:    global_load_b96 v[20:22], v[0:1], off offset:64
1002; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:32
1003; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:48
1004; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off
1005; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:16
1006; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
1007; GFX11-SDAG-NEXT:    global_store_b96 v[2:3], v[20:22], off offset:64
1008; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
1009; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:32
1010; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
1011; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:48
1012; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
1013; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off
1014; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
1015; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:16
1016; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1017;
1018; GFX11-GISEL-LABEL: freeze_v19i32:
1019; GFX11-GISEL:       ; %bb.0:
1020; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1021; GFX11-GISEL-NEXT:    s_clause 0x4
1022; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
1023; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
1024; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
1025; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
1026; GFX11-GISEL-NEXT:    global_load_b96 v[20:22], v[0:1], off offset:64
1027; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
1028; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
1029; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
1030; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
1031; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
1032; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
1033; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
1034; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
1035; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
1036; GFX11-GISEL-NEXT:    global_store_b96 v[2:3], v[20:22], off offset:64
1037; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1038  %a = load <19 x i32>, ptr addrspace(1) %ptra, align 4
1039  %freeze = freeze <19 x i32> %a
1040  store <19 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
1041  ret void
1042}
1043
1044define void @freeze_v20i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1045; GFX10-SDAG-LABEL: freeze_v20i32:
1046; GFX10-SDAG:       ; %bb.0:
1047; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1048; GFX10-SDAG-NEXT:    s_clause 0x4
1049; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:64
1050; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:32
1051; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:48
1052; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off
1053; GFX10-SDAG-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:16
1054; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
1055; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:64
1056; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
1057; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:32
1058; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
1059; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:48
1060; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
1061; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off
1062; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
1063; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:16
1064; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1065;
1066; GFX10-GISEL-LABEL: freeze_v20i32:
1067; GFX10-GISEL:       ; %bb.0:
1068; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1069; GFX10-GISEL-NEXT:    s_clause 0x4
1070; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
1071; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
1072; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
1073; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
1074; GFX10-GISEL-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:64
1075; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
1076; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
1077; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
1078; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
1079; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
1080; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
1081; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
1082; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
1083; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
1084; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:64
1085; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1086;
1087; GFX11-SDAG-LABEL: freeze_v20i32:
1088; GFX11-SDAG:       ; %bb.0:
1089; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1090; GFX11-SDAG-NEXT:    s_clause 0x4
1091; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:64
1092; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:32
1093; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:48
1094; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off
1095; GFX11-SDAG-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:16
1096; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
1097; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:64
1098; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
1099; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:32
1100; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
1101; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:48
1102; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
1103; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off
1104; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
1105; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:16
1106; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1107;
1108; GFX11-GISEL-LABEL: freeze_v20i32:
1109; GFX11-GISEL:       ; %bb.0:
1110; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1111; GFX11-GISEL-NEXT:    s_clause 0x4
1112; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
1113; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
1114; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
1115; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
1116; GFX11-GISEL-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:64
1117; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
1118; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
1119; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
1120; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
1121; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
1122; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
1123; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
1124; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
1125; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
1126; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:64
1127; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1128  %a = load <20 x i32>, ptr addrspace(1) %ptra, align 4
1129  %freeze = freeze <20 x i32> %a
1130  store <20 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
1131  ret void
1132}
1133
1134define void @freeze_v21i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1135; GFX10-SDAG-LABEL: freeze_v21i32:
1136; GFX10-SDAG:       ; %bb.0:
1137; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1138; GFX10-SDAG-NEXT:    s_clause 0x5
1139; GFX10-SDAG-NEXT:    global_load_dword v24, v[0:1], off offset:80
1140; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:64
1141; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:32
1142; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:48
1143; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off
1144; GFX10-SDAG-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:16
1145; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(5)
1146; GFX10-SDAG-NEXT:    global_store_dword v[2:3], v24, off offset:80
1147; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
1148; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:64
1149; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
1150; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:32
1151; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
1152; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:48
1153; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
1154; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off
1155; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
1156; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:16
1157; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1158;
1159; GFX10-GISEL-LABEL: freeze_v21i32:
1160; GFX10-GISEL:       ; %bb.0:
1161; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1162; GFX10-GISEL-NEXT:    s_clause 0x5
1163; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
1164; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
1165; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
1166; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
1167; GFX10-GISEL-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:64
1168; GFX10-GISEL-NEXT:    global_load_dword v24, v[0:1], off offset:80
1169; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(5)
1170; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
1171; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
1172; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
1173; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
1174; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
1175; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
1176; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
1177; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
1178; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:64
1179; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
1180; GFX10-GISEL-NEXT:    global_store_dword v[2:3], v24, off offset:80
1181; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1182;
1183; GFX11-SDAG-LABEL: freeze_v21i32:
1184; GFX11-SDAG:       ; %bb.0:
1185; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1186; GFX11-SDAG-NEXT:    s_clause 0x5
1187; GFX11-SDAG-NEXT:    global_load_b32 v24, v[0:1], off offset:80
1188; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:64
1189; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:32
1190; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:48
1191; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off
1192; GFX11-SDAG-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:16
1193; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(5)
1194; GFX11-SDAG-NEXT:    global_store_b32 v[2:3], v24, off offset:80
1195; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
1196; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:64
1197; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
1198; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:32
1199; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
1200; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:48
1201; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
1202; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off
1203; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
1204; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:16
1205; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1206;
1207; GFX11-GISEL-LABEL: freeze_v21i32:
1208; GFX11-GISEL:       ; %bb.0:
1209; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1210; GFX11-GISEL-NEXT:    s_clause 0x5
1211; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
1212; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
1213; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
1214; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
1215; GFX11-GISEL-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:64
1216; GFX11-GISEL-NEXT:    global_load_b32 v0, v[0:1], off offset:80
1217; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(5)
1218; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
1219; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
1220; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
1221; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
1222; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
1223; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
1224; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
1225; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
1226; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:64
1227; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
1228; GFX11-GISEL-NEXT:    global_store_b32 v[2:3], v0, off offset:80
1229; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1230  %a = load <21 x i32>, ptr addrspace(1) %ptra, align 4
1231  %freeze = freeze <21 x i32> %a
1232  store <21 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
1233  ret void
1234}
1235
1236define void @freeze_v22i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1237; GFX10-SDAG-LABEL: freeze_v22i32:
1238; GFX10-SDAG:       ; %bb.0:
1239; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1240; GFX10-SDAG-NEXT:    s_clause 0x5
1241; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:64
1242; GFX10-SDAG-NEXT:    global_load_dwordx2 v[24:25], v[0:1], off offset:80
1243; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:32
1244; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:48
1245; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off
1246; GFX10-SDAG-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:16
1247; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(5)
1248; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:64
1249; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
1250; GFX10-SDAG-NEXT:    global_store_dwordx2 v[2:3], v[24:25], off offset:80
1251; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
1252; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:32
1253; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
1254; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:48
1255; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
1256; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off
1257; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
1258; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:16
1259; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1260;
1261; GFX10-GISEL-LABEL: freeze_v22i32:
1262; GFX10-GISEL:       ; %bb.0:
1263; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1264; GFX10-GISEL-NEXT:    s_clause 0x5
1265; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
1266; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
1267; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
1268; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
1269; GFX10-GISEL-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:64
1270; GFX10-GISEL-NEXT:    global_load_dwordx2 v[24:25], v[0:1], off offset:80
1271; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(5)
1272; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
1273; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
1274; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
1275; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
1276; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
1277; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
1278; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
1279; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
1280; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:64
1281; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
1282; GFX10-GISEL-NEXT:    global_store_dwordx2 v[2:3], v[24:25], off offset:80
1283; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1284;
1285; GFX11-SDAG-LABEL: freeze_v22i32:
1286; GFX11-SDAG:       ; %bb.0:
1287; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1288; GFX11-SDAG-NEXT:    s_clause 0x5
1289; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:64
1290; GFX11-SDAG-NEXT:    global_load_b64 v[24:25], v[0:1], off offset:80
1291; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:32
1292; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:48
1293; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off
1294; GFX11-SDAG-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:16
1295; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(5)
1296; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:64
1297; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
1298; GFX11-SDAG-NEXT:    global_store_b64 v[2:3], v[24:25], off offset:80
1299; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
1300; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:32
1301; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
1302; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:48
1303; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
1304; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off
1305; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
1306; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:16
1307; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1308;
1309; GFX11-GISEL-LABEL: freeze_v22i32:
1310; GFX11-GISEL:       ; %bb.0:
1311; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1312; GFX11-GISEL-NEXT:    s_clause 0x5
1313; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
1314; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
1315; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
1316; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
1317; GFX11-GISEL-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:64
1318; GFX11-GISEL-NEXT:    global_load_b64 v[0:1], v[0:1], off offset:80
1319; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(5)
1320; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
1321; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
1322; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
1323; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
1324; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
1325; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
1326; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
1327; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
1328; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:64
1329; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
1330; GFX11-GISEL-NEXT:    global_store_b64 v[2:3], v[0:1], off offset:80
1331; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1332  %a = load <22 x i32>, ptr addrspace(1) %ptra, align 4
1333  %freeze = freeze <22 x i32> %a
1334  store <22 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
1335  ret void
1336}
1337
1338define void @freeze_v30i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1339; GFX10-SDAG-LABEL: freeze_v30i32:
1340; GFX10-SDAG:       ; %bb.0:
1341; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1342; GFX10-SDAG-NEXT:    s_clause 0x7
1343; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:96
1344; GFX10-SDAG-NEXT:    global_load_dwordx2 v[32:33], v[0:1], off offset:112
1345; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:64
1346; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:80
1347; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:32
1348; GFX10-SDAG-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:48
1349; GFX10-SDAG-NEXT:    global_load_dwordx4 v[24:27], v[0:1], off
1350; GFX10-SDAG-NEXT:    global_load_dwordx4 v[28:31], v[0:1], off offset:16
1351; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(7)
1352; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:96
1353; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(6)
1354; GFX10-SDAG-NEXT:    global_store_dwordx2 v[2:3], v[32:33], off offset:112
1355; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(5)
1356; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:64
1357; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
1358; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:80
1359; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
1360; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:32
1361; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
1362; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:48
1363; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
1364; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[24:27], off
1365; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
1366; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[28:31], off offset:16
1367; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1368;
1369; GFX10-GISEL-LABEL: freeze_v30i32:
1370; GFX10-GISEL:       ; %bb.0:
1371; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1372; GFX10-GISEL-NEXT:    s_clause 0x7
1373; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
1374; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
1375; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
1376; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
1377; GFX10-GISEL-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:64
1378; GFX10-GISEL-NEXT:    global_load_dwordx4 v[24:27], v[0:1], off offset:80
1379; GFX10-GISEL-NEXT:    global_load_dwordx4 v[28:31], v[0:1], off offset:96
1380; GFX10-GISEL-NEXT:    global_load_dwordx2 v[32:33], v[0:1], off offset:112
1381; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(7)
1382; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
1383; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(6)
1384; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
1385; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(5)
1386; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
1387; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
1388; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
1389; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
1390; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:64
1391; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
1392; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[24:27], off offset:80
1393; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
1394; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[28:31], off offset:96
1395; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
1396; GFX10-GISEL-NEXT:    global_store_dwordx2 v[2:3], v[32:33], off offset:112
1397; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1398;
1399; GFX11-SDAG-LABEL: freeze_v30i32:
1400; GFX11-SDAG:       ; %bb.0:
1401; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1402; GFX11-SDAG-NEXT:    s_clause 0x7
1403; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:96
1404; GFX11-SDAG-NEXT:    global_load_b64 v[32:33], v[0:1], off offset:112
1405; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:64
1406; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:80
1407; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:32
1408; GFX11-SDAG-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:48
1409; GFX11-SDAG-NEXT:    global_load_b128 v[24:27], v[0:1], off
1410; GFX11-SDAG-NEXT:    global_load_b128 v[28:31], v[0:1], off offset:16
1411; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(7)
1412; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:96
1413; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(6)
1414; GFX11-SDAG-NEXT:    global_store_b64 v[2:3], v[32:33], off offset:112
1415; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(5)
1416; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:64
1417; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
1418; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:80
1419; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
1420; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:32
1421; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
1422; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:48
1423; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
1424; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[24:27], off
1425; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
1426; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[28:31], off offset:16
1427; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1428;
1429; GFX11-GISEL-LABEL: freeze_v30i32:
1430; GFX11-GISEL:       ; %bb.0:
1431; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1432; GFX11-GISEL-NEXT:    s_clause 0x7
1433; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
1434; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
1435; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
1436; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
1437; GFX11-GISEL-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:64
1438; GFX11-GISEL-NEXT:    global_load_b128 v[24:27], v[0:1], off offset:80
1439; GFX11-GISEL-NEXT:    global_load_b128 v[28:31], v[0:1], off offset:96
1440; GFX11-GISEL-NEXT:    global_load_b64 v[0:1], v[0:1], off offset:112
1441; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(7)
1442; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
1443; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(6)
1444; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
1445; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(5)
1446; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
1447; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
1448; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
1449; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
1450; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:64
1451; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
1452; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[24:27], off offset:80
1453; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
1454; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[28:31], off offset:96
1455; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
1456; GFX11-GISEL-NEXT:    global_store_b64 v[2:3], v[0:1], off offset:112
1457; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1458  %a = load <30 x i32>, ptr addrspace(1) %ptra, align 4
1459  %freeze = freeze <30 x i32> %a
1460  store <30 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
1461  ret void
1462}
1463
1464define void @freeze_v31i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1465; GFX10-SDAG-LABEL: freeze_v31i32:
1466; GFX10-SDAG:       ; %bb.0:
1467; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1468; GFX10-SDAG-NEXT:    s_clause 0x7
1469; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:96
1470; GFX10-SDAG-NEXT:    global_load_dwordx3 v[32:34], v[0:1], off offset:112
1471; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:64
1472; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:80
1473; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:32
1474; GFX10-SDAG-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:48
1475; GFX10-SDAG-NEXT:    global_load_dwordx4 v[24:27], v[0:1], off
1476; GFX10-SDAG-NEXT:    global_load_dwordx4 v[28:31], v[0:1], off offset:16
1477; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(7)
1478; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:96
1479; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(6)
1480; GFX10-SDAG-NEXT:    global_store_dwordx3 v[2:3], v[32:34], off offset:112
1481; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(5)
1482; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:64
1483; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
1484; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:80
1485; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
1486; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:32
1487; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
1488; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:48
1489; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
1490; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[24:27], off
1491; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
1492; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[28:31], off offset:16
1493; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1494;
1495; GFX10-GISEL-LABEL: freeze_v31i32:
1496; GFX10-GISEL:       ; %bb.0:
1497; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1498; GFX10-GISEL-NEXT:    s_clause 0x7
1499; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
1500; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
1501; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
1502; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
1503; GFX10-GISEL-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:64
1504; GFX10-GISEL-NEXT:    global_load_dwordx4 v[24:27], v[0:1], off offset:80
1505; GFX10-GISEL-NEXT:    global_load_dwordx4 v[28:31], v[0:1], off offset:96
1506; GFX10-GISEL-NEXT:    global_load_dwordx3 v[32:34], v[0:1], off offset:112
1507; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(7)
1508; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
1509; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(6)
1510; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
1511; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(5)
1512; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
1513; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
1514; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
1515; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
1516; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:64
1517; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
1518; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[24:27], off offset:80
1519; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
1520; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[28:31], off offset:96
1521; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
1522; GFX10-GISEL-NEXT:    global_store_dwordx3 v[2:3], v[32:34], off offset:112
1523; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1524;
1525; GFX11-SDAG-LABEL: freeze_v31i32:
1526; GFX11-SDAG:       ; %bb.0:
1527; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1528; GFX11-SDAG-NEXT:    s_clause 0x7
1529; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:96
1530; GFX11-SDAG-NEXT:    global_load_b96 v[32:34], v[0:1], off offset:112
1531; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:64
1532; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:80
1533; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:32
1534; GFX11-SDAG-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:48
1535; GFX11-SDAG-NEXT:    global_load_b128 v[24:27], v[0:1], off
1536; GFX11-SDAG-NEXT:    global_load_b128 v[28:31], v[0:1], off offset:16
1537; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(7)
1538; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:96
1539; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(6)
1540; GFX11-SDAG-NEXT:    global_store_b96 v[2:3], v[32:34], off offset:112
1541; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(5)
1542; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:64
1543; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
1544; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:80
1545; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
1546; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:32
1547; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
1548; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:48
1549; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
1550; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[24:27], off
1551; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
1552; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[28:31], off offset:16
1553; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1554;
1555; GFX11-GISEL-LABEL: freeze_v31i32:
1556; GFX11-GISEL:       ; %bb.0:
1557; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1558; GFX11-GISEL-NEXT:    s_clause 0x7
1559; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
1560; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
1561; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
1562; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
1563; GFX11-GISEL-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:64
1564; GFX11-GISEL-NEXT:    global_load_b128 v[24:27], v[0:1], off offset:80
1565; GFX11-GISEL-NEXT:    global_load_b128 v[28:31], v[0:1], off offset:96
1566; GFX11-GISEL-NEXT:    global_load_b96 v[32:34], v[0:1], off offset:112
1567; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(7)
1568; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
1569; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(6)
1570; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
1571; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(5)
1572; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
1573; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
1574; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
1575; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
1576; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:64
1577; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
1578; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[24:27], off offset:80
1579; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
1580; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[28:31], off offset:96
1581; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
1582; GFX11-GISEL-NEXT:    global_store_b96 v[2:3], v[32:34], off offset:112
1583; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1584  %a = load <31 x i32>, ptr addrspace(1) %ptra, align 4
1585  %freeze = freeze <31 x i32> %a
1586  store <31 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
1587  ret void
1588}
1589
1590define void @freeze_v32i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1591; GFX10-SDAG-LABEL: freeze_v32i32:
1592; GFX10-SDAG:       ; %bb.0:
1593; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1594; GFX10-SDAG-NEXT:    s_clause 0x7
1595; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:96
1596; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:112
1597; GFX10-SDAG-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:64
1598; GFX10-SDAG-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:80
1599; GFX10-SDAG-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:32
1600; GFX10-SDAG-NEXT:    global_load_dwordx4 v[24:27], v[0:1], off offset:48
1601; GFX10-SDAG-NEXT:    global_load_dwordx4 v[28:31], v[0:1], off
1602; GFX10-SDAG-NEXT:    global_load_dwordx4 v[32:35], v[0:1], off offset:16
1603; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(7)
1604; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:96
1605; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(6)
1606; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:112
1607; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(5)
1608; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:64
1609; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(4)
1610; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:80
1611; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(3)
1612; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:32
1613; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(2)
1614; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[24:27], off offset:48
1615; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
1616; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[28:31], off
1617; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
1618; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[32:35], off offset:16
1619; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1620;
1621; GFX10-GISEL-LABEL: freeze_v32i32:
1622; GFX10-GISEL:       ; %bb.0:
1623; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1624; GFX10-GISEL-NEXT:    s_clause 0x7
1625; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
1626; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
1627; GFX10-GISEL-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:32
1628; GFX10-GISEL-NEXT:    global_load_dwordx4 v[16:19], v[0:1], off offset:48
1629; GFX10-GISEL-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:64
1630; GFX10-GISEL-NEXT:    global_load_dwordx4 v[24:27], v[0:1], off offset:80
1631; GFX10-GISEL-NEXT:    global_load_dwordx4 v[28:31], v[0:1], off offset:96
1632; GFX10-GISEL-NEXT:    global_load_dwordx4 v[32:35], v[0:1], off offset:112
1633; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(7)
1634; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
1635; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(6)
1636; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
1637; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(5)
1638; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[12:15], off offset:32
1639; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(4)
1640; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[16:19], off offset:48
1641; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(3)
1642; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[20:23], off offset:64
1643; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(2)
1644; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[24:27], off offset:80
1645; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
1646; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[28:31], off offset:96
1647; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
1648; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[32:35], off offset:112
1649; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1650;
1651; GFX11-SDAG-LABEL: freeze_v32i32:
1652; GFX11-SDAG:       ; %bb.0:
1653; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1654; GFX11-SDAG-NEXT:    s_clause 0x7
1655; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:96
1656; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:112
1657; GFX11-SDAG-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:64
1658; GFX11-SDAG-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:80
1659; GFX11-SDAG-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:32
1660; GFX11-SDAG-NEXT:    global_load_b128 v[24:27], v[0:1], off offset:48
1661; GFX11-SDAG-NEXT:    global_load_b128 v[28:31], v[0:1], off
1662; GFX11-SDAG-NEXT:    global_load_b128 v[32:35], v[0:1], off offset:16
1663; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(7)
1664; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:96
1665; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(6)
1666; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:112
1667; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(5)
1668; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:64
1669; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(4)
1670; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:80
1671; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(3)
1672; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:32
1673; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(2)
1674; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[24:27], off offset:48
1675; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
1676; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[28:31], off
1677; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
1678; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[32:35], off offset:16
1679; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1680;
1681; GFX11-GISEL-LABEL: freeze_v32i32:
1682; GFX11-GISEL:       ; %bb.0:
1683; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1684; GFX11-GISEL-NEXT:    s_clause 0x7
1685; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
1686; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
1687; GFX11-GISEL-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:32
1688; GFX11-GISEL-NEXT:    global_load_b128 v[16:19], v[0:1], off offset:48
1689; GFX11-GISEL-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:64
1690; GFX11-GISEL-NEXT:    global_load_b128 v[24:27], v[0:1], off offset:80
1691; GFX11-GISEL-NEXT:    global_load_b128 v[28:31], v[0:1], off offset:96
1692; GFX11-GISEL-NEXT:    global_load_b128 v[32:35], v[0:1], off offset:112
1693; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(7)
1694; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
1695; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(6)
1696; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
1697; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(5)
1698; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[12:15], off offset:32
1699; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(4)
1700; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[16:19], off offset:48
1701; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(3)
1702; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[20:23], off offset:64
1703; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(2)
1704; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[24:27], off offset:80
1705; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
1706; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[28:31], off offset:96
1707; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
1708; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[32:35], off offset:112
1709; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1710  %a = load <32 x i32>, ptr addrspace(1) %ptra, align 4
1711  %freeze = freeze <32 x i32> %a
1712  store <32 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
1713  ret void
1714}
1715
1716define void @freeze_i32(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1717; GFX10-LABEL: freeze_i32:
1718; GFX10:       ; %bb.0:
1719; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1720; GFX10-NEXT:    global_load_dword v0, v[0:1], off
1721; GFX10-NEXT:    s_waitcnt vmcnt(0)
1722; GFX10-NEXT:    global_store_dword v[2:3], v0, off
1723; GFX10-NEXT:    s_setpc_b64 s[30:31]
1724;
1725; GFX11-LABEL: freeze_i32:
1726; GFX11:       ; %bb.0:
1727; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1728; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
1729; GFX11-NEXT:    s_waitcnt vmcnt(0)
1730; GFX11-NEXT:    global_store_b32 v[2:3], v0, off
1731; GFX11-NEXT:    s_setpc_b64 s[30:31]
1732  %a = load i32, ptr addrspace(1) %ptra, align 4
1733  %freeze = freeze i32 %a
1734  store i32 %freeze, ptr addrspace(1) %ptrb, align 4
1735  ret void
1736}
1737
1738define void @freeze_i64(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1739; GFX10-LABEL: freeze_i64:
1740; GFX10:       ; %bb.0:
1741; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1742; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
1743; GFX10-NEXT:    s_waitcnt vmcnt(0)
1744; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1745; GFX10-NEXT:    s_setpc_b64 s[30:31]
1746;
1747; GFX11-LABEL: freeze_i64:
1748; GFX11:       ; %bb.0:
1749; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1750; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
1751; GFX11-NEXT:    s_waitcnt vmcnt(0)
1752; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
1753; GFX11-NEXT:    s_setpc_b64 s[30:31]
1754  %a = load i64, ptr addrspace(1) %ptra, align 4
1755  %freeze = freeze i64 %a
1756  store i64 %freeze, ptr addrspace(1) %ptrb, align 4
1757  ret void
1758}
1759
1760define void @freeze_float(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1761; GFX10-LABEL: freeze_float:
1762; GFX10:       ; %bb.0:
1763; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1764; GFX10-NEXT:    global_load_dword v0, v[0:1], off
1765; GFX10-NEXT:    s_waitcnt vmcnt(0)
1766; GFX10-NEXT:    global_store_dword v[2:3], v0, off
1767; GFX10-NEXT:    s_setpc_b64 s[30:31]
1768;
1769; GFX11-LABEL: freeze_float:
1770; GFX11:       ; %bb.0:
1771; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1772; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
1773; GFX11-NEXT:    s_waitcnt vmcnt(0)
1774; GFX11-NEXT:    global_store_b32 v[2:3], v0, off
1775; GFX11-NEXT:    s_setpc_b64 s[30:31]
1776  %a = load float, ptr addrspace(1) %ptra, align 4
1777  %freeze = freeze float %a
1778  store float %freeze, ptr addrspace(1) %ptrb, align 4
1779  ret void
1780}
1781
1782define void @freeze_i128(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1783; GFX10-LABEL: freeze_i128:
1784; GFX10:       ; %bb.0:
1785; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1786; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
1787; GFX10-NEXT:    s_waitcnt vmcnt(0)
1788; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
1789; GFX10-NEXT:    s_setpc_b64 s[30:31]
1790;
1791; GFX11-LABEL: freeze_i128:
1792; GFX11:       ; %bb.0:
1793; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1794; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
1795; GFX11-NEXT:    s_waitcnt vmcnt(0)
1796; GFX11-NEXT:    global_store_b128 v[2:3], v[4:7], off
1797; GFX11-NEXT:    s_setpc_b64 s[30:31]
1798  %a = load i128, ptr addrspace(1) %ptra, align 4
1799  %freeze = freeze i128 %a
1800  store i128 %freeze, ptr addrspace(1) %ptrb, align 4
1801  ret void
1802}
1803
1804define void @freeze_i256(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
1805; GFX10-SDAG-LABEL: freeze_i256:
1806; GFX10-SDAG:       ; %bb.0:
1807; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1808; GFX10-SDAG-NEXT:    s_clause 0x1
1809; GFX10-SDAG-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:16
1810; GFX10-SDAG-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
1811; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(1)
1812; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:16
1813; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0)
1814; GFX10-SDAG-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
1815; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1816;
1817; GFX10-GISEL-LABEL: freeze_i256:
1818; GFX10-GISEL:       ; %bb.0:
1819; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1820; GFX10-GISEL-NEXT:    s_clause 0x1
1821; GFX10-GISEL-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
1822; GFX10-GISEL-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
1823; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(1)
1824; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
1825; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0)
1826; GFX10-GISEL-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off offset:16
1827; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1828;
1829; GFX11-SDAG-LABEL: freeze_i256:
1830; GFX11-SDAG:       ; %bb.0:
1831; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1832; GFX11-SDAG-NEXT:    s_clause 0x1
1833; GFX11-SDAG-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:16
1834; GFX11-SDAG-NEXT:    global_load_b128 v[8:11], v[0:1], off
1835; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(1)
1836; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:16
1837; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0)
1838; GFX11-SDAG-NEXT:    global_store_b128 v[2:3], v[8:11], off
1839; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1840;
1841; GFX11-GISEL-LABEL: freeze_i256:
1842; GFX11-GISEL:       ; %bb.0:
1843; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1844; GFX11-GISEL-NEXT:    s_clause 0x1
1845; GFX11-GISEL-NEXT:    global_load_b128 v[4:7], v[0:1], off
1846; GFX11-GISEL-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
1847; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(1)
1848; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[4:7], off
1849; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0)
1850; GFX11-GISEL-NEXT:    global_store_b128 v[2:3], v[8:11], off offset:16
1851; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1852  %a = load i256, ptr addrspace(1) %ptra, align 4
1853  %freeze = freeze i256 %a
1854  store i256 %freeze, ptr addrspace(1) %ptrb, align 4
1855  ret void
1856}
1857