Expanded graph visualization interface to include specifying a range of
nodes to use a trim sources.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48236 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/GRExprEngine.cpp b/Analysis/GRExprEngine.cpp
index 15fe88ec..6d1c03d 100644
--- a/Analysis/GRExprEngine.cpp
+++ b/Analysis/GRExprEngine.cpp
@@ -1814,28 +1814,39 @@
 #endif
 
 void GRExprEngine::ViewGraph(bool trim) {
-#ifndef NDEBUG
-  GraphPrintCheckerState = this;
-  GraphPrintSourceManager = &getContext().getSourceManager();
-  
+#ifndef NDEBUG  
   if (trim) {
     llvm::SmallVector<NodeTy*, 10> Sources;
     AddSources(Sources, null_derefs_begin(), null_derefs_end());
     AddSources(Sources, undef_derefs_begin(), undef_derefs_end());
     
-    GRExprEngine::GraphTy* TrimmedG = G.Trim(&Sources[0],
-                                             &Sources[0]+Sources.size());
-    
-    if (!TrimmedG)
-      llvm::cerr << "warning: Trimmed ExplodedGraph is empty.\n";
-    else {
-      llvm::ViewGraph(*TrimmedG->roots_begin(), "TrimmedGRExprEngine");    
-      delete TrimmedG;
-    }
+    ViewGraph(&Sources[0], &Sources[0]+Sources.size());
   }
-  else
+  else {
+    GraphPrintCheckerState = this;
+    GraphPrintSourceManager = &getContext().getSourceManager();
+
     llvm::ViewGraph(*G.roots_begin(), "GRExprEngine");
+    
+    GraphPrintCheckerState = NULL;
+    GraphPrintSourceManager = NULL;
+  }
+#endif
+}
+
+void GRExprEngine::ViewGraph(NodeTy** Beg, NodeTy** End) {
+#ifndef NDEBUG
+  GraphPrintCheckerState = this;
+  GraphPrintSourceManager = &getContext().getSourceManager();
   
+  GRExprEngine::GraphTy* TrimmedG = G.Trim(Beg, End);
+
+  if (!TrimmedG)
+    llvm::cerr << "warning: Trimmed ExplodedGraph is empty.\n";
+  else {
+    llvm::ViewGraph(*TrimmedG->roots_begin(), "TrimmedGRExprEngine");    
+    delete TrimmedG;
+  }  
   
   GraphPrintCheckerState = NULL;
   GraphPrintSourceManager = NULL;