[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