Update Subzero to start parsing PNaCl bitcode files.

This patch only handles global addresses in PNaCl bitcode files.
Function blocks are still not parsed. Also, factors out a common API
for translation, so that generated ICE can always be translated using
the same code.

BUG= https://code.google.com/p/nativeclient/issues/detail?id=3892
R=jvoung@chromium.org, stichnot@chromium.org

Review URL: https://codereview.chromium.org/361733002
diff --git a/src/llvm2ice.cpp b/src/llvm2ice.cpp
index 6d26cff53..822a0ce 100644
--- a/src/llvm2ice.cpp
+++ b/src/llvm2ice.cpp
@@ -14,12 +14,13 @@
 //===----------------------------------------------------------------------===//
 
 #include "IceCfg.h"
+#include "IceClFlags.h"
 #include "IceConverter.h"
 #include "IceDefs.h"
 #include "IceTargetLowering.h"
 #include "IceTypes.h"
+#include "PNaClTranslator.h"
 
-#include "llvm/IR/Constant.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/LLVMContext.h"
 #include "llvm/IR/Module.h"
@@ -128,9 +129,15 @@
 
   Ice::GlobalContext Ctx(Ls, Os, VMask, TargetArch, OptLevel, TestPrefix);
 
+  Ice::ClFlags Flags;
+  Flags.DisableInternal = DisableInternal;
+  Flags.SubzeroTimingEnabled = SubzeroTimingEnabled;
+  Flags.DisableTranslation = DisableTranslation;
+
   if (BuildOnRead) {
-    std::cerr << "Direct build from bitcode not implemented yet!\n";
-    return 1;
+    Ice::PNaClTranslator Translator(&Ctx, Flags);
+    Translator.translate(IRFilename);
+    return Translator.getExitStatus();
   } else {
     // Parse the input LLVM IR file into a module.
     SMDiagnostic Err;
@@ -189,8 +196,7 @@
     }
     GlobalLowering.reset();
 
-    Ice::Converter Converter(&Ctx, DisableInternal, SubzeroTimingEnabled,
-                             DisableTranslation);
+    Ice::Converter Converter(&Ctx, Flags);
     return Converter.convertToIce(Mod);
   }
 }