[llvm-commits] CVS: llvm/tools/llvm-prof/llvm-prof.cpp

Reid Spencer reid at x10sys.com
Thu Dec 29 13:13:58 PST 2005



Changes in directory llvm/tools/llvm-prof:

llvm-prof.cpp updated: 1.25 -> 1.26
---
Log message:

General cleanup:
1. Don't mix C++ and C standard I/O, convert to C++ iostreams
2. Wrap long lines
3. use the std namespace to simplify/shorten the code


---
Diffs of the changes:  (+66 -61)

 llvm-prof.cpp |  127 ++++++++++++++++++++++++++++++----------------------------
 1 files changed, 66 insertions(+), 61 deletions(-)


Index: llvm/tools/llvm-prof/llvm-prof.cpp
diff -u llvm/tools/llvm-prof/llvm-prof.cpp:1.25 llvm/tools/llvm-prof/llvm-prof.cpp:1.26
--- llvm/tools/llvm-prof/llvm-prof.cpp:1.25	Thu Apr 21 18:59:42 2005
+++ llvm/tools/llvm-prof/llvm-prof.cpp	Thu Dec 29 15:13:45 2005
@@ -20,19 +20,20 @@
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/System/Signals.h"
-#include <cstdio>
 #include <iostream>
+#include <iomanip>
 #include <map>
 #include <set>
 
 using namespace llvm;
+using namespace std;
 
 namespace {
-  cl::opt<std::string>
+  cl::opt<string>
   BytecodeFile(cl::Positional, cl::desc("<program bytecode file>"),
                cl::Required);
 
-  cl::opt<std::string>
+  cl::opt<string>
   ProfileDataFile(cl::Positional, cl::desc("<llvmprof.out file>"),
                   cl::Optional, cl::init("llvmprof.out"));
 
@@ -49,31 +50,31 @@
 // PairSecondSort - A sorting predicate to sort by the second element of a pair.
 template<class T>
 struct PairSecondSortReverse
-  : public std::binary_function<std::pair<T, unsigned>,
-                                std::pair<T, unsigned>, bool> {
-  bool operator()(const std::pair<T, unsigned> &LHS,
-                  const std::pair<T, unsigned> &RHS) const {
+  : public binary_function<pair<T, unsigned>,
+                                pair<T, unsigned>, bool> {
+  bool operator()(const pair<T, unsigned> &LHS,
+                  const pair<T, unsigned> &RHS) const {
     return LHS.second > RHS.second;
   }
 };
 
 namespace {
   class ProfileAnnotator : public AssemblyAnnotationWriter {
-    std::map<const Function  *, unsigned> &FuncFreqs;
-    std::map<const BasicBlock*, unsigned> &BlockFreqs;
-    std::map<ProfileInfoLoader::Edge, unsigned> &EdgeFreqs;
+    map<const Function  *, unsigned> &FuncFreqs;
+    map<const BasicBlock*, unsigned> &BlockFreqs;
+    map<ProfileInfoLoader::Edge, unsigned> &EdgeFreqs;
   public:
-    ProfileAnnotator(std::map<const Function  *, unsigned> &FF,
-                     std::map<const BasicBlock*, unsigned> &BF,
-                     std::map<ProfileInfoLoader::Edge, unsigned> &EF)
+    ProfileAnnotator(map<const Function  *, unsigned> &FF,
+                     map<const BasicBlock*, unsigned> &BF,
+                     map<ProfileInfoLoader::Edge, unsigned> &EF)
       : FuncFreqs(FF), BlockFreqs(BF), EdgeFreqs(EF) {}
 
-    virtual void emitFunctionAnnot(const Function *F, std::ostream &OS) {
+    virtual void emitFunctionAnnot(const Function *F, ostream &OS) {
       OS << ";;; %" << F->getName() << " called " << FuncFreqs[F]
          << " times.\n;;;\n";
     }
     virtual void emitBasicBlockStartAnnot(const BasicBlock *BB,
-                                          std::ostream &OS) {
+                                          ostream &OS) {
       if (BlockFreqs.empty()) return;
       if (unsigned Count = BlockFreqs[BB])
         OS << "\t;;; Basic block executed " << Count << " times.\n";
@@ -81,18 +82,18 @@
         OS << "\t;;; Never executed!\n";
     }
 
-    virtual void emitBasicBlockEndAnnot(const BasicBlock *BB, std::ostream &OS){
+    virtual void emitBasicBlockEndAnnot(const BasicBlock *BB, ostream &OS){
       if (EdgeFreqs.empty()) return;
 
       // Figure out how many times each successor executed.
-      std::vector<std::pair<const BasicBlock*, unsigned> > SuccCounts;
+      vector<pair<const BasicBlock*, unsigned> > SuccCounts;
       const TerminatorInst *TI = BB->getTerminator();
 
-      std::map<ProfileInfoLoader::Edge, unsigned>::iterator I =
-        EdgeFreqs.lower_bound(std::make_pair(const_cast<BasicBlock*>(BB), 0U));
+      map<ProfileInfoLoader::Edge, unsigned>::iterator I =
+        EdgeFreqs.lower_bound(make_pair(const_cast<BasicBlock*>(BB), 0U));
       for (; I != EdgeFreqs.end() && I->first.first == BB; ++I)
         if (I->second)
-          SuccCounts.push_back(std::make_pair(TI->getSuccessor(I->first.second),
+          SuccCounts.push_back(make_pair(TI->getSuccessor(I->first.second),
                                               I->second));
       if (!SuccCounts.empty()) {
         OS << "\t;;; Out-edge counts:";
@@ -112,70 +113,71 @@
     sys::PrintStackTraceOnErrorSignal();
 
     // Read in the bytecode file...
-    std::string ErrorMessage;
+    string ErrorMessage;
     Module *M = ParseBytecodeFile(BytecodeFile, &ErrorMessage);
     if (M == 0) {
-      std::cerr << argv[0] << ": " << BytecodeFile << ": " << ErrorMessage
-                << "\n";
+      cerr << argv[0] << ": " << BytecodeFile << ": " << ErrorMessage << "\n";
       return 1;
     }
 
     // Read the profiling information
     ProfileInfoLoader PI(argv[0], ProfileDataFile, *M);
 
-    std::map<const Function  *, unsigned> FuncFreqs;
-    std::map<const BasicBlock*, unsigned> BlockFreqs;
-    std::map<ProfileInfoLoader::Edge, unsigned> EdgeFreqs;
+    map<const Function  *, unsigned> FuncFreqs;
+    map<const BasicBlock*, unsigned> BlockFreqs;
+    map<ProfileInfoLoader::Edge, unsigned> EdgeFreqs;
 
-    // Output a report.  Eventually, there will be multiple reports selectable on
+    // Output a report. Eventually, there will be multiple reports selectable on
     // the command line, for now, just keep things simple.
 
     // Emit the most frequent function table...
-    std::vector<std::pair<Function*, unsigned> > FunctionCounts;
+    vector<pair<Function*, unsigned> > FunctionCounts;
     PI.getFunctionCounts(FunctionCounts);
     FuncFreqs.insert(FunctionCounts.begin(), FunctionCounts.end());
 
     // Sort by the frequency, backwards.
-    std::sort(FunctionCounts.begin(), FunctionCounts.end(),
+    sort(FunctionCounts.begin(), FunctionCounts.end(),
               PairSecondSortReverse<Function*>());
 
     unsigned long long TotalExecutions = 0;
     for (unsigned i = 0, e = FunctionCounts.size(); i != e; ++i)
       TotalExecutions += FunctionCounts[i].second;
 
-    std::cout << "===" << std::string(73, '-') << "===\n"
+    cout << "===" << string(73, '-') << "===\n"
               << "LLVM profiling output for execution";
-    if (PI.getNumExecutions() != 1) std::cout << "s";
-    std::cout << ":\n";
+    if (PI.getNumExecutions() != 1) cout << "s";
+    cout << ":\n";
 
     for (unsigned i = 0, e = PI.getNumExecutions(); i != e; ++i) {
-      std::cout << "  ";
-      if (e != 1) std::cout << i+1 << ". ";
-      std::cout << PI.getExecution(i) << "\n";
+      cout << "  ";
+      if (e != 1) cout << i+1 << ". ";
+      cout << PI.getExecution(i) << "\n";
     }
 
-    std::cout << "\n===" << std::string(73, '-') << "===\n";
-    std::cout << "Function execution frequencies:\n\n";
+    cout << "\n===" << string(73, '-') << "===\n";
+    cout << "Function execution frequencies:\n\n";
 
     // Print out the function frequencies...
-    printf(" ##   Frequency\n");
+    cout << " ##   Frequency\n";
     for (unsigned i = 0, e = FunctionCounts.size(); i != e; ++i) {
       if (FunctionCounts[i].second == 0) {
-        printf("\n  NOTE: %d function%s never executed!\n",
-               e-i, e-i-1 ? "s were" : " was");
+        cout << "\n  NOTE: " << e-i << " function" <<
+               (e-i-1 ? "s were" : " was") << " never executed!\n";
         break;
       }
 
-      printf("%3d. %5u/%llu %s\n", i+1, FunctionCounts[i].second, TotalExecutions,
-             FunctionCounts[i].first->getName().c_str());
+      cout << setw(3) << i+1 << ". " 
+        << setw(5) << FunctionCounts[i].second << "/"
+        << TotalExecutions << " "
+        << FunctionCounts[i].first->getName().c_str() << "\n";
     }
 
-    std::set<Function*> FunctionsToPrint;
+    set<Function*> FunctionsToPrint;
 
     // If we have block count information, print out the LLVM module with
     // frequency annotations.
     if (PI.hasAccurateBlockCounts()) {
-      std::vector<std::pair<BasicBlock*, unsigned> > Counts;
+      vector<pair<BasicBlock*, unsigned> > Counts;
       PI.getBlockCounts(Counts);
 
       TotalExecutions = 0;
@@ -183,23 +185,26 @@
         TotalExecutions += Counts[i].second;
 
       // Sort by the frequency, backwards.
-      std::sort(Counts.begin(), Counts.end(),
+      sort(Counts.begin(), Counts.end(),
                 PairSecondSortReverse<BasicBlock*>());
 
-      std::cout << "\n===" << std::string(73, '-') << "===\n";
-      std::cout << "Top 20 most frequently executed basic blocks:\n\n";
+      cout << "\n===" << string(73, '-') << "===\n";
+      cout << "Top 20 most frequently executed basic blocks:\n\n";
 
       // Print out the function frequencies...
-      printf(" ##      %%%% \tFrequency\n");
+      cout <<" ##      %% \tFrequency\n";
       unsigned BlocksToPrint = Counts.size();
       if (BlocksToPrint > 20) BlocksToPrint = 20;
       for (unsigned i = 0; i != BlocksToPrint; ++i) {
         if (Counts[i].second == 0) break;
         Function *F = Counts[i].first->getParent();
-        printf("%3d. %5.2f%% %5u/%llu\t%s() - %s\n", i+1,
-               Counts[i].second/(double)TotalExecutions*100,
-               Counts[i].second, TotalExecutions,
-               F->getName().c_str(), Counts[i].first->getName().c_str());
+        cout << setw(3) << i+1 << ". " 
+          << setw(5) << setprecision(2) 
+          << Counts[i].second/(double)TotalExecutions*100 << "% "
+          << setw(5) << Counts[i].second << "/"
+          << TotalExecutions << "\t"
+          << F->getName().c_str() << "() - "
+          << Counts[i].first->getName().c_str() << "\n";
         FunctionsToPrint.insert(F);
       }
 
@@ -207,31 +212,31 @@
     }
 
     if (PI.hasAccurateEdgeCounts()) {
-      std::vector<std::pair<ProfileInfoLoader::Edge, unsigned> > Counts;
+      vector<pair<ProfileInfoLoader::Edge, unsigned> > Counts;
       PI.getEdgeCounts(Counts);
       EdgeFreqs.insert(Counts.begin(), Counts.end());
     }
 
     if (PrintAnnotatedLLVM || PrintAllCode) {
-      std::cout << "\n===" << std::string(73, '-') << "===\n";
-      std::cout << "Annotated LLVM code for the module:\n\n";
+      cout << "\n===" << string(73, '-') << "===\n";
+      cout << "Annotated LLVM code for the module:\n\n";
 
       ProfileAnnotator PA(FuncFreqs, BlockFreqs, EdgeFreqs);
 
       if (FunctionsToPrint.empty() || PrintAllCode)
-        M->print(std::cout, &PA);
+        M->print(cout, &PA);
       else
         // Print just a subset of the functions...
-        for (std::set<Function*>::iterator I = FunctionsToPrint.begin(),
+        for (set<Function*>::iterator I = FunctionsToPrint.begin(),
                E = FunctionsToPrint.end(); I != E; ++I)
-          (*I)->print(std::cout, &PA);
+          (*I)->print(cout, &PA);
     }
 
     return 0;
-  } catch (const std::string& msg) {
-    std::cerr << argv[0] << ": " << msg << "\n";
+  } catch (const string& msg) {
+    cerr << argv[0] << ": " << msg << "\n";
   } catch (...) {
-    std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
+    cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
   }
   return 1;
 }






More information about the llvm-commits mailing list