Add an unwind_to field to basic blocks, making them Users instead of Values.
[oota-llvm.git] / include / llvm / Support / DOTGraphTraits.h
index 7196e51f8cbcdad05f293e39b235e62162391cfc..080c09b5f48eb733fbf3c5c3f44c1dab5e4af453 100644 (file)
@@ -1,10 +1,10 @@
 //===-- llvm/Support/DotGraphTraits.h - Customize .dot output ---*- C++ -*-===//
-// 
+//
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
 //===----------------------------------------------------------------------===//
 //
 // This file defines a template class that can be used to customize dot output
@@ -30,24 +30,45 @@ struct DefaultDOTGraphTraits {
   /// getGraphName - Return the label for the graph as a whole.  Printed at the
   /// top of the graph.
   ///
-  static std::string getGraphName(const void *Graph) { return ""; }
+  template<typename GraphType>
+  static std::string getGraphName(const GraphType& Graph) { return ""; }
 
   /// getGraphProperties - Return any custom properties that should be included
   /// in the top level graph structure for dot.
   ///
-  static std::string getGraphProperties(const void *Graph) {
+  template<typename GraphType>
+  static std::string getGraphProperties(const GraphType& Graph) {
     return "";
   }
 
+  /// renderGraphFromBottomUp - If this function returns true, the graph is
+  /// emitted bottom-up instead of top-down.  This requires graphviz 2.0 to work
+  /// though.
+  static bool renderGraphFromBottomUp() {
+    return false;
+  }
+
   /// getNodeLabel - Given a node and a pointer to the top level graph, return
   /// the label to print in the node.
-  static std::string getNodeLabel(const void *Node, const void *Graph) {
+  template<typename GraphType>
+  static std::string getNodeLabel(const void *Node, const GraphType& Graph) {
     return "";
   }
+  
+  /// hasNodeAddressLabel - If this method returns true, the address of the node
+  /// is added to the label of the node.
+  template<typename GraphType>
+  static bool hasNodeAddressLabel(const void *Node, const GraphType& Graph) {
+    return false;
+  }
 
   /// If you want to specify custom node attributes, this is the place to do so
   ///
-  static std::string getNodeAttributes(const void *Node) { return ""; }
+  template<typename GraphType>
+  static std::string getNodeAttributes(const void *Node,
+                                       const GraphType& Graph) {
+    return "";
+  }
 
   /// If you want to override the dot attributes printed for a particular edge,
   /// override this method.
@@ -85,8 +106,8 @@ struct DefaultDOTGraphTraits {
   /// GraphType is passed in as an argument.  You may call arbitrary methods on
   /// it to add things to the output graph.
   ///
-  template<typename GraphWriter>
-  static void addCustomGraphFeatures(const void *Graph, GraphWriter &GW) {}
+  template<typename GraphType, typename GraphWriter>
+  static void addCustomGraphFeatures(const GraphType& Graph, GraphWriter &GW) {}
 };