diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/MachineScheduler.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/Passes.cpp | 33 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/RegisterCoalescer.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonSubtarget.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonSubtarget.h | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp | 15 | ||||
| -rw-r--r-- | llvm/lib/Target/TargetSubtargetInfo.cpp | 20 | 
8 files changed, 34 insertions, 65 deletions
| diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp index 89ac6a8e54d..7a3c80bb75d 100644 --- a/llvm/lib/CodeGen/MachineScheduler.cpp +++ b/llvm/lib/CodeGen/MachineScheduler.cpp @@ -209,6 +209,11 @@ static MachineSchedRegistry  DefaultSchedRegistry("default", "Use the target's default scheduler choice.",                       useDefaultMachineSched); +static cl::opt<bool> EnableMachineSched( +    "enable-misched", +    cl::desc("Enable the machine instruction scheduling pass."), cl::init(true), +    cl::Hidden); +  /// Forward declare the standard machine scheduler. This will be used as the  /// default scheduler if the target does not set a default.  static ScheduleDAGInstrs *createGenericSchedLive(MachineSchedContext *C); @@ -304,6 +309,12 @@ ScheduleDAGInstrs *PostMachineScheduler::createPostMachineScheduler() {  /// design would be to split blocks at scheduling boundaries, but LLVM has a  /// general bias against block splitting purely for implementation simplicity.  bool MachineScheduler::runOnMachineFunction(MachineFunction &mf) { +  if (EnableMachineSched.getNumOccurrences()) { +    if (!EnableMachineSched) +      return false; +  } else if (!mf.getSubtarget().enableMachineScheduler()) +    return false; +    DEBUG(dbgs() << "Before MISsched:\n"; mf.print(dbgs()));    // Initialize the context of the pass. diff --git a/llvm/lib/CodeGen/Passes.cpp b/llvm/lib/CodeGen/Passes.cpp index 272d06887fe..d692862adf4 100644 --- a/llvm/lib/CodeGen/Passes.cpp +++ b/llvm/lib/CodeGen/Passes.cpp @@ -55,9 +55,6 @@ static cl::opt<bool> DisableMachineCSE("disable-machine-cse", cl::Hidden,  static cl::opt<cl::boolOrDefault>  OptimizeRegAlloc("optimize-regalloc", cl::Hidden,      cl::desc("Enable optimized register allocation compilation path.")); -static cl::opt<cl::boolOrDefault> -EnableMachineSched("enable-misched", -    cl::desc("Enable the machine instruction scheduling pass."));  static cl::opt<bool> DisablePostRAMachineLICM("disable-postra-machine-licm",      cl::Hidden,      cl::desc("Disable Machine LICM")); @@ -116,28 +113,6 @@ static IdentifyingPassPtr applyDisable(IdentifyingPassPtr PassID,    return PassID;  } -/// Allow Pass selection to be overriden by command line options. This supports -/// flags with ternary conditions. TargetID is passed through by default. The -/// pass is suppressed when the option is false. When the option is true, the -/// StandardID is selected if the target provides no default. -static IdentifyingPassPtr applyOverride(IdentifyingPassPtr TargetID, -                                        cl::boolOrDefault Override, -                                        AnalysisID StandardID) { -  switch (Override) { -  case cl::BOU_UNSET: -    return TargetID; -  case cl::BOU_TRUE: -    if (TargetID.isValid()) -      return TargetID; -    if (StandardID == nullptr) -      report_fatal_error("Target cannot enable pass"); -    return StandardID; -  case cl::BOU_FALSE: -    return IdentifyingPassPtr(); -  } -  llvm_unreachable("Invalid command line option state"); -} -  /// Allow standard passes to be disabled by the command line, regardless of who  /// is adding the pass.  /// @@ -182,9 +157,6 @@ static IdentifyingPassPtr overridePass(AnalysisID StandardID,    if (StandardID == &MachineCSEID)      return applyDisable(TargetID, DisableMachineCSE); -  if (StandardID == &MachineSchedulerID) -    return applyOverride(TargetID, EnableMachineSched, StandardID); -    if (StandardID == &TargetPassConfig::PostRAMachineLICMID)      return applyDisable(TargetID, DisablePostRAMachineLICM); @@ -249,11 +221,6 @@ TargetPassConfig::TargetPassConfig(TargetMachine *tm, PassManagerBase &pm)    // Substitute Pseudo Pass IDs for real ones.    substitutePass(&EarlyTailDuplicateID, &TailDuplicateID);    substitutePass(&PostRAMachineLICMID, &MachineLICMID); - -  // Temporarily disable experimental passes. -  const TargetSubtargetInfo &ST = *TM->getSubtargetImpl(); -  if (!ST.useMachineScheduler()) -    disablePass(&MachineSchedulerID);  }  /// Insert InsertedPassID pass after TargetPassID. diff --git a/llvm/lib/CodeGen/RegisterCoalescer.cpp b/llvm/lib/CodeGen/RegisterCoalescer.cpp index 8ee90eaddc5..0ee149f40b3 100644 --- a/llvm/lib/CodeGen/RegisterCoalescer.cpp +++ b/llvm/lib/CodeGen/RegisterCoalescer.cpp @@ -2771,7 +2771,7 @@ bool RegisterCoalescer::runOnMachineFunction(MachineFunction &fn) {    AA = &getAnalysis<AliasAnalysis>();    Loops = &getAnalysis<MachineLoopInfo>();    if (EnableGlobalCopies == cl::BOU_UNSET) -    JoinGlobalCopies = STI.useMachineScheduler(); +    JoinGlobalCopies = STI.enableJoinGlobalCopies();    else      JoinGlobalCopies = (EnableGlobalCopies == cl::BOU_TRUE); diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index a0cd6ff9032..97abe32c972 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -292,7 +292,8 @@ namespace llvm {      const TargetLowering *TLI = IS->TLI;      const TargetSubtargetInfo &ST = IS->MF->getSubtarget(); -    if (OptLevel == CodeGenOpt::None || ST.useMachineScheduler() || +    if (OptLevel == CodeGenOpt::None || +        (ST.enableMachineScheduler() && ST.enableMachineSchedDefaultSched()) ||          TLI->getSchedulingPreference() == Sched::Source)        return createSourceListDAGScheduler(IS, OptLevel);      if (TLI->getSchedulingPreference() == Sched::RegPressure) diff --git a/llvm/lib/Target/Hexagon/HexagonSubtarget.cpp b/llvm/lib/Target/Hexagon/HexagonSubtarget.cpp index 380f023bcf3..1717ae3fe88 100644 --- a/llvm/lib/Target/Hexagon/HexagonSubtarget.cpp +++ b/llvm/lib/Target/Hexagon/HexagonSubtarget.cpp @@ -48,6 +48,10 @@ EnableIEEERndNear(      cl::Hidden, cl::ZeroOrMore, cl::init(false),      cl::desc("Generate non-chopped conversion from fp to int.")); +static cl::opt<bool> DisableHexagonMISched("disable-hexagon-misched", +      cl::Hidden, cl::ZeroOrMore, cl::init(false), +      cl::desc("Disable Hexagon MI Scheduling")); +  HexagonSubtarget &  HexagonSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS) {    // If the programmer has not specified a Hexagon version, default to -mv4. @@ -91,3 +95,9 @@ HexagonSubtarget::HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS,  // Pin the vtable to this file.  void HexagonSubtarget::anchor() {} + +bool HexagonSubtarget::enableMachineScheduler() const { +  if (DisableHexagonMISched.getNumOccurrences()) +    return !DisableHexagonMISched; +  return true; +} diff --git a/llvm/lib/Target/Hexagon/HexagonSubtarget.h b/llvm/lib/Target/Hexagon/HexagonSubtarget.h index 57de5461f08..780567bcd36 100644 --- a/llvm/lib/Target/Hexagon/HexagonSubtarget.h +++ b/llvm/lib/Target/Hexagon/HexagonSubtarget.h @@ -85,6 +85,11 @@ public:    bool hasV5TOps() const { return getHexagonArchVersion() >= V5; }    bool hasV5TOpsOnly() const { return getHexagonArchVersion() == V5; }    bool modeIEEERndNear() const { return ModeIEEERndNear; } +  bool enableMachineScheduler() const override; +  // Always use the TargetLowering default scheduler. +  // FIXME: This will use the vliw scheduler which is probably just hurting +  // compiler time and will be removed eventually anyway. +  bool enableMachineSchedDefaultSched() const override { return false; }    const std::string &getCPUString () const { return CPUString; } diff --git a/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp b/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp index f40c2568045..15591061839 100644 --- a/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp +++ b/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp @@ -29,10 +29,6 @@ using namespace llvm;  static cl:: opt<bool> DisableHardwareLoops("disable-hexagon-hwloops",        cl::Hidden, cl::desc("Disable Hardware Loops for Hexagon target")); -static cl::opt<bool> DisableHexagonMISched("disable-hexagon-misched", -      cl::Hidden, cl::ZeroOrMore, cl::init(false), -      cl::desc("Disable Hexagon MI Scheduling")); -  static cl::opt<bool> DisableHexagonCFGOpt("disable-hexagon-cfgopt",        cl::Hidden, cl::ZeroOrMore, cl::init(false),        cl::desc("Disable Hexagon CFG Optimization")); @@ -82,16 +78,7 @@ namespace {  class HexagonPassConfig : public TargetPassConfig {  public:    HexagonPassConfig(HexagonTargetMachine *TM, PassManagerBase &PM) -    : TargetPassConfig(TM, PM) { -    // FIXME: Rather than calling enablePass(&MachineSchedulerID) below, define -    // HexagonSubtarget::enableMachineScheduler() { return true; }. -    // That will bypass the SelectionDAG VLIW scheduler, which is probably just -    // hurting compile time and will be removed eventually anyway. -    if (DisableHexagonMISched) -      disablePass(&MachineSchedulerID); -    else -      enablePass(&MachineSchedulerID); -  } +      : TargetPassConfig(TM, PM) {}    HexagonTargetMachine &getHexagonTargetMachine() const {      return getTM<HexagonTargetMachine>(); diff --git a/llvm/lib/Target/TargetSubtargetInfo.cpp b/llvm/lib/Target/TargetSubtargetInfo.cpp index 10597a84bca..b2bb59ea28c 100644 --- a/llvm/lib/Target/TargetSubtargetInfo.cpp +++ b/llvm/lib/Target/TargetSubtargetInfo.cpp @@ -23,22 +23,6 @@ TargetSubtargetInfo::TargetSubtargetInfo() {}  TargetSubtargetInfo::~TargetSubtargetInfo() {} -// Temporary option to compare overall performance change when moving from the -// SD scheduler to the MachineScheduler pass pipeline. This is convenient for -// benchmarking during the transition from SD to MI scheduling. Once armv7 makes -// the switch, it should go away. The normal way to enable/disable the -// MachineScheduling pass itself is by using -enable-misched. For targets that -// already use MI sched (via MySubTarget::enableMachineScheduler()) -// -misched-bench=false negates the subtarget hook. -static cl::opt<bool> BenchMachineSched("misched-bench", cl::Hidden, -    cl::desc("Migrate from the target's default SD scheduler to MI scheduler")); - -bool TargetSubtargetInfo::useMachineScheduler() const { -  if (BenchMachineSched.getNumOccurrences()) -    return BenchMachineSched; -  return enableMachineScheduler(); -} -  bool TargetSubtargetInfo::enableAtomicExpand() const {    return true;  } @@ -47,6 +31,10 @@ bool TargetSubtargetInfo::enableMachineScheduler() const {    return false;  } +bool TargetSubtargetInfo::enableJoinGlobalCopies() const { +  return enableMachineScheduler(); +} +  bool TargetSubtargetInfo::enableRALocalReassignment(      CodeGenOpt::Level OptLevel) const {    return true; | 

