18 auto [ctlConstantNode, ctlConstantOperation] =
20 if (!ctlConstantOperation)
25 const auto ctlAlternative = ctlConstantOperation->value().alternative();
28 for (
const auto & [input, branchArgument] : gammaNode.
GetEntryVars())
29 smap.
insert(branchArgument[ctlAlternative], input->origin());
33 for (
auto [branchResult, output] : gammaNode.
GetExitVars())
34 output->divert_users(&smap.
lookup(*branchResult[ctlAlternative]->origin()));
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
rvsdg::Region * region() const noexcept
void copy(Region *target, SubstitutionMap &smap) const
Copy a region with substitutions.
rvsdg::Region * subregion(size_t index) const noexcept
void insert(const Output *original, Output *substitute)
Output & lookup(const Output &original) const
Global memory state passed between functions.
rvsdg::Output & traceOutput(rvsdg::Output &output, const rvsdg::Region *withinRegion)
bool reduceStaticallyKnownPredicate(rvsdg::GammaNode &gammaNode)
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.