[llvm] [IR][LangRef] Add partial reduction add intrinsic (PR #94499)
Graham Hunter via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 13 02:51:14 PDT 2024
================
@@ -7914,6 +7914,28 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
setValue(&I, Trunc);
return;
}
+ case Intrinsic::experimental_vector_partial_reduce_add: {
+ auto DL = getCurSDLoc();
+ auto ReducedTy = EVT::getEVT(I.getType());
+ auto OpNode = getValue(I.getOperand(1));
+ auto FullTy = OpNode.getValueType();
+
+ auto Accumulator = getValue(I.getOperand(0));
+ unsigned ScaleFactor = FullTy.getVectorMinNumElements() / ReducedTy.getVectorMinNumElements();
+
+ for(unsigned i = 0; i < ScaleFactor; i++) {
----------------
huntergr-arm wrote:
Ok, I was thrown off by the langref description. I guess then I'd like to see the default lowering changed to just extract the subvectors from the second operand and perform a vector add on to the first operand, instead of reducing the subvectors and adding the result to individual lanes. It technically meets the defined semantics (target-defined order of reduction operations), but the current codegen is pretty awful compared to a series of vector adds.
https://github.com/llvm/llvm-project/pull/94499
More information about the llvm-commits
mailing list