summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2015-08-03 16:37:12 +0000
committerTobias Grosser <tobias@grosser.es>2015-08-03 16:37:12 +0000
commitb9c77ae5ae114998949b05140c5311e21c110576 (patch)
treed82ff430384a2db4eead6795787acb7c7dc8505f
parente8aad2998467f0a47ed39041056c62a936f93018 (diff)
downloadbcm5719-llvm-b9c77ae5ae114998949b05140c5311e21c110576.tar.gz
bcm5719-llvm-b9c77ae5ae114998949b05140c5311e21c110576.zip
Allow derived DOTViewers to choose the functions to illustrate
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
-rw-r--r--llvm/include/llvm/Analysis/DOTGraphTraitsPass.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h b/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h
index cb74e9f32d3..3b2c0cb2b15 100644
--- a/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h
+++ b/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h
@@ -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;
OpenPOWER on IntegriCloud