-//===----------------------------------------------------------------------===//
-// TimingInfo Class - This class is used to calculate information about the
-// amount of time each pass takes to execute. This only happens with
-// -time-passes is enabled on the command line.
-//
-bool llvm::TimePassesIsEnabled = false;
-static cl::opt<bool,true>
-EnableTiming("time-passes", cl::location(TimePassesIsEnabled),
- cl::desc("Time each pass, printing elapsed time for each on exit"));
-
-// createTheTimeInfo - This method either initializes the TheTimeInfo pointer to
-// a non null value (if the -time-passes option is enabled) or it leaves it
-// null. It may be called multiple times.
-void TimingInfo::createTheTimeInfo() {
- if (!TimePassesIsEnabled || TheTimeInfo) return;
-
- // Constructed the first time this is called, iff -time-passes is enabled.
- // This guarantees that the object will be constructed before static globals,
- // thus it will be destroyed before them.
- static ManagedStatic<TimingInfo> TTI;
- TheTimeInfo = &*TTI;
-}
-
-void PMDebug::PrintArgumentInformation(const Pass *P) {
- // Print out passes in pass manager...
- if (const AnalysisResolver *PM = dynamic_cast<const AnalysisResolver*>(P)) {
- for (unsigned i = 0, e = PM->getNumContainedPasses(); i != e; ++i)
- PrintArgumentInformation(PM->getContainedPass(i));
-
- } else { // Normal pass. Print argument information...
- // Print out arguments for registered passes that are _optimizations_
- if (const PassInfo *PI = P->getPassInfo())
- if (!PI->isAnalysisGroup())
- cerr << " -" << PI->getPassArgument();
- }
-}
-
-void PMDebug::PrintPassInformation(unsigned Depth, const char *Action,
- Pass *P, Module *M) {
- if (PassDebugging >= Executions) {
- cerr << (void*)P << std::string(Depth*2+1, ' ') << Action << " '"
- << P->getPassName();
- if (M) cerr << "' on Module '" << M->getModuleIdentifier() << "'\n";
- cerr << "'...\n";
- }
-}
-
-void PMDebug::PrintPassInformation(unsigned Depth, const char *Action,
- Pass *P, Function *F) {
- if (PassDebugging >= Executions) {
- cerr << (void*)P << std::string(Depth*2+1, ' ') << Action << " '"
- << P->getPassName();
- if (F) cerr << "' on Function '" << F->getName();
- cerr << "'...\n";
- }
-}
-
-void PMDebug::PrintPassInformation(unsigned Depth, const char *Action,
- Pass *P, BasicBlock *BB) {
- if (PassDebugging >= Executions) {
- cerr << (void*)P << std::string(Depth*2+1, ' ') << Action << " '"
- << P->getPassName();
- if (BB) cerr << "' on BasicBlock '" << BB->getName();
- cerr << "'...\n";
- }
-}
-
-void PMDebug::PrintAnalysisSetInfo(unsigned Depth, const char *Msg,
- Pass *P, const std::vector<AnalysisID> &Set){
- if (PassDebugging >= Details && !Set.empty()) {
- cerr << (void*)P << std::string(Depth*2+3, ' ') << Msg << " Analyses:";
- for (unsigned i = 0; i != Set.size(); ++i) {
- if (i) cerr << ",";
- cerr << " " << Set[i]->getPassName();
- }
- cerr << "\n";
- }