]> granicus.if.org Git - clang/commitdiff
Only create the target machine when emitting assembly.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 22 Oct 2008 18:29:51 +0000 (18:29 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 22 Oct 2008 18:29:51 +0000 (18:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57993 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/Backend.cpp

index 2121749f3df54faf74dd7559e8bdbb72434d8d35..a59c82cd7699cfd3ae6713689a53a24c9c5986a1 100644 (file)
@@ -144,23 +144,6 @@ FunctionPassManager *BackendConsumer::getPerFunctionPasses() const {
 }
 
 bool BackendConsumer::AddEmitPasses(bool Fast, std::string &Error) {
-  // Create the TargetMachine for generating code.
-  const TargetMachineRegistry::entry *TME = 
-    TargetMachineRegistry::getClosestStaticTargetForModule(*TheModule, Error);
-  if (!TME) {
-    Error = std::string("Unable to get target machine: ") + Error;
-    return false;
-  }
-      
-  // FIXME: Support features?
-  std::string FeatureStr;
-  TargetMachine *TM = TME->CtorFn(*TheModule, FeatureStr);
-  
-  // Set register scheduler & allocation policy.
-  RegisterScheduler::setDefault(createDefaultScheduler);
-  RegisterRegAlloc::setDefault(Fast ? createLocalRegisterAllocator : 
-                               createLinearScanRegisterAllocator);  
-
   if (OutputFile == "-" || (InputFile == "-" && OutputFile.empty())) {
     AsmOutStream = new raw_stdout_ostream();
     sys::Program::ChangeStdoutToBinary();
@@ -189,6 +172,23 @@ bool BackendConsumer::AddEmitPasses(bool Fast, std::string &Error) {
   } else if (Action == Backend_EmitLL) {
     getPerModulePasses()->add(createPrintModulePass(AsmOutStream));
   } else {
+    // Create the TargetMachine for generating code.
+    const TargetMachineRegistry::entry *TME = 
+      TargetMachineRegistry::getClosestStaticTargetForModule(*TheModule, Error);
+    if (!TME) {
+      Error = std::string("Unable to get target machine: ") + Error;
+      return false;
+    }
+      
+    // FIXME: Support features?
+    std::string FeatureStr;
+    TargetMachine *TM = TME->CtorFn(*TheModule, FeatureStr);
+    
+    // Set register scheduler & allocation policy.
+    RegisterScheduler::setDefault(createDefaultScheduler);
+    RegisterRegAlloc::setDefault(Fast ? createLocalRegisterAllocator : 
+                                 createLinearScanRegisterAllocator);  
+
     // From llvm-gcc:
     // If there are passes we have to run on the entire module, we do codegen
     // as a separate "pass" after that happens.