Convert llvm-link to IRReader.
authorDan Gohman <gohman@apple.com>
Sat, 12 Sep 2009 21:55:12 +0000 (21:55 +0000)
committerDan Gohman <gohman@apple.com>
Sat, 12 Sep 2009 21:55:12 +0000 (21:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81632 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-link/CMakeLists.txt
tools/llvm-link/Makefile
tools/llvm-link/llvm-link.cpp

index 69a435e5300a847878775ca57257fe036f919a5e..11933f7f959ea41a385a8300e03d805aff9e7a9b 100644 (file)
@@ -1,4 +1,4 @@
-set(LLVM_LINK_COMPONENTS linker bitreader bitwriter)
+set(LLVM_LINK_COMPONENTS linker bitreader bitwriter asmparser)
 
 add_llvm_tool(llvm-link
   llvm-link.cpp
index ddc7a59b32a029a00cf5001b482e6eb40b2a5f41..26370187c55f9954866be05bbb88863141eb7571 100644 (file)
@@ -9,7 +9,7 @@
 LEVEL = ../..
 
 TOOLNAME = llvm-link
-LINK_COMPONENTS = linker bitreader bitwriter
+LINK_COMPONENTS = linker bitreader bitwriter asmparser
 
 # This tool has no plugins, optimize startup time.
 TOOL_NO_EXPORTS = 1
index 14327af70c3b8c3d87eb22cac10ce6fa0df47636..cb741991bc49654f6da05de24a7eef37cfc8f8bd 100644 (file)
@@ -23,6 +23,7 @@
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/Support/SystemUtils.h"
+#include "llvm/Support/IRReader.h"
 #include "llvm/System/Signals.h"
 #include "llvm/System/Path.h"
 #include <memory>
@@ -48,7 +49,8 @@ DumpAsm("d", cl::desc("Print assembly as linked"), cl::Hidden);
 // LoadFile - Read the specified bitcode file in and return it.  This routine
 // searches the link path for the specified file to try to find it...
 //
-static inline std::auto_ptr<Module> LoadFile(const std::string &FN, 
+static inline std::auto_ptr<Module> LoadFile(const char *argv0,
+                                             const std::string &FN, 
                                              LLVMContext& Context) {
   sys::Path Filename;
   if (!Filename.set(FN)) {
@@ -56,24 +58,17 @@ static inline std::auto_ptr<Module> LoadFile(const std::string &FN,
     return std::auto_ptr<Module>();
   }
 
-  std::string ErrorMessage;
+  SMDiagnostic Err;
   if (Filename.exists()) {
     if (Verbose) errs() << "Loading '" << Filename.c_str() << "'\n";
     Module* Result = 0;
     
     const std::string &FNStr = Filename.str();
-    if (MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(FNStr,
-                                                            &ErrorMessage)) {
-      Result = ParseBitcodeFile(Buffer, Context, &ErrorMessage);
-      delete Buffer;
-    }
+    Result = ParseIRFile(FNStr, Err, Context);
     if (Result) return std::auto_ptr<Module>(Result);   // Load successful!
 
-    if (Verbose) {
-      errs() << "Error opening bitcode file: '" << Filename.c_str() << "'";
-      if (ErrorMessage.size()) errs() << ": " << ErrorMessage;
-      errs() << "\n";
-    }
+    if (Verbose)
+      Err.Print(argv0, errs());
   } else {
     errs() << "Bitcode file: '" << Filename.c_str() << "' does not exist.\n";
   }
@@ -93,7 +88,8 @@ int main(int argc, char **argv) {
   unsigned BaseArg = 0;
   std::string ErrorMessage;
 
-  std::auto_ptr<Module> Composite(LoadFile(InputFilenames[BaseArg], Context));
+  std::auto_ptr<Module> Composite(LoadFile(argv[0],
+                                           InputFilenames[BaseArg], Context));
   if (Composite.get() == 0) {
     errs() << argv[0] << ": error loading file '"
            << InputFilenames[BaseArg] << "'\n";
@@ -101,7 +97,8 @@ int main(int argc, char **argv) {
   }
 
   for (unsigned i = BaseArg+1; i < InputFilenames.size(); ++i) {
-    std::auto_ptr<Module> M(LoadFile(InputFilenames[i], Context));
+    std::auto_ptr<Module> M(LoadFile(argv[0],
+                                     InputFilenames[i], Context));
     if (M.get() == 0) {
       errs() << argv[0] << ": error loading file '" <<InputFilenames[i]<< "'\n";
       return 1;