Fix a bug that would cause subzero to fail when --threads=0.

Creates a single TargetDataLowering.

BUG= None
R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/1179313004.
diff --git a/src/IceCompiler.cpp b/src/IceCompiler.cpp
index 2db7abc..7619b17 100644
--- a/src/IceCompiler.cpp
+++ b/src/IceCompiler.cpp
@@ -141,21 +141,28 @@
   }
 
   Ctx.waitForWorkerThreads();
-  Translator->transferErrorCode();
-  Translator->emitConstants();
+  if (Translator->getErrorStatus()) {
+    Ctx.getErrorStatus()->assign(Translator->getErrorStatus().value());
+  } else {
+    Ctx.lowerGlobals("last");
+    Ctx.lowerProfileData();
+    Ctx.lowerConstants();
 
-  if (Ctx.getFlags().getOutFileType() == FT_Elf) {
-    TimerMarker T1(Ice::TimerStack::TT_emit, &Ctx);
-    Ctx.getObjectWriter()->setUndefinedSyms(Ctx.getConstantExternSyms());
-    Ctx.getObjectWriter()->writeNonUserSections();
+    if (Ctx.getFlags().getOutFileType() == FT_Elf) {
+      TimerMarker T1(Ice::TimerStack::TT_emit, &Ctx);
+      Ctx.getObjectWriter()->setUndefinedSyms(Ctx.getConstantExternSyms());
+      Ctx.getObjectWriter()->writeNonUserSections();
+    }
   }
+
   if (Ctx.getFlags().getSubzeroTimingEnabled())
     Ctx.dumpTimers();
+
   if (Ctx.getFlags().getTimeEachFunction()) {
     const bool DumpCumulative = false;
     Ctx.dumpTimers(GlobalContext::TSK_Funcs, DumpCumulative);
   }
-  const bool FinalStats = true;
+  constexpr bool FinalStats = true;
   Ctx.dumpStats("_FINAL_", FinalStats);
 }