Skip to content

Commit 3bf1ef7

Browse files
committed
AMDGPU: Handle legal v2bf16 atomicrmw fadd for gfx12
Annoyingly gfx90a/940 support this for global/flat but not buffer.
1 parent 62d24f7 commit 3bf1ef7

File tree

5 files changed

+36
-142
lines changed

5 files changed

+36
-142
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.td

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,12 @@ def FeatureAtomicGlobalPkAddBF16Inst : SubtargetFeature<"atomic-global-pk-add-bf
743743
[FeatureFlatGlobalInsts]
744744
>;
745745

746+
def FeatureAtomicBufferPkAddBF16Inst : SubtargetFeature<"atomic-buffer-pk-add-bf16-inst",
747+
"HasAtomicBufferPkAddBF16Inst",
748+
"true",
749+
"Has buffer_atomic_pk_add_bf16 instruction"
750+
>;
751+
746752
def FeatureAtomicCSubNoRtnInsts : SubtargetFeature<"atomic-csub-no-rtn-insts",
747753
"HasAtomicCSubNoRtnInsts",
748754
"true",
@@ -1560,6 +1566,7 @@ def FeatureISAVersion12 : FeatureSet<
15601566
FeatureAtomicFlatPkAdd16Insts,
15611567
FeatureAtomicBufferGlobalPkAddF16Insts,
15621568
FeatureAtomicGlobalPkAddBF16Inst,
1569+
FeatureAtomicBufferPkAddBF16Inst,
15631570
FeatureFlatAtomicFaddF32Inst,
15641571
FeatureImageInsts,
15651572
FeatureExtendedImageInsts,
@@ -2120,7 +2127,10 @@ def HasAtomicBufferGlobalPkAddF16Insts
21202127
AssemblerPredicate<(all_of FeatureAtomicBufferGlobalPkAddF16Insts)>;
21212128
def HasAtomicGlobalPkAddBF16Inst
21222129
: Predicate<"Subtarget->hasAtomicGlobalPkAddBF16Inst()">,
2123-
AssemblerPredicate<(all_of FeatureAtomicGlobalPkAddBF16Inst)>;
2130+
AssemblerPredicate<(all_of FeatureAtomicGlobalPkAddBF16Inst)>;
2131+
def HasAtomicBufferPkAddBF16Inst
2132+
: Predicate<"Subtarget->hasAtomicBufferPkAddBF16Inst()">,
2133+
AssemblerPredicate<(all_of FeatureAtomicBufferPkAddBF16Inst)>;
21242134
def HasFlatAtomicFaddF32Inst
21252135
: Predicate<"Subtarget->hasFlatAtomicFaddF32Inst()">,
21262136
AssemblerPredicate<(all_of FeatureFlatAtomicFaddF32Inst)>;

llvm/lib/Target/AMDGPU/BUFInstructions.td

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1241,7 +1241,9 @@ let SubtargetPredicate = isGFX12Plus in {
12411241
defm BUFFER_ATOMIC_COND_SUB_U32 : MUBUF_Pseudo_Atomics <
12421242
"buffer_atomic_cond_sub_u32", VGPR_32, i32
12431243
>;
1244+
}
12441245

1246+
let SubtargetPredicate = HasAtomicBufferPkAddBF16Inst in {
12451247
let FPAtomic = 1 in
12461248
defm BUFFER_ATOMIC_PK_ADD_BF16 : MUBUF_Pseudo_Atomics <
12471249
"buffer_atomic_pk_add_bf16", VGPR_32, v2bf16
@@ -1735,8 +1737,11 @@ defm : SIBufferAtomicPat<"SIbuffer_atomic_dec", i64, "BUFFER_ATOMIC_DEC_X2">;
17351737
let OtherPredicates = [HasAtomicCSubNoRtnInsts] in
17361738
defm : SIBufferAtomicPat<"SIbuffer_atomic_csub", i32, "BUFFER_ATOMIC_CSUB", ["noret"]>;
17371739

1738-
let SubtargetPredicate = isGFX12Plus in {
1740+
let SubtargetPredicate = HasAtomicBufferPkAddBF16Inst in {
17391741
defm : SIBufferAtomicPat_Common<"SIbuffer_atomic_fadd", v2bf16, "BUFFER_ATOMIC_PK_ADD_BF16_VBUFFER">;
1742+
}
1743+
1744+
let SubtargetPredicate = isGFX12Plus in {
17401745
defm : SIBufferAtomicPat_Common<"SIbuffer_atomic_cond_sub_u32", i32, "BUFFER_ATOMIC_COND_SUB_U32_VBUFFER", ["ret"]>;
17411746

17421747
let OtherPredicates = [HasAtomicCSubNoRtnInsts] in

llvm/lib/Target/AMDGPU/GCNSubtarget.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
167167
bool HasAtomicBufferGlobalPkAddF16Insts = false;
168168
bool HasAtomicCSubNoRtnInsts = false;
169169
bool HasAtomicGlobalPkAddBF16Inst = false;
170+
bool HasAtomicBufferPkAddBF16Inst = false;
170171
bool HasFlatAtomicFaddF32Inst = false;
171172
bool HasDefaultComponentZero = false;
172173
bool HasDefaultComponentBroadcast = false;
@@ -844,6 +845,10 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
844845
return HasAtomicGlobalPkAddBF16Inst;
845846
}
846847

848+
bool hasAtomicBufferPkAddBF16Inst() const {
849+
return HasAtomicBufferPkAddBF16Inst;
850+
}
851+
847852
bool hasFlatAtomicFaddF32Inst() const { return HasFlatAtomicFaddF32Inst; }
848853

849854
bool hasDefaultComponentZero() const { return HasDefaultComponentZero; }

llvm/lib/Target/AMDGPU/SIISelLowering.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16037,9 +16037,10 @@ SITargetLowering::shouldExpandAtomicRMWInIR(AtomicRMWInst *RMW) const {
1603716037
if (Subtarget->hasAtomicBufferGlobalPkAddF16Insts() && isHalf2(Ty))
1603816038
return AtomicExpansionKind::None;
1603916039

16040-
// TODO: Handle <2 x bfloat> case. While gfx90a/gfx940 supports it for
16041-
// global/flat, it does not for buffer. gfx12 does have the buffer
16042-
// version.
16040+
// While gfx90a/gfx940 supports v2bf16 for global/flat, it does not for
16041+
// buffer. gfx12 does have the buffer version.
16042+
if (Subtarget->hasAtomicBufferPkAddBF16Inst() && isBFloat2(Ty))
16043+
return AtomicExpansionKind::None;
1604316044
}
1604416045

1604516046
if (unsafeFPAtomicsDisabled(RMW->getFunction()))

llvm/test/CodeGen/AMDGPU/buffer-fat-pointer-atomicrmw-fadd.ll

Lines changed: 10 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -5611,50 +5611,11 @@ define <2 x bfloat> @buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset(ptr add
56115611
; GFX12-NEXT: s_wait_samplecnt 0x0
56125612
; GFX12-NEXT: s_wait_bvhcnt 0x0
56135613
; GFX12-NEXT: s_wait_kmcnt 0x0
5614-
; GFX12-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, s4
5615-
; GFX12-NEXT: s_addk_co_i32 s4, 0x400
5616-
; GFX12-NEXT: s_mov_b32 s5, 0
5617-
; GFX12-NEXT: v_mov_b32_e32 v4, s4
5618-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)
5619-
; GFX12-NEXT: v_lshlrev_b32_e32 v2, 16, v1
5620-
; GFX12-NEXT: buffer_load_b32 v0, v0, s[0:3], null offen offset:1024
5621-
; GFX12-NEXT: v_and_b32_e32 v3, 0xffff0000, v1
5622-
; GFX12-NEXT: .LBB15_1: ; %atomicrmw.start
5623-
; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1
5624-
; GFX12-NEXT: s_wait_loadcnt 0x0
5625-
; GFX12-NEXT: v_mov_b32_e32 v6, v0
5614+
; GFX12-NEXT: v_mov_b32_e32 v1, s4
56265615
; GFX12-NEXT: s_wait_storecnt 0x0
5627-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5628-
; GFX12-NEXT: v_and_b32_e32 v1, 0xffff0000, v6
5629-
; GFX12-NEXT: v_add_f32_e32 v1, v1, v3
5630-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
5631-
; GFX12-NEXT: v_bfe_u32 v7, v1, 16, 1
5632-
; GFX12-NEXT: v_or_b32_e32 v9, 0x400000, v1
5633-
; GFX12-NEXT: v_cmp_u_f32_e32 vcc_lo, v1, v1
5634-
; GFX12-NEXT: v_add3_u32 v7, v7, v1, 0x7fff
5635-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5636-
; GFX12-NEXT: v_dual_cndmask_b32 v1, v7, v9 :: v_dual_lshlrev_b32 v0, 16, v6
5637-
; GFX12-NEXT: v_add_f32_e32 v0, v0, v2
5638-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
5639-
; GFX12-NEXT: v_bfe_u32 v5, v0, 16, 1
5640-
; GFX12-NEXT: v_or_b32_e32 v8, 0x400000, v0
5641-
; GFX12-NEXT: v_cmp_u_f32_e64 s4, v0, v0
5642-
; GFX12-NEXT: v_add3_u32 v5, v5, v0, 0x7fff
5643-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5644-
; GFX12-NEXT: v_cndmask_b32_e64 v0, v5, v8, s4
5645-
; GFX12-NEXT: v_perm_b32 v5, v1, v0, 0x7060302
5646-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
5647-
; GFX12-NEXT: v_dual_mov_b32 v0, v5 :: v_dual_mov_b32 v1, v6
5648-
; GFX12-NEXT: buffer_atomic_cmpswap_b32 v[0:1], v4, s[0:3], null offen th:TH_ATOMIC_RETURN
5616+
; GFX12-NEXT: buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
56495617
; GFX12-NEXT: s_wait_loadcnt 0x0
56505618
; GFX12-NEXT: global_inv scope:SCOPE_DEV
5651-
; GFX12-NEXT: v_cmp_eq_u32_e32 vcc_lo, v0, v6
5652-
; GFX12-NEXT: s_or_b32 s5, vcc_lo, s5
5653-
; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
5654-
; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s5
5655-
; GFX12-NEXT: s_cbranch_execnz .LBB15_1
5656-
; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end
5657-
; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s5
56585619
; GFX12-NEXT: s_setpc_b64 s[30:31]
56595620
;
56605621
; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
@@ -6033,46 +5994,11 @@ define void @buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset(ptr addrspace
60335994
; GFX12-NEXT: s_wait_samplecnt 0x0
60345995
; GFX12-NEXT: s_wait_bvhcnt 0x0
60355996
; GFX12-NEXT: s_wait_kmcnt 0x0
6036-
; GFX12-NEXT: v_dual_mov_b32 v1, s4 :: v_dual_lshlrev_b32 v2, 16, v0
6037-
; GFX12-NEXT: s_addk_co_i32 s4, 0x400
6038-
; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
6039-
; GFX12-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_and_b32 v3, 0xffff0000, v0
6040-
; GFX12-NEXT: buffer_load_b32 v1, v1, s[0:3], null offen offset:1024
6041-
; GFX12-NEXT: s_mov_b32 s5, 0
6042-
; GFX12-NEXT: .LBB16_1: ; %atomicrmw.start
6043-
; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1
6044-
; GFX12-NEXT: s_wait_loadcnt 0x0
6045-
; GFX12-NEXT: v_and_b32_e32 v5, 0xffff0000, v1
6046-
; GFX12-NEXT: v_lshlrev_b32_e32 v0, 16, v1
5997+
; GFX12-NEXT: v_mov_b32_e32 v1, s4
5998+
; GFX12-NEXT: s_wait_storecnt 0x0
5999+
; GFX12-NEXT: buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024
60476000
; GFX12-NEXT: s_wait_storecnt 0x0
6048-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6049-
; GFX12-NEXT: v_dual_add_f32 v5, v5, v3 :: v_dual_add_f32 v0, v0, v2
6050-
; GFX12-NEXT: v_bfe_u32 v7, v5, 16, 1
6051-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)
6052-
; GFX12-NEXT: v_bfe_u32 v6, v0, 16, 1
6053-
; GFX12-NEXT: v_or_b32_e32 v8, 0x400000, v0
6054-
; GFX12-NEXT: v_or_b32_e32 v9, 0x400000, v5
6055-
; GFX12-NEXT: v_cmp_u_f32_e32 vcc_lo, v5, v5
6056-
; GFX12-NEXT: v_add3_u32 v7, v7, v5, 0x7fff
6057-
; GFX12-NEXT: v_add3_u32 v6, v6, v0, 0x7fff
6058-
; GFX12-NEXT: v_cmp_u_f32_e64 s4, v0, v0
6059-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
6060-
; GFX12-NEXT: v_cndmask_b32_e32 v5, v7, v9, vcc_lo
6061-
; GFX12-NEXT: v_cndmask_b32_e64 v0, v6, v8, s4
6062-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6063-
; GFX12-NEXT: v_perm_b32 v0, v5, v0, 0x7060302
6064-
; GFX12-NEXT: v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v5, v0
6065-
; GFX12-NEXT: buffer_atomic_cmpswap_b32 v[5:6], v4, s[0:3], null offen th:TH_ATOMIC_RETURN
6066-
; GFX12-NEXT: s_wait_loadcnt 0x0
60676001
; GFX12-NEXT: global_inv scope:SCOPE_DEV
6068-
; GFX12-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v1
6069-
; GFX12-NEXT: v_mov_b32_e32 v1, v5
6070-
; GFX12-NEXT: s_or_b32 s5, vcc_lo, s5
6071-
; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
6072-
; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s5
6073-
; GFX12-NEXT: s_cbranch_execnz .LBB16_1
6074-
; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end
6075-
; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s5
60766002
; GFX12-NEXT: s_setpc_b64 s[30:31]
60776003
;
60786004
; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
@@ -6442,8 +6368,8 @@ define <2 x bfloat> @buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterf
64426368
; GFX12-NEXT: s_wait_samplecnt 0x0
64436369
; GFX12-NEXT: s_wait_bvhcnt 0x0
64446370
; GFX12-NEXT: s_wait_kmcnt 0x0
6445-
; GFX12-NEXT: v_add_nc_u32_e32 v7, 0x400, v4
64466371
; GFX12-NEXT: s_mov_b32 s1, exec_lo
6372+
; GFX12-NEXT: s_wait_storecnt 0x0
64476373
; GFX12-NEXT: .LBB17_1: ; =>This Inner Loop Header: Depth=1
64486374
; GFX12-NEXT: v_readfirstlane_b32 s4, v0
64496375
; GFX12-NEXT: v_readfirstlane_b32 s5, v1
@@ -6455,70 +6381,17 @@ define <2 x bfloat> @buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterf
64556381
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
64566382
; GFX12-NEXT: s_and_b32 s0, vcc_lo, s0
64576383
; GFX12-NEXT: s_and_saveexec_b32 s0, s0
6458-
; GFX12-NEXT: buffer_load_b32 v6, v4, s[4:7], null offen offset:1024
6384+
; GFX12-NEXT: s_wait_loadcnt 0x0
6385+
; GFX12-NEXT: buffer_atomic_pk_add_bf16 v5, v4, s[4:7], null offen offset:1024 th:TH_ATOMIC_RETURN
6386+
; GFX12-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
64596387
; GFX12-NEXT: ; implicit-def: $vgpr4
64606388
; GFX12-NEXT: s_xor_b32 exec_lo, exec_lo, s0
64616389
; GFX12-NEXT: s_cbranch_execnz .LBB17_1
64626390
; GFX12-NEXT: ; %bb.2:
64636391
; GFX12-NEXT: s_mov_b32 exec_lo, s1
6464-
; GFX12-NEXT: v_lshlrev_b32_e32 v8, 16, v5
6465-
; GFX12-NEXT: v_and_b32_e32 v9, 0xffff0000, v5
6466-
; GFX12-NEXT: s_mov_b32 s1, 0
6467-
; GFX12-NEXT: .LBB17_3: ; %atomicrmw.start
6468-
; GFX12-NEXT: ; =>This Loop Header: Depth=1
6469-
; GFX12-NEXT: ; Child Loop BB17_4 Depth 2
64706392
; GFX12-NEXT: s_wait_loadcnt 0x0
6471-
; GFX12-NEXT: v_and_b32_e32 v5, 0xffff0000, v6
6472-
; GFX12-NEXT: v_lshlrev_b32_e32 v4, 16, v6
6473-
; GFX12-NEXT: s_mov_b32 s2, exec_lo
6474-
; GFX12-NEXT: s_wait_storecnt 0x0
6475-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6476-
; GFX12-NEXT: v_dual_add_f32 v5, v5, v9 :: v_dual_add_f32 v4, v4, v8
6477-
; GFX12-NEXT: v_bfe_u32 v11, v5, 16, 1
6478-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)
6479-
; GFX12-NEXT: v_bfe_u32 v10, v4, 16, 1
6480-
; GFX12-NEXT: v_or_b32_e32 v12, 0x400000, v4
6481-
; GFX12-NEXT: v_cmp_u_f32_e32 vcc_lo, v4, v4
6482-
; GFX12-NEXT: v_or_b32_e32 v13, 0x400000, v5
6483-
; GFX12-NEXT: v_add3_u32 v11, v11, v5, 0x7fff
6484-
; GFX12-NEXT: v_add3_u32 v10, v10, v4, 0x7fff
6485-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
6486-
; GFX12-NEXT: v_cndmask_b32_e32 v4, v10, v12, vcc_lo
6487-
; GFX12-NEXT: v_cmp_u_f32_e32 vcc_lo, v5, v5
6488-
; GFX12-NEXT: v_cndmask_b32_e32 v5, v11, v13, vcc_lo
6489-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6490-
; GFX12-NEXT: v_perm_b32 v5, v5, v4, 0x7060302
6491-
; GFX12-NEXT: v_mov_b32_e32 v4, v5
6492-
; GFX12-NEXT: v_mov_b32_e32 v5, v6
6493-
; GFX12-NEXT: .LBB17_4: ; Parent Loop BB17_3 Depth=1
6494-
; GFX12-NEXT: ; => This Inner Loop Header: Depth=2
6495-
; GFX12-NEXT: v_readfirstlane_b32 s4, v0
6496-
; GFX12-NEXT: v_readfirstlane_b32 s5, v1
6497-
; GFX12-NEXT: v_readfirstlane_b32 s6, v2
6498-
; GFX12-NEXT: v_readfirstlane_b32 s7, v3
6499-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
6500-
; GFX12-NEXT: v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
6501-
; GFX12-NEXT: v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
6502-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
6503-
; GFX12-NEXT: s_and_b32 s0, vcc_lo, s0
6504-
; GFX12-NEXT: s_and_saveexec_b32 s0, s0
6505-
; GFX12-NEXT: s_wait_loadcnt 0x0
6506-
; GFX12-NEXT: buffer_atomic_cmpswap_b32 v[4:5], v7, s[4:7], null offen th:TH_ATOMIC_RETURN
6507-
; GFX12-NEXT: s_xor_b32 exec_lo, exec_lo, s0
6508-
; GFX12-NEXT: s_cbranch_execnz .LBB17_4
6509-
; GFX12-NEXT: ; %bb.5: ; in Loop: Header=BB17_3 Depth=1
6510-
; GFX12-NEXT: s_mov_b32 exec_lo, s2
6511-
; GFX12-NEXT: s_wait_loadcnt 0x0
6512-
; GFX12-NEXT: v_cmp_eq_u32_e32 vcc_lo, v4, v6
6513-
; GFX12-NEXT: v_mov_b32_e32 v6, v4
6393+
; GFX12-NEXT: v_mov_b32_e32 v0, v5
65146394
; GFX12-NEXT: global_inv scope:SCOPE_DEV
6515-
; GFX12-NEXT: s_or_b32 s1, vcc_lo, s1
6516-
; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
6517-
; GFX12-NEXT: s_and_not1_b32 exec_lo, exec_lo, s1
6518-
; GFX12-NEXT: s_cbranch_execnz .LBB17_3
6519-
; GFX12-NEXT: ; %bb.6: ; %atomicrmw.end
6520-
; GFX12-NEXT: s_or_b32 exec_lo, exec_lo, s1
6521-
; GFX12-NEXT: v_mov_b32_e32 v0, v4
65226395
; GFX12-NEXT: s_setpc_b64 s[30:31]
65236396
;
65246397
; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall:

0 commit comments

Comments
 (0)