[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / memory-legalizer-local-nontemporal.ll
blobe9be38d6d17a30874eeb82ef7cd28b9bc9792bd8
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx600 < %s | FileCheck --check-prefixes=GFX6 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx700 < %s | FileCheck --check-prefixes=GFX7 %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1010 < %s | FileCheck --check-prefixes=GFX10-WGP %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1010 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX10-CU %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdpal -O0 -mcpu=gfx700 -amdgcn-skip-cache-invalidations < %s | FileCheck --check-prefixes=SKIP-CACHE-INV %s
7 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX90A-NOTTGSPLIT %s
8 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx90a -mattr=+tgsplit < %s | FileCheck -check-prefixes=GFX90A-TGSPLIT %s
9 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx940 < %s | FileCheck -check-prefixes=GFX940-NOTTGSPLIT %s
10 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx940 -mattr=+tgsplit < %s | FileCheck -check-prefixes=GFX940-TGSPLIT %s
11 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GFX11-WGP %s
12 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1100 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX11-CU %s
13 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GFX12-WGP %s
14 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1200 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX12-CU %s
16 define amdgpu_kernel void @local_nontemporal_load_0(
17 ; GFX6-LABEL: local_nontemporal_load_0:
18 ; GFX6:       ; %bb.0: ; %entry
19 ; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]
20 ; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x0
21 ; GFX6-NEXT:    ; kill: def $sgpr6 killed $sgpr8
22 ; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2
23 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
24 ; GFX6-NEXT:    s_mov_b32 s11, s5
25 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5
26 ; GFX6-NEXT:    s_mov_b32 s9, 0x100f000
27 ; GFX6-NEXT:    s_mov_b32 s10, -1
28 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7
29 ; GFX6-NEXT:    s_mov_b32 s5, s11
30 ; GFX6-NEXT:    s_mov_b32 s6, s10
31 ; GFX6-NEXT:    s_mov_b32 s7, s9
32 ; GFX6-NEXT:    s_mov_b32 m0, -1
33 ; GFX6-NEXT:    v_mov_b32_e32 v0, s8
34 ; GFX6-NEXT:    ds_read_b32 v0, v0
35 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
36 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0
37 ; GFX6-NEXT:    s_endpgm
39 ; GFX7-LABEL: local_nontemporal_load_0:
40 ; GFX7:       ; %bb.0: ; %entry
41 ; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x0
42 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x2
43 ; GFX7-NEXT:    s_mov_b32 m0, -1
44 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
45 ; GFX7-NEXT:    v_mov_b32_e32 v0, s6
46 ; GFX7-NEXT:    ds_read_b32 v2, v0
47 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
48 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
49 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
50 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
51 ; GFX7-NEXT:    s_endpgm
53 ; GFX10-WGP-LABEL: local_nontemporal_load_0:
54 ; GFX10-WGP:       ; %bb.0: ; %entry
55 ; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x0
56 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
57 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
58 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
59 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s6
60 ; GFX10-WGP-NEXT:    ds_read_b32 v1, v1
61 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
62 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]
63 ; GFX10-WGP-NEXT:    s_endpgm
65 ; GFX10-CU-LABEL: local_nontemporal_load_0:
66 ; GFX10-CU:       ; %bb.0: ; %entry
67 ; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x0
68 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
69 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
70 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
71 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s6
72 ; GFX10-CU-NEXT:    ds_read_b32 v1, v1
73 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
74 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]
75 ; GFX10-CU-NEXT:    s_endpgm
77 ; SKIP-CACHE-INV-LABEL: local_nontemporal_load_0:
78 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
79 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]
80 ; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x0
81 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
82 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
83 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s1
84 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1
85 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf000
86 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -1
87 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
88 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s7
89 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s6
90 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s5
91 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 m0, -1
92 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s4
93 ; SKIP-CACHE-INV-NEXT:    ds_read_b32 v0, v0
94 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
95 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0
96 ; SKIP-CACHE-INV-NEXT:    s_endpgm
98 ; GFX90A-NOTTGSPLIT-LABEL: local_nontemporal_load_0:
99 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
100 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x0
101 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
102 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
103 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
104 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
105 ; GFX90A-NOTTGSPLIT-NEXT:    ds_read_b32 v1, v1
106 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
107 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
108 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
110 ; GFX90A-TGSPLIT-LABEL: local_nontemporal_load_0:
111 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
112 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x0
113 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
114 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
115 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
116 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
117 ; GFX90A-TGSPLIT-NEXT:    ds_read_b32 v1, v1
118 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
119 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
120 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
122 ; GFX940-NOTTGSPLIT-LABEL: local_nontemporal_load_0:
123 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
124 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x0
125 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
126 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
127 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
128 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
129 ; GFX940-NOTTGSPLIT-NEXT:    ds_read_b32 v1, v1
130 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
131 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
132 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
134 ; GFX940-TGSPLIT-LABEL: local_nontemporal_load_0:
135 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
136 ; GFX940-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x0
137 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
138 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
139 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
140 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
141 ; GFX940-TGSPLIT-NEXT:    ds_read_b32 v1, v1
142 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
143 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
144 ; GFX940-TGSPLIT-NEXT:    s_endpgm
146 ; GFX11-WGP-LABEL: local_nontemporal_load_0:
147 ; GFX11-WGP:       ; %bb.0: ; %entry
148 ; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x0
149 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
150 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0
151 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
152 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s2
153 ; GFX11-WGP-NEXT:    ds_load_b32 v1, v1
154 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
155 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
156 ; GFX11-WGP-NEXT:    s_endpgm
158 ; GFX11-CU-LABEL: local_nontemporal_load_0:
159 ; GFX11-CU:       ; %bb.0: ; %entry
160 ; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x0
161 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
162 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0
163 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
164 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s2
165 ; GFX11-CU-NEXT:    ds_load_b32 v1, v1
166 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
167 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
168 ; GFX11-CU-NEXT:    s_endpgm
170 ; GFX12-WGP-LABEL: local_nontemporal_load_0:
171 ; GFX12-WGP:       ; %bb.0: ; %entry
172 ; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x0
173 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
174 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0
175 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
176 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s2
177 ; GFX12-WGP-NEXT:    ds_load_b32 v1, v1
178 ; GFX12-WGP-NEXT:    s_wait_dscnt 0x0
179 ; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
180 ; GFX12-WGP-NEXT:    s_endpgm
182 ; GFX12-CU-LABEL: local_nontemporal_load_0:
183 ; GFX12-CU:       ; %bb.0: ; %entry
184 ; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x0
185 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
186 ; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0
187 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
188 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s2
189 ; GFX12-CU-NEXT:    ds_load_b32 v1, v1
190 ; GFX12-CU-NEXT:    s_wait_dscnt 0x0
191 ; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
192 ; GFX12-CU-NEXT:    s_endpgm
193     ptr addrspace(3) %in, ptr addrspace(1) %out) {
194 entry:
195   %val = load i32, ptr addrspace(3) %in, align 4, !nontemporal !0
196   store i32 %val, ptr addrspace(1) %out
197   ret void
200 define amdgpu_kernel void @local_nontemporal_load_1(
201 ; GFX6-LABEL: local_nontemporal_load_1:
202 ; GFX6:       ; %bb.0: ; %entry
203 ; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]
204 ; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x0
205 ; GFX6-NEXT:    ; kill: def $sgpr6 killed $sgpr8
206 ; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2
207 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
208 ; GFX6-NEXT:    s_mov_b32 s11, s5
209 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5
210 ; GFX6-NEXT:    s_mov_b32 s9, 0x100f000
211 ; GFX6-NEXT:    s_mov_b32 s10, -1
212 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7
213 ; GFX6-NEXT:    s_mov_b32 s5, s11
214 ; GFX6-NEXT:    s_mov_b32 s6, s10
215 ; GFX6-NEXT:    s_mov_b32 s7, s9
216 ; GFX6-NEXT:    s_mov_b32 s9, 2
217 ; GFX6-NEXT:    v_lshlrev_b32_e64 v0, s9, v0
218 ; GFX6-NEXT:    v_add_i32_e64 v0, s[8:9], s8, v0
219 ; GFX6-NEXT:    s_mov_b32 m0, -1
220 ; GFX6-NEXT:    ds_read_b32 v0, v0
221 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
222 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0
223 ; GFX6-NEXT:    s_endpgm
225 ; GFX7-LABEL: local_nontemporal_load_1:
226 ; GFX7:       ; %bb.0: ; %entry
227 ; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x0
228 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x2
229 ; GFX7-NEXT:    s_mov_b32 s7, 2
230 ; GFX7-NEXT:    v_lshlrev_b32_e64 v0, s7, v0
231 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
232 ; GFX7-NEXT:    v_add_i32_e64 v0, s[6:7], s6, v0
233 ; GFX7-NEXT:    s_mov_b32 m0, -1
234 ; GFX7-NEXT:    ds_read_b32 v2, v0
235 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
236 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
237 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
238 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
239 ; GFX7-NEXT:    s_endpgm
241 ; GFX10-WGP-LABEL: local_nontemporal_load_1:
242 ; GFX10-WGP:       ; %bb.0: ; %entry
243 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, v0
244 ; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x0
245 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
246 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
247 ; GFX10-WGP-NEXT:    s_mov_b32 s6, 2
248 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
249 ; GFX10-WGP-NEXT:    v_lshl_add_u32 v1, v1, s6, s7
250 ; GFX10-WGP-NEXT:    ds_read_b32 v1, v1
251 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
252 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]
253 ; GFX10-WGP-NEXT:    s_endpgm
255 ; GFX10-CU-LABEL: local_nontemporal_load_1:
256 ; GFX10-CU:       ; %bb.0: ; %entry
257 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, v0
258 ; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x0
259 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
260 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
261 ; GFX10-CU-NEXT:    s_mov_b32 s6, 2
262 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
263 ; GFX10-CU-NEXT:    v_lshl_add_u32 v1, v1, s6, s7
264 ; GFX10-CU-NEXT:    ds_read_b32 v1, v1
265 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
266 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]
267 ; GFX10-CU-NEXT:    s_endpgm
269 ; SKIP-CACHE-INV-LABEL: local_nontemporal_load_1:
270 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
271 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]
272 ; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x0
273 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
274 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
275 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s1
276 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1
277 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf000
278 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -1
279 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
280 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s7
281 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s6
282 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s5
283 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 2
284 ; SKIP-CACHE-INV-NEXT:    v_lshlrev_b32_e64 v0, s5, v0
285 ; SKIP-CACHE-INV-NEXT:    v_add_i32_e64 v0, s[4:5], s4, v0
286 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 m0, -1
287 ; SKIP-CACHE-INV-NEXT:    ds_read_b32 v0, v0
288 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
289 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0
290 ; SKIP-CACHE-INV-NEXT:    s_endpgm
292 ; GFX90A-NOTTGSPLIT-LABEL: local_nontemporal_load_1:
293 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
294 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, v0
295 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x0
296 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
297 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
298 ; GFX90A-NOTTGSPLIT-NEXT:    s_mov_b32 s6, 0x3ff
299 ; GFX90A-NOTTGSPLIT-NEXT:    v_and_b32_e64 v1, v1, s6
300 ; GFX90A-NOTTGSPLIT-NEXT:    s_mov_b32 s6, 2
301 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
302 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s7
303 ; GFX90A-NOTTGSPLIT-NEXT:    v_lshl_add_u32 v1, v1, s6, v2
304 ; GFX90A-NOTTGSPLIT-NEXT:    ds_read_b32 v1, v1
305 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
306 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
307 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
309 ; GFX90A-TGSPLIT-LABEL: local_nontemporal_load_1:
310 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
311 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, v0
312 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x0
313 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
314 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
315 ; GFX90A-TGSPLIT-NEXT:    s_mov_b32 s6, 0x3ff
316 ; GFX90A-TGSPLIT-NEXT:    v_and_b32_e64 v1, v1, s6
317 ; GFX90A-TGSPLIT-NEXT:    s_mov_b32 s6, 2
318 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
319 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s7
320 ; GFX90A-TGSPLIT-NEXT:    v_lshl_add_u32 v1, v1, s6, v2
321 ; GFX90A-TGSPLIT-NEXT:    ds_read_b32 v1, v1
322 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
323 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
324 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
326 ; GFX940-NOTTGSPLIT-LABEL: local_nontemporal_load_1:
327 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
328 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, v0
329 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x0
330 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
331 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
332 ; GFX940-NOTTGSPLIT-NEXT:    s_mov_b32 s2, 0x3ff
333 ; GFX940-NOTTGSPLIT-NEXT:    v_and_b32_e64 v1, v1, s2
334 ; GFX940-NOTTGSPLIT-NEXT:    s_mov_b32 s2, 2
335 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
336 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s3
337 ; GFX940-NOTTGSPLIT-NEXT:    v_lshl_add_u32 v1, v1, s2, v2
338 ; GFX940-NOTTGSPLIT-NEXT:    ds_read_b32 v1, v1
339 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
340 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
341 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
343 ; GFX940-TGSPLIT-LABEL: local_nontemporal_load_1:
344 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
345 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, v0
346 ; GFX940-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x0
347 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
348 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
349 ; GFX940-TGSPLIT-NEXT:    s_mov_b32 s2, 0x3ff
350 ; GFX940-TGSPLIT-NEXT:    v_and_b32_e64 v1, v1, s2
351 ; GFX940-TGSPLIT-NEXT:    s_mov_b32 s2, 2
352 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
353 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s3
354 ; GFX940-TGSPLIT-NEXT:    v_lshl_add_u32 v1, v1, s2, v2
355 ; GFX940-TGSPLIT-NEXT:    ds_read_b32 v1, v1
356 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
357 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
358 ; GFX940-TGSPLIT-NEXT:    s_endpgm
360 ; GFX11-WGP-LABEL: local_nontemporal_load_1:
361 ; GFX11-WGP:       ; %bb.0: ; %entry
362 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, v0
363 ; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x0
364 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
365 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0
366 ; GFX11-WGP-NEXT:    s_mov_b32 s2, 0x3ff
367 ; GFX11-WGP-NEXT:    v_and_b32_e64 v1, v1, s2
368 ; GFX11-WGP-NEXT:    s_mov_b32 s2, 2
369 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
370 ; GFX11-WGP-NEXT:    v_lshl_add_u32 v1, v1, s2, s3
371 ; GFX11-WGP-NEXT:    ds_load_b32 v1, v1
372 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
373 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
374 ; GFX11-WGP-NEXT:    s_endpgm
376 ; GFX11-CU-LABEL: local_nontemporal_load_1:
377 ; GFX11-CU:       ; %bb.0: ; %entry
378 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, v0
379 ; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x0
380 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
381 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0
382 ; GFX11-CU-NEXT:    s_mov_b32 s2, 0x3ff
383 ; GFX11-CU-NEXT:    v_and_b32_e64 v1, v1, s2
384 ; GFX11-CU-NEXT:    s_mov_b32 s2, 2
385 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
386 ; GFX11-CU-NEXT:    v_lshl_add_u32 v1, v1, s2, s3
387 ; GFX11-CU-NEXT:    ds_load_b32 v1, v1
388 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
389 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
390 ; GFX11-CU-NEXT:    s_endpgm
392 ; GFX12-WGP-LABEL: local_nontemporal_load_1:
393 ; GFX12-WGP:       ; %bb.0: ; %entry
394 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, v0
395 ; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x0
396 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
397 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0
398 ; GFX12-WGP-NEXT:    s_mov_b32 s2, 0x3ff
399 ; GFX12-WGP-NEXT:    v_and_b32_e64 v1, v1, s2
400 ; GFX12-WGP-NEXT:    s_mov_b32 s2, 2
401 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
402 ; GFX12-WGP-NEXT:    s_wait_alu 0xfffe
403 ; GFX12-WGP-NEXT:    v_lshl_add_u32 v1, v1, s2, s3
404 ; GFX12-WGP-NEXT:    ds_load_b32 v1, v1
405 ; GFX12-WGP-NEXT:    s_wait_dscnt 0x0
406 ; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
407 ; GFX12-WGP-NEXT:    s_endpgm
409 ; GFX12-CU-LABEL: local_nontemporal_load_1:
410 ; GFX12-CU:       ; %bb.0: ; %entry
411 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, v0
412 ; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x0
413 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
414 ; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0
415 ; GFX12-CU-NEXT:    s_mov_b32 s2, 0x3ff
416 ; GFX12-CU-NEXT:    v_and_b32_e64 v1, v1, s2
417 ; GFX12-CU-NEXT:    s_mov_b32 s2, 2
418 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
419 ; GFX12-CU-NEXT:    s_wait_alu 0xfffe
420 ; GFX12-CU-NEXT:    v_lshl_add_u32 v1, v1, s2, s3
421 ; GFX12-CU-NEXT:    ds_load_b32 v1, v1
422 ; GFX12-CU-NEXT:    s_wait_dscnt 0x0
423 ; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
424 ; GFX12-CU-NEXT:    s_endpgm
425     ptr addrspace(3) %in, ptr addrspace(1) %out) {
426 entry:
427   %tid = call i32 @llvm.amdgcn.workitem.id.x()
428   %val.gep = getelementptr inbounds i32, ptr addrspace(3) %in, i32 %tid
429   %val = load i32, ptr addrspace(3) %val.gep, align 4, !nontemporal !0
430   store i32 %val, ptr addrspace(1) %out
431   ret void
434 define amdgpu_kernel void @local_nontemporal_store_0(
435 ; GFX6-LABEL: local_nontemporal_store_0:
436 ; GFX6:       ; %bb.0: ; %entry
437 ; GFX6-NEXT:    s_load_dword s5, s[8:9], 0x2
438 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr5
439 ; GFX6-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
440 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
441 ; GFX6-NEXT:    s_load_dword s4, s[6:7], 0x0
442 ; GFX6-NEXT:    s_mov_b32 m0, -1
443 ; GFX6-NEXT:    v_mov_b32_e32 v0, s5
444 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
445 ; GFX6-NEXT:    v_mov_b32_e32 v1, s4
446 ; GFX6-NEXT:    ds_write_b32 v0, v1
447 ; GFX6-NEXT:    s_endpgm
449 ; GFX7-LABEL: local_nontemporal_store_0:
450 ; GFX7:       ; %bb.0: ; %entry
451 ; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
452 ; GFX7-NEXT:    s_load_dword s5, s[8:9], 0x2
453 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
454 ; GFX7-NEXT:    s_load_dword s4, s[6:7], 0x0
455 ; GFX7-NEXT:    s_mov_b32 m0, -1
456 ; GFX7-NEXT:    v_mov_b32_e32 v0, s5
457 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
458 ; GFX7-NEXT:    v_mov_b32_e32 v1, s4
459 ; GFX7-NEXT:    ds_write_b32 v0, v1
460 ; GFX7-NEXT:    s_endpgm
462 ; GFX10-WGP-LABEL: local_nontemporal_store_0:
463 ; GFX10-WGP:       ; %bb.0: ; %entry
464 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
465 ; GFX10-WGP-NEXT:    s_load_dword s5, s[8:9], 0x8
466 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
467 ; GFX10-WGP-NEXT:    s_load_dword s4, s[6:7], 0x0
468 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, s5
469 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
470 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s4
471 ; GFX10-WGP-NEXT:    ds_write_b32 v0, v1
472 ; GFX10-WGP-NEXT:    s_endpgm
474 ; GFX10-CU-LABEL: local_nontemporal_store_0:
475 ; GFX10-CU:       ; %bb.0: ; %entry
476 ; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
477 ; GFX10-CU-NEXT:    s_load_dword s5, s[8:9], 0x8
478 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
479 ; GFX10-CU-NEXT:    s_load_dword s4, s[6:7], 0x0
480 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, s5
481 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
482 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s4
483 ; GFX10-CU-NEXT:    ds_write_b32 v0, v1
484 ; GFX10-CU-NEXT:    s_endpgm
486 ; SKIP-CACHE-INV-LABEL: local_nontemporal_store_0:
487 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
488 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
489 ; SKIP-CACHE-INV-NEXT:    s_load_dword s1, s[4:5], 0x2
490 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
491 ; SKIP-CACHE-INV-NEXT:    s_load_dword s0, s[2:3], 0x0
492 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 m0, -1
493 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s1
494 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
495 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, s0
496 ; SKIP-CACHE-INV-NEXT:    ds_write_b32 v0, v1
497 ; SKIP-CACHE-INV-NEXT:    s_endpgm
499 ; GFX90A-NOTTGSPLIT-LABEL: local_nontemporal_store_0:
500 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
501 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
502 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s5, s[8:9], 0x8
503 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
504 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s4, s[6:7], 0x0
505 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, s5
506 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
507 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s4
508 ; GFX90A-NOTTGSPLIT-NEXT:    ds_write_b32 v0, v1
509 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
511 ; GFX90A-TGSPLIT-LABEL: local_nontemporal_store_0:
512 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
513 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
514 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s5, s[8:9], 0x8
515 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
516 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s4, s[6:7], 0x0
517 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, s5
518 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
519 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s4
520 ; GFX90A-TGSPLIT-NEXT:    ds_write_b32 v0, v1
521 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
523 ; GFX940-NOTTGSPLIT-LABEL: local_nontemporal_store_0:
524 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
525 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
526 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s1, s[4:5], 0x8
527 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
528 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s0, s[2:3], 0x0
529 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, s1
530 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
531 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
532 ; GFX940-NOTTGSPLIT-NEXT:    ds_write_b32 v0, v1
533 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
535 ; GFX940-TGSPLIT-LABEL: local_nontemporal_store_0:
536 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
537 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
538 ; GFX940-TGSPLIT-NEXT:    s_load_dword s1, s[4:5], 0x8
539 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
540 ; GFX940-TGSPLIT-NEXT:    s_load_dword s0, s[2:3], 0x0
541 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, s1
542 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
543 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
544 ; GFX940-TGSPLIT-NEXT:    ds_write_b32 v0, v1
545 ; GFX940-TGSPLIT-NEXT:    s_endpgm
547 ; GFX11-WGP-LABEL: local_nontemporal_store_0:
548 ; GFX11-WGP:       ; %bb.0: ; %entry
549 ; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
550 ; GFX11-WGP-NEXT:    s_load_b32 s1, s[4:5], 0x8
551 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
552 ; GFX11-WGP-NEXT:    s_load_b32 s0, s[2:3], 0x0
553 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, s1
554 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
555 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s0
556 ; GFX11-WGP-NEXT:    ds_store_b32 v0, v1
557 ; GFX11-WGP-NEXT:    s_endpgm
559 ; GFX11-CU-LABEL: local_nontemporal_store_0:
560 ; GFX11-CU:       ; %bb.0: ; %entry
561 ; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
562 ; GFX11-CU-NEXT:    s_load_b32 s1, s[4:5], 0x8
563 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
564 ; GFX11-CU-NEXT:    s_load_b32 s0, s[2:3], 0x0
565 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, s1
566 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
567 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s0
568 ; GFX11-CU-NEXT:    ds_store_b32 v0, v1
569 ; GFX11-CU-NEXT:    s_endpgm
571 ; GFX12-WGP-LABEL: local_nontemporal_store_0:
572 ; GFX12-WGP:       ; %bb.0: ; %entry
573 ; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
574 ; GFX12-WGP-NEXT:    s_load_b32 s1, s[4:5], 0x8
575 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
576 ; GFX12-WGP-NEXT:    s_load_b32 s0, s[2:3], 0x0
577 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, s1
578 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
579 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s0
580 ; GFX12-WGP-NEXT:    ds_store_b32 v0, v1
581 ; GFX12-WGP-NEXT:    s_endpgm
583 ; GFX12-CU-LABEL: local_nontemporal_store_0:
584 ; GFX12-CU:       ; %bb.0: ; %entry
585 ; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
586 ; GFX12-CU-NEXT:    s_load_b32 s1, s[4:5], 0x8
587 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
588 ; GFX12-CU-NEXT:    s_load_b32 s0, s[2:3], 0x0
589 ; GFX12-CU-NEXT:    v_mov_b32_e32 v0, s1
590 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
591 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s0
592 ; GFX12-CU-NEXT:    ds_store_b32 v0, v1
593 ; GFX12-CU-NEXT:    s_endpgm
594     ptr addrspace(1) %in, ptr addrspace(3) %out) {
595 entry:
596   %val = load i32, ptr addrspace(1) %in, align 4
597   store i32 %val, ptr addrspace(3) %out, !nontemporal !0
598   ret void
601 define amdgpu_kernel void @local_nontemporal_store_1(
602 ; GFX6-LABEL: local_nontemporal_store_1:
603 ; GFX6:       ; %bb.0: ; %entry
604 ; GFX6-NEXT:    s_load_dword s5, s[8:9], 0x2
605 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr5
606 ; GFX6-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
607 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
608 ; GFX6-NEXT:    s_load_dword s4, s[6:7], 0x0
609 ; GFX6-NEXT:    s_mov_b32 s6, 2
610 ; GFX6-NEXT:    v_lshlrev_b32_e64 v0, s6, v0
611 ; GFX6-NEXT:    v_add_i32_e64 v0, s[6:7], s5, v0
612 ; GFX6-NEXT:    s_mov_b32 m0, -1
613 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
614 ; GFX6-NEXT:    v_mov_b32_e32 v1, s4
615 ; GFX6-NEXT:    ds_write_b32 v0, v1
616 ; GFX6-NEXT:    s_endpgm
618 ; GFX7-LABEL: local_nontemporal_store_1:
619 ; GFX7:       ; %bb.0: ; %entry
620 ; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
621 ; GFX7-NEXT:    s_load_dword s5, s[8:9], 0x2
622 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
623 ; GFX7-NEXT:    s_load_dword s4, s[6:7], 0x0
624 ; GFX7-NEXT:    s_mov_b32 s6, 2
625 ; GFX7-NEXT:    v_lshlrev_b32_e64 v0, s6, v0
626 ; GFX7-NEXT:    v_add_i32_e64 v0, s[6:7], s5, v0
627 ; GFX7-NEXT:    s_mov_b32 m0, -1
628 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
629 ; GFX7-NEXT:    v_mov_b32_e32 v1, s4
630 ; GFX7-NEXT:    ds_write_b32 v0, v1
631 ; GFX7-NEXT:    s_endpgm
633 ; GFX10-WGP-LABEL: local_nontemporal_store_1:
634 ; GFX10-WGP:       ; %bb.0: ; %entry
635 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0
636 ; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x8
637 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
638 ; GFX10-WGP-NEXT:    s_load_dword s4, s[4:5], 0x0
639 ; GFX10-WGP-NEXT:    s_mov_b32 s5, 2
640 ; GFX10-WGP-NEXT:    v_lshl_add_u32 v0, v0, s5, s6
641 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
642 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s4
643 ; GFX10-WGP-NEXT:    ds_write_b32 v0, v1
644 ; GFX10-WGP-NEXT:    s_endpgm
646 ; GFX10-CU-LABEL: local_nontemporal_store_1:
647 ; GFX10-CU:       ; %bb.0: ; %entry
648 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0
649 ; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x8
650 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
651 ; GFX10-CU-NEXT:    s_load_dword s4, s[4:5], 0x0
652 ; GFX10-CU-NEXT:    s_mov_b32 s5, 2
653 ; GFX10-CU-NEXT:    v_lshl_add_u32 v0, v0, s5, s6
654 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
655 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s4
656 ; GFX10-CU-NEXT:    ds_write_b32 v0, v1
657 ; GFX10-CU-NEXT:    s_endpgm
659 ; SKIP-CACHE-INV-LABEL: local_nontemporal_store_1:
660 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
661 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
662 ; SKIP-CACHE-INV-NEXT:    s_load_dword s1, s[4:5], 0x2
663 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
664 ; SKIP-CACHE-INV-NEXT:    s_load_dword s0, s[2:3], 0x0
665 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, 2
666 ; SKIP-CACHE-INV-NEXT:    v_lshlrev_b32_e64 v0, s2, v0
667 ; SKIP-CACHE-INV-NEXT:    v_add_i32_e64 v0, s[2:3], s1, v0
668 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 m0, -1
669 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
670 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, s0
671 ; SKIP-CACHE-INV-NEXT:    ds_write_b32 v0, v1
672 ; SKIP-CACHE-INV-NEXT:    s_endpgm
674 ; GFX90A-NOTTGSPLIT-LABEL: local_nontemporal_store_1:
675 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
676 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0
677 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x8
678 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
679 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s4, s[4:5], 0x0
680 ; GFX90A-NOTTGSPLIT-NEXT:    s_mov_b32 s5, 0x3ff
681 ; GFX90A-NOTTGSPLIT-NEXT:    v_and_b32_e64 v0, v0, s5
682 ; GFX90A-NOTTGSPLIT-NEXT:    s_mov_b32 s5, 2
683 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
684 ; GFX90A-NOTTGSPLIT-NEXT:    v_lshl_add_u32 v0, v0, s5, v1
685 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
686 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s4
687 ; GFX90A-NOTTGSPLIT-NEXT:    ds_write_b32 v0, v1
688 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
690 ; GFX90A-TGSPLIT-LABEL: local_nontemporal_store_1:
691 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
692 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0
693 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x8
694 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
695 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s4, s[4:5], 0x0
696 ; GFX90A-TGSPLIT-NEXT:    s_mov_b32 s5, 0x3ff
697 ; GFX90A-TGSPLIT-NEXT:    v_and_b32_e64 v0, v0, s5
698 ; GFX90A-TGSPLIT-NEXT:    s_mov_b32 s5, 2
699 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
700 ; GFX90A-TGSPLIT-NEXT:    v_lshl_add_u32 v0, v0, s5, v1
701 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
702 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s4
703 ; GFX90A-TGSPLIT-NEXT:    ds_write_b32 v0, v1
704 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
706 ; GFX940-NOTTGSPLIT-LABEL: local_nontemporal_store_1:
707 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
708 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
709 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x8
710 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
711 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
712 ; GFX940-NOTTGSPLIT-NEXT:    s_mov_b32 s1, 0x3ff
713 ; GFX940-NOTTGSPLIT-NEXT:    v_and_b32_e64 v0, v0, s1
714 ; GFX940-NOTTGSPLIT-NEXT:    s_mov_b32 s1, 2
715 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
716 ; GFX940-NOTTGSPLIT-NEXT:    v_lshl_add_u32 v0, v0, s1, v1
717 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
718 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
719 ; GFX940-NOTTGSPLIT-NEXT:    ds_write_b32 v0, v1
720 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
722 ; GFX940-TGSPLIT-LABEL: local_nontemporal_store_1:
723 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
724 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
725 ; GFX940-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x8
726 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
727 ; GFX940-TGSPLIT-NEXT:    s_load_dword s0, s[0:1], 0x0
728 ; GFX940-TGSPLIT-NEXT:    s_mov_b32 s1, 0x3ff
729 ; GFX940-TGSPLIT-NEXT:    v_and_b32_e64 v0, v0, s1
730 ; GFX940-TGSPLIT-NEXT:    s_mov_b32 s1, 2
731 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
732 ; GFX940-TGSPLIT-NEXT:    v_lshl_add_u32 v0, v0, s1, v1
733 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
734 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s0
735 ; GFX940-TGSPLIT-NEXT:    ds_write_b32 v0, v1
736 ; GFX940-TGSPLIT-NEXT:    s_endpgm
738 ; GFX11-WGP-LABEL: local_nontemporal_store_1:
739 ; GFX11-WGP:       ; %bb.0: ; %entry
740 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
741 ; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x8
742 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
743 ; GFX11-WGP-NEXT:    s_load_b32 s0, s[0:1], 0x0
744 ; GFX11-WGP-NEXT:    s_mov_b32 s1, 0x3ff
745 ; GFX11-WGP-NEXT:    v_and_b32_e64 v0, v0, s1
746 ; GFX11-WGP-NEXT:    s_mov_b32 s1, 2
747 ; GFX11-WGP-NEXT:    v_lshl_add_u32 v0, v0, s1, s2
748 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
749 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s0
750 ; GFX11-WGP-NEXT:    ds_store_b32 v0, v1
751 ; GFX11-WGP-NEXT:    s_endpgm
753 ; GFX11-CU-LABEL: local_nontemporal_store_1:
754 ; GFX11-CU:       ; %bb.0: ; %entry
755 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
756 ; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x8
757 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
758 ; GFX11-CU-NEXT:    s_load_b32 s0, s[0:1], 0x0
759 ; GFX11-CU-NEXT:    s_mov_b32 s1, 0x3ff
760 ; GFX11-CU-NEXT:    v_and_b32_e64 v0, v0, s1
761 ; GFX11-CU-NEXT:    s_mov_b32 s1, 2
762 ; GFX11-CU-NEXT:    v_lshl_add_u32 v0, v0, s1, s2
763 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
764 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s0
765 ; GFX11-CU-NEXT:    ds_store_b32 v0, v1
766 ; GFX11-CU-NEXT:    s_endpgm
768 ; GFX12-WGP-LABEL: local_nontemporal_store_1:
769 ; GFX12-WGP:       ; %bb.0: ; %entry
770 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
771 ; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x8
772 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
773 ; GFX12-WGP-NEXT:    s_load_b32 s0, s[0:1], 0x0
774 ; GFX12-WGP-NEXT:    s_mov_b32 s1, 0x3ff
775 ; GFX12-WGP-NEXT:    v_and_b32_e64 v0, v0, s1
776 ; GFX12-WGP-NEXT:    s_mov_b32 s1, 2
777 ; GFX12-WGP-NEXT:    s_wait_alu 0xfffe
778 ; GFX12-WGP-NEXT:    v_lshl_add_u32 v0, v0, s1, s2
779 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
780 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s0
781 ; GFX12-WGP-NEXT:    ds_store_b32 v0, v1
782 ; GFX12-WGP-NEXT:    s_endpgm
784 ; GFX12-CU-LABEL: local_nontemporal_store_1:
785 ; GFX12-CU:       ; %bb.0: ; %entry
786 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
787 ; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x8
788 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
789 ; GFX12-CU-NEXT:    s_load_b32 s0, s[0:1], 0x0
790 ; GFX12-CU-NEXT:    s_mov_b32 s1, 0x3ff
791 ; GFX12-CU-NEXT:    v_and_b32_e64 v0, v0, s1
792 ; GFX12-CU-NEXT:    s_mov_b32 s1, 2
793 ; GFX12-CU-NEXT:    s_wait_alu 0xfffe
794 ; GFX12-CU-NEXT:    v_lshl_add_u32 v0, v0, s1, s2
795 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
796 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s0
797 ; GFX12-CU-NEXT:    ds_store_b32 v0, v1
798 ; GFX12-CU-NEXT:    s_endpgm
799     ptr addrspace(1) %in, ptr addrspace(3) %out) {
800 entry:
801   %tid = call i32 @llvm.amdgcn.workitem.id.x()
802   %val = load i32, ptr addrspace(1) %in, align 4
803   %out.gep = getelementptr inbounds i32, ptr addrspace(3) %out, i32 %tid
804   store i32 %val, ptr addrspace(3) %out.gep, !nontemporal !0
805   ret void
808 define amdgpu_kernel void @local_nontemporal_volatile_load(
809 ; GFX6-LABEL: local_nontemporal_volatile_load:
810 ; GFX6:       ; %bb.0: ; %entry
811 ; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]
812 ; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x0
813 ; GFX6-NEXT:    ; kill: def $sgpr6 killed $sgpr8
814 ; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2
815 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
816 ; GFX6-NEXT:    s_mov_b32 s11, s5
817 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5
818 ; GFX6-NEXT:    s_mov_b32 s9, 0x100f000
819 ; GFX6-NEXT:    s_mov_b32 s10, -1
820 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7
821 ; GFX6-NEXT:    s_mov_b32 s5, s11
822 ; GFX6-NEXT:    s_mov_b32 s6, s10
823 ; GFX6-NEXT:    s_mov_b32 s7, s9
824 ; GFX6-NEXT:    s_mov_b32 m0, -1
825 ; GFX6-NEXT:    v_mov_b32_e32 v0, s8
826 ; GFX6-NEXT:    ds_read_b32 v0, v0
827 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
828 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0
829 ; GFX6-NEXT:    s_endpgm
831 ; GFX7-LABEL: local_nontemporal_volatile_load:
832 ; GFX7:       ; %bb.0: ; %entry
833 ; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x0
834 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x2
835 ; GFX7-NEXT:    s_mov_b32 m0, -1
836 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
837 ; GFX7-NEXT:    v_mov_b32_e32 v0, s6
838 ; GFX7-NEXT:    ds_read_b32 v2, v0
839 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
840 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
841 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
842 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
843 ; GFX7-NEXT:    s_endpgm
845 ; GFX10-WGP-LABEL: local_nontemporal_volatile_load:
846 ; GFX10-WGP:       ; %bb.0: ; %entry
847 ; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x0
848 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
849 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
850 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
851 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s6
852 ; GFX10-WGP-NEXT:    ds_read_b32 v1, v1
853 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
854 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]
855 ; GFX10-WGP-NEXT:    s_endpgm
857 ; GFX10-CU-LABEL: local_nontemporal_volatile_load:
858 ; GFX10-CU:       ; %bb.0: ; %entry
859 ; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x0
860 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
861 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
862 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
863 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s6
864 ; GFX10-CU-NEXT:    ds_read_b32 v1, v1
865 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
866 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]
867 ; GFX10-CU-NEXT:    s_endpgm
869 ; SKIP-CACHE-INV-LABEL: local_nontemporal_volatile_load:
870 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
871 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]
872 ; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x0
873 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
874 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
875 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s1
876 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1
877 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf000
878 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -1
879 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
880 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s7
881 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s6
882 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s5
883 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 m0, -1
884 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s4
885 ; SKIP-CACHE-INV-NEXT:    ds_read_b32 v0, v0
886 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
887 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0
888 ; SKIP-CACHE-INV-NEXT:    s_endpgm
890 ; GFX90A-NOTTGSPLIT-LABEL: local_nontemporal_volatile_load:
891 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
892 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x0
893 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
894 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
895 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
896 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
897 ; GFX90A-NOTTGSPLIT-NEXT:    ds_read_b32 v1, v1
898 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
899 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
900 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
902 ; GFX90A-TGSPLIT-LABEL: local_nontemporal_volatile_load:
903 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
904 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x0
905 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
906 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
907 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
908 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
909 ; GFX90A-TGSPLIT-NEXT:    ds_read_b32 v1, v1
910 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
911 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
912 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
914 ; GFX940-NOTTGSPLIT-LABEL: local_nontemporal_volatile_load:
915 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
916 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x0
917 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
918 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
919 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
920 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
921 ; GFX940-NOTTGSPLIT-NEXT:    ds_read_b32 v1, v1
922 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
923 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
924 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
926 ; GFX940-TGSPLIT-LABEL: local_nontemporal_volatile_load:
927 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
928 ; GFX940-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x0
929 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
930 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
931 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
932 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
933 ; GFX940-TGSPLIT-NEXT:    ds_read_b32 v1, v1
934 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
935 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
936 ; GFX940-TGSPLIT-NEXT:    s_endpgm
938 ; GFX11-WGP-LABEL: local_nontemporal_volatile_load:
939 ; GFX11-WGP:       ; %bb.0: ; %entry
940 ; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x0
941 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
942 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0
943 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
944 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s2
945 ; GFX11-WGP-NEXT:    ds_load_b32 v1, v1
946 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
947 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
948 ; GFX11-WGP-NEXT:    s_endpgm
950 ; GFX11-CU-LABEL: local_nontemporal_volatile_load:
951 ; GFX11-CU:       ; %bb.0: ; %entry
952 ; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x0
953 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
954 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0
955 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
956 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s2
957 ; GFX11-CU-NEXT:    ds_load_b32 v1, v1
958 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
959 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
960 ; GFX11-CU-NEXT:    s_endpgm
962 ; GFX12-WGP-LABEL: local_nontemporal_volatile_load:
963 ; GFX12-WGP:       ; %bb.0: ; %entry
964 ; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x0
965 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
966 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0
967 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
968 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s2
969 ; GFX12-WGP-NEXT:    ds_load_b32 v1, v1
970 ; GFX12-WGP-NEXT:    s_wait_dscnt 0x0
971 ; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
972 ; GFX12-WGP-NEXT:    s_endpgm
974 ; GFX12-CU-LABEL: local_nontemporal_volatile_load:
975 ; GFX12-CU:       ; %bb.0: ; %entry
976 ; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x0
977 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
978 ; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0
979 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
980 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s2
981 ; GFX12-CU-NEXT:    ds_load_b32 v1, v1
982 ; GFX12-CU-NEXT:    s_wait_dscnt 0x0
983 ; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
984 ; GFX12-CU-NEXT:    s_endpgm
985     ptr addrspace(3) %in, ptr addrspace(1) %out) {
986 entry:
987   %val = load volatile i32, ptr addrspace(3) %in, align 4, !nontemporal !0
988   store i32 %val, ptr addrspace(1) %out
989   ret void
992 !0 = !{i32 1}
993 declare i32 @llvm.amdgcn.workitem.id.x()