28 for (
size_t s = 0; s < gammaNode.
nsubregions(); s++)
30 substitutionMap.
insert(entryvar.branchArgument[s], branchResults[s]);
34 for (
size_t s = 0; s < gammaNode.
nsubregions(); s++)
41 std::vector<rvsdg::Output *> alternatives;
42 for (
size_t s = 0; s < gammaNode.
nsubregions(); s++)
44 alternatives.push_back(&substitutionMap.
lookup(*ex.branchResult[s]->origin()));
51 ex.output->divert_users(mux[0]);
65 for (
size_t s = 0; s < gammaNode.
nsubregions(); s++)
67 substitutionMap.
insert(entryvar.branchArgument[s], entryvar.input->origin());
71 for (
size_t s = 0; s < gammaNode.
nsubregions(); s++)
78 std::vector<rvsdg::Output *> alternatives;
79 for (
size_t s = 0; s < gammaNode.
nsubregions(); s++)
81 alternatives.push_back(&substitutionMap.
lookup(*ex.branchResult[s]->origin()));
87 ex.output->divert_users(merge[0]);
96 for (
size_t i = 0; i < gammaNode.
noutputs(); ++i)
98 auto gammaOutput = gammaNode.
output(i);
106 for (
size_t i = 0; i < gammaNode.
nsubregions(); ++i)
123 else if (rvsdg::is<rvsdg::StructuralOperation>(&node))
125 throw util::Error(
"Unexpected structural node: " + node.DebugString());
139 for (
size_t n = 0; n < structuralNode.
nsubregions(); n++)
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &predicate, jlm::rvsdg::Output &value, bool loop=false)
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
~GammaNodeConversion() noexcept override
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &predicate, const std::vector< jlm::rvsdg::Output * > &alternatives, bool discarding, bool loop=false)
Conditional operator / pattern matching.
std::vector< ExitVar > GetExitVars() const
Gets all exit variables for this gamma.
std::vector< EntryVar > GetEntryVars() const
Gets all entry variables for this gamma.
rvsdg::Input * predicate() const noexcept
Region & GetRootRegion() const noexcept
rvsdg::Region * region() const noexcept
size_t noutputs() const noexcept
Represent acyclic RVSDG subgraphs.
void copy(Region *target, SubstitutionMap &smap) const
Copy a region with substitutions.
NodeRange Nodes() noexcept
size_t nsubregions() const noexcept
StructuralOutput * output(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
static void ConvertGammaNodeWithoutSpeculation(rvsdg::GammaNode &gammaNode)
static void ConvertGammaNodeWithSpeculation(rvsdg::GammaNode &gammaNode)
static void ConvertGammaNodesInStructuralNode(rvsdg::StructuralNode &structuralNode)
static bool CanGammaNodeBeSpeculative(const rvsdg::GammaNode &gammaNode)
static void ConvertGammaNodesInRegion(rvsdg::Region ®ion)
static void remove(Node *node)
@ State
Designate a state type.