[llvm] [AMDGPU] Add legalization rules for G_ATOMICRMW_FADD (PR #175257)
Anshil Gandhi via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 5 21:08:25 PST 2026
================
@@ -731,12 +733,23 @@ RegBankLegalizeRules::RegBankLegalizeRules(const GCNSubtarget &_ST,
// pointer varies by address space.
addRulesForGOpcs({G_ATOMICRMW_ADD, G_ATOMICRMW_SUB, G_ATOMICRMW_XCHG,
G_ATOMICRMW_AND, G_ATOMICRMW_OR, G_ATOMICRMW_XOR})
- .Any({{S32, P0}, {{Vgpr32}, {VgprP0, Vgpr32}}})
- .Any({{S64, P0}, {{Vgpr64}, {VgprP0, Vgpr64}}})
- .Any({{S32, P1}, {{Vgpr32}, {VgprP1, Vgpr32}}})
- .Any({{S64, P1}, {{Vgpr64}, {VgprP1, Vgpr64}}})
- .Any({{S32, P3}, {{Vgpr32}, {VgprP3, Vgpr32}}})
- .Any({{S64, P3}, {{Vgpr64}, {VgprP3, Vgpr64}}});
+ .Any({{DivS32, P0}, {{Vgpr32}, {VgprP0, Vgpr32}}})
+ .Any({{DivS64, P0}, {{Vgpr64}, {VgprP0, Vgpr64}}})
+ .Any({{DivS32, P1}, {{Vgpr32}, {VgprP1, Vgpr32}}})
+ .Any({{DivS64, P1}, {{Vgpr64}, {VgprP1, Vgpr64}}})
+ .Any({{DivS32, P3}, {{Vgpr32}, {VgprP3, Vgpr32}}})
+ .Any({{DivS64, P3}, {{Vgpr64}, {VgprP3, Vgpr64}}});
+
+ // Atomics always operate per-lane; keep both the pointer and the value/result
+ // in VGPRs regardless of uniformity. Use Ptr32/Ptr64 to cover all addrspaces
+ // (e.g. local/region/private for Ptr32, global/flat for Ptr64).
+ addRulesForGOpcs({G_ATOMICRMW_FADD})
+ .Any({{DivS32, Ptr32, S32}, {{Vgpr32}, {VgprPtr32, Vgpr32}}})
----------------
gandhi56 wrote:
I verified that each of the rules are being used in the attached tests.
https://github.com/llvm/llvm-project/pull/175257
More information about the llvm-commits
mailing list