@@ -1670,10 +1670,22 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_,
1670
1670
if (ST.hasAtomicFlatPkAdd16Insts ())
1671
1671
Atomic.legalFor ({{V2F16, FlatPtr}, {V2BF16, FlatPtr}});
1672
1672
1673
- // FIXME: Handle flat, global and buffer cases.
1674
- getActionDefinitionsBuilder ({G_ATOMICRMW_FMIN, G_ATOMICRMW_FMAX})
1673
+
1674
+ // Most of the legalization work here is done by AtomicExpand. We could
1675
+ // probably use a simpler legality rule that just assumes anything is OK.
1676
+ auto &AtomicFMinFMax =
1677
+ getActionDefinitionsBuilder ({G_ATOMICRMW_FMIN, G_ATOMICRMW_FMAX})
1675
1678
.legalFor ({{F32, LocalPtr}, {F64, LocalPtr}});
1676
1679
1680
+ if (ST.hasAtomicFMinFMaxF32GlobalInsts ())
1681
+ AtomicFMinFMax.legalFor ({{F32, GlobalPtr},{F32, BufferFatPtr}});
1682
+ if (ST.hasAtomicFMinFMaxF64GlobalInsts ())
1683
+ AtomicFMinFMax.legalFor ({{F64, GlobalPtr}, {F64, BufferFatPtr}});
1684
+ if (ST.hasAtomicFMinFMaxF32FlatInsts ())
1685
+ AtomicFMinFMax.legalFor ({F32, FlatPtr});
1686
+ if (ST.hasAtomicFMinFMaxF64FlatInsts ())
1687
+ AtomicFMinFMax.legalFor ({F64, FlatPtr});
1688
+
1677
1689
// BUFFER/FLAT_ATOMIC_CMP_SWAP on GCN GPUs needs input marshalling, and output
1678
1690
// demarshalling
1679
1691
getActionDefinitionsBuilder (G_ATOMIC_CMPXCHG)
0 commit comments