Fix PR1816, by correcting the broken definition of APInt::countTrailingZeros.
[oota-llvm.git] / include / llvm / ADT / GraphTraits.h
index 99a69b8cc87f1cec52d2542004093872c93e0e42..853615e251451241f4d1b06a1b818a3c34cf2a34 100644 (file)
@@ -78,6 +78,26 @@ struct Inverse {
   inline Inverse(GraphType &G) : Graph(G) {}
 };
 
+// Provide a partial specialization of GraphTraits so that the inverse of an inverse
+// falls back to the original graph.
+template<class T>
+struct GraphTraits<Inverse<Inverse<T> > > {
+  typedef typename GraphTraits<T>::NodeType NodeType;
+  typedef typename GraphTraits<T>::ChildIteratorType ChildIteratorType;
+  
+  static NodeType *getEntryNode(Inverse<Inverse<T> > *G) {
+    return GraphTraits<T>::getEntryNode(G.Graph.Graph);
+  }
+  
+  static ChildIteratorType child_begin(NodeType* N) {
+    return GraphTraits<T>::child_begin(N);
+  }
+  
+  static ChildIteratorType child_end(NodeType* N) {
+    return GraphTraits<T>::child_end(N);
+  }
+};
+
 } // End llvm namespace
 
 #endif