Skip to content

Commit 8feb676

Browse files
authored
[AMDGPU] Take BUF instructions into account in mayAccessScratchThroughFlat (#170274)
BUF instructions can access the scratch address space, so SIInsertWaitCnt needs to be able to track the SCRATCH_WRITE_ACCESS event for such BUF instructions. The release-vgprs.mir test had to be updated because BUF instructions w/o a MMO are now tracked as a SCRATCH_WRITE_ACCESS. I added a MMO that touches global to keep the test result unchanged. I also added a couple of testcases with no MMO to test the corrected behavior.
1 parent 5ccf8c9 commit 8feb676

File tree

4 files changed

+56
-29
lines changed

4 files changed

+56
-29
lines changed

llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -552,9 +552,7 @@ class SIInsertWaitcnts {
552552
return VMEM_ACCESS;
553553
if (Inst.mayStore() &&
554554
(!Inst.mayLoad() || SIInstrInfo::isAtomicNoRet(Inst))) {
555-
// FLAT and SCRATCH instructions may access scratch. Other VMEM
556-
// instructions do not.
557-
if (TII->mayAccessScratchThroughFlat(Inst))
555+
if (TII->mayAccessScratch(Inst))
558556
return SCRATCH_WRITE_ACCESS;
559557
return VMEM_WRITE_ACCESS;
560558
}

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4399,8 +4399,9 @@ bool SIInstrInfo::isAlwaysGDS(uint16_t Opcode) const {
43994399
Opcode == AMDGPU::DS_SUB_GS_REG_RTN || isGWS(Opcode);
44004400
}
44014401

4402-
bool SIInstrInfo::mayAccessScratchThroughFlat(const MachineInstr &MI) const {
4403-
if (!isFLAT(MI) || isFLATGlobal(MI))
4402+
bool SIInstrInfo::mayAccessScratch(const MachineInstr &MI) const {
4403+
// Instructions that access scratch use FLAT encoding or BUF encodings.
4404+
if ((!isFLAT(MI) || isFLATGlobal(MI)) && !isBUF(MI))
44044405
return false;
44054406

44064407
// If scratch is not initialized, we can never access it.

llvm/lib/Target/AMDGPU/SIInstrInfo.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -694,11 +694,11 @@ class SIInstrInfo final : public AMDGPUGenInstrInfo {
694694
return get(Opcode).TSFlags & SIInstrFlags::FLAT;
695695
}
696696

697-
/// \returns true for SCRATCH_ instructions, or FLAT_ instructions with
698-
/// SCRATCH_ memory operands.
697+
/// \returns true for SCRATCH_ instructions, or FLAT/BUF instructions unless
698+
/// the MMOs do not include scratch.
699699
/// Conservatively correct; will return true if \p MI cannot be proven
700700
/// to not hit scratch.
701-
bool mayAccessScratchThroughFlat(const MachineInstr &MI) const;
701+
bool mayAccessScratch(const MachineInstr &MI) const;
702702

703703
/// \returns true for FLAT instructions that can access VMEM.
704704
bool mayAccessVMEMThroughFlat(const MachineInstr &MI) const;

llvm/test/CodeGen/AMDGPU/release-vgprs.mir

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
define amdgpu_cs void @with_calls() { ret void }
2626
define fastcc void @with_tail_calls() { ret void }
2727
define amdgpu_cs void @waveslot_limited() { ret void }
28+
define amdgpu_ps void @tbuffer_without_mmo_may_hit_scratch() { ret void }
29+
define amdgpu_ps void @buffer_without_mmo_may_hit_scratch() { ret void }
2830
...
2931

3032
---
@@ -34,15 +36,15 @@ machineFunctionInfo:
3436
body: |
3537
bb.0:
3638
; OPT-LABEL: name: tbuffer_store1
37-
; OPT: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec
39+
; OPT: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
3840
; OPT-NEXT: S_NOP 0
3941
; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
4042
; OPT-NEXT: S_ENDPGM 0, implicit $vgpr97
4143
;
4244
; NOOPT-LABEL: name: tbuffer_store1
43-
; NOOPT: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec
45+
; NOOPT: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
4446
; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr97
45-
TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec
47+
TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
4648
S_ENDPGM 0, implicit $vgpr97
4749
...
4850

@@ -107,15 +109,15 @@ machineFunctionInfo:
107109
body: |
108110
bb.0:
109111
; OPT-LABEL: name: buffer_store_format
110-
; OPT: BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec
112+
; OPT: BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
111113
; OPT-NEXT: S_NOP 0
112114
; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
113115
; OPT-NEXT: S_ENDPGM 0, implicit $vgpr97
114116
;
115117
; NOOPT-LABEL: name: buffer_store_format
116-
; NOOPT: BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec
118+
; NOOPT: BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
117119
; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr97
118-
BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec
120+
BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
119121
S_ENDPGM 0, implicit $vgpr97
120122
...
121123

@@ -218,15 +220,15 @@ body: |
218220
; OPT: bb.0:
219221
; OPT-NEXT: successors: %bb.2(0x80000000)
220222
; OPT-NEXT: {{ $}}
221-
; OPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
223+
; OPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
222224
; OPT-NEXT: $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
223225
; OPT-NEXT: S_BRANCH %bb.2
224226
; OPT-NEXT: {{ $}}
225227
; OPT-NEXT: bb.1:
226228
; OPT-NEXT: successors: %bb.2(0x80000000)
227229
; OPT-NEXT: {{ $}}
228230
; OPT-NEXT: $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
229-
; OPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
231+
; OPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
230232
; OPT-NEXT: S_BRANCH %bb.2
231233
; OPT-NEXT: {{ $}}
232234
; OPT-NEXT: bb.2:
@@ -238,31 +240,31 @@ body: |
238240
; NOOPT: bb.0:
239241
; NOOPT-NEXT: successors: %bb.2(0x80000000)
240242
; NOOPT-NEXT: {{ $}}
241-
; NOOPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
243+
; NOOPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
242244
; NOOPT-NEXT: $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
243245
; NOOPT-NEXT: S_BRANCH %bb.2
244246
; NOOPT-NEXT: {{ $}}
245247
; NOOPT-NEXT: bb.1:
246248
; NOOPT-NEXT: successors: %bb.2(0x80000000)
247249
; NOOPT-NEXT: {{ $}}
248250
; NOOPT-NEXT: $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
249-
; NOOPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
251+
; NOOPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
250252
; NOOPT-NEXT: S_BRANCH %bb.2
251253
; NOOPT-NEXT: {{ $}}
252254
; NOOPT-NEXT: bb.2:
253255
; NOOPT-NEXT: S_ENDPGM 0, implicit $vgpr97
254256
bb.0:
255257
successors: %bb.2
256258
257-
TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
259+
TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
258260
$vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
259261
S_BRANCH %bb.2
260262
261263
bb.1:
262264
successors: %bb.2
263265
264266
$vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
265-
TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
267+
TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
266268
S_BRANCH %bb.2
267269
268270
bb.2:
@@ -281,7 +283,7 @@ body: |
281283
; OPT-NEXT: successors: %bb.2(0x80000000)
282284
; OPT-NEXT: {{ $}}
283285
; OPT-NEXT: $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
284-
; OPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
286+
; OPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
285287
; OPT-NEXT: S_BRANCH %bb.2
286288
; OPT-NEXT: {{ $}}
287289
; OPT-NEXT: bb.1:
@@ -311,7 +313,7 @@ body: |
311313
; NOOPT-NEXT: successors: %bb.2(0x80000000)
312314
; NOOPT-NEXT: {{ $}}
313315
; NOOPT-NEXT: $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
314-
; NOOPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
316+
; NOOPT-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
315317
; NOOPT-NEXT: S_BRANCH %bb.2
316318
; NOOPT-NEXT: {{ $}}
317319
; NOOPT-NEXT: bb.1:
@@ -337,7 +339,7 @@ body: |
337339
successors: %bb.2
338340
339341
$vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
340-
TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
342+
TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
341343
S_BRANCH %bb.2
342344
343345
bb.1:
@@ -408,14 +410,14 @@ body: |
408410
; OPT: bb.0:
409411
; OPT-NEXT: successors: %bb.1(0x80000000)
410412
; OPT-NEXT: {{ $}}
411-
; OPT-NEXT: renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
413+
; OPT-NEXT: renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (volatile load (s32), addrspace 1)
412414
; OPT-NEXT: S_BRANCH %bb.1
413415
; OPT-NEXT: {{ $}}
414416
; OPT-NEXT: bb.1:
415417
; OPT-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
416418
; OPT-NEXT: {{ $}}
417419
; OPT-NEXT: S_WAITCNT 1015
418-
; OPT-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec
420+
; OPT-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
419421
; OPT-NEXT: S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
420422
; OPT-NEXT: S_CBRANCH_SCC1 %bb.1, implicit killed $scc
421423
; OPT-NEXT: S_BRANCH %bb.2
@@ -429,14 +431,14 @@ body: |
429431
; NOOPT: bb.0:
430432
; NOOPT-NEXT: successors: %bb.1(0x80000000)
431433
; NOOPT-NEXT: {{ $}}
432-
; NOOPT-NEXT: renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
434+
; NOOPT-NEXT: renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (volatile load (s32), addrspace 1)
433435
; NOOPT-NEXT: S_BRANCH %bb.1
434436
; NOOPT-NEXT: {{ $}}
435437
; NOOPT-NEXT: bb.1:
436438
; NOOPT-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
437439
; NOOPT-NEXT: {{ $}}
438440
; NOOPT-NEXT: S_WAITCNT 1015
439-
; NOOPT-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec
441+
; NOOPT-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
440442
; NOOPT-NEXT: S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
441443
; NOOPT-NEXT: S_CBRANCH_SCC1 %bb.1, implicit killed $scc
442444
; NOOPT-NEXT: S_BRANCH %bb.2
@@ -446,13 +448,13 @@ body: |
446448
bb.0:
447449
successors: %bb.1
448450
449-
renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
451+
renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (volatile load (s32), addrspace 1)
450452
S_BRANCH %bb.1
451453
452454
bb.1:
453455
successors: %bb.1, %bb.2
454456
455-
TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec
457+
TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
456458
S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
457459
S_CBRANCH_SCC1 %bb.1, implicit killed $scc
458460
S_BRANCH %bb.2
@@ -619,3 +621,29 @@ body: |
619621
GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr96, 0, 4, implicit $exec
620622
S_ENDPGM 0
621623
...
624+
625+
---
626+
name: tbuffer_without_mmo_may_hit_scratch
627+
machineFunctionInfo:
628+
isEntryFunction: true
629+
body: |
630+
bb.0:
631+
; CHECK-LABEL: name: tbuffer_without_mmo_may_hit_scratch
632+
; CHECK: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec
633+
; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97
634+
TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec
635+
S_ENDPGM 0, implicit $vgpr97
636+
...
637+
638+
---
639+
name: buffer_without_mmo_may_hit_scratch
640+
machineFunctionInfo:
641+
isEntryFunction: true
642+
body: |
643+
bb.0:
644+
; CHECK-LABEL: name: buffer_without_mmo_may_hit_scratch
645+
; CHECK: BUFFER_ATOMIC_ADD_F32_OFFEN killed renamable $vgpr0, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec
646+
; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr97
647+
BUFFER_ATOMIC_ADD_F32_OFFEN killed renamable $vgpr0, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec
648+
S_ENDPGM 0, implicit $vgpr97
649+
...

0 commit comments

Comments
 (0)