21 std::vector<jlm::rvsdg::Input *> branches;
25 for (
size_t i = 0; i < theta.
ninputs(); i++)
31 && !jlm::rvsdg::is<jlm::llvm::MemoryStateType>(loopvar.input->Type()))
33 smap.
insert(loopvar.pre, loop->addLoopConstant(loopvar.input->origin()));
34 branches.push_back(
nullptr);
37 loopvar.output->divert_users(loopvar.input->origin());
42 loop->AddLoopVar(loopvar.input->origin(), &buffer);
43 smap.
insert(loopvar.pre, buffer);
47 loopvar.output->divert_users(loop->output(loop->noutputs() - 1));
56 for (
size_t i = 0; i < theta.
ninputs(); i++)
73 for (
size_t n = 0; n < structuralNode.
nsubregions(); n++)
static LoopNode * create(rvsdg::Region *parent, bool init=true)
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
~ThetaNodeConversion() noexcept override
Region & GetRootRegion() const noexcept
rvsdg::Region * region() const noexcept
size_t ninputs() const noexcept
Represent acyclic RVSDG subgraphs.
void copy(Region *target, SubstitutionMap &smap) const
Copy a region with substitutions.
size_t nsubregions() const noexcept
StructuralInput * input(size_t index) const noexcept
rvsdg::Region * subregion(size_t index) const noexcept
void insert(const Output *original, Output *substitute)
Output & lookup(const Output &original) const
RegionResult * predicate() const noexcept
rvsdg::Region * subregion() const noexcept
LoopVar MapInputLoopVar(const rvsdg::Input &input) const
Maps variable at entry to full varibale description.
static void ConvertThetaNodesInRegion(rvsdg::Region ®ion)
static void ConvertThetaNode(rvsdg::ThetaNode &theta)
static void ConvertThetaNodesInStructuralNode(rvsdg::StructuralNode &structuralNode)
static bool ThetaLoopVarIsInvariant(const ThetaNode::LoopVar &loopVar) noexcept
static void remove(Node *node)
rvsdg::Input * post
Variable after iteration (output result from subregion).