18 Name_(std::move(name))
38 std::unique_ptr<GraphImport> graphImport(
45 Name_(std::move(name))
65 throw std::logic_error(
"Cannot create a GraphExport on a non-root region.");
67 std::unique_ptr<GraphExport> graphExport(
new GraphExport(
origin, std::move(name)));
68 return static_cast<GraphExport &
>(graphExport->region()->addResult(std::move(graphExport)));
75 RootRegion_(new
Region(
nullptr, this))
78 std::unique_ptr<Graph>
82 auto graph = std::make_unique<Graph>();
87 auto & importCopy =
import->Copy(graph->GetRootRegion(),
nullptr);
88 substitutionMap.
insert(
import, &importCopy);
97 auto & newOrigin = substitutionMap.
lookup(*xport->origin());
98 xport->Copy(newOrigin,
nullptr);
109 auto IsRootRegionExport = [](
const rvsdg::Input * input)
111 if (!input->region()->IsRootRegion())
116 if (TryGetOwnerNode<Node>(*input))
124 for (
auto & user : output.Users())
126 if (!IsRootRegionExport(&user))
137 std::vector<Node *> nodes;
138 for (
auto & bottomNode : rootRegion.BottomNodes())
140 nodes.push_back(&bottomNode);
143 for (
size_t n = 0; n < rootRegion.nresults(); n++)
146 if (IsOnlyExported(*output))
148 nodes.push_back(rvsdg::TryGetOwnerNode<Node>(*output));
const std::string & Name() const noexcept
std::string debug_string() const override
static GraphExport & Create(Output &origin, std::string name)
GraphExport & Copy(Output &origin, StructuralOutput *output) const override
GraphExport(Output &origin, std::string name)
GraphImport & Copy(Region ®ion, StructuralInput *input) const override
static GraphImport & Create(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
const std::string & Name() const noexcept
std::string debug_string() const override
GraphImport(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
static std::vector< Node * > ExtractTailNodes(const Graph &rvsdg)
std::unique_ptr< Graph > Copy() const
Region & GetRootRegion() const noexcept
rvsdg::Region * region() const noexcept
Represents the argument of a region.
Represents the result of a region.
StructuralOutput * output() const noexcept
Represent acyclic RVSDG subgraphs.
RegionResult * result(size_t index) const noexcept
RegionArgument & addArgument(std::unique_ptr< RegionArgument > argument)
void copy(Region *target, SubstitutionMap &smap) const
Copy a region with substitutions.
Graph * graph() const noexcept
bool IsRootRegion() const noexcept
void insert(const Output *original, Output *substitute)
Output & lookup(const Output &original) const
static std::string type(const Node *n)
static std::string strfmt(Args... args)