ELF: Have __rela_iplt_{start,end} surround .rela.iplt with --pack-dyn-relocs=android.
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / memory-legalizer-global-nontemporal.ll
blobf06118a7a6dc9b97b3f5db8a80cdbcfad001185a
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 @global_nontemporal_load_0(
17 ; GFX6-LABEL: global_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_dwordx2 s[8:9], s[4:5], 0x0
21 ; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2
22 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
23 ; GFX6-NEXT:    s_mov_b32 s12, s5
24 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5
25 ; GFX6-NEXT:    s_mov_b32 s10, 0x100f000
26 ; GFX6-NEXT:    s_mov_b32 s11, -1
27 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7
28 ; GFX6-NEXT:    s_mov_b32 s5, s12
29 ; GFX6-NEXT:    s_mov_b32 s6, s11
30 ; GFX6-NEXT:    s_mov_b32 s7, s10
31 ; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x0
32 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
33 ; GFX6-NEXT:    v_mov_b32_e32 v0, s8
34 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0
35 ; GFX6-NEXT:    s_endpgm
37 ; GFX7-LABEL: global_nontemporal_load_0:
38 ; GFX7:       ; %bb.0: ; %entry
39 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0
40 ; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x2
41 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
42 ; GFX7-NEXT:    s_load_dword s4, s[4:5], 0x0
43 ; GFX7-NEXT:    v_mov_b32_e32 v0, s6
44 ; GFX7-NEXT:    v_mov_b32_e32 v1, s7
45 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
46 ; GFX7-NEXT:    v_mov_b32_e32 v2, s4
47 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
48 ; GFX7-NEXT:    s_endpgm
50 ; GFX10-WGP-LABEL: global_nontemporal_load_0:
51 ; GFX10-WGP:       ; %bb.0: ; %entry
52 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
53 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
54 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
55 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
56 ; GFX10-WGP-NEXT:    s_load_dword s6, s[6:7], 0x0
57 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
58 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s6
59 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]
60 ; GFX10-WGP-NEXT:    s_endpgm
62 ; GFX10-CU-LABEL: global_nontemporal_load_0:
63 ; GFX10-CU:       ; %bb.0: ; %entry
64 ; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
65 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
66 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
67 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
68 ; GFX10-CU-NEXT:    s_load_dword s6, s[6:7], 0x0
69 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
70 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s6
71 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]
72 ; GFX10-CU-NEXT:    s_endpgm
74 ; SKIP-CACHE-INV-LABEL: global_nontemporal_load_0:
75 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
76 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]
77 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
78 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
79 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
80 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s1
81 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1
82 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf000
83 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -1
84 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
85 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s8
86 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s7
87 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s6
88 ; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x0
89 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
90 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s4
91 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0
92 ; SKIP-CACHE-INV-NEXT:    s_endpgm
94 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_load_0:
95 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
96 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
97 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
98 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
99 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
100 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[6:7], 0x0
101 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
102 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
103 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
104 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
106 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_load_0:
107 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
108 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
109 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
110 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
111 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
112 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[6:7], 0x0
113 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
114 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
115 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
116 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
118 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_load_0:
119 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
120 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
121 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
122 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
123 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
124 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s2, s[2:3], 0x0
125 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
126 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
127 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
128 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
130 ; GFX940-TGSPLIT-LABEL: global_nontemporal_load_0:
131 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
132 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
133 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
134 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
135 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
136 ; GFX940-TGSPLIT-NEXT:    s_load_dword s2, s[2:3], 0x0
137 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
138 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
139 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
140 ; GFX940-TGSPLIT-NEXT:    s_endpgm
142 ; GFX11-WGP-LABEL: global_nontemporal_load_0:
143 ; GFX11-WGP:       ; %bb.0: ; %entry
144 ; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
145 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
146 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0
147 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
148 ; GFX11-WGP-NEXT:    s_load_b32 s2, s[2:3], 0x0
149 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
150 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s2
151 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
152 ; GFX11-WGP-NEXT:    s_endpgm
154 ; GFX11-CU-LABEL: global_nontemporal_load_0:
155 ; GFX11-CU:       ; %bb.0: ; %entry
156 ; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
157 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
158 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0
159 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
160 ; GFX11-CU-NEXT:    s_load_b32 s2, s[2:3], 0x0
161 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
162 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s2
163 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
164 ; GFX11-CU-NEXT:    s_endpgm
166 ; GFX12-WGP-LABEL: global_nontemporal_load_0:
167 ; GFX12-WGP:       ; %bb.0: ; %entry
168 ; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
169 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
170 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0
171 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
172 ; GFX12-WGP-NEXT:    s_load_b32 s2, s[2:3], 0x0
173 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
174 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s2
175 ; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
176 ; GFX12-WGP-NEXT:    s_endpgm
178 ; GFX12-CU-LABEL: global_nontemporal_load_0:
179 ; GFX12-CU:       ; %bb.0: ; %entry
180 ; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
181 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
182 ; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0
183 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
184 ; GFX12-CU-NEXT:    s_load_b32 s2, s[2:3], 0x0
185 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
186 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s2
187 ; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
188 ; GFX12-CU-NEXT:    s_endpgm
189     ptr addrspace(1) %in, ptr addrspace(1) %out) {
190 entry:
191   %val = load i32, ptr addrspace(1) %in, align 4, !nontemporal !0
192   store i32 %val, ptr addrspace(1) %out
193   ret void
196 define amdgpu_kernel void @global_nontemporal_load_1(
197 ; GFX6-LABEL: global_nontemporal_load_1:
198 ; GFX6:       ; %bb.0: ; %entry
199 ; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]
200 ; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x0
201 ; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2
202 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
203 ; GFX6-NEXT:    s_mov_b32 s12, s5
204 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5
205 ; GFX6-NEXT:    s_mov_b32 s10, 0x100f000
206 ; GFX6-NEXT:    s_mov_b32 s11, -1
207 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7
208 ; GFX6-NEXT:    s_mov_b32 s5, s12
209 ; GFX6-NEXT:    s_mov_b32 s6, s11
210 ; GFX6-NEXT:    s_mov_b32 s7, s10
211 ; GFX6-NEXT:    s_mov_b32 s12, 0
212 ; GFX6-NEXT:    ; kill: def $sgpr12 killed $sgpr12 def $sgpr12_sgpr13
213 ; GFX6-NEXT:    s_mov_b32 s13, s10
214 ; GFX6-NEXT:    ; kill: def $sgpr8_sgpr9 killed $sgpr8_sgpr9 def $sgpr8_sgpr9_sgpr10_sgpr11
215 ; GFX6-NEXT:    s_mov_b64 s[10:11], s[12:13]
216 ; GFX6-NEXT:    s_mov_b32 s12, 2
217 ; GFX6-NEXT:    v_lshlrev_b32_e64 v0, s12, v0
218 ; GFX6-NEXT:    s_mov_b32 s12, 0
219 ; GFX6-NEXT:    ; implicit-def: $sgpr12
220 ; GFX6-NEXT:    v_mov_b32_e32 v2, 0
221 ; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec
222 ; GFX6-NEXT:    v_mov_b32_e32 v1, v2
223 ; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[8:11], 0 addr64 glc slc
224 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
225 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0
226 ; GFX6-NEXT:    s_endpgm
228 ; GFX7-LABEL: global_nontemporal_load_1:
229 ; GFX7:       ; %bb.0: ; %entry
230 ; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]
231 ; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x0
232 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2
233 ; GFX7-NEXT:    s_mov_b32 s6, 2
234 ; GFX7-NEXT:    v_lshlrev_b32_e64 v1, s6, v0
235 ; GFX7-NEXT:    s_mov_b32 s6, 0
236 ; GFX7-NEXT:    ; implicit-def: $sgpr6
237 ; GFX7-NEXT:    v_mov_b32_e32 v0, 0
238 ; GFX7-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec
239 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
240 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
241 ; GFX7-NEXT:    s_mov_b32 s6, s8
242 ; GFX7-NEXT:    v_mov_b32_e32 v0, v1
243 ; GFX7-NEXT:    s_mov_b32 s8, s9
244 ; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec
245 ; GFX7-NEXT:    v_add_i32_e64 v0, s[6:7], s6, v0
246 ; GFX7-NEXT:    v_mov_b32_e32 v1, s8
247 ; GFX7-NEXT:    v_addc_u32_e64 v2, s[6:7], v1, v2, s[6:7]
248 ; GFX7-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec
249 ; GFX7-NEXT:    v_mov_b32_e32 v1, v2
250 ; GFX7-NEXT:    flat_load_dword v2, v[0:1] glc slc
251 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
252 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
253 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
254 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
255 ; GFX7-NEXT:    s_endpgm
257 ; GFX10-WGP-LABEL: global_nontemporal_load_1:
258 ; GFX10-WGP:       ; %bb.0: ; %entry
259 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, v0
260 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
261 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
262 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
263 ; GFX10-WGP-NEXT:    s_mov_b32 s8, 2
264 ; GFX10-WGP-NEXT:    v_lshlrev_b32_e64 v1, s8, v1
265 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
266 ; GFX10-WGP-NEXT:    global_load_dword v1, v1, s[6:7] slc
267 ; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)
268 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]
269 ; GFX10-WGP-NEXT:    s_endpgm
271 ; GFX10-CU-LABEL: global_nontemporal_load_1:
272 ; GFX10-CU:       ; %bb.0: ; %entry
273 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, v0
274 ; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
275 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
276 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
277 ; GFX10-CU-NEXT:    s_mov_b32 s8, 2
278 ; GFX10-CU-NEXT:    v_lshlrev_b32_e64 v1, s8, v1
279 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
280 ; GFX10-CU-NEXT:    global_load_dword v1, v1, s[6:7] slc
281 ; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)
282 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]
283 ; GFX10-CU-NEXT:    s_endpgm
285 ; SKIP-CACHE-INV-LABEL: global_nontemporal_load_1:
286 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
287 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]
288 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
289 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
290 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
291 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s1
292 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1
293 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf000
294 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -1
295 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
296 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s8
297 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s7
298 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s6
299 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0
300 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9
301 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, s6
302 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4_sgpr5 killed $sgpr4_sgpr5 def $sgpr4_sgpr5_sgpr6_sgpr7
303 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[6:7], s[8:9]
304 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 2
305 ; SKIP-CACHE-INV-NEXT:    v_lshlrev_b32_e64 v0, s8, v0
306 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0
307 ; SKIP-CACHE-INV-NEXT:    ; implicit-def: $sgpr8
308 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, 0
309 ; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec
310 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v2
311 ; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 glc slc
312 ; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)
313 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0
314 ; SKIP-CACHE-INV-NEXT:    s_endpgm
316 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_load_1:
317 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
318 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, v0
319 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
320 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
321 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
322 ; GFX90A-NOTTGSPLIT-NEXT:    s_mov_b32 s8, 0x3ff
323 ; GFX90A-NOTTGSPLIT-NEXT:    v_and_b32_e64 v1, v1, s8
324 ; GFX90A-NOTTGSPLIT-NEXT:    s_mov_b32 s8, 2
325 ; GFX90A-NOTTGSPLIT-NEXT:    v_lshlrev_b32_e64 v1, s8, v1
326 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
327 ; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v1, s[6:7] glc slc
328 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)
329 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
330 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
332 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_load_1:
333 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
334 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, v0
335 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
336 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
337 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
338 ; GFX90A-TGSPLIT-NEXT:    s_mov_b32 s8, 0x3ff
339 ; GFX90A-TGSPLIT-NEXT:    v_and_b32_e64 v1, v1, s8
340 ; GFX90A-TGSPLIT-NEXT:    s_mov_b32 s8, 2
341 ; GFX90A-TGSPLIT-NEXT:    v_lshlrev_b32_e64 v1, s8, v1
342 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
343 ; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v1, s[6:7] glc slc
344 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)
345 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
346 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
348 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_load_1:
349 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
350 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, v0
351 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
352 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
353 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
354 ; GFX940-NOTTGSPLIT-NEXT:    s_mov_b32 s4, 0x3ff
355 ; GFX940-NOTTGSPLIT-NEXT:    v_and_b32_e64 v1, v1, s4
356 ; GFX940-NOTTGSPLIT-NEXT:    s_mov_b32 s4, 2
357 ; GFX940-NOTTGSPLIT-NEXT:    v_lshlrev_b32_e64 v1, s4, v1
358 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
359 ; GFX940-NOTTGSPLIT-NEXT:    global_load_dword v1, v1, s[2:3] nt
360 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)
361 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
362 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
364 ; GFX940-TGSPLIT-LABEL: global_nontemporal_load_1:
365 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
366 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, v0
367 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
368 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
369 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
370 ; GFX940-TGSPLIT-NEXT:    s_mov_b32 s4, 0x3ff
371 ; GFX940-TGSPLIT-NEXT:    v_and_b32_e64 v1, v1, s4
372 ; GFX940-TGSPLIT-NEXT:    s_mov_b32 s4, 2
373 ; GFX940-TGSPLIT-NEXT:    v_lshlrev_b32_e64 v1, s4, v1
374 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
375 ; GFX940-TGSPLIT-NEXT:    global_load_dword v1, v1, s[2:3] nt
376 ; GFX940-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)
377 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
378 ; GFX940-TGSPLIT-NEXT:    s_endpgm
380 ; GFX11-WGP-LABEL: global_nontemporal_load_1:
381 ; GFX11-WGP:       ; %bb.0: ; %entry
382 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, v0
383 ; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
384 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
385 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0
386 ; GFX11-WGP-NEXT:    s_mov_b32 s4, 0x3ff
387 ; GFX11-WGP-NEXT:    v_and_b32_e64 v1, v1, s4
388 ; GFX11-WGP-NEXT:    s_mov_b32 s4, 2
389 ; GFX11-WGP-NEXT:    v_lshlrev_b32_e64 v1, s4, v1
390 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
391 ; GFX11-WGP-NEXT:    global_load_b32 v1, v1, s[2:3] slc dlc
392 ; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)
393 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
394 ; GFX11-WGP-NEXT:    s_endpgm
396 ; GFX11-CU-LABEL: global_nontemporal_load_1:
397 ; GFX11-CU:       ; %bb.0: ; %entry
398 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, v0
399 ; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
400 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
401 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0
402 ; GFX11-CU-NEXT:    s_mov_b32 s4, 0x3ff
403 ; GFX11-CU-NEXT:    v_and_b32_e64 v1, v1, s4
404 ; GFX11-CU-NEXT:    s_mov_b32 s4, 2
405 ; GFX11-CU-NEXT:    v_lshlrev_b32_e64 v1, s4, v1
406 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
407 ; GFX11-CU-NEXT:    global_load_b32 v1, v1, s[2:3] slc dlc
408 ; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)
409 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
410 ; GFX11-CU-NEXT:    s_endpgm
412 ; GFX12-WGP-LABEL: global_nontemporal_load_1:
413 ; GFX12-WGP:       ; %bb.0: ; %entry
414 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, v0
415 ; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
416 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
417 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0
418 ; GFX12-WGP-NEXT:    s_mov_b32 s4, 0x3ff
419 ; GFX12-WGP-NEXT:    s_wait_alu 0xfffe
420 ; GFX12-WGP-NEXT:    v_and_b32_e64 v1, v1, s4
421 ; GFX12-WGP-NEXT:    s_mov_b32 s4, 2
422 ; GFX12-WGP-NEXT:    s_wait_alu 0xfffe
423 ; GFX12-WGP-NEXT:    v_lshlrev_b32_e64 v1, s4, v1
424 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
425 ; GFX12-WGP-NEXT:    global_load_b32 v1, v1, s[2:3] th:TH_LOAD_NT
426 ; GFX12-WGP-NEXT:    s_wait_loadcnt 0x0
427 ; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
428 ; GFX12-WGP-NEXT:    s_endpgm
430 ; GFX12-CU-LABEL: global_nontemporal_load_1:
431 ; GFX12-CU:       ; %bb.0: ; %entry
432 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, v0
433 ; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
434 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
435 ; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0
436 ; GFX12-CU-NEXT:    s_mov_b32 s4, 0x3ff
437 ; GFX12-CU-NEXT:    s_wait_alu 0xfffe
438 ; GFX12-CU-NEXT:    v_and_b32_e64 v1, v1, s4
439 ; GFX12-CU-NEXT:    s_mov_b32 s4, 2
440 ; GFX12-CU-NEXT:    s_wait_alu 0xfffe
441 ; GFX12-CU-NEXT:    v_lshlrev_b32_e64 v1, s4, v1
442 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
443 ; GFX12-CU-NEXT:    global_load_b32 v1, v1, s[2:3] th:TH_LOAD_NT
444 ; GFX12-CU-NEXT:    s_wait_loadcnt 0x0
445 ; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
446 ; GFX12-CU-NEXT:    s_endpgm
447     ptr addrspace(1) %in, ptr addrspace(1) %out) {
448 entry:
449   %tid = call i32 @llvm.amdgcn.workitem.id.x()
450   %val.gep = getelementptr inbounds i32, ptr addrspace(1) %in, i32 %tid
451   %val = load i32, ptr addrspace(1) %val.gep, align 4, !nontemporal !0
452   store i32 %val, ptr addrspace(1) %out
453   ret void
456 define amdgpu_kernel void @global_nontemporal_store_0(
457 ; GFX6-LABEL: global_nontemporal_store_0:
458 ; GFX6:       ; %bb.0: ; %entry
459 ; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]
460 ; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x0
461 ; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2
462 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
463 ; GFX6-NEXT:    s_mov_b32 s12, s5
464 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5
465 ; GFX6-NEXT:    s_mov_b32 s10, 0x100f000
466 ; GFX6-NEXT:    s_mov_b32 s11, -1
467 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7
468 ; GFX6-NEXT:    s_mov_b32 s5, s12
469 ; GFX6-NEXT:    s_mov_b32 s6, s11
470 ; GFX6-NEXT:    s_mov_b32 s7, s10
471 ; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x0
472 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
473 ; GFX6-NEXT:    v_mov_b32_e32 v0, s8
474 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0 glc slc
475 ; GFX6-NEXT:    s_endpgm
477 ; GFX7-LABEL: global_nontemporal_store_0:
478 ; GFX7:       ; %bb.0: ; %entry
479 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0
480 ; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x2
481 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
482 ; GFX7-NEXT:    s_load_dword s4, s[4:5], 0x0
483 ; GFX7-NEXT:    v_mov_b32_e32 v0, s6
484 ; GFX7-NEXT:    v_mov_b32_e32 v1, s7
485 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
486 ; GFX7-NEXT:    v_mov_b32_e32 v2, s4
487 ; GFX7-NEXT:    flat_store_dword v[0:1], v2 glc slc
488 ; GFX7-NEXT:    s_endpgm
490 ; GFX10-WGP-LABEL: global_nontemporal_store_0:
491 ; GFX10-WGP:       ; %bb.0: ; %entry
492 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
493 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
494 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
495 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
496 ; GFX10-WGP-NEXT:    s_load_dword s6, s[6:7], 0x0
497 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
498 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s6
499 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5] glc slc
500 ; GFX10-WGP-NEXT:    s_endpgm
502 ; GFX10-CU-LABEL: global_nontemporal_store_0:
503 ; GFX10-CU:       ; %bb.0: ; %entry
504 ; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
505 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
506 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
507 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
508 ; GFX10-CU-NEXT:    s_load_dword s6, s[6:7], 0x0
509 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
510 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s6
511 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5] glc slc
512 ; GFX10-CU-NEXT:    s_endpgm
514 ; SKIP-CACHE-INV-LABEL: global_nontemporal_store_0:
515 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
516 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]
517 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
518 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
519 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
520 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s1
521 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1
522 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf000
523 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -1
524 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
525 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s8
526 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s7
527 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s6
528 ; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x0
529 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
530 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s4
531 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0 glc slc
532 ; SKIP-CACHE-INV-NEXT:    s_endpgm
534 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_store_0:
535 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
536 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
537 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
538 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
539 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
540 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[6:7], 0x0
541 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
542 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
543 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5] glc slc
544 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
546 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_store_0:
547 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
548 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
549 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
550 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
551 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
552 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[6:7], 0x0
553 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
554 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
555 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5] glc slc
556 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
558 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_store_0:
559 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
560 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
561 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
562 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
563 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
564 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s2, s[2:3], 0x0
565 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
566 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
567 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 nt sc1
568 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
570 ; GFX940-TGSPLIT-LABEL: global_nontemporal_store_0:
571 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
572 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
573 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
574 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
575 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
576 ; GFX940-TGSPLIT-NEXT:    s_load_dword s2, s[2:3], 0x0
577 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
578 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
579 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 nt sc1
580 ; GFX940-TGSPLIT-NEXT:    s_endpgm
582 ; GFX11-WGP-LABEL: global_nontemporal_store_0:
583 ; GFX11-WGP:       ; %bb.0: ; %entry
584 ; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
585 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
586 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0
587 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
588 ; GFX11-WGP-NEXT:    s_load_b32 s2, s[2:3], 0x0
589 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
590 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s2
591 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1] glc slc dlc
592 ; GFX11-WGP-NEXT:    s_endpgm
594 ; GFX11-CU-LABEL: global_nontemporal_store_0:
595 ; GFX11-CU:       ; %bb.0: ; %entry
596 ; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
597 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
598 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0
599 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
600 ; GFX11-CU-NEXT:    s_load_b32 s2, s[2:3], 0x0
601 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
602 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s2
603 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1] glc slc dlc
604 ; GFX11-CU-NEXT:    s_endpgm
606 ; GFX12-WGP-LABEL: global_nontemporal_store_0:
607 ; GFX12-WGP:       ; %bb.0: ; %entry
608 ; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
609 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
610 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0
611 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
612 ; GFX12-WGP-NEXT:    s_load_b32 s2, s[2:3], 0x0
613 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
614 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s2
615 ; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1] th:TH_STORE_NT
616 ; GFX12-WGP-NEXT:    s_endpgm
618 ; GFX12-CU-LABEL: global_nontemporal_store_0:
619 ; GFX12-CU:       ; %bb.0: ; %entry
620 ; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
621 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
622 ; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0
623 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
624 ; GFX12-CU-NEXT:    s_load_b32 s2, s[2:3], 0x0
625 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
626 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s2
627 ; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1] th:TH_STORE_NT
628 ; GFX12-CU-NEXT:    s_endpgm
629     ptr addrspace(1) %in, ptr addrspace(1) %out) {
630 entry:
631   %val = load i32, ptr addrspace(1) %in, align 4
632   store i32 %val, ptr addrspace(1) %out, !nontemporal !0
633   ret void
636 define amdgpu_kernel void @global_nontemporal_store_1(
637 ; GFX6-LABEL: global_nontemporal_store_1:
638 ; GFX6:       ; %bb.0: ; %entry
639 ; GFX6-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
640 ; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x2
641 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
642 ; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x0
643 ; GFX6-NEXT:    s_mov_b32 s6, 0x100f000
644 ; GFX6-NEXT:    s_mov_b32 s10, 0
645 ; GFX6-NEXT:    ; kill: def $sgpr10 killed $sgpr10 def $sgpr10_sgpr11
646 ; GFX6-NEXT:    s_mov_b32 s11, s6
647 ; GFX6-NEXT:    ; kill: def $sgpr4_sgpr5 killed $sgpr4_sgpr5 def $sgpr4_sgpr5_sgpr6_sgpr7
648 ; GFX6-NEXT:    s_mov_b64 s[6:7], s[10:11]
649 ; GFX6-NEXT:    s_mov_b32 s9, 2
650 ; GFX6-NEXT:    v_lshlrev_b32_e64 v1, s9, v0
651 ; GFX6-NEXT:    s_mov_b32 s9, 0
652 ; GFX6-NEXT:    ; implicit-def: $sgpr9
653 ; GFX6-NEXT:    v_mov_b32_e32 v0, 0
654 ; GFX6-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec
655 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
656 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
657 ; GFX6-NEXT:    v_mov_b32_e32 v0, s8
658 ; GFX6-NEXT:    buffer_store_dword v0, v[1:2], s[4:7], 0 addr64 glc slc
659 ; GFX6-NEXT:    s_endpgm
661 ; GFX7-LABEL: global_nontemporal_store_1:
662 ; GFX7:       ; %bb.0: ; %entry
663 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0
664 ; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[8:9], 0x2
665 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
666 ; GFX7-NEXT:    s_load_dword s4, s[4:5], 0x0
667 ; GFX7-NEXT:    s_mov_b32 s5, 2
668 ; GFX7-NEXT:    v_lshlrev_b32_e64 v1, s5, v0
669 ; GFX7-NEXT:    s_mov_b32 s5, 0
670 ; GFX7-NEXT:    ; implicit-def: $sgpr5
671 ; GFX7-NEXT:    v_mov_b32_e32 v0, 0
672 ; GFX7-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec
673 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
674 ; GFX7-NEXT:    s_mov_b32 s6, s8
675 ; GFX7-NEXT:    v_mov_b32_e32 v0, v1
676 ; GFX7-NEXT:    s_mov_b32 s5, s9
677 ; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec
678 ; GFX7-NEXT:    v_add_i32_e64 v0, s[6:7], s6, v0
679 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
680 ; GFX7-NEXT:    v_addc_u32_e64 v2, s[6:7], v1, v2, s[6:7]
681 ; GFX7-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec
682 ; GFX7-NEXT:    v_mov_b32_e32 v1, v2
683 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
684 ; GFX7-NEXT:    v_mov_b32_e32 v2, s4
685 ; GFX7-NEXT:    flat_store_dword v[0:1], v2 glc slc
686 ; GFX7-NEXT:    s_endpgm
688 ; GFX10-WGP-LABEL: global_nontemporal_store_1:
689 ; GFX10-WGP:       ; %bb.0: ; %entry
690 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
691 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
692 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
693 ; GFX10-WGP-NEXT:    s_load_dword s6, s[6:7], 0x0
694 ; GFX10-WGP-NEXT:    s_mov_b32 s7, 2
695 ; GFX10-WGP-NEXT:    v_lshlrev_b32_e64 v0, s7, v0
696 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
697 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s6
698 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5] glc slc
699 ; GFX10-WGP-NEXT:    s_endpgm
701 ; GFX10-CU-LABEL: global_nontemporal_store_1:
702 ; GFX10-CU:       ; %bb.0: ; %entry
703 ; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
704 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
705 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
706 ; GFX10-CU-NEXT:    s_load_dword s6, s[6:7], 0x0
707 ; GFX10-CU-NEXT:    s_mov_b32 s7, 2
708 ; GFX10-CU-NEXT:    v_lshlrev_b32_e64 v0, s7, v0
709 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
710 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s6
711 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5] glc slc
712 ; GFX10-CU-NEXT:    s_endpgm
714 ; SKIP-CACHE-INV-LABEL: global_nontemporal_store_1:
715 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
716 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
717 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
718 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
719 ; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x0
720 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, 0xf000
721 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0
722 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7
723 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s2
724 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0_sgpr1 killed $sgpr0_sgpr1 def $sgpr0_sgpr1_sgpr2_sgpr3
725 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[6:7]
726 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 2
727 ; SKIP-CACHE-INV-NEXT:    v_lshlrev_b32_e64 v1, s5, v0
728 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0
729 ; SKIP-CACHE-INV-NEXT:    ; implicit-def: $sgpr5
730 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, 0
731 ; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec
732 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, v0
733 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
734 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s4
735 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, v[1:2], s[0:3], 0 addr64 glc slc
736 ; SKIP-CACHE-INV-NEXT:    s_endpgm
738 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_store_1:
739 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
740 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
741 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
742 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
743 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[6:7], 0x0
744 ; GFX90A-NOTTGSPLIT-NEXT:    s_mov_b32 s7, 0x3ff
745 ; GFX90A-NOTTGSPLIT-NEXT:    v_and_b32_e64 v0, v0, s7
746 ; GFX90A-NOTTGSPLIT-NEXT:    s_mov_b32 s7, 2
747 ; GFX90A-NOTTGSPLIT-NEXT:    v_lshlrev_b32_e64 v0, s7, v0
748 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
749 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
750 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5] glc slc
751 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
753 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_store_1:
754 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
755 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
756 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
757 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
758 ; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[6:7], 0x0
759 ; GFX90A-TGSPLIT-NEXT:    s_mov_b32 s7, 0x3ff
760 ; GFX90A-TGSPLIT-NEXT:    v_and_b32_e64 v0, v0, s7
761 ; GFX90A-TGSPLIT-NEXT:    s_mov_b32 s7, 2
762 ; GFX90A-TGSPLIT-NEXT:    v_lshlrev_b32_e64 v0, s7, v0
763 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
764 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s6
765 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5] glc slc
766 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
768 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_store_1:
769 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
770 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
771 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
772 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
773 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dword s2, s[2:3], 0x0
774 ; GFX940-NOTTGSPLIT-NEXT:    s_mov_b32 s3, 0x3ff
775 ; GFX940-NOTTGSPLIT-NEXT:    v_and_b32_e64 v0, v0, s3
776 ; GFX940-NOTTGSPLIT-NEXT:    s_mov_b32 s3, 2
777 ; GFX940-NOTTGSPLIT-NEXT:    v_lshlrev_b32_e64 v0, s3, v0
778 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
779 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
780 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 nt sc1
781 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
783 ; GFX940-TGSPLIT-LABEL: global_nontemporal_store_1:
784 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
785 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
786 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
787 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
788 ; GFX940-TGSPLIT-NEXT:    s_load_dword s2, s[2:3], 0x0
789 ; GFX940-TGSPLIT-NEXT:    s_mov_b32 s3, 0x3ff
790 ; GFX940-TGSPLIT-NEXT:    v_and_b32_e64 v0, v0, s3
791 ; GFX940-TGSPLIT-NEXT:    s_mov_b32 s3, 2
792 ; GFX940-TGSPLIT-NEXT:    v_lshlrev_b32_e64 v0, s3, v0
793 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
794 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s2
795 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 nt sc1
796 ; GFX940-TGSPLIT-NEXT:    s_endpgm
798 ; GFX11-WGP-LABEL: global_nontemporal_store_1:
799 ; GFX11-WGP:       ; %bb.0: ; %entry
800 ; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
801 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
802 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
803 ; GFX11-WGP-NEXT:    s_load_b32 s2, s[2:3], 0x0
804 ; GFX11-WGP-NEXT:    s_mov_b32 s3, 0x3ff
805 ; GFX11-WGP-NEXT:    v_and_b32_e64 v0, v0, s3
806 ; GFX11-WGP-NEXT:    s_mov_b32 s3, 2
807 ; GFX11-WGP-NEXT:    v_lshlrev_b32_e64 v0, s3, v0
808 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
809 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s2
810 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1] glc slc dlc
811 ; GFX11-WGP-NEXT:    s_endpgm
813 ; GFX11-CU-LABEL: global_nontemporal_store_1:
814 ; GFX11-CU:       ; %bb.0: ; %entry
815 ; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
816 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
817 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
818 ; GFX11-CU-NEXT:    s_load_b32 s2, s[2:3], 0x0
819 ; GFX11-CU-NEXT:    s_mov_b32 s3, 0x3ff
820 ; GFX11-CU-NEXT:    v_and_b32_e64 v0, v0, s3
821 ; GFX11-CU-NEXT:    s_mov_b32 s3, 2
822 ; GFX11-CU-NEXT:    v_lshlrev_b32_e64 v0, s3, v0
823 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
824 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s2
825 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1] glc slc dlc
826 ; GFX11-CU-NEXT:    s_endpgm
828 ; GFX12-WGP-LABEL: global_nontemporal_store_1:
829 ; GFX12-WGP:       ; %bb.0: ; %entry
830 ; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
831 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
832 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
833 ; GFX12-WGP-NEXT:    s_load_b32 s2, s[2:3], 0x0
834 ; GFX12-WGP-NEXT:    s_mov_b32 s3, 0x3ff
835 ; GFX12-WGP-NEXT:    s_wait_alu 0xfffe
836 ; GFX12-WGP-NEXT:    v_and_b32_e64 v0, v0, s3
837 ; GFX12-WGP-NEXT:    s_mov_b32 s3, 2
838 ; GFX12-WGP-NEXT:    s_wait_alu 0xfffe
839 ; GFX12-WGP-NEXT:    v_lshlrev_b32_e64 v0, s3, v0
840 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
841 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s2
842 ; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1] th:TH_STORE_NT
843 ; GFX12-WGP-NEXT:    s_endpgm
845 ; GFX12-CU-LABEL: global_nontemporal_store_1:
846 ; GFX12-CU:       ; %bb.0: ; %entry
847 ; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
848 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
849 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
850 ; GFX12-CU-NEXT:    s_load_b32 s2, s[2:3], 0x0
851 ; GFX12-CU-NEXT:    s_mov_b32 s3, 0x3ff
852 ; GFX12-CU-NEXT:    s_wait_alu 0xfffe
853 ; GFX12-CU-NEXT:    v_and_b32_e64 v0, v0, s3
854 ; GFX12-CU-NEXT:    s_mov_b32 s3, 2
855 ; GFX12-CU-NEXT:    s_wait_alu 0xfffe
856 ; GFX12-CU-NEXT:    v_lshlrev_b32_e64 v0, s3, v0
857 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
858 ; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s2
859 ; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1] th:TH_STORE_NT
860 ; GFX12-CU-NEXT:    s_endpgm
861     ptr addrspace(1) %in, ptr addrspace(1) %out) {
862 entry:
863   %tid = call i32 @llvm.amdgcn.workitem.id.x()
864   %val = load i32, ptr addrspace(1) %in, align 4
865   %out.gep = getelementptr inbounds i32, ptr addrspace(1) %out, i32 %tid
866   store i32 %val, ptr addrspace(1) %out.gep, !nontemporal !0
867   ret void
870 define amdgpu_kernel void @global_nontemporal_volatile_load(
871 ; GFX6-LABEL: global_nontemporal_volatile_load:
872 ; GFX6:       ; %bb.0: ; %entry
873 ; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]
874 ; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x0
875 ; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2
876 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
877 ; GFX6-NEXT:    s_mov_b32 s6, s9
878 ; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr9
879 ; GFX6-NEXT:    s_mov_b32 s12, 0x100f000
880 ; GFX6-NEXT:    s_mov_b32 s13, -1
881 ; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11
882 ; GFX6-NEXT:    s_mov_b32 s9, s6
883 ; GFX6-NEXT:    s_mov_b32 s10, s13
884 ; GFX6-NEXT:    s_mov_b32 s11, s12
885 ; GFX6-NEXT:    s_mov_b32 s14, s5
886 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5
887 ; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7
888 ; GFX6-NEXT:    s_mov_b32 s5, s14
889 ; GFX6-NEXT:    s_mov_b32 s6, s13
890 ; GFX6-NEXT:    s_mov_b32 s7, s12
891 ; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 0 glc
892 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
893 ; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0
894 ; GFX6-NEXT:    s_endpgm
896 ; GFX7-LABEL: global_nontemporal_volatile_load:
897 ; GFX7:       ; %bb.0: ; %entry
898 ; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
899 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x2
900 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
901 ; GFX7-NEXT:    v_mov_b32_e32 v0, s6
902 ; GFX7-NEXT:    v_mov_b32_e32 v1, s7
903 ; GFX7-NEXT:    flat_load_dword v2, v[0:1] glc
904 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
905 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
906 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
907 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
908 ; GFX7-NEXT:    s_endpgm
910 ; GFX10-WGP-LABEL: global_nontemporal_volatile_load:
911 ; GFX10-WGP:       ; %bb.0: ; %entry
912 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0
913 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
914 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
915 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
916 ; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7] glc dlc
917 ; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)
918 ; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]
919 ; GFX10-WGP-NEXT:    s_endpgm
921 ; GFX10-CU-LABEL: global_nontemporal_volatile_load:
922 ; GFX10-CU:       ; %bb.0: ; %entry
923 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0
924 ; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
925 ; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
926 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
927 ; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7] glc dlc
928 ; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)
929 ; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]
930 ; GFX10-CU-NEXT:    s_endpgm
932 ; SKIP-CACHE-INV-LABEL: global_nontemporal_volatile_load:
933 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
934 ; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]
935 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
936 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
937 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
938 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s5
939 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5
940 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf000
941 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -1
942 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7
943 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s2
944 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s9
945 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s8
946 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s1
947 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1
948 ; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
949 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s10
950 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s9
951 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s8
952 ; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 0 glc
953 ; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)
954 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0
955 ; SKIP-CACHE-INV-NEXT:    s_endpgm
957 ; GFX90A-NOTTGSPLIT-LABEL: global_nontemporal_volatile_load:
958 ; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry
959 ; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
960 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
961 ; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
962 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
963 ; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7] glc
964 ; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)
965 ; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
966 ; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm
968 ; GFX90A-TGSPLIT-LABEL: global_nontemporal_volatile_load:
969 ; GFX90A-TGSPLIT:       ; %bb.0: ; %entry
970 ; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
971 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0
972 ; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8
973 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
974 ; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7] glc
975 ; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)
976 ; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]
977 ; GFX90A-TGSPLIT-NEXT:    s_endpgm
979 ; GFX940-NOTTGSPLIT-LABEL: global_nontemporal_volatile_load:
980 ; GFX940-NOTTGSPLIT:       ; %bb.0: ; %entry
981 ; GFX940-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
982 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
983 ; GFX940-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
984 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
985 ; GFX940-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3] sc0 sc1
986 ; GFX940-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)
987 ; GFX940-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
988 ; GFX940-NOTTGSPLIT-NEXT:    s_endpgm
990 ; GFX940-TGSPLIT-LABEL: global_nontemporal_volatile_load:
991 ; GFX940-TGSPLIT:       ; %bb.0: ; %entry
992 ; GFX940-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0
993 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0
994 ; GFX940-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
995 ; GFX940-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)
996 ; GFX940-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3] sc0 sc1
997 ; GFX940-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)
998 ; GFX940-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
999 ; GFX940-TGSPLIT-NEXT:    s_endpgm
1001 ; GFX11-WGP-LABEL: global_nontemporal_volatile_load:
1002 ; GFX11-WGP:       ; %bb.0: ; %entry
1003 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0
1004 ; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
1005 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
1006 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
1007 ; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3] glc dlc
1008 ; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)
1009 ; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
1010 ; GFX11-WGP-NEXT:    s_endpgm
1012 ; GFX11-CU-LABEL: global_nontemporal_volatile_load:
1013 ; GFX11-CU:       ; %bb.0: ; %entry
1014 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0
1015 ; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
1016 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
1017 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
1018 ; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3] glc dlc
1019 ; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)
1020 ; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
1021 ; GFX11-CU-NEXT:    s_endpgm
1023 ; GFX12-WGP-LABEL: global_nontemporal_volatile_load:
1024 ; GFX12-WGP:       ; %bb.0: ; %entry
1025 ; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0
1026 ; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
1027 ; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
1028 ; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0
1029 ; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3] th:TH_LOAD_NT scope:SCOPE_SYS
1030 ; GFX12-WGP-NEXT:    s_wait_bvhcnt 0x0
1031 ; GFX12-WGP-NEXT:    s_wait_samplecnt 0x0
1032 ; GFX12-WGP-NEXT:    s_wait_loadcnt 0x0
1033 ; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]
1034 ; GFX12-WGP-NEXT:    s_endpgm
1036 ; GFX12-CU-LABEL: global_nontemporal_volatile_load:
1037 ; GFX12-CU:       ; %bb.0: ; %entry
1038 ; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0
1039 ; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0
1040 ; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8
1041 ; GFX12-CU-NEXT:    s_wait_kmcnt 0x0
1042 ; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3] th:TH_LOAD_NT scope:SCOPE_SYS
1043 ; GFX12-CU-NEXT:    s_wait_bvhcnt 0x0
1044 ; GFX12-CU-NEXT:    s_wait_samplecnt 0x0
1045 ; GFX12-CU-NEXT:    s_wait_loadcnt 0x0
1046 ; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]
1047 ; GFX12-CU-NEXT:    s_endpgm
1048     ptr addrspace(1) %in, ptr addrspace(1) %out) {
1049 entry:
1050   %val = load volatile i32, ptr addrspace(1) %in, align 4, !nontemporal !0
1051   store i32 %val, ptr addrspace(1) %out
1052   ret void
1055 !0 = !{i32 1}
1056 declare i32 @llvm.amdgcn.workitem.id.x()