diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 | 
| commit | 044eb2f6afba375a914ac9d8024f8f5142bb912e (patch) | |
| tree | 1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /lib/CodeGen/LLVMTargetMachine.cpp | |
| parent | eb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/LLVMTargetMachine.cpp')
| -rw-r--r-- | lib/CodeGen/LLVMTargetMachine.cpp | 57 | 
1 files changed, 29 insertions, 28 deletions
diff --git a/lib/CodeGen/LLVMTargetMachine.cpp b/lib/CodeGen/LLVMTargetMachine.cpp index f2defb4fd6234..92edfb059ad65 100644 --- a/lib/CodeGen/LLVMTargetMachine.cpp +++ b/lib/CodeGen/LLVMTargetMachine.cpp @@ -16,11 +16,12 @@  #include "llvm/CodeGen/BasicTTIImpl.h"  #include "llvm/CodeGen/MachineModuleInfo.h"  #include "llvm/CodeGen/Passes.h" +#include "llvm/CodeGen/TargetLoweringObjectFile.h"  #include "llvm/CodeGen/TargetPassConfig.h" -#include "llvm/IR/IRPrintingPasses.h"  #include "llvm/IR/LegacyPassManager.h" -#include "llvm/IR/Verifier.h" +#include "llvm/MC/MCAsmBackend.h"  #include "llvm/MC/MCAsmInfo.h" +#include "llvm/MC/MCCodeEmitter.h"  #include "llvm/MC/MCContext.h"  #include "llvm/MC/MCInstrInfo.h"  #include "llvm/MC/MCStreamer.h" @@ -29,10 +30,8 @@  #include "llvm/Support/ErrorHandling.h"  #include "llvm/Support/FormattedStream.h"  #include "llvm/Support/TargetRegistry.h" -#include "llvm/Target/TargetLoweringObjectFile.h"  #include "llvm/Target/TargetMachine.h"  #include "llvm/Target/TargetOptions.h" -#include "llvm/Transforms/Scalar.h"  using namespace llvm;  void LLVMTargetMachine::initAsmInfo() { @@ -77,7 +76,6 @@ LLVMTargetMachine::LLVMTargetMachine(const Target &T,                                       Reloc::Model RM, CodeModel::Model CM,                                       CodeGenOpt::Level OL)      : TargetMachine(T, DataLayoutString, TT, CPU, FS, Options) { -  T.adjustCodeGenOpts(TT, RM, CM);    this->RM = RM;    this->CMModel = CM;    this->OptLevel = OL; @@ -92,24 +90,25 @@ TargetIRAnalysis LLVMTargetMachine::getTargetIRAnalysis() {  /// addPassesToX helper drives creation and initialization of TargetPassConfig.  static MCContext *  addPassesToGenerateCode(LLVMTargetMachine *TM, PassManagerBase &PM, -                        bool DisableVerify, AnalysisID StartBefore, -                        AnalysisID StartAfter, AnalysisID StopBefore, -                        AnalysisID StopAfter) { +                        bool DisableVerify, bool &WillCompleteCodeGenPipeline, +                        raw_pwrite_stream &Out, MachineModuleInfo *MMI) {    // Targets may override createPassConfig to provide a target-specific    // subclass.    TargetPassConfig *PassConfig = TM->createPassConfig(PM); -  PassConfig->setStartStopPasses(StartBefore, StartAfter, StopBefore, -                                 StopAfter);    // Set PassConfig options provided by TargetMachine.    PassConfig->setDisableVerify(DisableVerify); +  WillCompleteCodeGenPipeline = PassConfig->willCompleteCodeGenPipeline();    PM.add(PassConfig); -  MachineModuleInfo *MMI = new MachineModuleInfo(TM); +  if (!MMI) +    MMI = new MachineModuleInfo(TM);    PM.add(MMI);    if (PassConfig->addISelPasses())      return nullptr;    PassConfig->addMachinePasses();    PassConfig->setInitialized(); +  if (!WillCompleteCodeGenPipeline) +    PM.add(createPrintMIRPass(Out));    return &MMI->getContext();  } @@ -163,7 +162,8 @@ bool LLVMTargetMachine::addAsmPrinter(PassManagerBase &PM,      Triple T(getTargetTriple().str());      AsmStreamer.reset(getTarget().createMCObjectStreamer( -        T, Context, *MAB, Out, MCE, STI, Options.MCOptions.MCRelaxAll, +        T, Context, std::unique_ptr<MCAsmBackend>(MAB), Out, +        std::unique_ptr<MCCodeEmitter>(MCE), STI, Options.MCOptions.MCRelaxAll,          Options.MCOptions.MCIncrementalLinkerCompatible,          /*DWARFMustBeAtTheEnd*/ true));      break; @@ -185,23 +185,20 @@ bool LLVMTargetMachine::addAsmPrinter(PassManagerBase &PM,    return false;  } -bool LLVMTargetMachine::addPassesToEmitFile( -    PassManagerBase &PM, raw_pwrite_stream &Out, CodeGenFileType FileType, -    bool DisableVerify, AnalysisID StartBefore, AnalysisID StartAfter, -    AnalysisID StopBefore, AnalysisID StopAfter) { +bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM, +                                            raw_pwrite_stream &Out, +                                            CodeGenFileType FileType, +                                            bool DisableVerify, +                                            MachineModuleInfo *MMI) {    // Add common CodeGen passes. -  MCContext *Context = -      addPassesToGenerateCode(this, PM, DisableVerify, StartBefore, StartAfter, -                              StopBefore, StopAfter); +  bool WillCompleteCodeGenPipeline = true; +  MCContext *Context = addPassesToGenerateCode( +      this, PM, DisableVerify, WillCompleteCodeGenPipeline, Out, MMI);    if (!Context)      return true; -  if (StopBefore || StopAfter) { -    PM.add(createPrintMIRPass(Out)); -  } else { -    if (addAsmPrinter(PM, Out, FileType, *Context)) -      return true; -  } +  if (WillCompleteCodeGenPipeline && addAsmPrinter(PM, Out, FileType, *Context)) +    return true;    PM.add(createFreeMachineFunctionPass());    return false; @@ -216,10 +213,13 @@ bool LLVMTargetMachine::addPassesToEmitMC(PassManagerBase &PM, MCContext *&Ctx,                                            raw_pwrite_stream &Out,                                            bool DisableVerify) {    // Add common CodeGen passes. -  Ctx = addPassesToGenerateCode(this, PM, DisableVerify, nullptr, nullptr, -                                nullptr, nullptr); +  bool WillCompleteCodeGenPipeline = true; +  Ctx = addPassesToGenerateCode(this, PM, DisableVerify, +                                WillCompleteCodeGenPipeline, Out, +                                /*MachineModuleInfo*/ nullptr);    if (!Ctx)      return true; +  assert(WillCompleteCodeGenPipeline && "CodeGen pipeline has been altered");    if (Options.MCOptions.MCSaveTempLabels)      Ctx->setAllowTemporaryLabels(false); @@ -238,7 +238,8 @@ bool LLVMTargetMachine::addPassesToEmitMC(PassManagerBase &PM, MCContext *&Ctx,    const Triple &T = getTargetTriple();    const MCSubtargetInfo &STI = *getMCSubtargetInfo();    std::unique_ptr<MCStreamer> AsmStreamer(getTarget().createMCObjectStreamer( -      T, *Ctx, *MAB, Out, MCE, STI, Options.MCOptions.MCRelaxAll, +      T, *Ctx, std::unique_ptr<MCAsmBackend>(MAB), Out, +      std::unique_ptr<MCCodeEmitter>(MCE), STI, Options.MCOptions.MCRelaxAll,        Options.MCOptions.MCIncrementalLinkerCompatible,        /*DWARFMustBeAtTheEnd*/ true));  | 
