@@ -354,6 +354,20 @@ class DS_1A_RET_GDS <string opName> : DS_Pseudo<opName,
354354 let gdsValue = 1;
355355}
356356
357+ class DS_1A_Off16_NORET <string opName>
358+ : DS_Pseudo<opName,
359+ (outs),
360+ (ins VGPR_32:$addr, Offset:$offset, gds:$gds),
361+ " $addr$offset$gds"> {
362+
363+ let has_vdst = 0;
364+ let has_offset = 1;
365+ let has_data0 = 0;
366+ let has_data1 = 0;
367+ let has_m0_read = 0;
368+ let IsAtomicNoRet = 1;
369+ }
370+
357371class DS_0A_RET <string opName> : DS_Pseudo<opName,
358372 (outs getLdStRegisterOperand<VGPR_32>.ret:$vdst),
359373 (ins Offset:$offset, gds:$gds),
@@ -794,6 +808,24 @@ defm DS_LOAD_TR8_B64 : DS_1A_RET_NoM0<"ds_load_tr8_b64", VReg_64>;
794808defm DS_LOAD_TR16_B128 : DS_1A_RET_NoM0<"ds_load_tr16_b128", VReg_128>;
795809} // End WaveSizePredicate = isWave32, mayStore = 0
796810
811+ let OtherPredicates = [HasLdsBarrierArriveAtomic] in {
812+ let ASYNC_CNT = 1, LGKM_CNT = 0, Uses = [EXEC, ASYNCcnt], Defs = [ASYNCcnt] in {
813+ def DS_ATOMIC_ASYNC_BARRIER_ARRIVE_B64 : DS_1A_Off16_NORET<"ds_atomic_async_barrier_arrive_b64">;
814+ }
815+
816+ def : GCNPat <
817+ (int_amdgcn_ds_atomic_async_barrier_arrive_b64 (DS1Addr1Offset i32:$ptr, i32:$offset)),
818+ (DS_ATOMIC_ASYNC_BARRIER_ARRIVE_B64 VGPR_32:$ptr, Offset:$offset, (i1 0))
819+ >;
820+
821+ defm DS_ATOMIC_BARRIER_ARRIVE_RTN_B64 : DS_1A1D_RET_mc_gfx9<"ds_atomic_barrier_arrive_rtn_b64", VReg_64>;
822+
823+ def : GCNPat<
824+ (i64 (int_amdgcn_ds_atomic_barrier_arrive_rtn_b64 (DS1Addr1Offset i32:$ptr, i32:$offset), i64:$data)),
825+ (DS_ATOMIC_BARRIER_ARRIVE_RTN_B64 $ptr, $data, Offset:$offset, (i1 0))
826+ >;
827+ } // End OtherPredicates = [HasLdsBarrierArriveAtomic]
828+
797829} // End SubtargetPredicate = isGFX1250Plus
798830
799831let WaveSizePredicate = isWave64, SubtargetPredicate = HasGFX950Insts, mayStore = 0 in {
@@ -1366,6 +1398,11 @@ defm DS_BVH_STACK_RTN_B32 : DS_Real_gfx12<0x0e0,
13661398defm DS_BVH_STACK_PUSH8_POP1_RTN_B32 : DS_Real_gfx12<0x0e1>;
13671399defm DS_BVH_STACK_PUSH8_POP2_RTN_B64 : DS_Real_gfx12<0x0e2>;
13681400
1401+ let AssemblerPredicate = HasLdsBarrierArriveAtomic in {
1402+ defm DS_ATOMIC_ASYNC_BARRIER_ARRIVE_B64 : DS_Real_gfx12<0x056>;
1403+ defm DS_ATOMIC_BARRIER_ARRIVE_RTN_B64 : DS_Real_gfx12<0x075>;
1404+ }
1405+
13691406// New aliases added in GFX12 without renaming the instructions.
13701407let AssemblerPredicate = isGFX12Plus in {
13711408 def : AMDGPUMnemonicAlias<"ds_subrev_u32", "ds_rsub_u32">;
0 commit comments