[PATCH] D156301: [AMDGPU] Support FAdd/FSub global atomics in AMDGPUAtomicOptimizer.
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 10 14:50:00 PDT 2023
arsenm added inline comments.
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUAtomicOptimizer.cpp:327
+
+ // TODO: Operand order is not consistent for atomic fadd intrinsics
+ if (Op == AtomicRMWInst::FAdd) {
----------------
The intrinsics should just be deleted, everything should move to atomicrmw
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUAtomicOptimizer.cpp:445
// Reduce across the upper and lower 32 lanes.
- return buildNonAtomicBinOp(
- B, Op, V, B.CreateIntrinsic(Intrinsic::amdgcn_permlane64, {}, V));
+ V = isAtomicFloatingPointTy ? B.CreateBitCast(V, Int32Ty) : V;
+ Value *Permlane64Call =
----------------
You can just unconditionally call CreateBitCast, it's a no-op if the type matches anyway
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUAtomicOptimizer.cpp:712
+ case AtomicRMWInst::FAdd:
+ return APFloat::getZero(Semantics, false);
+ case AtomicRMWInst::FSub:
----------------
Identity value for fadd is -0, you got these backwards
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUAtomicOptimizer.cpp:714
+ case AtomicRMWInst::FSub:
+ return APFloat::getZero(Semantics, true);
+ }
----------------
identity for fsub is +0, so no true
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUAtomicOptimizer.cpp:814-818
+ if (Ty->isIntegerTy()) {
+ Identity = B.getInt(getIdentityValueForAtomicOp(Op, TyBitWidth));
+ } else if (isAtomicFloatingPointTy) {
+ const fltSemantics &Semantics = Ty->getScalarType()->getFltSemantics();
+ Identity = ConstantFP::get(C, getIdentityValueForFAtomicOp(Op, Semantics));
----------------
Can you just make getIdentityValueForAtomicOp return a Constant? Or add a variant that does?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D156301/new/
https://reviews.llvm.org/D156301
More information about the llvm-commits
mailing list