6#ifndef JLM_RVSDG_STRUCTURAL_NODE_HPP
7#define JLM_RVSDG_STRUCTURAL_NODE_HPP
20class StructuralOperation;
21class StructuralOutput;
70 input(
size_t index)
const noexcept;
73 output(
size_t index)
const noexcept;
161template<
class TOperation>
166 std::is_base_of_v<Operation, TOperation>,
167 "Template parameter TOperation must be derived from rvsdg::Operation.");
199template<
class TNodeType>
204 std::is_base_of_v<Node, TNodeType>,
205 "Template parameter TNodeType must be derived from rvsdg::Node.");
Node * node() const noexcept
NodeInput * input(size_t index) const noexcept
NodeOutput * output(size_t index) const noexcept
rvsdg::Region * region() const noexcept
NodeOutput * addOutput(std::unique_ptr< NodeOutput > output)
NodeInput * addInput(std::unique_ptr< NodeInput > input, bool notifyRegion)
Represent acyclic RVSDG subgraphs.
static bool containsNodeType(const Region ®ion, bool checkSubregions)
static bool containsOperation(const Region ®ion, bool checkSubregions)
rvsdg::StructuralNode * node() const noexcept
NodeRange Nodes() noexcept
SubregionConstIteratorRange Subregions() const
util::PtrIterator< const Region, std::vector< std::unique_ptr< Region > >::const_iterator > SubregionConstIterator
std::string DebugString() const override
~StructuralNode() noexcept override
StructuralInput * addInput(std::unique_ptr< StructuralInput > input, bool notifyRegion)
StructuralOutput * addOutput(std::unique_ptr< StructuralOutput > input)
SubregionIteratorRange Subregions()
util::IteratorRange< SubregionIterator > SubregionIteratorRange
std::vector< std::unique_ptr< rvsdg::Region > > subregions_
util::PtrIterator< Region, std::vector< std::unique_ptr< Region > >::iterator > SubregionIterator
rvsdg::Region * subregion(size_t index) const noexcept
size_t nsubregions() const noexcept
StructuralOutput * output(size_t index) const noexcept
StructuralInput * input(size_t index) const noexcept
util::IteratorRange< SubregionConstIterator > SubregionConstIteratorRange
~StructuralOutput() noexcept override
StructuralNode * node() const noexcept
jlm::util::IntrusiveList< RegionResult, RegionResult::structural_output_accessor > result_list
jlm::util::IntrusiveList< RegionArgument, RegionArgument::structural_input_accessor > argument_list
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.