17 AddForksToRegion(module.Rvsdg().GetRootRegion());
33 for (
const auto argument : region.
Arguments())
35 if (argument->nusers() > 1)
39 for (
auto & node : region.
Nodes())
51 for (
size_t n = 0;
n < node.noutputs();
n++)
53 const auto output = node.output(
n);
54 if (output->nusers() > 1)
71 while (output.
nusers() != 1)
92 return node !=
nullptr ? node->ninputs() == 0 :
false;
static jlm::util::StatisticsCollector statisticsCollector
void Run(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
static bool IsConstantFork(const rvsdg::Output &output)
static void CreateAndRun(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector)
~ForkInsertion() noexcept override
static void AddForksToRegion(rvsdg::Region ®ion)
static void AddForkToOutput(rvsdg::Output &output)
static rvsdg::Node & CreateNode(const size_t numResults, rvsdg::Output &operand, const bool isConstant=false)
size_t nusers() const noexcept
Represent acyclic RVSDG subgraphs.
RegionArgumentRange Arguments() noexcept
NodeRange Nodes() noexcept
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.