DOTGraphTraits: Allow the decision to show a graph to consider the analysis
authorTobias Grosser <tobias@grosser.es>
Thu, 17 Dec 2015 12:48:25 +0000 (12:48 +0000)
committerTobias Grosser <tobias@grosser.es>
Thu, 17 Dec 2015 12:48:25 +0000 (12:48 +0000)
The method processFunction() is called to decide if a graph should be shown for
a certain function. To allow DOTGraphTraitViewers to take this decision based
on the analysis results for the given function, we forward a reference to the
analysis result. This will be used by Polly to only visualize functions where
interesting loop regions have been detected.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255889 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DOTGraphTraitsPass.h

index 3b2c0cb..ca50ee2 100644 (file)
@@ -40,15 +40,19 @@ public:
   ///
   /// An implementation of this class my override this function to indicate that
   /// only certain functions should be viewed.
   ///
   /// An implementation of this class my override this function to indicate that
   /// only certain functions should be viewed.
-  virtual bool processFunction(Function &F) {
+  ///
+  /// @param Analysis The current analysis result for this function.
+  virtual bool processFunction(Function &F, AnalysisT &Analysis) {
     return true;
   }
 
   bool runOnFunction(Function &F) override {
     return true;
   }
 
   bool runOnFunction(Function &F) override {
-    if (!processFunction(F))
+    auto &Analysis = getAnalysis<AnalysisT>();
+
+    if (!processFunction(F, Analysis))
       return false;
 
       return false;
 
-    GraphT Graph = AnalysisGraphTraitsT::getGraph(&getAnalysis<AnalysisT>());
+    GraphT Graph = AnalysisGraphTraitsT::getGraph(&Analysis);
     std::string GraphName = DOTGraphTraits<GraphT>::getGraphName(Graph);
     std::string Title = GraphName + " for '" + F.getName().str() + "' function";
 
     std::string GraphName = DOTGraphTraits<GraphT>::getGraphName(Graph);
     std::string Title = GraphName + " for '" + F.getName().str() + "' function";
 
@@ -78,15 +82,19 @@ public:
   ///
   /// An implementation of this class my override this function to indicate that
   /// only certain functions should be printed.
   ///
   /// An implementation of this class my override this function to indicate that
   /// only certain functions should be printed.
-  virtual bool processFunction(Function &F) {
+  ///
+  /// @param Analysis The current analysis result for this function.
+  virtual bool processFunction(Function &F, AnalysisT &Analysis) {
     return true;
   }
 
   bool runOnFunction(Function &F) override {
     return true;
   }
 
   bool runOnFunction(Function &F) override {
-    if (!processFunction(F))
+    auto &Analysis = getAnalysis<AnalysisT>();
+
+    if (!processFunction(F, Analysis))
       return false;
 
       return false;
 
-    GraphT Graph = AnalysisGraphTraitsT::getGraph(&getAnalysis<AnalysisT>());
+    GraphT Graph = AnalysisGraphTraitsT::getGraph(&Analysis);
     std::string Filename = Name + "." + F.getName().str() + ".dot";
     std::error_code EC;
 
     std::string Filename = Name + "." + F.getName().str() + ".dot";
     std::error_code EC;