Skip to content

Commit a1df10d

Browse files
authored
AMDGPU/NFC: Add predicate for supporting ds_add_f64 (#80379)
1 parent 3c2a73a commit a1df10d

File tree

4 files changed

+10
-4
lines changed

4 files changed

+10
-4
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1803,6 +1803,9 @@ def HasFlatAddressSpace : Predicate<"Subtarget->hasFlatAddressSpace()">,
18031803
def HasBufferFlatGlobalAtomicsF64 :
18041804
Predicate<"Subtarget->hasBufferFlatGlobalAtomicsF64()">,
18051805
AssemblerPredicate<(any_of FeatureGFX90AInsts)>;
1806+
def HasLdsAtomicAddF64 :
1807+
Predicate<"Subtarget->hasLdsAtomicAddF64()">,
1808+
AssemblerPredicate<(any_of FeatureGFX90AInsts)>;
18061809

18071810
def HasFlatGlobalInsts : Predicate<"Subtarget->hasFlatGlobalInsts()">,
18081811
AssemblerPredicate<(all_of FeatureFlatGlobalInsts)>;

llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1593,7 +1593,7 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_,
15931593
auto &Atomic = getActionDefinitionsBuilder(G_ATOMICRMW_FADD);
15941594
if (ST.hasLDSFPAtomicAdd()) {
15951595
Atomic.legalFor({{S32, LocalPtr}, {S32, RegionPtr}});
1596-
if (ST.hasGFX90AInsts())
1596+
if (ST.hasLdsAtomicAddF64())
15971597
Atomic.legalFor({{S64, LocalPtr}});
15981598
if (ST.hasAtomicDsPkAdd16Insts())
15991599
Atomic.legalFor({{V2S16, LocalPtr}});

llvm/lib/Target/AMDGPU/DSInstructions.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -486,10 +486,10 @@ def DS_WRITE_ADDTID_B32 : DS_0A1D_NORET<"ds_write_addtid_b32">;
486486

487487
} // End mayLoad = 0
488488

489-
let SubtargetPredicate = isGFX90APlus in {
489+
let SubtargetPredicate = HasLdsAtomicAddF64 in {
490490
defm DS_ADD_F64 : DS_1A1D_NORET_mc_gfx9<"ds_add_f64", VReg_64>;
491491
defm DS_ADD_RTN_F64 : DS_1A1D_RET_mc_gfx9<"ds_add_rtn_f64", VReg_64, "ds_add_f64">;
492-
} // End SubtargetPredicate = isGFX90APlus
492+
} // End SubtargetPredicate = HasLdsAtomicAddF64
493493

494494
let SubtargetPredicate = HasAtomicDsPkAdd16Insts in {
495495
defm DS_PK_ADD_F16 : DS_1A1D_NORET_mc<"ds_pk_add_f16">;
@@ -1128,7 +1128,7 @@ let SubtargetPredicate = isGFX11Plus in {
11281128
defm : DSAtomicCmpXChg_mc<DS_CMPSTORE_RTN_B64, DS_CMPSTORE_B64, i64, "atomic_cmp_swap">;
11291129
} // End SubtargetPredicate = isGFX11Plus
11301130

1131-
let SubtargetPredicate = isGFX90APlus in {
1131+
let SubtargetPredicate = HasLdsAtomicAddF64 in {
11321132
def : DSAtomicRetPat<DS_ADD_RTN_F64, f64, atomic_load_fadd_local_64>;
11331133
let AddedComplexity = 1 in
11341134
def : DSAtomicRetPat<DS_ADD_F64, f64, atomic_load_fadd_local_noret_64>;

llvm/lib/Target/AMDGPU/GCNSubtarget.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,9 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
641641
// BUFFER/FLAT/GLOBAL_ATOMIC_ADD/MIN/MAX_F64
642642
bool hasBufferFlatGlobalAtomicsF64() const { return hasGFX90AInsts(); }
643643

644+
// DS_ADD_F64/DS_ADD_RTN_F64
645+
bool hasLdsAtomicAddF64() const { return hasGFX90AInsts(); }
646+
644647
bool hasMultiDwordFlatScratchAddressing() const {
645648
return getGeneration() >= GFX9;
646649
}

0 commit comments

Comments
 (0)