add support to llvm-prof for reading from a bitcode file


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36836 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvm-prof/llvm-prof.cpp b/tools/llvm-prof/llvm-prof.cpp
index 6b1d514..7b1e292 100644
--- a/tools/llvm-prof/llvm-prof.cpp
+++ b/tools/llvm-prof/llvm-prof.cpp
@@ -18,8 +18,10 @@
 #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 @@
 
     // 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";