Allow derived DOTViewers to choose the functions to illustrate
authorTobias Grosser <tobias@grosser.es>
Mon, 3 Aug 2015 16:37:12 +0000 (16:37 +0000)
committerTobias Grosser <tobias@grosser.es>
Mon, 3 Aug 2015 16:37:12 +0000 (16:37 +0000)
Instead of always showing/printing all functions, a class derived from
the DOTViewer class can overwrite the set of functions that will be
processed.

This will be used (and tested) by Polly's scop viewers, but other users
can be imagined as well.

llvm-svn: 243881

llvm/include/llvm/Analysis/DOTGraphTraitsPass.h

index cb74e9f..3b2c0cb 100644 (file)
@@ -36,7 +36,18 @@ public:
   DOTGraphTraitsViewer(StringRef GraphName, char &ID)
       : FunctionPass(ID), Name(GraphName) {}
 
+  /// @brief Return true if this function should be processed.
+  ///
+  /// An implementation of this class my override this function to indicate that
+  /// only certain functions should be viewed.
+  virtual bool processFunction(Function &F) {
+    return true;
+  }
+
   bool runOnFunction(Function &F) override {
+    if (!processFunction(F))
+      return false;
+
     GraphT Graph = AnalysisGraphTraitsT::getGraph(&getAnalysis<AnalysisT>());
     std::string GraphName = DOTGraphTraits<GraphT>::getGraphName(Graph);
     std::string Title = GraphName + " for '" + F.getName().str() + "' function";
@@ -63,7 +74,18 @@ public:
   DOTGraphTraitsPrinter(StringRef GraphName, char &ID)
       : FunctionPass(ID), Name(GraphName) {}
 
+  /// @brief Return true if this function should be processed.
+  ///
+  /// An implementation of this class my override this function to indicate that
+  /// only certain functions should be printed.
+  virtual bool processFunction(Function &F) {
+    return true;
+  }
+
   bool runOnFunction(Function &F) override {
+    if (!processFunction(F))
+      return false;
+
     GraphT Graph = AnalysisGraphTraitsT::getGraph(&getAnalysis<AnalysisT>());
     std::string Filename = Name + "." + F.getName().str() + ".dot";
     std::error_code EC;