[llvm] [LV] Vectorize histogram operations (PR #99851)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 12 00:28:31 PDT 2024
================
@@ -958,6 +964,65 @@ void VPWidenCallRecipe::print(raw_ostream &O, const Twine &Indent,
O << ")";
}
}
+#endif
+
+void VPHistogramRecipe::execute(VPTransformState &State) {
+ State.setDebugLocFrom(getDebugLoc());
+ IRBuilderBase &Builder = State.Builder;
+
+ for (unsigned Part = 0; Part < State.UF; ++Part) {
+ Value *Address = State.get(getOperand(0), Part);
+ Value *IncVec = State.get(getOperand(1), Part);
+ VectorType *VTy = cast<VectorType>(Address->getType());
+
+ // The histogram intrinsic requires a mask even if the recipe doesn't;
+ // if the mask operand was omitted then all lanes should be executed and
+ // we just need to synthesize an all-true mask.
+ Value *Mask = nullptr;
+ if (VPValue *VPMask = getMask())
+ Mask = State.get(VPMask, Part);
+ else
+ Mask = Builder.CreateVectorSplat(
+ VTy->getElementCount(), ConstantInt::getTrue(Builder.getInt1Ty()));
+
+ // Not sure how to make IncAmt stay scalar yet. For now just extract the
----------------
fhahn wrote:
Sufficient to implement `VPHistogramRecipe::onlyFirstLaneUsed` and return true for the inc operand?
https://github.com/llvm/llvm-project/pull/99851
More information about the llvm-commits
mailing list