diff options
author | Sriraman Tallam <tmsriram@google.com> | 2016-09-15 18:35:27 +0000 |
---|---|---|
committer | Sriraman Tallam <tmsriram@google.com> | 2016-09-15 18:35:27 +0000 |
commit | 06a67ba57d438066b3c679d5ee52dbe90ea8a605 (patch) | |
tree | da6417bfabaf4e87378be6f9861ef6cc3ff48d0e /llvm/lib/Analysis | |
parent | ab7ccf0ecbf998ccf6fe96abe12158cedb8799a2 (diff) | |
download | bcm5719-llvm-06a67ba57d438066b3c679d5ee52dbe90ea8a605.tar.gz bcm5719-llvm-06a67ba57d438066b3c679d5ee52dbe90ea8a605.zip |
[PM] Port CFGViewer and CFGPrinter to the new Pass Manager
Differential Revision: https://reviews.llvm.org/D24592
llvm-svn: 281640
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r-- | llvm/lib/Analysis/Analysis.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/Analysis/CFGPrinter.cpp | 111 |
2 files changed, 69 insertions, 50 deletions
diff --git a/llvm/lib/Analysis/Analysis.cpp b/llvm/lib/Analysis/Analysis.cpp index d31adfa90ed..635e3c793be 100644 --- a/llvm/lib/Analysis/Analysis.cpp +++ b/llvm/lib/Analysis/Analysis.cpp @@ -30,10 +30,10 @@ void llvm::initializeAnalysis(PassRegistry &Registry) { initializeCallGraphPrinterLegacyPassPass(Registry); initializeCallGraphViewerPass(Registry); initializeCostModelAnalysisPass(Registry); - initializeCFGViewerPass(Registry); - initializeCFGPrinterPass(Registry); - initializeCFGOnlyViewerPass(Registry); - initializeCFGOnlyPrinterPass(Registry); + initializeCFGViewerLegacyPassPass(Registry); + initializeCFGPrinterLegacyPassPass(Registry); + initializeCFGOnlyViewerLegacyPassPass(Registry); + initializeCFGOnlyPrinterLegacyPassPass(Registry); initializeCFLAndersAAWrapperPassPass(Registry); initializeCFLSteensAAWrapperPassPass(Registry); initializeDependenceAnalysisWrapperPassPass(Registry); diff --git a/llvm/lib/Analysis/CFGPrinter.cpp b/llvm/lib/Analysis/CFGPrinter.cpp index c86f1f55954..a85af6c9c93 100644 --- a/llvm/lib/Analysis/CFGPrinter.cpp +++ b/llvm/lib/Analysis/CFGPrinter.cpp @@ -23,10 +23,10 @@ using namespace llvm; namespace { - struct CFGViewer : public FunctionPass { + struct CFGViewerLegacyPass : public FunctionPass { static char ID; // Pass identifcation, replacement for typeid - CFGViewer() : FunctionPass(ID) { - initializeCFGOnlyViewerPass(*PassRegistry::getPassRegistry()); + CFGViewerLegacyPass() : FunctionPass(ID) { + initializeCFGViewerLegacyPassPass(*PassRegistry::getPassRegistry()); } bool runOnFunction(Function &F) override { @@ -42,14 +42,21 @@ namespace { }; } -char CFGViewer::ID = 0; -INITIALIZE_PASS(CFGViewer, "view-cfg", "View CFG of function", false, true) +char CFGViewerLegacyPass::ID = 0; +INITIALIZE_PASS(CFGViewerLegacyPass, "view-cfg", "View CFG of function", false, true) + +PreservedAnalyses CFGViewerPass::run(Function &F, + FunctionAnalysisManager &AM) { + F.viewCFG(); + return PreservedAnalyses::all(); +} + namespace { - struct CFGOnlyViewer : public FunctionPass { + struct CFGOnlyViewerLegacyPass : public FunctionPass { static char ID; // Pass identifcation, replacement for typeid - CFGOnlyViewer() : FunctionPass(ID) { - initializeCFGOnlyViewerPass(*PassRegistry::getPassRegistry()); + CFGOnlyViewerLegacyPass() : FunctionPass(ID) { + initializeCFGOnlyViewerLegacyPassPass(*PassRegistry::getPassRegistry()); } bool runOnFunction(Function &F) override { @@ -65,29 +72,39 @@ namespace { }; } -char CFGOnlyViewer::ID = 0; -INITIALIZE_PASS(CFGOnlyViewer, "view-cfg-only", +char CFGOnlyViewerLegacyPass::ID = 0; +INITIALIZE_PASS(CFGOnlyViewerLegacyPass, "view-cfg-only", "View CFG of function (with no function bodies)", false, true) +PreservedAnalyses CFGOnlyViewerPass::run(Function &F, + FunctionAnalysisManager &AM) { + F.viewCFGOnly(); + return PreservedAnalyses::all(); +} + +static void writeCFGToDotFile(Function &F) { + std::string Filename = ("cfg." + F.getName() + ".dot").str(); + errs() << "Writing '" << Filename << "'..."; + + std::error_code EC; + raw_fd_ostream File(Filename, EC, sys::fs::F_Text); + + if (!EC) + WriteGraph(File, (const Function*)&F); + else + errs() << " error opening file for writing!"; + errs() << "\n"; +} + namespace { - struct CFGPrinter : public FunctionPass { + struct CFGPrinterLegacyPass : public FunctionPass { static char ID; // Pass identification, replacement for typeid - CFGPrinter() : FunctionPass(ID) { - initializeCFGPrinterPass(*PassRegistry::getPassRegistry()); + CFGPrinterLegacyPass() : FunctionPass(ID) { + initializeCFGPrinterLegacyPassPass(*PassRegistry::getPassRegistry()); } bool runOnFunction(Function &F) override { - std::string Filename = ("cfg." + F.getName() + ".dot").str(); - errs() << "Writing '" << Filename << "'..."; - - std::error_code EC; - raw_fd_ostream File(Filename, EC, sys::fs::F_Text); - - if (!EC) - WriteGraph(File, (const Function*)&F); - else - errs() << " error opening file for writing!"; - errs() << "\n"; + writeCFGToDotFile(F); return false; } @@ -99,29 +116,25 @@ namespace { }; } -char CFGPrinter::ID = 0; -INITIALIZE_PASS(CFGPrinter, "dot-cfg", "Print CFG of function to 'dot' file", +char CFGPrinterLegacyPass::ID = 0; +INITIALIZE_PASS(CFGPrinterLegacyPass, "dot-cfg", "Print CFG of function to 'dot' file", false, true) +PreservedAnalyses CFGPrinterPass::run(Function &F, + FunctionAnalysisManager &AM) { + writeCFGToDotFile(F); + return PreservedAnalyses::all(); +} + namespace { - struct CFGOnlyPrinter : public FunctionPass { + struct CFGOnlyPrinterLegacyPass : public FunctionPass { static char ID; // Pass identification, replacement for typeid - CFGOnlyPrinter() : FunctionPass(ID) { - initializeCFGOnlyPrinterPass(*PassRegistry::getPassRegistry()); + CFGOnlyPrinterLegacyPass() : FunctionPass(ID) { + initializeCFGOnlyPrinterLegacyPassPass(*PassRegistry::getPassRegistry()); } bool runOnFunction(Function &F) override { - std::string Filename = ("cfg." + F.getName() + ".dot").str(); - errs() << "Writing '" << Filename << "'..."; - - std::error_code EC; - raw_fd_ostream File(Filename, EC, sys::fs::F_Text); - - if (!EC) - WriteGraph(File, (const Function*)&F, true); - else - errs() << " error opening file for writing!"; - errs() << "\n"; + writeCFGToDotFile(F); return false; } void print(raw_ostream &OS, const Module* = nullptr) const override {} @@ -132,11 +145,17 @@ namespace { }; } -char CFGOnlyPrinter::ID = 0; -INITIALIZE_PASS(CFGOnlyPrinter, "dot-cfg-only", +char CFGOnlyPrinterLegacyPass::ID = 0; +INITIALIZE_PASS(CFGOnlyPrinterLegacyPass, "dot-cfg-only", "Print CFG of function to 'dot' file (with no function bodies)", false, true) +PreservedAnalyses CFGOnlyPrinterPass::run(Function &F, + FunctionAnalysisManager &AM) { + writeCFGToDotFile(F); + return PreservedAnalyses::all(); +} + /// viewCFG - This function is meant for use from the debugger. You can just /// say 'call F->viewCFG()' and a ghostview window should pop up from the /// program, displaying the CFG of the current function. This depends on there @@ -155,11 +174,11 @@ void Function::viewCFGOnly() const { ViewGraph(this, "cfg" + getName(), true); } -FunctionPass *llvm::createCFGPrinterPass () { - return new CFGPrinter(); +FunctionPass *llvm::createCFGPrinterLegacyPassPass () { + return new CFGPrinterLegacyPass(); } -FunctionPass *llvm::createCFGOnlyPrinterPass () { - return new CFGOnlyPrinter(); +FunctionPass *llvm::createCFGOnlyPrinterLegacyPassPass () { + return new CFGOnlyPrinterLegacyPass(); } |