diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/CSEInfo.cpp | 20 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Legalizer.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/TargetPassConfig.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64TargetMachine.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMTargetMachine.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsTargetMachine.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86TargetMachine.cpp | 6 | 
9 files changed, 54 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/CSEInfo.cpp b/llvm/lib/CodeGen/GlobalISel/CSEInfo.cpp index aaf09c8c938..a87ef20a3be 100644 --- a/llvm/lib/CodeGen/GlobalISel/CSEInfo.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CSEInfo.cpp @@ -27,8 +27,8 @@ void UniqueMachineInstr::Profile(FoldingSetNodeID &ID) {  }  /// ----------------------------------------- -/// --------- CSEConfig ---------- /// -bool CSEConfig::shouldCSEOpc(unsigned Opc) { +/// --------- CSEConfigFull ---------- /// +bool CSEConfigFull::shouldCSEOpc(unsigned Opc) {    switch (Opc) {    default:      break; @@ -60,6 +60,17 @@ bool CSEConfig::shouldCSEOpc(unsigned Opc) {  bool CSEConfigConstantOnly::shouldCSEOpc(unsigned Opc) {    return Opc == TargetOpcode::G_CONSTANT;  } + +std::unique_ptr<CSEConfigBase> +llvm::getStandardCSEConfigForOpt(CodeGenOpt::Level Level) { +  std::unique_ptr<CSEConfigBase> Config; +  if (Level == CodeGenOpt::None) +    Config = make_unique<CSEConfigBase>(); +  else +    Config = make_unique<CSEConfigFull>(); +  return Config; +} +  /// -----------------------------------------  /// -------- GISelCSEInfo -------------// @@ -348,8 +359,9 @@ const GISelInstProfileBuilder &GISelInstProfileBuilder::addNodeIDMachineOperand(    return *this;  } -GISelCSEInfo &GISelCSEAnalysisWrapper::get(std::unique_ptr<CSEConfig> CSEOpt, -                                           bool Recompute) { +GISelCSEInfo & +GISelCSEAnalysisWrapper::get(std::unique_ptr<CSEConfigBase> CSEOpt, +                             bool Recompute) {    if (!AlreadyComputed || Recompute) {      Info.setCSEConfig(std::move(CSEOpt));      Info.analyze(*MF); diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 290d592339f..2e268ed27a9 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -1729,8 +1729,7 @@ bool IRTranslator::runOnMachineFunction(MachineFunction &CurMF) {    if (EnableCSE) {      EntryBuilder = make_unique<CSEMIRBuilder>(CurMF); -    std::unique_ptr<CSEConfig> Config = make_unique<CSEConfig>(); -    CSEInfo = &Wrapper.get(std::move(Config)); +    CSEInfo = &Wrapper.get(TPC->getCSEConfig());      EntryBuilder->setCSEInfo(CSEInfo);      CurBuilder = make_unique<CSEMIRBuilder>(CurMF);      CurBuilder->setCSEInfo(CSEInfo); diff --git a/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp b/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp index 4db86761cdb..efdae5790ab 100644 --- a/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp @@ -170,8 +170,7 @@ bool Legalizer::runOnMachineFunction(MachineFunction &MF) {    if (EnableCSE) {      MIRBuilder = make_unique<CSEMIRBuilder>(); -    std::unique_ptr<CSEConfig> Config = make_unique<CSEConfig>(); -    CSEInfo = &Wrapper.get(std::move(Config)); +    CSEInfo = &Wrapper.get(TPC.getCSEConfig());      MIRBuilder->setCSEInfo(CSEInfo);    } else      MIRBuilder = make_unique<MachineIRBuilder>(); diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp index 8ddde4b8f99..e5c7ceff112 100644 --- a/llvm/lib/CodeGen/TargetPassConfig.cpp +++ b/llvm/lib/CodeGen/TargetPassConfig.cpp @@ -22,6 +22,7 @@  #include "llvm/Analysis/ScopedNoAliasAA.h"  #include "llvm/Analysis/TargetTransformInfo.h"  #include "llvm/Analysis/TypeBasedAliasAnalysis.h" +#include "llvm/CodeGen/CSEConfigBase.h"  #include "llvm/CodeGen/MachineFunctionPass.h"  #include "llvm/CodeGen/MachinePassRegistry.h"  #include "llvm/CodeGen/Passes.h" @@ -1227,3 +1228,7 @@ bool TargetPassConfig::reportDiagnosticWhenGlobalISelFallback() const {  bool TargetPassConfig::isGISelCSEEnabled() const {    return getOptLevel() != CodeGenOpt::Level::None;  } + +std::unique_ptr<CSEConfigBase> TargetPassConfig::getCSEConfig() const { +  return make_unique<CSEConfigBase>(); +} diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp index d213f20755f..d657fd414f3 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp @@ -19,6 +19,7 @@  #include "llvm/ADT/STLExtras.h"  #include "llvm/ADT/Triple.h"  #include "llvm/Analysis/TargetTransformInfo.h" +#include "llvm/CodeGen/CSEConfigBase.h"  #include "llvm/CodeGen/GlobalISel/IRTranslator.h"  #include "llvm/CodeGen/GlobalISel/InstructionSelect.h"  #include "llvm/CodeGen/GlobalISel/Legalizer.h" @@ -383,6 +384,8 @@ public:    void addPostRegAlloc() override;    void addPreSched2() override;    void addPreEmitPass() override; + +  std::unique_ptr<CSEConfigBase> getCSEConfig() const override;  };  } // end anonymous namespace @@ -396,6 +399,10 @@ TargetPassConfig *AArch64TargetMachine::createPassConfig(PassManagerBase &PM) {    return new AArch64PassConfig(*this, PM);  } +std::unique_ptr<CSEConfigBase> AArch64PassConfig::getCSEConfig() const { +  return getStandardCSEConfigForOpt(TM->getOptLevel()); +} +  void AArch64PassConfig::addIRPasses() {    // Always expand atomic operations, we don't deal with atomicrmw or cmpxchg    // ourselves. diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index 8dd467b8d96..f2408819ce9 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -552,8 +552,14 @@ public:    bool addPreISel() override;    bool addInstSelector() override;    bool addGCPasses() override; + +  std::unique_ptr<CSEConfigBase> getCSEConfig() const override;  }; +std::unique_ptr<CSEConfigBase> AMDGPUPassConfig::getCSEConfig() const { +  return getStandardCSEConfigForOpt(TM->getOptLevel()); +} +  class R600PassConfig final : public AMDGPUPassConfig {  public:    R600PassConfig(LLVMTargetMachine &TM, PassManagerBase &PM) diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp index d2663ac912d..3c38b4584e8 100644 --- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp +++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp @@ -361,6 +361,8 @@ public:    void addPreRegAlloc() override;    void addPreSched2() override;    void addPreEmitPass() override; + +  std::unique_ptr<CSEConfigBase> getCSEConfig() const override;  };  class ARMExecutionDomainFix : public ExecutionDomainFix { @@ -385,6 +387,10 @@ TargetPassConfig *ARMBaseTargetMachine::createPassConfig(PassManagerBase &PM) {    return new ARMPassConfig(*this, PM);  } +std::unique_ptr<CSEConfigBase> ARMPassConfig::getCSEConfig() const { +  return getStandardCSEConfigForOpt(TM->getOptLevel()); +} +  void ARMPassConfig::addIRPasses() {    if (TM->Options.ThreadModel == ThreadModel::Single)      addPass(createLowerAtomicPass()); diff --git a/llvm/lib/Target/Mips/MipsTargetMachine.cpp b/llvm/lib/Target/Mips/MipsTargetMachine.cpp index 92ba00db1c3..591e2c4b706 100644 --- a/llvm/lib/Target/Mips/MipsTargetMachine.cpp +++ b/llvm/lib/Target/Mips/MipsTargetMachine.cpp @@ -239,6 +239,8 @@ public:    bool addLegalizeMachineIR() override;    bool addRegBankSelect() override;    bool addGlobalInstructionSelect() override; + +  std::unique_ptr<CSEConfigBase> getCSEConfig() const override;  };  } // end anonymous namespace @@ -247,6 +249,10 @@ TargetPassConfig *MipsTargetMachine::createPassConfig(PassManagerBase &PM) {    return new MipsPassConfig(*this, PM);  } +std::unique_ptr<CSEConfigBase> MipsPassConfig::getCSEConfig() const { +  return getStandardCSEConfigForOpt(TM->getOptLevel()); +} +  void MipsPassConfig::addIRPasses() {    TargetPassConfig::addIRPasses();    addPass(createAtomicExpandPass()); diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp index d0006650cf8..73fb57a1f19 100644 --- a/llvm/lib/Target/X86/X86TargetMachine.cpp +++ b/llvm/lib/Target/X86/X86TargetMachine.cpp @@ -377,6 +377,8 @@ public:    void addPreEmitPass() override;    void addPreEmitPass2() override;    void addPreSched2() override; + +  std::unique_ptr<CSEConfigBase> getCSEConfig() const override;  };  class X86ExecutionDomainFix : public ExecutionDomainFix { @@ -520,3 +522,7 @@ void X86PassConfig::addPreEmitPass2() {    if (!TT.isOSDarwin() && !TT.isOSWindows())      addPass(createCFIInstrInserter());  } + +std::unique_ptr<CSEConfigBase> X86PassConfig::getCSEConfig() const { +  return getStandardCSEConfigForOpt(TM->getOptLevel()); +}  | 

