Template Function sequant::opt::eliminate_common_subexpressions(VectorLike&, std::size_t, std::size_t, const Transformer&, const CSEOptions<std::ranges::range_value_t<VectorLike>>)

Function Documentation

template<std::ranges::range VectorLike, std::regular_invocable<ExprPtr> Transformer, bool force_hash_collisions = false>
std::vector<std::size_t> sequant::opt::eliminate_common_subexpressions(VectorLike &expr_trees, std::size_t expr_begin, std::size_t expr_end, const Transformer &expr_to_tree, const CSEOptions<std::ranges::range_value_t<VectorLike>> opts = {})

Takes the range of expression trees and performs common subexpression elimination on them. Evaluation trees for intermediates are inserted into the given container as needed.

Parameters:
  • expr_trees – Container (vector-like) of evaluation trees

  • expr_to_tree – Functor that can convert ExprPtr and ResultExpr objects into suitable evaluation trees

  • filter_predicate – A predicate to filter out subexpressions that shall not be eliminated