Skip to content

Commit 4eee045

Browse files
authored
AMDGPU/NFC: Add predicate for supporting buffer/flat/global f64 atomics (#80209)
1 parent 1d14323 commit 4eee045

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1800,6 +1800,10 @@ def isGFX12Plus :
18001800
def HasFlatAddressSpace : Predicate<"Subtarget->hasFlatAddressSpace()">,
18011801
AssemblerPredicate<(all_of FeatureFlatAddressSpace)>;
18021802

1803+
def HasBufferFlatGlobalAtomicsF64 :
1804+
Predicate<"Subtarget->hasBufferFlatGlobalAtomicsF64()">,
1805+
AssemblerPredicate<(any_of FeatureGFX90AInsts)>;
1806+
18031807
def HasFlatGlobalInsts : Predicate<"Subtarget->hasFlatGlobalInsts()">,
18041808
AssemblerPredicate<(all_of FeatureFlatGlobalInsts)>;
18051809
def HasFlatScratchInsts : Predicate<"Subtarget->hasFlatScratchInsts()">,

llvm/lib/Target/AMDGPU/BUFInstructions.td

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,11 +1312,13 @@ let SubtargetPredicate = isGFX90APlus in {
13121312
def BUFFER_INVL2 : MUBUF_Invalidate<"buffer_invl2"> {
13131313
let SubtargetPredicate = isGFX90AOnly;
13141314
}
1315+
} // End SubtargetPredicate = isGFX90APlus
13151316

1317+
let SubtargetPredicate = HasBufferFlatGlobalAtomicsF64 in {
13161318
defm BUFFER_ATOMIC_ADD_F64 : MUBUF_Pseudo_Atomics<"buffer_atomic_add_f64", VReg_64, f64>;
13171319
defm BUFFER_ATOMIC_MIN_F64 : MUBUF_Pseudo_Atomics<"buffer_atomic_min_f64", VReg_64, f64>;
13181320
defm BUFFER_ATOMIC_MAX_F64 : MUBUF_Pseudo_Atomics<"buffer_atomic_max_f64", VReg_64, f64>;
1319-
} // End SubtargetPredicate = isGFX90APlus
1321+
} // End SubtargetPredicate = HasBufferFlatGlobalAtomicsF64
13201322

13211323
def BUFFER_INV : MUBUF_Invalidate<"buffer_inv"> {
13221324
let SubtargetPredicate = isGFX940Plus;
@@ -1806,11 +1808,11 @@ let OtherPredicates = [HasAtomicBufferGlobalPkAddF16Insts] in {
18061808
defm : SIBufferAtomicPat_Common<"SIbuffer_atomic_fadd", v2f16, "BUFFER_ATOMIC_PK_ADD_F16_VBUFFER", ["ret"]>;
18071809
} // End OtherPredicates = [HasAtomicBufferGlobalPkAddF16Insts]
18081810

1809-
let OtherPredicates = [isGFX90APlus] in {
1811+
let OtherPredicates = [HasBufferFlatGlobalAtomicsF64] in {
18101812
defm : SIBufferAtomicPat<"SIbuffer_atomic_fadd", f64, "BUFFER_ATOMIC_ADD_F64">;
18111813
defm : SIBufferAtomicPat<"SIbuffer_atomic_fmin", f64, "BUFFER_ATOMIC_MIN_F64">;
18121814
defm : SIBufferAtomicPat<"SIbuffer_atomic_fmax", f64, "BUFFER_ATOMIC_MAX_F64">;
1813-
} // End SubtargetPredicate = isGFX90APlus
1815+
} // End SubtargetPredicate = HasBufferFlatGlobalAtomicsF64
18141816

18151817
multiclass SIBufferAtomicCmpSwapPat_Common<ValueType vt, ValueType data_vt, string Inst> {
18161818
foreach RtnMode = ["ret", "noret"] in {
@@ -3339,7 +3341,7 @@ let SubtargetPredicate = isGFX90APlus in {
33393341
defm BUFFER_ATOMIC_ADD_F64 : MUBUF_Real_Atomic_vi<0x4f>;
33403342
defm BUFFER_ATOMIC_MIN_F64 : MUBUF_Real_Atomic_vi<0x50>;
33413343
defm BUFFER_ATOMIC_MAX_F64 : MUBUF_Real_Atomic_vi<0x51>;
3342-
} // End SubtargetPredicate = isGFX90APlus, AssemblerPredicate = isGFX90APlus
3344+
} // End SubtargetPredicate = isGFX90APlus
33433345

33443346
def BUFFER_WBL2_gfx90a : MUBUF_Real_gfx90a<0x28, BUFFER_WBL2> {
33453347
let AsmString = BUFFER_WBL2.Mnemonic; // drop flags

llvm/lib/Target/AMDGPU/FLATInstructions.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -779,14 +779,14 @@ defm FLAT_ATOMIC_FMAX_X2 : FLAT_Atomic_Pseudo <"flat_atomic_fmax_x2",
779779

780780
} // End SubtargetPredicate = isGFX7GFX10
781781

782-
let SubtargetPredicate = isGFX90APlus in {
782+
let SubtargetPredicate = HasBufferFlatGlobalAtomicsF64 in {
783783
defm FLAT_ATOMIC_ADD_F64 : FLAT_Atomic_Pseudo<"flat_atomic_add_f64", VReg_64, f64>;
784784
defm FLAT_ATOMIC_MIN_F64 : FLAT_Atomic_Pseudo<"flat_atomic_min_f64", VReg_64, f64>;
785785
defm FLAT_ATOMIC_MAX_F64 : FLAT_Atomic_Pseudo<"flat_atomic_max_f64", VReg_64, f64>;
786786
defm GLOBAL_ATOMIC_ADD_F64 : FLAT_Global_Atomic_Pseudo<"global_atomic_add_f64", VReg_64, f64>;
787787
defm GLOBAL_ATOMIC_MIN_F64 : FLAT_Global_Atomic_Pseudo<"global_atomic_min_f64", VReg_64, f64>;
788788
defm GLOBAL_ATOMIC_MAX_F64 : FLAT_Global_Atomic_Pseudo<"global_atomic_max_f64", VReg_64, f64>;
789-
} // End SubtargetPredicate = isGFX90APlus
789+
} // End SubtargetPredicate = HasBufferFlatGlobalAtomicsF64
790790

791791
let SubtargetPredicate = HasAtomicFlatPkAdd16Insts in {
792792
defm FLAT_ATOMIC_PK_ADD_F16 : FLAT_Atomic_Pseudo<"flat_atomic_pk_add_f16", VGPR_32, v2f16>;
@@ -1671,7 +1671,7 @@ defm : GlobalFLATAtomicPatsRtnWithAddrSpace <"GLOBAL_ATOMIC_PK_ADD_F16", "int_am
16711671
defm : GlobalFLATAtomicPatsRtnWithAddrSpace <"GLOBAL_ATOMIC_PK_ADD_F16", "int_amdgcn_global_atomic_fadd", "global_addrspace", v2f16>;
16721672
}
16731673

1674-
let OtherPredicates = [isGFX90APlus] in {
1674+
let OtherPredicates = [HasBufferFlatGlobalAtomicsF64] in {
16751675
defm : GlobalFLATAtomicPats <"GLOBAL_ATOMIC_ADD_F64", "atomic_load_fadd_global", f64>;
16761676
defm : GlobalFLATAtomicPats <"GLOBAL_ATOMIC_MIN_F64", "atomic_load_fmin_global", f64>;
16771677
defm : GlobalFLATAtomicPats <"GLOBAL_ATOMIC_MAX_F64", "atomic_load_fmax_global", f64>;

llvm/lib/Target/AMDGPU/GCNSubtarget.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,9 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
638638
return GFX10_BEncoding;
639639
}
640640

641+
// BUFFER/FLAT/GLOBAL_ATOMIC_ADD/MIN/MAX_F64
642+
bool hasBufferFlatGlobalAtomicsF64() const { return hasGFX90AInsts(); }
643+
641644
bool hasMultiDwordFlatScratchAddressing() const {
642645
return getGeneration() >= GFX9;
643646
}

0 commit comments

Comments
 (0)