[LLVMdev] Fixed DSGraph iteration, depth first search, etc...

Chris Lattner sabre at nondot.org
Mon Nov 18 15:52:01 PST 2002


The following now works for me:

    const DSNode *N1 = ...;
    df_iterator<const DSNode*> X1 = df_begin(N1), XE1 = df_end(N1);

    DSNode *N2 = ...;
    df_iterator<DSNode*> X2 = df_begin(N2), XE2 = df_end(N2);

You need the following #includes:

#include "Support/DepthFirstIterator.h"
#include "llvm/Analysis/DSGraphTraits.h"

You need this patch:
http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20021118/001623.html

and this patch:
http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20021118/001628.html

Unfortunately, I hadn't commited a bunch of stuff before I did this, so
there are some extra things mixed in with the second patch.  The following
hunks should be enough to get DSNode iteration working (with the first
linked patch):

--- llvm/include/llvm/Analysis/DSSupport.h:1.7	Sun Nov 10 17:46:51 2002
+++ llvm/include/llvm/Analysis/DSSupport.h	Mon Nov 18 15:45:07 2002
@@ -20,7 +20,6 @@

 class DSNode;                  // Each node in the graph
 class DSGraph;                 // A graph for a function
-class DSNodeIterator;          // Data structure graph traversal iterator

 namespace DS { // FIXME: After the paper, this should get cleaned up
   enum { PointerShift = 3,     // 64bit ptrs = 3, 32 bit ptrs = 2

--- llvm/include/llvm/Analysis/DSNode.h:1.14	Sun Nov 10 00:48:24 2002
+++ llvm/include/llvm/Analysis/DSNode.h	Mon Nov 18 15:45:30 2002
@@ -8,6 +8,8 @@
 #define LLVM_ANALYSIS_DSNODE_H

 #include "llvm/Analysis/DSSupport.h"
+template<typename BaseType>
+class DSNodeIterator;          // Data structure graph traversal iterator


//===----------------------------------------------------------------------===//
 /// DSNode - Data structure node class
@@ -76,11 +79,13 @@
     assert(Referrers.empty() && "Referrers to dead node exist!");
   }

-  // Iterator for graph interface...
-  typedef DSNodeIterator iterator;
-  typedef DSNodeIterator const_iterator;
-  inline iterator begin() const;   // Defined in DSGraphTraits.h
-  inline iterator end() const;
+  // Iterator for graph interface... Defined in DSGraphTraits.h
+  typedef DSNodeIterator<DSNode> iterator;
+  typedef DSNodeIterator<const DSNode> const_iterator;
+  inline iterator begin();
+  inline iterator end();
+  inline const_iterator begin() const;
+  inline const_iterator end() const;

   //===--------------------------------------------------
   // Accessors

-Chris

-- 
http://llvm.cs.uiuc.edu/
http://www.nondot.org/~sabre/Projects/





More information about the llvm-dev mailing list