Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / memory-legalizer-global-nontemporal.ll
blob16e336f772df302c2ececa21d3700feb2720b285
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx600 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX6 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX7 %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX10-WGP %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=+cumode -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX10-CU %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx700 -amdgcn-skip-cache-invalidations -verify-machineinstrs < %s | FileCheck --check-prefixes=SKIP-CACHE-INV %s
7 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX90A-NOTTGSPLIT %s
8 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -mattr=+tgsplit -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX90A-TGSPLIT %s
9 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX940-NOTTGSPLIT %s
10 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 -mattr=+tgsplit -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX940-TGSPLIT %s
11 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX11-WGP %s
12 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+cumode -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX11-CU %s
14 define amdgpu_kernel void @global_nontemporal_load_0(
15 ; GFX6-LABEL: global_nontemporal_load_0:
16 ; GFX6:       ; %bb.0: ; %entry
17 ; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
18 ; GFX6-NEXT:    s_mov_b32 s7, 0x100f000
19 ; GFX6-NEXT:    s_mov_b32 s6, -1
20 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
21 ; GFX6-NEXT:    s_load_dword s0, s[0:1], 0x0
22 ; GFX6-NEXT:    s_mov_b32 s4, s2
23 ; GFX6-NEXT:    s_mov_b32 s5, s3
24 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
25 ; GFX6-NEXT:    v_mov_b32_e32 v0, s0
26 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0
27 ; GFX6-NEXT:    s_endpgm
29 ; GFX7-LABEL: global_nontemporal_load_0:
30 ; GFX7:       ; %bb.0: ; %entry
31 ; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
32 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
33 ; GFX7-NEXT:    s_load_dword s0, s[0:1], 0x0
34 ; GFX7-NEXT:    v_mov_b32_e32 v0, s2
35 ; GFX7-NEXT:    v_mov_b32_e32 v1, s3
36 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
37 ; GFX7-NEXT:    v_mov_b32_e32 v2, s0
38 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
39 ; GFX7-NEXT:    s_endpgm
41 ; GFX10-WGP-LABEL: global_nontemporal_load_0:
42 ; GFX10-WGP:       ; %bb.0: ; %entry
43 ; GFX10-WGP-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
44 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
45 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
46 ; GFX10-WGP-NEXT:    s_load_dword s0, s[0:1], 0x0
47 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
48 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s0
49 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[2:3]
50 ; GFX10-WGP-NEXT:    s_endpgm
52 ; GFX10-CU-LABEL: global_nontemporal_load_0:
53 ; GFX10-CU:       ; %bb.0: ; %entry
54 ; GFX10-CU-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
55 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
56 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
57 ; GFX10-CU-NEXT:    s_load_dword s0, s[0:1], 0x0
58 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
59 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s0
60 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[2:3]
61 ; GFX10-CU-NEXT:    s_endpgm
63 ; SKIP-CACHE-INV-LABEL: global_nontemporal_load_0:
64 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
65 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
66 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, 0xf000
67 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -1
68 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
69 ; SKIP-CACHE-INV-NEXT:    s_load_dword s0, s[0:1], 0x0
70 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s4, s2
71 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s3
72 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
73 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s0
74 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[4:7], 0
75 ; SKIP-CACHE-INV-NEXT:    s_endpgm
77 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_load_0:
78 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
79 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
80 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
81 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
82 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
83 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
84 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
85 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3]
86 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
88 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_load_0:
89 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
90 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
91 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
92 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
93 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
94 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
95 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
96 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3]
97 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
99 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_load_0:
100 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
101 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
102 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
103 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
104 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
105 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
106 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
107 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] sc0 sc1
108 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
110 ; GFX940-TGSPLIT-LABEL: global_nontemporal_load_0:
111 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
112 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
113 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
114 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
115 ; GFX940-TGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
116 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
117 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
118 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] sc0 sc1
119 ; GFX940-TGSPLIT-NEXT:    s_endpgm
121 ; GFX11-WGP-LABEL: global_nontemporal_load_0:
122 ; GFX11-WGP:       ; %bb.0: ; %entry
123 ; GFX11-WGP-NEXT:    s_load_b128 s[0:3], s[0:1], 0x0
124 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
125 ; GFX11-WGP-NEXT:    s_load_b32 s0, s[0:1], 0x0
126 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
127 ; GFX11-WGP-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s0
128 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[2:3]
129 ; GFX11-WGP-NEXT:    s_nop 0
130 ; GFX11-WGP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
131 ; GFX11-WGP-NEXT:    s_endpgm
133 ; GFX11-CU-LABEL: global_nontemporal_load_0:
134 ; GFX11-CU:       ; %bb.0: ; %entry
135 ; GFX11-CU-NEXT:    s_load_b128 s[0:3], s[0:1], 0x0
136 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
137 ; GFX11-CU-NEXT:    s_load_b32 s0, s[0:1], 0x0
138 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
139 ; GFX11-CU-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s0
140 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[2:3]
141 ; GFX11-CU-NEXT:    s_nop 0
142 ; GFX11-CU-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
143 ; GFX11-CU-NEXT:    s_endpgm
144     ptr addrspace(1) %in, ptr addrspace(1) %out) {
145 entry:
146   %val = load i32, ptr addrspace(1) %in, align 4, !nontemporal !0
147   store i32 %val, ptr addrspace(1) %out
148   ret void
151 define amdgpu_kernel void @global_nontemporal_load_1(
152 ; GFX6-LABEL: global_nontemporal_load_1:
153 ; GFX6:       ; %bb.0: ; %entry
154 ; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
155 ; GFX6-NEXT:    s_mov_b32 s7, 0x100f000
156 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
157 ; GFX6-NEXT:    v_mov_b32_e32 v1, 0
158 ; GFX6-NEXT:    s_mov_b32 s6, -1
159 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
160 ; GFX6-NEXT:    s_mov_b32 s4, s2
161 ; GFX6-NEXT:    s_mov_b32 s5, s3
162 ; GFX6-NEXT:    s_mov_b32 s2, 0
163 ; GFX6-NEXT:    s_mov_b32 s3, s7
164 ; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc slc
165 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
166 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0
167 ; GFX6-NEXT:    s_endpgm
169 ; GFX7-LABEL: global_nontemporal_load_1:
170 ; GFX7:       ; %bb.0: ; %entry
171 ; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
172 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
173 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
174 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
175 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s0, v0
176 ; GFX7-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
177 ; GFX7-NEXT:    flat_load_dword v2, v[0:1] glc slc
178 ; GFX7-NEXT:    v_mov_b32_e32 v0, s2
179 ; GFX7-NEXT:    v_mov_b32_e32 v1, s3
180 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
181 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
182 ; GFX7-NEXT:    s_endpgm
184 ; GFX10-WGP-LABEL: global_nontemporal_load_1:
185 ; GFX10-WGP:       ; %bb.0: ; %entry
186 ; GFX10-WGP-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
187 ; GFX10-WGP-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
188 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, 0
189 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
190 ; GFX10-WGP-NEXT:    global_load_dword v0, v0, s[0:1] slc
191 ; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)
192 ; GFX10-WGP-NEXT:    global_store_dword v1, v0, s[2:3]
193 ; GFX10-WGP-NEXT:    s_endpgm
195 ; GFX10-CU-LABEL: global_nontemporal_load_1:
196 ; GFX10-CU:       ; %bb.0: ; %entry
197 ; GFX10-CU-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
198 ; GFX10-CU-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
199 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, 0
200 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
201 ; GFX10-CU-NEXT:    global_load_dword v0, v0, s[0:1] slc
202 ; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)
203 ; GFX10-CU-NEXT:    global_store_dword v1, v0, s[2:3]
204 ; GFX10-CU-NEXT:    s_endpgm
206 ; SKIP-CACHE-INV-LABEL: global_nontemporal_load_1:
207 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
208 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
209 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, 0xf000
210 ; SKIP-CACHE-INV-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
211 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, 0
212 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -1
213 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
214 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s4, s2
215 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s3
216 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, 0
217 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s7
218 ; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64 glc slc
219 ; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)
220 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[4:7], 0
221 ; SKIP-CACHE-INV-NEXT:    s_endpgm
223 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_load_1:
224 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
225 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
226 ; GFX90A-NOTTGSPLIT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
227 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, 0
228 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
229 ; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v0, v0, s[0:1] glc slc
230 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)
231 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v1, v0, s[2:3]
232 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
234 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_load_1:
235 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
236 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
237 ; GFX90A-TGSPLIT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
238 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, 0
239 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
240 ; GFX90A-TGSPLIT-NEXT:    global_load_dword v0, v0, s[0:1] glc slc
241 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)
242 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v1, v0, s[2:3]
243 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
245 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_load_1:
246 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
247 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
248 ; GFX940-NOTTGSPLIT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
249 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, 0
250 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
251 ; GFX940-NOTTGSPLIT-NEXT:    global_load_dword v0, v0, s[0:1] nt
252 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)
253 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v1, v0, s[2:3] sc0 sc1
254 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
256 ; GFX940-TGSPLIT-LABEL: global_nontemporal_load_1:
257 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
258 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
259 ; GFX940-TGSPLIT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
260 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, 0
261 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
262 ; GFX940-TGSPLIT-NEXT:    global_load_dword v0, v0, s[0:1] nt
263 ; GFX940-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)
264 ; GFX940-TGSPLIT-NEXT:    global_store_dword v1, v0, s[2:3] sc0 sc1
265 ; GFX940-TGSPLIT-NEXT:    s_endpgm
267 ; GFX11-WGP-LABEL: global_nontemporal_load_1:
268 ; GFX11-WGP:       ; %bb.0: ; %entry
269 ; GFX11-WGP-NEXT:    s_load_b128 s[0:3], s[0:1], 0x0
270 ; GFX11-WGP-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_lshlrev_b32 v0, 2, v0
271 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
272 ; GFX11-WGP-NEXT:    global_load_b32 v0, v0, s[0:1] slc dlc
273 ; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)
274 ; GFX11-WGP-NEXT:    global_store_b32 v1, v0, s[2:3]
275 ; GFX11-WGP-NEXT:    s_nop 0
276 ; GFX11-WGP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
277 ; GFX11-WGP-NEXT:    s_endpgm
279 ; GFX11-CU-LABEL: global_nontemporal_load_1:
280 ; GFX11-CU:       ; %bb.0: ; %entry
281 ; GFX11-CU-NEXT:    s_load_b128 s[0:3], s[0:1], 0x0
282 ; GFX11-CU-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_lshlrev_b32 v0, 2, v0
283 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
284 ; GFX11-CU-NEXT:    global_load_b32 v0, v0, s[0:1] slc dlc
285 ; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)
286 ; GFX11-CU-NEXT:    global_store_b32 v1, v0, s[2:3]
287 ; GFX11-CU-NEXT:    s_nop 0
288 ; GFX11-CU-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
289 ; GFX11-CU-NEXT:    s_endpgm
290     ptr addrspace(1) %in, ptr addrspace(1) %out) {
291 entry:
292   %tid = call i32 @llvm.amdgcn.workitem.id.x()
293   %val.gep = getelementptr inbounds i32, ptr addrspace(1) %in, i32 %tid
294   %val = load i32, ptr addrspace(1) %val.gep, align 4, !nontemporal !0
295   store i32 %val, ptr addrspace(1) %out
296   ret void
299 define amdgpu_kernel void @global_nontemporal_store_0(
300 ; GFX6-LABEL: global_nontemporal_store_0:
301 ; GFX6:       ; %bb.0: ; %entry
302 ; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
303 ; GFX6-NEXT:    s_mov_b32 s7, 0x100f000
304 ; GFX6-NEXT:    s_mov_b32 s6, -1
305 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
306 ; GFX6-NEXT:    s_load_dword s0, s[0:1], 0x0
307 ; GFX6-NEXT:    s_mov_b32 s4, s2
308 ; GFX6-NEXT:    s_mov_b32 s5, s3
309 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
310 ; GFX6-NEXT:    v_mov_b32_e32 v0, s0
311 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0 glc slc
312 ; GFX6-NEXT:    s_endpgm
314 ; GFX7-LABEL: global_nontemporal_store_0:
315 ; GFX7:       ; %bb.0: ; %entry
316 ; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
317 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
318 ; GFX7-NEXT:    s_load_dword s0, s[0:1], 0x0
319 ; GFX7-NEXT:    v_mov_b32_e32 v0, s2
320 ; GFX7-NEXT:    v_mov_b32_e32 v1, s3
321 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
322 ; GFX7-NEXT:    v_mov_b32_e32 v2, s0
323 ; GFX7-NEXT:    flat_store_dword v[0:1], v2 glc slc
324 ; GFX7-NEXT:    s_endpgm
326 ; GFX10-WGP-LABEL: global_nontemporal_store_0:
327 ; GFX10-WGP:       ; %bb.0: ; %entry
328 ; GFX10-WGP-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
329 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
330 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
331 ; GFX10-WGP-NEXT:    s_load_dword s0, s[0:1], 0x0
332 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
333 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s0
334 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[2:3] glc slc
335 ; GFX10-WGP-NEXT:    s_endpgm
337 ; GFX10-CU-LABEL: global_nontemporal_store_0:
338 ; GFX10-CU:       ; %bb.0: ; %entry
339 ; GFX10-CU-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
340 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
341 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
342 ; GFX10-CU-NEXT:    s_load_dword s0, s[0:1], 0x0
343 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
344 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s0
345 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[2:3] glc slc
346 ; GFX10-CU-NEXT:    s_endpgm
348 ; SKIP-CACHE-INV-LABEL: global_nontemporal_store_0:
349 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
350 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
351 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, 0xf000
352 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -1
353 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
354 ; SKIP-CACHE-INV-NEXT:    s_load_dword s0, s[0:1], 0x0
355 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s4, s2
356 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s3
357 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
358 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s0
359 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[4:7], 0 glc slc
360 ; SKIP-CACHE-INV-NEXT:    s_endpgm
362 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_store_0:
363 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
364 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
365 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
366 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
367 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
368 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
369 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
370 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] glc slc
371 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
373 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_store_0:
374 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
375 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
376 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
377 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
378 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
379 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
380 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
381 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] glc slc
382 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
384 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_store_0:
385 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
386 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
387 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
388 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
389 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
390 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
391 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
392 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] sc0 nt sc1
393 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
395 ; GFX940-TGSPLIT-LABEL: global_nontemporal_store_0:
396 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
397 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
398 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
399 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
400 ; GFX940-TGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
401 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
402 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
403 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] sc0 nt sc1
404 ; GFX940-TGSPLIT-NEXT:    s_endpgm
406 ; GFX11-WGP-LABEL: global_nontemporal_store_0:
407 ; GFX11-WGP:       ; %bb.0: ; %entry
408 ; GFX11-WGP-NEXT:    s_load_b128 s[0:3], s[0:1], 0x0
409 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
410 ; GFX11-WGP-NEXT:    s_load_b32 s0, s[0:1], 0x0
411 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
412 ; GFX11-WGP-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s0
413 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[2:3] glc slc dlc
414 ; GFX11-WGP-NEXT:    s_nop 0
415 ; GFX11-WGP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
416 ; GFX11-WGP-NEXT:    s_endpgm
418 ; GFX11-CU-LABEL: global_nontemporal_store_0:
419 ; GFX11-CU:       ; %bb.0: ; %entry
420 ; GFX11-CU-NEXT:    s_load_b128 s[0:3], s[0:1], 0x0
421 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
422 ; GFX11-CU-NEXT:    s_load_b32 s0, s[0:1], 0x0
423 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
424 ; GFX11-CU-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s0
425 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[2:3] glc slc dlc
426 ; GFX11-CU-NEXT:    s_nop 0
427 ; GFX11-CU-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
428 ; GFX11-CU-NEXT:    s_endpgm
429     ptr addrspace(1) %in, ptr addrspace(1) %out) {
430 entry:
431   %val = load i32, ptr addrspace(1) %in, align 4
432   store i32 %val, ptr addrspace(1) %out, !nontemporal !0
433   ret void
436 define amdgpu_kernel void @global_nontemporal_store_1(
437 ; GFX6-LABEL: global_nontemporal_store_1:
438 ; GFX6:       ; %bb.0: ; %entry
439 ; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
440 ; GFX6-NEXT:    s_mov_b32 s7, 0x100f000
441 ; GFX6-NEXT:    s_mov_b32 s6, 0
442 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
443 ; GFX6-NEXT:    v_mov_b32_e32 v1, 0
444 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
445 ; GFX6-NEXT:    s_load_dword s0, s[0:1], 0x0
446 ; GFX6-NEXT:    s_mov_b64 s[4:5], s[2:3]
447 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
448 ; GFX6-NEXT:    v_mov_b32_e32 v2, s0
449 ; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[4:7], 0 addr64 glc slc
450 ; GFX6-NEXT:    s_endpgm
452 ; GFX7-LABEL: global_nontemporal_store_1:
453 ; GFX7:       ; %bb.0: ; %entry
454 ; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
455 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
456 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
457 ; GFX7-NEXT:    s_load_dword s0, s[0:1], 0x0
458 ; GFX7-NEXT:    v_mov_b32_e32 v1, s3
459 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s2, v0
460 ; GFX7-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
461 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
462 ; GFX7-NEXT:    v_mov_b32_e32 v2, s0
463 ; GFX7-NEXT:    flat_store_dword v[0:1], v2 glc slc
464 ; GFX7-NEXT:    s_endpgm
466 ; GFX10-WGP-LABEL: global_nontemporal_store_1:
467 ; GFX10-WGP:       ; %bb.0: ; %entry
468 ; GFX10-WGP-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
469 ; GFX10-WGP-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
470 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
471 ; GFX10-WGP-NEXT:    s_load_dword s0, s[0:1], 0x0
472 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
473 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s0
474 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[2:3] glc slc
475 ; GFX10-WGP-NEXT:    s_endpgm
477 ; GFX10-CU-LABEL: global_nontemporal_store_1:
478 ; GFX10-CU:       ; %bb.0: ; %entry
479 ; GFX10-CU-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
480 ; GFX10-CU-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
481 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
482 ; GFX10-CU-NEXT:    s_load_dword s0, s[0:1], 0x0
483 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
484 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s0
485 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[2:3] glc slc
486 ; GFX10-CU-NEXT:    s_endpgm
488 ; SKIP-CACHE-INV-LABEL: global_nontemporal_store_1:
489 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
490 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
491 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, 0xf000
492 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0
493 ; SKIP-CACHE-INV-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
494 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, 0
495 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
496 ; SKIP-CACHE-INV-NEXT:    s_load_dword s0, s[0:1], 0x0
497 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[4:5], s[2:3]
498 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
499 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s0
500 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v2, v[0:1], s[4:7], 0 addr64 glc slc
501 ; SKIP-CACHE-INV-NEXT:    s_endpgm
503 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_store_1:
504 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
505 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
506 ; GFX90A-NOTTGSPLIT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
507 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
508 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
509 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
510 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
511 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] glc slc
512 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
514 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_store_1:
515 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
516 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
517 ; GFX90A-TGSPLIT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
518 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
519 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
520 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
521 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
522 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] glc slc
523 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
525 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_store_1:
526 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
527 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
528 ; GFX940-NOTTGSPLIT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
529 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
530 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
531 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
532 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
533 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] sc0 nt sc1
534 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
536 ; GFX940-TGSPLIT-LABEL: global_nontemporal_store_1:
537 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
538 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x0
539 ; GFX940-TGSPLIT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
540 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
541 ; GFX940-TGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
542 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
543 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
544 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[2:3] sc0 nt sc1
545 ; GFX940-TGSPLIT-NEXT:    s_endpgm
547 ; GFX11-WGP-LABEL: global_nontemporal_store_1:
548 ; GFX11-WGP:       ; %bb.0: ; %entry
549 ; GFX11-WGP-NEXT:    s_load_b128 s[0:3], s[0:1], 0x0
550 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
551 ; GFX11-WGP-NEXT:    s_load_b32 s0, s[0:1], 0x0
552 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
553 ; GFX11-WGP-NEXT:    v_dual_mov_b32 v1, s0 :: v_dual_lshlrev_b32 v0, 2, v0
554 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[2:3] glc slc dlc
555 ; GFX11-WGP-NEXT:    s_nop 0
556 ; GFX11-WGP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
557 ; GFX11-WGP-NEXT:    s_endpgm
559 ; GFX11-CU-LABEL: global_nontemporal_store_1:
560 ; GFX11-CU:       ; %bb.0: ; %entry
561 ; GFX11-CU-NEXT:    s_load_b128 s[0:3], s[0:1], 0x0
562 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
563 ; GFX11-CU-NEXT:    s_load_b32 s0, s[0:1], 0x0
564 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
565 ; GFX11-CU-NEXT:    v_dual_mov_b32 v1, s0 :: v_dual_lshlrev_b32 v0, 2, v0
566 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[2:3] glc slc dlc
567 ; GFX11-CU-NEXT:    s_nop 0
568 ; GFX11-CU-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
569 ; GFX11-CU-NEXT:    s_endpgm
570     ptr addrspace(1) %in, ptr addrspace(1) %out) {
571 entry:
572   %tid = call i32 @llvm.amdgcn.workitem.id.x()
573   %val = load i32, ptr addrspace(1) %in, align 4
574   %out.gep = getelementptr inbounds i32, ptr addrspace(1) %out, i32 %tid
575   store i32 %val, ptr addrspace(1) %out.gep, !nontemporal !0
576   ret void
579 !0 = !{i32 1}
580 declare i32 @llvm.amdgcn.workitem.id.x()