From 23ebd75affba7de4a3bef20690609af9e42615e6 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 31 Aug 2003 19:23:41 +0000 Subject: * Cleanups * Iterate from tarj_begin -> tarj_end, not from tarj_begin -> NULL git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8258 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/IPA/PrintSCC.cpp | 68 +++++++++++++++++++------------------------ lib/Analysis/PrintSCC.cpp | 68 +++++++++++++++++++------------------------ tools/analyze/PrintSCC.cpp | 68 +++++++++++++++++++------------------------ tools/opt/PrintSCC.cpp | 68 +++++++++++++++++++------------------------ 4 files changed, 120 insertions(+), 152 deletions(-) diff --git a/lib/Analysis/IPA/PrintSCC.cpp b/lib/Analysis/IPA/PrintSCC.cpp index 70049d20c9..aaf54ef219 100644 --- a/lib/Analysis/IPA/PrintSCC.cpp +++ b/lib/Analysis/IPA/PrintSCC.cpp @@ -1,4 +1,4 @@ -//===- PrintSCC.cpp - Enumerate SCCs in some key graphs ---------*- C++ -*-===// +//===- PrintSCC.cpp - Enumerate SCCs in some key graphs -------------------===// // // This file provides passes to print out SCCs in a CFG or a CallGraph. // Normally, you would not use these passes; instead, you would use the @@ -14,34 +14,30 @@ // analyze -callscc [-stats] [-debug] to print SCCs in the CallGraph // // (3) To test the TarjanSCCIterator. +// //===----------------------------------------------------------------------===// #include "llvm/Pass.h" #include "llvm/Module.h" -#include "llvm/Function.h" -#include "llvm/BasicBlock.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/Support/CFG.h" #include "Support/TarjanSCCIterator.h" namespace { - -class CFGSCC: public FunctionPass { -public: +struct CFGSCC: public FunctionPass { bool runOnFunction(Function& func) { unsigned long sccNum = 0; - const SCC* nextSCC; std::cout << "SCCs for Function " << func.getName() << " in PostOrder:"; - for (TarjanSCC_iterator tarjSCCiter = tarj_begin(&func); - (nextSCC = *tarjSCCiter); ++tarjSCCiter) - { - std::cout << "\nSCC #" << ++sccNum << " : "; - for (SCC::const_iterator I=nextSCC->begin(),E=nextSCC->end(); - I != E; ++I) - std::cout << (*I)->getName() << ", "; - if (nextSCC->size() == 1 && nextSCC->HasLoop()) - std::cout << " (Has self-loop)."; - } + for (TarjanSCC_iterator I = tarj_begin(&func), + E = tarj_end(&func); I != E; ++I) { + SCC &nextSCC = **I; + std::cout << "\nSCC #" << ++sccNum << " : "; + for (SCC::const_iterator I = nextSCC.begin(),E = nextSCC.end(); + I != E; ++I) + std::cout << (*I)->getName() << ", "; + if (nextSCC.size() == 1 && nextSCC.HasLoop()) + std::cout << " (Has self-loop)."; + } std::cout << "\n"; return true; @@ -50,26 +46,23 @@ public: }; -class CallGraphSCC: public Pass { -public: +struct CallGraphSCC : public Pass { // run - Print out SCCs in the call graph for the specified module. - bool run(Module& M) { + bool run(Module &M) { CallGraphNode* rootNode = getAnalysis().getRoot(); unsigned long sccNum = 0; - const SCC* nextSCC; std::cout << "SCCs for the program in PostOrder:"; - for (TarjanSCC_iterator tarjSCCiter = tarj_begin(rootNode); - (nextSCC = *tarjSCCiter); ++tarjSCCiter) - { - std::cout << "\nSCC #" << ++sccNum << " : "; - for (SCC::const_iterator I=nextSCC->begin(), - E=nextSCC->end(); I != E; ++I) - std::cout << ((*I)->getFunction()? (*I)->getFunction()->getName() - : std::string("Null CallGraph node")) - << ", "; - if (nextSCC->size() == 1 && nextSCC->HasLoop()) - std::cout << " (Has self-loop)."; - } + for (TarjanSCC_iterator SCCI = tarj_begin(rootNode), + E = tarj_end(rootNode); SCCI != E; ++SCCI) { + const SCC &nextSCC = **SCCI; + std::cout << "\nSCC #" << ++sccNum << " : "; + for (SCC::const_iterator I = nextSCC.begin(), + E = nextSCC.end(); I != E; ++I) + std::cout << ((*I)->getFunction() ? (*I)->getFunction()->getName() + : std::string("Indirect CallGraph node")) << ", "; + if (nextSCC.size() == 1 && nextSCC.HasLoop()) + std::cout << " (Has self-loop)."; + } std::cout << "\n"; return true; @@ -84,10 +77,9 @@ public: } }; -static RegisterAnalysis -Y("cfgscc", "Print SCCs of each function CFG"); - -static RegisterAnalysis -Z("callscc", "Print SCCs of the Call Graph"); + RegisterAnalysis + Y("cfgscc", "Print SCCs of each function CFG"); + RegisterAnalysis + Z("callscc", "Print SCCs of the Call Graph"); } diff --git a/lib/Analysis/PrintSCC.cpp b/lib/Analysis/PrintSCC.cpp index 70049d20c9..aaf54ef219 100644 --- a/lib/Analysis/PrintSCC.cpp +++ b/lib/Analysis/PrintSCC.cpp @@ -1,4 +1,4 @@ -//===- PrintSCC.cpp - Enumerate SCCs in some key graphs ---------*- C++ -*-===// +//===- PrintSCC.cpp - Enumerate SCCs in some key graphs -------------------===// // // This file provides passes to print out SCCs in a CFG or a CallGraph. // Normally, you would not use these passes; instead, you would use the @@ -14,34 +14,30 @@ // analyze -callscc [-stats] [-debug] to print SCCs in the CallGraph // // (3) To test the TarjanSCCIterator. +// //===----------------------------------------------------------------------===// #include "llvm/Pass.h" #include "llvm/Module.h" -#include "llvm/Function.h" -#include "llvm/BasicBlock.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/Support/CFG.h" #include "Support/TarjanSCCIterator.h" namespace { - -class CFGSCC: public FunctionPass { -public: +struct CFGSCC: public FunctionPass { bool runOnFunction(Function& func) { unsigned long sccNum = 0; - const SCC* nextSCC; std::cout << "SCCs for Function " << func.getName() << " in PostOrder:"; - for (TarjanSCC_iterator tarjSCCiter = tarj_begin(&func); - (nextSCC = *tarjSCCiter); ++tarjSCCiter) - { - std::cout << "\nSCC #" << ++sccNum << " : "; - for (SCC::const_iterator I=nextSCC->begin(),E=nextSCC->end(); - I != E; ++I) - std::cout << (*I)->getName() << ", "; - if (nextSCC->size() == 1 && nextSCC->HasLoop()) - std::cout << " (Has self-loop)."; - } + for (TarjanSCC_iterator I = tarj_begin(&func), + E = tarj_end(&func); I != E; ++I) { + SCC &nextSCC = **I; + std::cout << "\nSCC #" << ++sccNum << " : "; + for (SCC::const_iterator I = nextSCC.begin(),E = nextSCC.end(); + I != E; ++I) + std::cout << (*I)->getName() << ", "; + if (nextSCC.size() == 1 && nextSCC.HasLoop()) + std::cout << " (Has self-loop)."; + } std::cout << "\n"; return true; @@ -50,26 +46,23 @@ public: }; -class CallGraphSCC: public Pass { -public: +struct CallGraphSCC : public Pass { // run - Print out SCCs in the call graph for the specified module. - bool run(Module& M) { + bool run(Module &M) { CallGraphNode* rootNode = getAnalysis().getRoot(); unsigned long sccNum = 0; - const SCC* nextSCC; std::cout << "SCCs for the program in PostOrder:"; - for (TarjanSCC_iterator tarjSCCiter = tarj_begin(rootNode); - (nextSCC = *tarjSCCiter); ++tarjSCCiter) - { - std::cout << "\nSCC #" << ++sccNum << " : "; - for (SCC::const_iterator I=nextSCC->begin(), - E=nextSCC->end(); I != E; ++I) - std::cout << ((*I)->getFunction()? (*I)->getFunction()->getName() - : std::string("Null CallGraph node")) - << ", "; - if (nextSCC->size() == 1 && nextSCC->HasLoop()) - std::cout << " (Has self-loop)."; - } + for (TarjanSCC_iterator SCCI = tarj_begin(rootNode), + E = tarj_end(rootNode); SCCI != E; ++SCCI) { + const SCC &nextSCC = **SCCI; + std::cout << "\nSCC #" << ++sccNum << " : "; + for (SCC::const_iterator I = nextSCC.begin(), + E = nextSCC.end(); I != E; ++I) + std::cout << ((*I)->getFunction() ? (*I)->getFunction()->getName() + : std::string("Indirect CallGraph node")) << ", "; + if (nextSCC.size() == 1 && nextSCC.HasLoop()) + std::cout << " (Has self-loop)."; + } std::cout << "\n"; return true; @@ -84,10 +77,9 @@ public: } }; -static RegisterAnalysis -Y("cfgscc", "Print SCCs of each function CFG"); - -static RegisterAnalysis -Z("callscc", "Print SCCs of the Call Graph"); + RegisterAnalysis + Y("cfgscc", "Print SCCs of each function CFG"); + RegisterAnalysis + Z("callscc", "Print SCCs of the Call Graph"); } diff --git a/tools/analyze/PrintSCC.cpp b/tools/analyze/PrintSCC.cpp index 70049d20c9..aaf54ef219 100644 --- a/tools/analyze/PrintSCC.cpp +++ b/tools/analyze/PrintSCC.cpp @@ -1,4 +1,4 @@ -//===- PrintSCC.cpp - Enumerate SCCs in some key graphs ---------*- C++ -*-===// +//===- PrintSCC.cpp - Enumerate SCCs in some key graphs -------------------===// // // This file provides passes to print out SCCs in a CFG or a CallGraph. // Normally, you would not use these passes; instead, you would use the @@ -14,34 +14,30 @@ // analyze -callscc [-stats] [-debug] to print SCCs in the CallGraph // // (3) To test the TarjanSCCIterator. +// //===----------------------------------------------------------------------===// #include "llvm/Pass.h" #include "llvm/Module.h" -#include "llvm/Function.h" -#include "llvm/BasicBlock.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/Support/CFG.h" #include "Support/TarjanSCCIterator.h" namespace { - -class CFGSCC: public FunctionPass { -public: +struct CFGSCC: public FunctionPass { bool runOnFunction(Function& func) { unsigned long sccNum = 0; - const SCC* nextSCC; std::cout << "SCCs for Function " << func.getName() << " in PostOrder:"; - for (TarjanSCC_iterator tarjSCCiter = tarj_begin(&func); - (nextSCC = *tarjSCCiter); ++tarjSCCiter) - { - std::cout << "\nSCC #" << ++sccNum << " : "; - for (SCC::const_iterator I=nextSCC->begin(),E=nextSCC->end(); - I != E; ++I) - std::cout << (*I)->getName() << ", "; - if (nextSCC->size() == 1 && nextSCC->HasLoop()) - std::cout << " (Has self-loop)."; - } + for (TarjanSCC_iterator I = tarj_begin(&func), + E = tarj_end(&func); I != E; ++I) { + SCC &nextSCC = **I; + std::cout << "\nSCC #" << ++sccNum << " : "; + for (SCC::const_iterator I = nextSCC.begin(),E = nextSCC.end(); + I != E; ++I) + std::cout << (*I)->getName() << ", "; + if (nextSCC.size() == 1 && nextSCC.HasLoop()) + std::cout << " (Has self-loop)."; + } std::cout << "\n"; return true; @@ -50,26 +46,23 @@ public: }; -class CallGraphSCC: public Pass { -public: +struct CallGraphSCC : public Pass { // run - Print out SCCs in the call graph for the specified module. - bool run(Module& M) { + bool run(Module &M) { CallGraphNode* rootNode = getAnalysis().getRoot(); unsigned long sccNum = 0; - const SCC* nextSCC; std::cout << "SCCs for the program in PostOrder:"; - for (TarjanSCC_iterator tarjSCCiter = tarj_begin(rootNode); - (nextSCC = *tarjSCCiter); ++tarjSCCiter) - { - std::cout << "\nSCC #" << ++sccNum << " : "; - for (SCC::const_iterator I=nextSCC->begin(), - E=nextSCC->end(); I != E; ++I) - std::cout << ((*I)->getFunction()? (*I)->getFunction()->getName() - : std::string("Null CallGraph node")) - << ", "; - if (nextSCC->size() == 1 && nextSCC->HasLoop()) - std::cout << " (Has self-loop)."; - } + for (TarjanSCC_iterator SCCI = tarj_begin(rootNode), + E = tarj_end(rootNode); SCCI != E; ++SCCI) { + const SCC &nextSCC = **SCCI; + std::cout << "\nSCC #" << ++sccNum << " : "; + for (SCC::const_iterator I = nextSCC.begin(), + E = nextSCC.end(); I != E; ++I) + std::cout << ((*I)->getFunction() ? (*I)->getFunction()->getName() + : std::string("Indirect CallGraph node")) << ", "; + if (nextSCC.size() == 1 && nextSCC.HasLoop()) + std::cout << " (Has self-loop)."; + } std::cout << "\n"; return true; @@ -84,10 +77,9 @@ public: } }; -static RegisterAnalysis -Y("cfgscc", "Print SCCs of each function CFG"); - -static RegisterAnalysis -Z("callscc", "Print SCCs of the Call Graph"); + RegisterAnalysis + Y("cfgscc", "Print SCCs of each function CFG"); + RegisterAnalysis + Z("callscc", "Print SCCs of the Call Graph"); } diff --git a/tools/opt/PrintSCC.cpp b/tools/opt/PrintSCC.cpp index 70049d20c9..aaf54ef219 100644 --- a/tools/opt/PrintSCC.cpp +++ b/tools/opt/PrintSCC.cpp @@ -1,4 +1,4 @@ -//===- PrintSCC.cpp - Enumerate SCCs in some key graphs ---------*- C++ -*-===// +//===- PrintSCC.cpp - Enumerate SCCs in some key graphs -------------------===// // // This file provides passes to print out SCCs in a CFG or a CallGraph. // Normally, you would not use these passes; instead, you would use the @@ -14,34 +14,30 @@ // analyze -callscc [-stats] [-debug] to print SCCs in the CallGraph // // (3) To test the TarjanSCCIterator. +// //===----------------------------------------------------------------------===// #include "llvm/Pass.h" #include "llvm/Module.h" -#include "llvm/Function.h" -#include "llvm/BasicBlock.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/Support/CFG.h" #include "Support/TarjanSCCIterator.h" namespace { - -class CFGSCC: public FunctionPass { -public: +struct CFGSCC: public FunctionPass { bool runOnFunction(Function& func) { unsigned long sccNum = 0; - const SCC* nextSCC; std::cout << "SCCs for Function " << func.getName() << " in PostOrder:"; - for (TarjanSCC_iterator tarjSCCiter = tarj_begin(&func); - (nextSCC = *tarjSCCiter); ++tarjSCCiter) - { - std::cout << "\nSCC #" << ++sccNum << " : "; - for (SCC::const_iterator I=nextSCC->begin(),E=nextSCC->end(); - I != E; ++I) - std::cout << (*I)->getName() << ", "; - if (nextSCC->size() == 1 && nextSCC->HasLoop()) - std::cout << " (Has self-loop)."; - } + for (TarjanSCC_iterator I = tarj_begin(&func), + E = tarj_end(&func); I != E; ++I) { + SCC &nextSCC = **I; + std::cout << "\nSCC #" << ++sccNum << " : "; + for (SCC::const_iterator I = nextSCC.begin(),E = nextSCC.end(); + I != E; ++I) + std::cout << (*I)->getName() << ", "; + if (nextSCC.size() == 1 && nextSCC.HasLoop()) + std::cout << " (Has self-loop)."; + } std::cout << "\n"; return true; @@ -50,26 +46,23 @@ public: }; -class CallGraphSCC: public Pass { -public: +struct CallGraphSCC : public Pass { // run - Print out SCCs in the call graph for the specified module. - bool run(Module& M) { + bool run(Module &M) { CallGraphNode* rootNode = getAnalysis().getRoot(); unsigned long sccNum = 0; - const SCC* nextSCC; std::cout << "SCCs for the program in PostOrder:"; - for (TarjanSCC_iterator tarjSCCiter = tarj_begin(rootNode); - (nextSCC = *tarjSCCiter); ++tarjSCCiter) - { - std::cout << "\nSCC #" << ++sccNum << " : "; - for (SCC::const_iterator I=nextSCC->begin(), - E=nextSCC->end(); I != E; ++I) - std::cout << ((*I)->getFunction()? (*I)->getFunction()->getName() - : std::string("Null CallGraph node")) - << ", "; - if (nextSCC->size() == 1 && nextSCC->HasLoop()) - std::cout << " (Has self-loop)."; - } + for (TarjanSCC_iterator SCCI = tarj_begin(rootNode), + E = tarj_end(rootNode); SCCI != E; ++SCCI) { + const SCC &nextSCC = **SCCI; + std::cout << "\nSCC #" << ++sccNum << " : "; + for (SCC::const_iterator I = nextSCC.begin(), + E = nextSCC.end(); I != E; ++I) + std::cout << ((*I)->getFunction() ? (*I)->getFunction()->getName() + : std::string("Indirect CallGraph node")) << ", "; + if (nextSCC.size() == 1 && nextSCC.HasLoop()) + std::cout << " (Has self-loop)."; + } std::cout << "\n"; return true; @@ -84,10 +77,9 @@ public: } }; -static RegisterAnalysis -Y("cfgscc", "Print SCCs of each function CFG"); - -static RegisterAnalysis -Z("callscc", "Print SCCs of the Call Graph"); + RegisterAnalysis + Y("cfgscc", "Print SCCs of each function CFG"); + RegisterAnalysis + Z("callscc", "Print SCCs of the Call Graph"); } -- cgit v1.2.3