[llvm] [VPlan] Add VPExpressionRecipe, replacing extended reduction recipes. (PR #144281)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 1 13:34:04 PDT 2025
================
@@ -2563,30 +2563,182 @@ InstructionCost VPReductionRecipe::computeCost(ElementCount VF,
Ctx.CostKind);
}
-InstructionCost
-VPExtendedReductionRecipe::computeCost(ElementCount VF,
- VPCostContext &Ctx) const {
- unsigned Opcode = RecurrenceDescriptor::getOpcode(getRecurrenceKind());
+VPExpressionRecipe::VPExpressionRecipe(
+ ExpressionTypes ExpressionType,
+ ArrayRef<VPSingleDefRecipe *> ExpressionRecipes)
+ : VPSingleDefRecipe(VPDef::VPExpressionSC, {}, {}),
+ ExpressionRecipes(SetVector<VPSingleDefRecipe *>(
+ ExpressionRecipes.begin(), ExpressionRecipes.end())
+ .takeVector()),
+ ExpressionType(ExpressionType) {
+ assert(!ExpressionRecipes.empty() && "Nothing to combine?");
+ assert(
+ none_of(ExpressionRecipes,
+ [](VPSingleDefRecipe *R) { return R->mayHaveSideEffects(); }) &&
+ "expression cannot contain recipes with side-effects");
+
+ // Maintain a copy of the expression recipes as a set of users.
+ SmallPtrSet<VPUser *, 4> ExpressionRecipesAsSetOfUsers;
+ for (auto *R : ExpressionRecipes)
+ ExpressionRecipesAsSetOfUsers.insert(R);
----------------
ayalz wrote:
Is this copy still needed, if VPExpressionRecipe holds its expression recipes in a SetVector?
https://github.com/llvm/llvm-project/pull/144281
More information about the llvm-commits
mailing list