19 for (
auto & node : region.
Nodes())
24 for (
auto & subregion : structuralNode->Subregions())
29 for (
auto & output : node.Outputs())
31 if (rvsdg::is<llvm::IOStateType>(output.Type()))
34 output.divert_users(&ioStateOperand);
45 const auto & graph = module.Rvsdg();
46 const auto rootRegion = &graph.GetRootRegion();
47 if (rootRegion->numNodes() != 1)
49 throw std::logic_error(
"Root should have only one node now");
52 const auto lambdaNode =
56 throw std::logic_error(
"Node needs to be a lambda");
60 *lambdaNode->subregion(),
~IOStateElimination() noexcept override
static void eliminateIOStates(rvsdg::Region ®ion, rvsdg::Output &ioStateArgument)
static rvsdg::Output & getIOStateArgument(const rvsdg::LambdaNode &lambdaNode) noexcept
Represent acyclic RVSDG subgraphs.
NodeRange Nodes() noexcept
Output & RouteToRegion(Output &output, Region ®ion)