[LLVMdev] [PATCH] ADT Fixups

Patrick Alexander Simmons simmon12 at cs.uiuc.edu
Mon Nov 16 10:09:05 PST 2009


Hello,

I posted an earlier version of this patch some months ago and realized 
I've still been sitting on it.  The earlier version of this patch was 
rejected for adding a cycle detection function to SCCIterator.h.  This 
function is now removed.

This patch makes the following changes:
1.  Allow SCCIterator to work with GraphT types that are constant.
2.  Allow SCCIterator to work with inverse graphs.
3.  Fix an incorrect comment in GraphTraits.h (the type in the comment 
was given as GraphType* when it is actually const GraphType &).

I think these changes should be pretty uncontroversial.  Would someone 
with commit authority please apply this for me?

--Patrick

Index: include/llvm/ADT/SCCIterator.h
===================================================================
--- include/llvm/ADT/SCCIterator.h      (revision 88920)
+++ include/llvm/ADT/SCCIterator.h      (working copy)
@@ -135,8 +135,8 @@
   typedef scc_iterator<GraphT, GT> _Self;

   // Provide static "constructors"...
-  static inline _Self begin(GraphT& G) { return 
_Self(GT::getEntryNode(G)); }
-  static inline _Self end  (GraphT& G) { return _Self(); }
+  static inline _Self begin(const GraphT& G) { return 
_Self(GT::getEntryNode(G)); }
+  static inline _Self end  (const GraphT& G) { return _Self(); }

   // Direct loop termination test (I.fini() is more efficient than I == 
end())
   inline bool fini() const {
@@ -185,15 +185,25 @@

 // Global constructor for the SCC iterator.
 template <class T>
-scc_iterator<T> scc_begin(T G) {
+scc_iterator<T> scc_begin(const T& G) {
   return scc_iterator<T>::begin(G);
 }

 template <class T>
-scc_iterator<T> scc_end(T G) {
+scc_iterator<T> scc_end(const T& G) {
   return scc_iterator<T>::end(G);
 }

+template <class T>
+scc_iterator<Inverse<T> > scc_begin(const Inverse<T>& G) {
+       return scc_iterator<Inverse<T> >::begin(G);
+}
+
+template <class T>
+scc_iterator<Inverse<T> > scc_end(const Inverse<T>& G) {
+       return scc_iterator<Inverse<T> >::end(G);
+}
+
 } // End llvm namespace

 #endif
Index: include/llvm/ADT/GraphTraits.h
===================================================================
--- include/llvm/ADT/GraphTraits.h      (revision 88920)
+++ include/llvm/ADT/GraphTraits.h      (working copy)
@@ -30,7 +30,7 @@
   // typedef NodeType          - Type of Node in the graph
   // typedef ChildIteratorType - Type used to iterate over children in 
graph

-  // static NodeType *getEntryNode(GraphType *)
+  // static NodeType *getEntryNode(const GraphType &)
   //    Return the entry node of the graph

   // static ChildIteratorType child_begin(NodeType *)




More information about the llvm-dev mailing list