add support to llvm-prof for reading from a bitcode file
authorChris Lattner <sabre@nondot.org>
Sun, 6 May 2007 04:43:00 +0000 (04:43 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 6 May 2007 04:43:00 +0000 (04:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36836 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-prof/Makefile
tools/llvm-prof/llvm-prof.cpp
tools/opt/opt.cpp

index b745e654927ee8e572d4b6c4cf8abb3591fdc7bc..72e2bcf184bd647548cdd616098a145e3410ae59 100644 (file)
@@ -9,7 +9,7 @@
 LEVEL = ../..
 
 TOOLNAME = llvm-prof
-LINK_COMPONENTS = bcreader analysis
+LINK_COMPONENTS = bcreader bitreader analysis
 REQUIRES_EH := 1
 
 include $(LEVEL)/Makefile.common
index 6b1d514bcd6e07bf557e1926a39cbd24454f757c..7b1e2922533fa2cba90fbf0c8145b2fe4111f869 100644 (file)
 #include "llvm/Assembly/AsmAnnotationWriter.h"
 #include "llvm/Analysis/ProfileInfoLoader.h"
 #include "llvm/Bytecode/Reader.h"
+#include "llvm/Bitcode/ReaderWriter.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/MemoryBuffer.h"
 #include "llvm/System/Signals.h"
 #include <algorithm>
 #include <iostream>
@@ -30,6 +32,7 @@
 using namespace llvm;
 
 namespace {
+  cl::opt<bool> Bitcode("bitcode");
   cl::opt<std::string>
   BytecodeFile(cl::Positional, cl::desc("<program bytecode file>"),
                cl::Required);
@@ -116,9 +119,20 @@ int main(int argc, char **argv) {
 
     // Read in the bytecode file...
     std::string ErrorMessage;
-    Module *M = ParseBytecodeFile(BytecodeFile, 
-                                  Compressor::decompressToNewBuffer, 
-                                  &ErrorMessage);
+    Module *M;
+    if (Bitcode) {
+      MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(&BytecodeFile[0],
+                                                          BytecodeFile.size());
+      if (Buffer == 0)
+        ErrorMessage = "Error reading file '" + BytecodeFile + "'";
+      else
+        M = ParseBitcodeFile(Buffer, &ErrorMessage);
+      delete Buffer;
+    } else {
+      M = ParseBytecodeFile(BytecodeFile, 
+                            Compressor::decompressToNewBuffer, 
+                            &ErrorMessage);
+    }
     if (M == 0) {
       std::cerr << argv[0] << ": " << BytecodeFile << ": " 
         << ErrorMessage << "\n";
index 6c770858930468ab888fbc35be7b049fbaa6d74b..218e5f0b1decd876b6cb26eb4c6987066acb4b03 100644 (file)
@@ -268,12 +268,8 @@ int main(int argc, char **argv) {
     // Load the input module...
     std::auto_ptr<Module> M;
     if (Bitcode) {
-      MemoryBuffer *Buffer;
-      if (InputFilename == "-") {
-        Buffer = MemoryBuffer::getSTDIN();
-      } else {
-        Buffer = MemoryBuffer::getFile(&InputFilename[0], InputFilename.size());
-      }
+      MemoryBuffer *Buffer
+        = MemoryBuffer::getFileOrSTDIN(&InputFilename[0], InputFilename.size());
       
       if (Buffer == 0)
         ErrorMessage = "Error reading file '" + InputFilename + "'";