Convert StringMap to using StringRef for its APIs.
[oota-llvm.git] / lib / Analysis / ProfileInfoLoader.cpp
index 46a888365d4117195ba1f22890d5d116b26f4b2d..adb2bdc425491fae4fc5411233e635d64282cda3 100644 (file)
@@ -1,10 +1,10 @@
 //===- ProfileInfoLoad.cpp - Load profile information from disk -----------===//
-// 
+//
 //                      The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
 //===----------------------------------------------------------------------===//
 //
 // The ProfileInfoLoader class is used to load and represent profiling
@@ -16,7 +16,9 @@
 #include "llvm/Analysis/ProfileInfoTypes.h"
 #include "llvm/Module.h"
 #include "llvm/InstrTypes.h"
+#include "llvm/Support/Streams.h"
 #include <cstdio>
+#include <cstdlib>
 #include <map>
 using namespace llvm;
 
@@ -24,9 +26,9 @@ using namespace llvm;
 //
 static inline unsigned ByteSwap(unsigned Var, bool Really) {
   if (!Really) return Var;
-  return ((Var & (255<< 0)) << 24) | 
-         ((Var & (255<< 8)) <<  8) | 
-         ((Var & (255<<16)) >>  8) | 
+  return ((Var & (255<< 0)) << 24) |
+         ((Var & (255<< 8)) <<  8) |
+         ((Var & (255<<16)) >>  8) |
          ((Var & (255<<24)) >> 24);
 }
 
@@ -36,7 +38,7 @@ static void ReadProfilingBlock(const char *ToolName, FILE *F,
   // Read the number of entries...
   unsigned NumEntries;
   if (fread(&NumEntries, sizeof(unsigned), 1, F) != 1) {
-    std::cerr << ToolName << ": data packet truncated!\n";
+    cerr << ToolName << ": data packet truncated!\n";
     perror(0);
     exit(1);
   }
@@ -47,7 +49,7 @@ static void ReadProfilingBlock(const char *ToolName, FILE *F,
 
   // Read in the block of data...
   if (fread(&TempSpace[0], sizeof(unsigned)*NumEntries, 1, F) != 1) {
-    std::cerr << ToolName << ": data packet truncated!\n";
+    cerr << ToolName << ": data packet truncated!\n";
     perror(0);
     exit(1);
   }
@@ -55,7 +57,7 @@ static void ReadProfilingBlock(const char *ToolName, FILE *F,
   // Make sure we have enough space...
   if (Data.size() < NumEntries)
     Data.resize(NumEntries);
-  
+
   // Accumulate the data we just read into the data.
   if (!ShouldByteSwap) {
     for (unsigned i = 0; i != NumEntries; ++i)
@@ -71,10 +73,11 @@ static void ReadProfilingBlock(const char *ToolName, FILE *F,
 //
 ProfileInfoLoader::ProfileInfoLoader(const char *ToolName,
                                      const std::string &Filename,
-                                     Module &TheModule) : M(TheModule) {
+                                     Module &TheModule) : 
+                              M(TheModule), Warned(false) {
   FILE *F = fopen(Filename.c_str(), "r");
   if (F == 0) {
-    std::cerr << ToolName << ": Error opening '" << Filename << "': ";
+    cerr << ToolName << ": Error opening '" << Filename << "': ";
     perror(0);
     exit(1);
   }
@@ -92,7 +95,7 @@ ProfileInfoLoader::ProfileInfoLoader(const char *ToolName,
     case ArgumentInfo: {
       unsigned ArgLength;
       if (fread(&ArgLength, sizeof(unsigned), 1, F) != 1) {
-        std::cerr << ToolName << ": arguments packet truncated!\n";
+        cerr << ToolName << ": arguments packet truncated!\n";
         perror(0);
         exit(1);
       }
@@ -103,18 +106,18 @@ ProfileInfoLoader::ProfileInfoLoader(const char *ToolName,
 
       if (ArgLength)
         if (fread(&Chars[0], (ArgLength+3) & ~3, 1, F) != 1) {
-          std::cerr << ToolName << ": arguments packet truncated!\n";
+          cerr << ToolName << ": arguments packet truncated!\n";
           perror(0);
           exit(1);
         }
       CommandLines.push_back(std::string(&Chars[0], &Chars[ArgLength]));
       break;
     }
-      
+
     case FunctionInfo:
       ReadProfilingBlock(ToolName, F, ShouldByteSwap, FunctionCounts);
       break;
-      
+
     case BlockInfo:
       ReadProfilingBlock(ToolName, F, ShouldByteSwap, BlockCounts);
       break;
@@ -128,11 +131,11 @@ ProfileInfoLoader::ProfileInfoLoader(const char *ToolName,
       break;
 
     default:
-      std::cerr << ToolName << ": Unknown packet type #" << PacketType << "!\n";
+      cerr << ToolName << ": Unknown packet type #" << PacketType << "!\n";
       exit(1);
     }
   }
-  
+
   fclose(F);
 }
 
@@ -149,21 +152,22 @@ void ProfileInfoLoader::getFunctionCounts(std::vector<std::pair<Function*,
       // their entry blocks were executed.
       std::vector<std::pair<BasicBlock*, unsigned> > BlockCounts;
       getBlockCounts(BlockCounts);
-      
+
       for (unsigned i = 0, e = BlockCounts.size(); i != e; ++i)
-        if (&BlockCounts[i].first->getParent()->front() == BlockCounts[i].first)
+        if (&BlockCounts[i].first->getParent()->getEntryBlock() ==
+            BlockCounts[i].first)
           Counts.push_back(std::make_pair(BlockCounts[i].first->getParent(),
                                           BlockCounts[i].second));
     } else {
-      std::cerr << "Function counts are not available!\n";
+      cerr << "Function counts are not available!\n";
     }
     return;
   }
-  
+
   unsigned Counter = 0;
   for (Module::iterator I = M.begin(), E = M.end();
        I != E && Counter != FunctionCounts.size(); ++I)
-    if (!I->isExternal())
+    if (!I->isDeclaration())
       Counts.push_back(std::make_pair(I, FunctionCounts[Counter++]));
 }
 
@@ -197,10 +201,9 @@ void ProfileInfoLoader::getBlockCounts(std::vector<std::pair<BasicBlock*,
         Counts.back().second += EdgeCounts[i].second;
         unsigned SuccNum = EdgeCounts[i].first.second;
         if (SuccNum >= TI->getNumSuccessors()) {
-          static bool Warned = false;
           if (!Warned) {
-            std::cerr << "WARNING: profile info doesn't seem to match"
-                      << " the program!\n";
+            cerr << "WARNING: profile info doesn't seem to match"
+                 << " the program!\n";
             Warned = true;
           }
         } else {
@@ -225,7 +228,7 @@ void ProfileInfoLoader::getBlockCounts(std::vector<std::pair<BasicBlock*,
       }
 
     } else {
-      std::cerr << "Block counts are not available!\n";
+      cerr << "Block counts are not available!\n";
     }
     return;
   }
@@ -246,8 +249,8 @@ void ProfileInfoLoader::getBlockCounts(std::vector<std::pair<BasicBlock*,
 void ProfileInfoLoader::getEdgeCounts(std::vector<std::pair<Edge,
                                                   unsigned> > &Counts) {
   if (EdgeCounts.empty()) {
-    std::cerr << "Edge counts not available, and no synthesis "
-              << "is implemented yet!\n";
+    cerr << "Edge counts not available, and no synthesis "
+         << "is implemented yet!\n";
     return;
   }
 
@@ -267,9 +270,8 @@ void ProfileInfoLoader::getEdgeCounts(std::vector<std::pair<Edge,
 //
 void ProfileInfoLoader::getBBTrace(std::vector<BasicBlock *> &Trace) {
   if (BBTrace.empty ()) {
-    std::cerr << "Basic block trace is not available!\n";
+    cerr << "Basic block trace is not available!\n";
     return;
   }
-  std::cerr << "Basic block trace loading is not implemented yet!\n";
+  cerr << "Basic block trace loading is not implemented yet!\n";
 }
-