@@ -88,6 +88,122 @@ define void @flat_to_private_nonnull_arg(ptr nonnull %ptr) {
88
88
ret void
89
89
}
90
90
91
+ define void @local_to_flat_nonnull_load (ptr %p ) {
92
+ ; OPT-LABEL: define void @local_to_flat_nonnull_load(
93
+ ; OPT-SAME: ptr [[P:%.*]]) {
94
+ ; OPT-NEXT: [[PTR:%.*]] = load ptr addrspace(3), ptr [[P]], align 4, !nonnull [[META0:![0-9]+]]
95
+ ; OPT-NEXT: [[X:%.*]] = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3) [[PTR]])
96
+ ; OPT-NEXT: store volatile i32 7, ptr [[X]], align 4
97
+ ; OPT-NEXT: ret void
98
+ ;
99
+ ; ASM-LABEL: local_to_flat_nonnull_load:
100
+ ; ASM: ; %bb.0:
101
+ ; ASM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
102
+ ; ASM-NEXT: flat_load_dword v0, v[0:1]
103
+ ; ASM-NEXT: s_mov_b64 s[4:5], src_shared_base
104
+ ; ASM-NEXT: v_mov_b32_e32 v1, s5
105
+ ; ASM-NEXT: v_mov_b32_e32 v2, 7
106
+ ; ASM-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
107
+ ; ASM-NEXT: flat_store_dword v[0:1], v2
108
+ ; ASM-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
109
+ ; ASM-NEXT: s_setpc_b64 s[30:31]
110
+ %ptr = load ptr addrspace (3 ), ptr %p , !nonnull !{}
111
+ %x = addrspacecast ptr addrspace (3 ) %ptr to ptr
112
+ store volatile i32 7 , ptr %x
113
+ ret void
114
+ }
115
+
116
+ define void @private_to_flat_nonnull_load (ptr %p ) {
117
+ ; OPT-LABEL: define void @private_to_flat_nonnull_load(
118
+ ; OPT-SAME: ptr [[P:%.*]]) {
119
+ ; OPT-NEXT: [[PTR:%.*]] = load ptr addrspace(5), ptr [[P]], align 4, !nonnull [[META0]]
120
+ ; OPT-NEXT: [[X:%.*]] = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p5(ptr addrspace(5) [[PTR]])
121
+ ; OPT-NEXT: store volatile i32 7, ptr [[X]], align 4
122
+ ; OPT-NEXT: ret void
123
+ ;
124
+ ; ASM-LABEL: private_to_flat_nonnull_load:
125
+ ; ASM: ; %bb.0:
126
+ ; ASM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
127
+ ; ASM-NEXT: flat_load_dword v0, v[0:1]
128
+ ; ASM-NEXT: s_mov_b64 s[4:5], src_private_base
129
+ ; ASM-NEXT: v_mov_b32_e32 v1, s5
130
+ ; ASM-NEXT: v_mov_b32_e32 v2, 7
131
+ ; ASM-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
132
+ ; ASM-NEXT: flat_store_dword v[0:1], v2
133
+ ; ASM-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
134
+ ; ASM-NEXT: s_setpc_b64 s[30:31]
135
+ %ptr = load ptr addrspace (5 ), ptr %p , !nonnull !{}
136
+ %x = addrspacecast ptr addrspace (5 ) %ptr to ptr
137
+ store volatile i32 7 , ptr %x
138
+ ret void
139
+ }
140
+
141
+ define void @flat_to_local_nonnull_load (ptr %p ) {
142
+ ; OPT-LABEL: define void @flat_to_local_nonnull_load(
143
+ ; OPT-SAME: ptr [[P:%.*]]) {
144
+ ; OPT-NEXT: [[PTR:%.*]] = load ptr, ptr [[P]], align 8, !nonnull [[META0]]
145
+ ; OPT-NEXT: [[X:%.*]] = call ptr addrspace(3) @llvm.amdgcn.addrspacecast.nonnull.p3.p0(ptr [[PTR]])
146
+ ; OPT-NEXT: store volatile i32 7, ptr addrspace(3) [[X]], align 4
147
+ ; OPT-NEXT: ret void
148
+ ;
149
+ ; DAGISEL-ASM-LABEL: flat_to_local_nonnull_load:
150
+ ; DAGISEL-ASM: ; %bb.0:
151
+ ; DAGISEL-ASM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
152
+ ; DAGISEL-ASM-NEXT: flat_load_dword v0, v[0:1]
153
+ ; DAGISEL-ASM-NEXT: v_mov_b32_e32 v1, 7
154
+ ; DAGISEL-ASM-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
155
+ ; DAGISEL-ASM-NEXT: ds_write_b32 v0, v1
156
+ ; DAGISEL-ASM-NEXT: s_waitcnt lgkmcnt(0)
157
+ ; DAGISEL-ASM-NEXT: s_setpc_b64 s[30:31]
158
+ ;
159
+ ; GISEL-ASM-LABEL: flat_to_local_nonnull_load:
160
+ ; GISEL-ASM: ; %bb.0:
161
+ ; GISEL-ASM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
162
+ ; GISEL-ASM-NEXT: flat_load_dwordx2 v[0:1], v[0:1]
163
+ ; GISEL-ASM-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
164
+ ; GISEL-ASM-NEXT: v_mov_b32_e32 v1, 7
165
+ ; GISEL-ASM-NEXT: ds_write_b32 v0, v1
166
+ ; GISEL-ASM-NEXT: s_waitcnt lgkmcnt(0)
167
+ ; GISEL-ASM-NEXT: s_setpc_b64 s[30:31]
168
+ %ptr = load ptr , ptr %p , !nonnull !{}
169
+ %x = addrspacecast ptr %ptr to ptr addrspace (3 )
170
+ store volatile i32 7 , ptr addrspace (3 ) %x
171
+ ret void
172
+ }
173
+
174
+ define void @flat_to_private_nonnull_load (ptr %p ) {
175
+ ; OPT-LABEL: define void @flat_to_private_nonnull_load(
176
+ ; OPT-SAME: ptr [[P:%.*]]) {
177
+ ; OPT-NEXT: [[PTR:%.*]] = load ptr, ptr [[P]], align 8, !nonnull [[META0]]
178
+ ; OPT-NEXT: [[X:%.*]] = call ptr addrspace(5) @llvm.amdgcn.addrspacecast.nonnull.p5.p0(ptr [[PTR]])
179
+ ; OPT-NEXT: store volatile i32 7, ptr addrspace(5) [[X]], align 4
180
+ ; OPT-NEXT: ret void
181
+ ;
182
+ ; DAGISEL-ASM-LABEL: flat_to_private_nonnull_load:
183
+ ; DAGISEL-ASM: ; %bb.0:
184
+ ; DAGISEL-ASM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
185
+ ; DAGISEL-ASM-NEXT: flat_load_dword v0, v[0:1]
186
+ ; DAGISEL-ASM-NEXT: v_mov_b32_e32 v1, 7
187
+ ; DAGISEL-ASM-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
188
+ ; DAGISEL-ASM-NEXT: buffer_store_dword v1, v0, s[0:3], 0 offen
189
+ ; DAGISEL-ASM-NEXT: s_waitcnt vmcnt(0)
190
+ ; DAGISEL-ASM-NEXT: s_setpc_b64 s[30:31]
191
+ ;
192
+ ; GISEL-ASM-LABEL: flat_to_private_nonnull_load:
193
+ ; GISEL-ASM: ; %bb.0:
194
+ ; GISEL-ASM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
195
+ ; GISEL-ASM-NEXT: flat_load_dwordx2 v[0:1], v[0:1]
196
+ ; GISEL-ASM-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
197
+ ; GISEL-ASM-NEXT: v_mov_b32_e32 v1, 7
198
+ ; GISEL-ASM-NEXT: buffer_store_dword v1, v0, s[0:3], 0 offen
199
+ ; GISEL-ASM-NEXT: s_waitcnt vmcnt(0)
200
+ ; GISEL-ASM-NEXT: s_setpc_b64 s[30:31]
201
+ %ptr = load ptr , ptr %p , !nonnull !{}
202
+ %x = addrspacecast ptr %ptr to ptr addrspace (5 )
203
+ store volatile i32 7 , ptr addrspace (5 ) %x
204
+ ret void
205
+ }
206
+
91
207
define void @private_alloca_to_flat (ptr %ptr ) {
92
208
; OPT-LABEL: define void @private_alloca_to_flat(
93
209
; OPT-SAME: ptr [[PTR:%.*]]) {
@@ -218,15 +334,15 @@ define void @recursive_phis(i1 %cond, ptr addrspace(5) %ptr) {
218
334
; DAGISEL-ASM-NEXT: s_mov_b64 s[4:5], 0
219
335
; DAGISEL-ASM-NEXT: s_mov_b64 s[8:9], src_private_base
220
336
; DAGISEL-ASM-NEXT: v_mov_b32_e32 v2, 7
221
- ; DAGISEL-ASM-NEXT: .LBB7_3 : ; %finally
337
+ ; DAGISEL-ASM-NEXT: .LBB11_3 : ; %finally
222
338
; DAGISEL-ASM-NEXT: ; =>This Inner Loop Header: Depth=1
223
339
; DAGISEL-ASM-NEXT: s_and_b64 s[10:11], exec, s[6:7]
224
340
; DAGISEL-ASM-NEXT: s_or_b64 s[4:5], s[10:11], s[4:5]
225
341
; DAGISEL-ASM-NEXT: v_mov_b32_e32 v1, s9
226
342
; DAGISEL-ASM-NEXT: flat_store_dword v[0:1], v2
227
343
; DAGISEL-ASM-NEXT: s_waitcnt vmcnt(0)
228
344
; DAGISEL-ASM-NEXT: s_andn2_b64 exec, exec, s[4:5]
229
- ; DAGISEL-ASM-NEXT: s_cbranch_execnz .LBB7_3
345
+ ; DAGISEL-ASM-NEXT: s_cbranch_execnz .LBB11_3
230
346
; DAGISEL-ASM-NEXT: ; %bb.4: ; %end
231
347
; DAGISEL-ASM-NEXT: s_or_b64 exec, exec, s[4:5]
232
348
; DAGISEL-ASM-NEXT: s_waitcnt lgkmcnt(0)
@@ -249,14 +365,14 @@ define void @recursive_phis(i1 %cond, ptr addrspace(5) %ptr) {
249
365
; GISEL-ASM-NEXT: s_mov_b64 s[6:7], 0
250
366
; GISEL-ASM-NEXT: v_mov_b32_e32 v1, s9
251
367
; GISEL-ASM-NEXT: v_mov_b32_e32 v2, 7
252
- ; GISEL-ASM-NEXT: .LBB7_3 : ; %finally
368
+ ; GISEL-ASM-NEXT: .LBB11_3 : ; %finally
253
369
; GISEL-ASM-NEXT: ; =>This Inner Loop Header: Depth=1
254
370
; GISEL-ASM-NEXT: s_and_b64 s[8:9], exec, s[4:5]
255
371
; GISEL-ASM-NEXT: s_or_b64 s[6:7], s[8:9], s[6:7]
256
372
; GISEL-ASM-NEXT: flat_store_dword v[0:1], v2
257
373
; GISEL-ASM-NEXT: s_waitcnt vmcnt(0)
258
374
; GISEL-ASM-NEXT: s_andn2_b64 exec, exec, s[6:7]
259
- ; GISEL-ASM-NEXT: s_cbranch_execnz .LBB7_3
375
+ ; GISEL-ASM-NEXT: s_cbranch_execnz .LBB11_3
260
376
; GISEL-ASM-NEXT: ; %bb.4: ; %end
261
377
; GISEL-ASM-NEXT: s_or_b64 exec, exec, s[6:7]
262
378
; GISEL-ASM-NEXT: s_waitcnt lgkmcnt(0)
0 commit comments