Jlm
Loading...
Searching...
No Matches
Gamma.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2026 Nico Reißmann <nico.reissmann@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
8#include <jlm/rvsdg/gamma.hpp>
10
11namespace jlm::llvm
12{
13
14bool
16{
17 const auto & tracedPredicate = llvm::traceOutput(*gammaNode.predicate()->origin());
18 auto [ctlConstantNode, ctlConstantOperation] =
20 if (!ctlConstantOperation)
21 {
22 return false;
23 }
24
25 const auto ctlAlternative = ctlConstantOperation->value().alternative();
26
28 for (const auto & [input, branchArgument] : gammaNode.GetEntryVars())
29 smap.insert(branchArgument[ctlAlternative], input->origin());
30
31 gammaNode.subregion(ctlAlternative)->copy(gammaNode.region(), smap);
32
33 for (auto [branchResult, output] : gammaNode.GetExitVars())
34 output->divert_users(&smap.lookup(*branchResult[ctlAlternative]->origin()));
35
36 remove(&gammaNode);
37 return true;
38}
39
40}
Conditional operator / pattern matching.
Definition gamma.hpp:99
std::vector< ExitVar > GetExitVars() const
Gets all exit variables for this gamma.
Definition gamma.cpp:381
std::vector< EntryVar > GetEntryVars() const
Gets all entry variables for this gamma.
Definition gamma.cpp:305
rvsdg::Input * predicate() const noexcept
Definition gamma.hpp:487
Output * origin() const noexcept
Definition node.hpp:58
rvsdg::Region * region() const noexcept
Definition node.hpp:761
void copy(Region *target, SubstitutionMap &smap) const
Copy a region with substitutions.
Definition region.cpp:317
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)
Definition Trace.cpp:62
bool reduceStaticallyKnownPredicate(rvsdg::GammaNode &gammaNode)
Definition Gamma.cpp:15
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872