[PATCH] D42698: [GraphTraits] Add support for iterating over children edges.
Daniel Berlin via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 30 13:48:01 PST 2018
Looks fine to me.
On Tue, Jan 30, 2018 at 11:34 AM, Easwaran Raman via Phabricator <
reviews at reviews.llvm.org> wrote:
> eraman created this revision.
> eraman added reviewers: dberlin, davidxl.
>
> This change is mostly adding comments to GraphTraits describing
> interfaces to iterate over children edges of a node. These will
> have to be implemented by specializations of GraphTraits. The
> non-comment change is the addition of children_edges template
> function that returns an iterator range.
>
> The motivation for this is to use it in synthetic count propagation
> algorithm and remove the CallGraphTraits class that provide similar
> interfaces.
>
>
> Repository:
> rL LLVM
>
> https://reviews.llvm.org/D42698
>
> Files:
> include/llvm/ADT/GraphTraits.h
>
>
> Index: include/llvm/ADT/GraphTraits.h
> ===================================================================
> --- include/llvm/ADT/GraphTraits.h
> +++ include/llvm/ADT/GraphTraits.h
> @@ -47,6 +47,19 @@
> // static nodes_iterator nodes_end (GraphType *G)
> // nodes_iterator/begin/end - Allow iteration over all nodes in the
> graph
>
> + // typedef EdgeRef - Type of Edge token in the graph, which
> should
> + // be cheap to copy.
> + // typedef ChildEdgeIteratorType - Type used to iterate over children
> edges in
> + // graph, dereference to a EdgeRef.
> +
> + // static ChildEdgeIteratorType child_edge_begin(NodeRef)
> + // static ChildEdgeIteratorType child_edge_end(NodeRef)
> + // Return iterators that point to the beginning and ending of the
> + // edge list for the given callgraph node.
> + //
> + // static NodeRef edge_dest(EdgeRef)
> + // Return the destination node of an edge.
> +
> // static unsigned size (GraphType *G)
> // Return total number of nodes in the graph
>
> @@ -111,6 +124,13 @@
> GraphTraits<Inverse<GraphType>>::child_end(G));
> }
>
> +template <class GraphType>
> +iterator_range<typename GraphTraits<GraphType>::ChildEdgeIteratorType>
> +children_edges(const typename GraphTraits<GraphType>::NodeRef &G) {
> + return make_range(GraphTraits<GraphType>::child_edge_begin(G),
> + GraphTraits<GraphType>::child_edge_end(G));
> +}
> +
> } // end namespace llvm
>
> #endif // LLVM_ADT_GRAPHTRAITS_H
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180130/15f162f3/attachment.html>
More information about the llvm-commits
mailing list