6 #ifndef JLM_LLVM_IR_CFG_NODE_HPP
7 #define JLM_LLVM_IR_CFG_NODE_HPP
14 #include <unordered_set>
21 class ControlFlowGraph;
22 class ControlFlowGraphNode;
32 size_t index) noexcept;
88 PtrIterator<ControlFlowGraphEdge, std::unordered_set<ControlFlowGraphEdge *>::const_iterator>;
93 std::vector<std::unique_ptr<ControlFlowGraphEdge>>::const_iterator>;
143 edge->sink()->inedges_.erase(edge);
173 if (
this == new_successor)
217 std::is_base_of<ControlFlowGraphNode, T>::value,
218 "Template parameter T must be derived from jlm::ControlFlowGraphNode.");
220 return dynamic_cast<const T *
>(node) !=
nullptr;
size_t index() const noexcept
ControlFlowGraphNode * sink_
~ControlFlowGraphEdge() noexcept=default
friend ControlFlowGraphNode
ControlFlowGraphNode * sink() const noexcept
bool is_selfloop() const noexcept
ControlFlowGraphNode * source_
void divert(ControlFlowGraphNode *new_sink)
ControlFlowGraphNode * source() const noexcept
bool single_successor() const noexcept
util::IteratorRange< inedge_iterator > inedge_iterator_range
bool is_branch() const noexcept
std::vector< std::unique_ptr< ControlFlowGraphEdge > > outedges_
ControlFlowGraphEdge * add_outedge(ControlFlowGraphNode *sink)
inedge_iterator_range InEdges() const
friend ControlFlowGraphEdge
bool single_predecessor() const noexcept
ControlFlowGraphEdge * OutEdge(size_t n) const
std::unordered_set< ControlFlowGraphEdge * > inedges_
bool has_selfloop_edge() const noexcept
size_t NumInEdges() const noexcept
util::PtrIterator< ControlFlowGraphEdge, std::vector< std::unique_ptr< ControlFlowGraphEdge > >::const_iterator > outedge_iterator
virtual ~ControlFlowGraphNode() noexcept
bool no_predecessor() const noexcept
util::PtrIterator< ControlFlowGraphEdge, std::unordered_set< ControlFlowGraphEdge * >::const_iterator > inedge_iterator
ControlFlowGraph & cfg() const noexcept
outedge_iterator_range OutEdges() const
void remove_outedge(size_t n)
bool no_successor() const noexcept
size_t NumOutEdges() const noexcept
void divert_inedges(llvm::ControlFlowGraphNode *new_successor)
util::IteratorRange< outedge_iterator > outedge_iterator_range
Global memory state passed between functions.
static bool is(const AggregationNode *node)