From: Daniel Dunbar Date: Wed, 22 Oct 2008 18:29:51 +0000 (+0000) Subject: Only create the target machine when emitting assembly. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8b7650ed5a8ecd941a8147c32df05f4944a77308;p=clang Only create the target machine when emitting assembly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57993 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/Backend.cpp b/Driver/Backend.cpp index 2121749f3d..a59c82cd76 100644 --- a/Driver/Backend.cpp +++ b/Driver/Backend.cpp @@ -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.