6 #ifndef JLM_RVSDG_NODENORMALIZATION_HPP
7 #define JLM_RVSDG_NODENORMALIZATION_HPP
23 template<
class TOperation>
25 std::optional<std::vector<Output *>>(
const TOperation &,
const std::vector<Output *> &)>;
27 template<
class TOperation>
28 std::optional<std::vector<Output *>>
31 const TOperation & operation,
32 const std::vector<Output *> &
operands)
34 for (
auto & nodeNormalization : nodeNormalizations)
36 if (
auto results = nodeNormalization(operation,
operands))
45 template<
class TOperation>
49 auto operation = util::assertedCast<const TOperation>(&node.
GetOperation());
52 if (
auto results = nodeNormalization(*operation,
operands))
const SimpleOperation & GetOperation() const noexcept override
bool ReduceNode(const NodeNormalization< TOperation > &nodeNormalization, SimpleNode &node)
std::optional< std::vector< Output * > > NormalizeSequence(const std::vector< NodeNormalization< TOperation >> &nodeNormalizations, const TOperation &operation, const std::vector< Output * > &operands)
static void remove(Node *node)
static std::vector< jlm::rvsdg::Output * > operands(const Node *node)
static void divert_users(Node *node, const std::vector< Output * > &outputs)
std::function< std::optional< std::vector< Output * > >(const TOperation &, const std::vector< Output * > &)> NodeNormalization