[llvm] r224042 - [CodeGen] Add print and verify pass after each MachineFunctionPass by default

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Dec 11 12:09:39 PST 2014


sorry, I reverted this and r224043 as check-all was failing on linux.

On 11 December 2014 at 14:42, Matthias Braun <matze at braunis.de> wrote:
> Author: matze
> Date: Thu Dec 11 13:42:05 2014
> New Revision: 224042
>
> URL: http://llvm.org/viewvc/llvm-project?rev=224042&view=rev
> Log:
> [CodeGen] Add print and verify pass after each MachineFunctionPass by default
>
> Previously print+verify passes were added in a very unsystematic way, which is
> annoying when debugging as you miss intermediate steps and allows bugs to stay
> unnotice when no verification is performed.
>
> To make this change practical I added the possibility to explicitely disable
> verification. I used this option on all places where no verification was
> performed previously (because alot of places actually don't pass the
> MachineVerifier).
> In the long term these problems should be fixed properly and verification
> enabled after each pass. I'll enable some more verification in subsequent
> commits.
>
> Modified:
>     llvm/trunk/include/llvm/CodeGen/Passes.h
>     llvm/trunk/lib/CodeGen/Passes.cpp
>     llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp
>     llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp
>     llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp
>     llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp
>     llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp
>     llvm/trunk/lib/Target/NVPTX/NVPTXTargetMachine.cpp
>     llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp
>     llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp
>     llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp
>     llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp
>     llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>     llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp
>
> Modified: llvm/trunk/include/llvm/CodeGen/Passes.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/Passes.h?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/Passes.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/Passes.h Thu Dec 11 13:42:05 2014
> @@ -105,6 +105,7 @@ private:
>    AnalysisID StopAfter;
>    bool Started;
>    bool Stopped;
> +  bool AddingMachinePasses;
>
>  protected:
>    TargetMachine *TM;
> @@ -259,12 +260,9 @@ protected:
>      return false;
>    }
>
> -  /// addPreRegAlloc - This method may be implemented by targets that want to
> -  /// run passes immediately before register allocation. This should return
> -  /// true if -print-machineinstrs should print after these passes.
> -  virtual bool addPreRegAlloc() {
> -    return false;
> -  }
> +  /// This method may be implemented by targets that want to run passes
> +  /// immediately before register allocation.
> +  virtual void addPreRegAlloc() { }
>
>    /// createTargetRegisterAllocator - Create the register allocator pass for
>    /// this target at the current optimization level.
> @@ -290,24 +288,16 @@ protected:
>      return false;
>    }
>
> -  /// addPostRegAlloc - This method may be implemented by targets that want to
> -  /// run passes after register allocation pass pipeline but before
> -  /// prolog-epilog insertion.  This should return true if -print-machineinstrs
> -  /// should print after these passes.
> -  virtual bool addPostRegAlloc() {
> -    return false;
> -  }
> +  /// This method may be implemented by targets that want to run passes after
> +  /// register allocation pass pipeline but before prolog-epilog insertion.
> +  virtual void addPostRegAlloc() { }
>
>    /// Add passes that optimize machine instructions after register allocation.
>    virtual void addMachineLateOptimization();
>
> -  /// addPreSched2 - This method may be implemented by targets that want to
> -  /// run passes after prolog-epilog insertion and before the second instruction
> -  /// scheduling pass.  This should return true if -print-machineinstrs should
> -  /// print after these passes.
> -  virtual bool addPreSched2() {
> -    return false;
> -  }
> +  /// This method may be implemented by targets that want to run passes after
> +  /// prolog-epilog insertion and before the second instruction scheduling pass.
> +  virtual void addPreSched2() { }
>
>    /// addGCPasses - Add late codegen passes that analyze code for garbage
>    /// collection. This should return true if GC info should be printed after
> @@ -317,24 +307,30 @@ protected:
>    /// Add standard basic block placement passes.
>    virtual void addBlockPlacement();
>
> -  /// addPreEmitPass - This pass may be implemented by targets that want to run
> -  /// passes immediately before machine code is emitted.  This should return
> -  /// true if -print-machineinstrs should print out the code after the passes.
> -  virtual bool addPreEmitPass() {
> -    return false;
> -  }
> +  /// This pass may be implemented by targets that want to run passes
> +  /// immediately before machine code is emitted.
> +  virtual void addPreEmitPass() { }
>
>    /// Utilities for targets to add passes to the pass manager.
>    ///
>
>    /// Add a CodeGen pass at this point in the pipeline after checking overrides.
>    /// Return the pass that was added, or zero if no pass was added.
> -  AnalysisID addPass(AnalysisID PassID);
> +  /// @p printAfter    if true and adding a machine function pass add an extra
> +  ///                  machine printer pass afterwards
> +  /// @p verifyAfter   if true and adding a machine function pass add an extra
> +  ///                  machine verification pass afterwards.
> +  AnalysisID addPass(AnalysisID PassID, bool verifyAfter = true,
> +                     bool printAfter = true);
>
>    /// Add a pass to the PassManager if that pass is supposed to be run, as
>    /// determined by the StartAfter and StopAfter options. Takes ownership of the
>    /// pass.
> -  void addPass(Pass *P);
> +  /// @p printAfter    if true and adding a machine function pass add an extra
> +  ///                  machine printer pass afterwards
> +  /// @p verifyAfter   if true and adding a machine function pass add an extra
> +  ///                  machine verification pass afterwards.
> +  void addPass(Pass *P, bool verifyAfter = true, bool printAfter = true);
>
>    /// addMachinePasses helper to create the target-selected or overriden
>    /// regalloc pass.
> @@ -343,7 +339,14 @@ protected:
>    /// printAndVerify - Add a pass to dump then verify the machine function, if
>    /// those steps are enabled.
>    ///
> -  void printAndVerify(const char *Banner);
> +  void printAndVerify(const std::string &Banner);
> +
> +  /// Add a pass to print the machine function if printing is enabled.
> +  void addPrintPass(const std::string &Banner);
> +
> +  /// Add a pass to perform basic verification of the machine function if
> +  /// verification is enabled.
> +  void addVerifyPass(const std::string &Banner);
>  };
>  } // namespace llvm
>
>
> Modified: llvm/trunk/lib/CodeGen/Passes.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Passes.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/Passes.cpp (original)
> +++ llvm/trunk/lib/CodeGen/Passes.cpp Thu Dec 11 13:42:05 2014
> @@ -235,8 +235,8 @@ TargetPassConfig::~TargetPassConfig() {
>  // registers all common codegen passes.
>  TargetPassConfig::TargetPassConfig(TargetMachine *tm, PassManagerBase &pm)
>    : ImmutablePass(ID), PM(&pm), StartAfter(nullptr), StopAfter(nullptr),
> -    Started(true), Stopped(false), TM(tm), Impl(nullptr), Initialized(false),
> -    DisableVerify(false),
> +    Started(true), Stopped(false), AddingMachinePasses(false), TM(tm),
> +    Impl(nullptr), Initialized(false), DisableVerify(false),
>      EnableTailMerge(true) {
>
>    Impl = new PassConfigImpl();
> @@ -304,7 +304,7 @@ IdentifyingPassPtr TargetPassConfig::get
>  /// a later pass or that it should stop after an earlier pass, then do not add
>  /// the pass.  Finally, compare the current pass against the StartAfter
>  /// and StopAfter options and change the Started/Stopped flags accordingly.
> -void TargetPassConfig::addPass(Pass *P) {
> +void TargetPassConfig::addPass(Pass *P, bool verifyAfter, bool printAfter) {
>    assert(!Initialized && "PassConfig is immutable");
>
>    // Cache the Pass ID here in case the pass manager finds this pass is
> @@ -313,10 +313,18 @@ void TargetPassConfig::addPass(Pass *P)
>    // and shouldn't reference it.
>    AnalysisID PassID = P->getPassID();
>
> -  if (Started && !Stopped)
> +  if (Started && !Stopped) {
>      PM->add(P);
> -  else
> +    if (AddingMachinePasses) {
> +      std::string Banner = std::string("After ")+std::string(P->getPassName());
> +      if (printAfter)
> +        addPrintPass(Banner);
> +      if (verifyAfter)
> +        addVerifyPass(Banner);
> +    }
> +  } else {
>      delete P;
> +  }
>    if (StopAfter == PassID)
>      Stopped = true;
>    if (StartAfter == PassID)
> @@ -330,7 +338,8 @@ void TargetPassConfig::addPass(Pass *P)
>  ///
>  /// addPass cannot return a pointer to the pass instance because is internal the
>  /// PassManager and the instance we create here may already be freed.
> -AnalysisID TargetPassConfig::addPass(AnalysisID PassID) {
> +AnalysisID TargetPassConfig::addPass(AnalysisID PassID, bool verifyAfter,
> +                                     bool printAfter) {
>    IdentifyingPassPtr TargetID = getPassSubstitution(PassID);
>    IdentifyingPassPtr FinalPtr = overridePass(PassID, TargetID);
>    if (!FinalPtr.isValid())
> @@ -345,7 +354,7 @@ AnalysisID TargetPassConfig::addPass(Ana
>        llvm_unreachable("Pass ID not registered");
>    }
>    AnalysisID FinalID = P->getPassID();
> -  addPass(P); // Ends the lifetime of P.
> +  addPass(P, verifyAfter, printAfter); // Ends the lifetime of P.
>
>    // Add the passes after the pass P if there is any.
>    for (SmallVectorImpl<std::pair<AnalysisID, IdentifyingPassPtr> >::iterator
> @@ -360,18 +369,25 @@ AnalysisID TargetPassConfig::addPass(Ana
>          NP = Pass::createPass((*I).second.getID());
>          assert(NP && "Pass ID not registered");
>        }
> -      addPass(NP);
> +      addPass(NP, false, false);
>      }
>    }
>    return FinalID;
>  }
>
> -void TargetPassConfig::printAndVerify(const char *Banner) {
> +void TargetPassConfig::printAndVerify(const std::string &Banner) {
> +  addPrintPass(Banner);
> +  addVerifyPass(Banner);
> +}
> +
> +void TargetPassConfig::addPrintPass(const std::string &Banner) {
>    if (TM->shouldPrintMachineCode())
> -    addPass(createMachineFunctionPrinterPass(dbgs(), Banner));
> +    PM->add(createMachineFunctionPrinterPass(dbgs(), Banner));
> +}
>
> +void TargetPassConfig::addVerifyPass(const std::string &Banner) {
>    if (VerifyMachineCode)
> -    addPass(createMachineVerifierPass(Banner));
> +    PM->add(createMachineVerifierPass(Banner));
>  }
>
>  /// Add common target configurable passes that perform LLVM IR to IR transforms
> @@ -491,6 +507,8 @@ void TargetPassConfig::addISelPrepare()
>  /// TODO: We could use a single addPre/Post(ID) hook to allow pass injection
>  /// before/after any target-independent pass. But it's currently overkill.
>  void TargetPassConfig::addMachinePasses() {
> +  AddingMachinePasses = true;
> +
>    // Insert a machine instr printer pass after the specified pass.
>    // If -print-machineinstrs specified, print machineinstrs after all passes.
>    if (StringRef(PrintMachineInstrs.getValue()).equals(""))
> @@ -510,8 +528,7 @@ void TargetPassConfig::addMachinePasses(
>    printAndVerify("After Instruction Selection");
>
>    // Expand pseudo-instructions emitted by ISel.
> -  if (addPass(&ExpandISelPseudosID))
> -    printAndVerify("After ExpandISelPseudos");
> +  addPass(&ExpandISelPseudosID);
>
>    // Add passes that optimize machine instructions in SSA form.
>    if (getOptLevel() != CodeGenOpt::None) {
> @@ -519,12 +536,11 @@ void TargetPassConfig::addMachinePasses(
>    } else {
>      // If the target requests it, assign local variables to stack slots relative
>      // to one another and simplify frame index references where possible.
> -    addPass(&LocalStackSlotAllocationID);
> +    addPass(&LocalStackSlotAllocationID, false);
>    }
>
>    // Run pre-ra passes.
> -  if (addPreRegAlloc())
> -    printAndVerify("After PreRegAlloc passes");
> +  addPreRegAlloc();
>
>    // Run register allocation and passes that are tightly coupled with it,
>    // including phi elimination and scheduling.
> @@ -534,12 +550,10 @@ void TargetPassConfig::addMachinePasses(
>      addFastRegAlloc(createRegAllocPass(false));
>
>    // Run post-ra passes.
> -  if (addPostRegAlloc())
> -    printAndVerify("After PostRegAlloc passes");
> +  addPostRegAlloc();
>
>    // Insert prolog/epilog code.  Eliminate abstract frame index references...
>    addPass(&PrologEpilogCodeInserterID);
> -  printAndVerify("After PrologEpilogCodeInserter");
>
>    /// Add passes that optimize machine instructions after register allocation.
>    if (getOptLevel() != CodeGenOpt::None)
> @@ -547,11 +561,9 @@ void TargetPassConfig::addMachinePasses(
>
>    // Expand pseudo instructions before second scheduling pass.
>    addPass(&ExpandPostRAPseudosID);
> -  printAndVerify("After ExpandPostRAPseudos");
>
>    // Run pre-sched2 passes.
> -  if (addPreSched2())
> -    printAndVerify("After PreSched2 passes");
> +  addPreSched2();
>
>    // Second pass scheduler.
>    if (getOptLevel() != CodeGenOpt::None) {
> @@ -559,66 +571,61 @@ void TargetPassConfig::addMachinePasses(
>        addPass(&PostMachineSchedulerID);
>      else
>        addPass(&PostRASchedulerID);
> -    printAndVerify("After PostRAScheduler");
>    }
>
>    // GC
>    if (addGCPasses()) {
>      if (PrintGCInfo)
> -      addPass(createGCInfoPrinter(dbgs()));
> +      addPass(createGCInfoPrinter(dbgs()), false, false);
>    }
>
>    // Basic block placement.
>    if (getOptLevel() != CodeGenOpt::None)
>      addBlockPlacement();
>
> -  if (addPreEmitPass())
> -    printAndVerify("After PreEmit passes");
> +  addPreEmitPass();
> +
> +  addPass(&StackMapLivenessID, false);
>
> -  addPass(&StackMapLivenessID);
> +  AddingMachinePasses = false;
>  }
>
>  /// Add passes that optimize machine instructions in SSA form.
>  void TargetPassConfig::addMachineSSAOptimization() {
>    // Pre-ra tail duplication.
> -  if (addPass(&EarlyTailDuplicateID))
> -    printAndVerify("After Pre-RegAlloc TailDuplicate");
> +  addPass(&EarlyTailDuplicateID);
>
>    // Optimize PHIs before DCE: removing dead PHI cycles may make more
>    // instructions dead.
> -  addPass(&OptimizePHIsID);
> +  addPass(&OptimizePHIsID, false);
>
>    // This pass merges large allocas. StackSlotColoring is a different pass
>    // which merges spill slots.
> -  addPass(&StackColoringID);
> +  addPass(&StackColoringID, false);
>
>    // If the target requests it, assign local variables to stack slots relative
>    // to one another and simplify frame index references where possible.
> -  addPass(&LocalStackSlotAllocationID);
> +  addPass(&LocalStackSlotAllocationID, false);
>
>    // With optimization, dead code should already be eliminated. However
>    // there is one known exception: lowered code for arguments that are only
>    // used by tail calls, where the tail calls reuse the incoming stack
>    // arguments directly (see t11 in test/CodeGen/X86/sibcall.ll).
>    addPass(&DeadMachineInstructionElimID);
> -  printAndVerify("After codegen DCE pass");
>
>    // Allow targets to insert passes that improve instruction level parallelism,
>    // like if-conversion. Such passes will typically need dominator trees and
>    // loop info, just like LICM and CSE below.
> -  if (addILPOpts())
> -    printAndVerify("After ILP optimizations");
> +  addILPOpts();
>
> -  addPass(&MachineLICMID);
> -  addPass(&MachineCSEID);
> +  addPass(&MachineLICMID, false);
> +  addPass(&MachineCSEID, false);
>    addPass(&MachineSinkingID);
> -  printAndVerify("After Machine LICM, CSE and Sinking passes");
>
> -  addPass(&PeepholeOptimizerID);
> +  addPass(&PeepholeOptimizerID, false);
>    // Clean-up the dead code that may have been generated by peephole
>    // rewriting.
>    addPass(&DeadMachineInstructionElimID);
> -  printAndVerify("After codegen peephole optimization pass");
>  }
>
>  //===---------------------------------------------------------------------===//
> @@ -701,18 +708,17 @@ bool TargetPassConfig::usingDefaultRegAl
>  /// Add the minimum set of target-independent passes that are required for
>  /// register allocation. No coalescing or scheduling.
>  void TargetPassConfig::addFastRegAlloc(FunctionPass *RegAllocPass) {
> -  addPass(&PHIEliminationID);
> -  addPass(&TwoAddressInstructionPassID);
> +  addPass(&PHIEliminationID, false);
> +  addPass(&TwoAddressInstructionPassID, false);
>
>    addPass(RegAllocPass);
> -  printAndVerify("After Register Allocation");
>  }
>
>  /// Add standard target-independent passes that are tightly coupled with
>  /// optimized register allocation, including coalescing, machine instruction
>  /// scheduling, and register allocation itself.
>  void TargetPassConfig::addOptimizedRegAlloc(FunctionPass *RegAllocPass) {
> -  addPass(&ProcessImplicitDefsID);
> +  addPass(&ProcessImplicitDefsID, false);
>
>    // LiveVariables currently requires pure SSA form.
>    //
> @@ -720,35 +726,30 @@ void TargetPassConfig::addOptimizedRegAl
>    // LiveVariables can be removed completely, and LiveIntervals can be directly
>    // computed. (We still either need to regenerate kill flags after regalloc, or
>    // preferably fix the scavenger to not depend on them).
> -  addPass(&LiveVariablesID);
> +  addPass(&LiveVariablesID, false);
>
>    // Edge splitting is smarter with machine loop info.
> -  addPass(&MachineLoopInfoID);
> -  addPass(&PHIEliminationID);
> +  addPass(&MachineLoopInfoID, false);
> +  addPass(&PHIEliminationID, false);
>
>    // Eventually, we want to run LiveIntervals before PHI elimination.
>    if (EarlyLiveIntervals)
> -    addPass(&LiveIntervalsID);
> +    addPass(&LiveIntervalsID, false);
>
> -  addPass(&TwoAddressInstructionPassID);
> +  addPass(&TwoAddressInstructionPassID, false);
>    addPass(&RegisterCoalescerID);
> -  printAndVerify("After Register Coalescing");
>
>    // PreRA instruction scheduling.
> -  if (addPass(&MachineSchedulerID))
> -    printAndVerify("After Machine Scheduling");
> +  addPass(&MachineSchedulerID);
>
>    // Add the selected register allocation pass.
>    addPass(RegAllocPass);
> -  printAndVerify("After Register Allocation, before rewriter");
>
>    // Allow targets to change the register assignments before rewriting.
> -  if (addPreRewrite())
> -    printAndVerify("After pre-rewrite passes");
> +  addPreRewrite();
>
>    // Finally rewrite virtual registers.
>    addPass(&VirtRegRewriterID);
> -  printAndVerify("After Virtual Register Rewriter");
>
>    // Perform stack slot coloring and post-ra machine LICM.
>    //
> @@ -760,8 +761,6 @@ void TargetPassConfig::addOptimizedRegAl
>    //
>    // FIXME: can this move into MachineLateOptimization?
>    addPass(&PostRAMachineLICMID);
> -
> -  printAndVerify("After StackSlotColoring and postra Machine LICM");
>  }
>
>  //===---------------------------------------------------------------------===//
> @@ -771,34 +770,30 @@ void TargetPassConfig::addOptimizedRegAl
>  /// Add passes that optimize machine instructions after register allocation.
>  void TargetPassConfig::addMachineLateOptimization() {
>    // Branch folding must be run after regalloc and prolog/epilog insertion.
> -  if (addPass(&BranchFolderPassID))
> -    printAndVerify("After BranchFolding");
> +  addPass(&BranchFolderPassID);
>
>    // Tail duplication.
>    // Note that duplicating tail just increases code size and degrades
>    // performance for targets that require Structured Control Flow.
>    // In addition it can also make CFG irreducible. Thus we disable it.
> -  if (!TM->requiresStructuredCFG() && addPass(&TailDuplicateID))
> -    printAndVerify("After TailDuplicate");
> +  if (!TM->requiresStructuredCFG())
> +    addPass(&TailDuplicateID);
>
>    // Copy propagation.
> -  if (addPass(&MachineCopyPropagationID))
> -    printAndVerify("After copy propagation pass");
> +  addPass(&MachineCopyPropagationID);
>  }
>
>  /// Add standard GC passes.
>  bool TargetPassConfig::addGCPasses() {
> -  addPass(&GCMachineCodeAnalysisID);
> +  addPass(&GCMachineCodeAnalysisID, false);
>    return true;
>  }
>
>  /// Add standard basic block placement passes.
>  void TargetPassConfig::addBlockPlacement() {
> -  if (addPass(&MachineBlockPlacementID)) {
> +  if (addPass(&MachineBlockPlacementID, false)) {
>      // Run a separate pass to collect block placement statistics.
>      if (EnableBlockPlacementStats)
>        addPass(&MachineBlockPlacementStatsID);
> -
> -    printAndVerify("After machine block placement.");
>    }
>  }
>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -181,10 +181,10 @@ public:
>    bool addPreISel() override;
>    bool addInstSelector() override;
>    bool addILPOpts() override;
> -  bool addPreRegAlloc() override;
> -  bool addPostRegAlloc() override;
> -  bool addPreSched2() override;
> -  bool addPreEmitPass() override;
> +  void addPreRegAlloc() override;
> +  void addPostRegAlloc() override;
> +  void addPreSched2() override;
> +  void addPreEmitPass() override;
>  };
>  } // namespace
>
> @@ -267,47 +267,43 @@ bool AArch64PassConfig::addILPOpts() {
>    return true;
>  }
>
> -bool AArch64PassConfig::addPreRegAlloc() {
> +void AArch64PassConfig::addPreRegAlloc() {
>    // Use AdvSIMD scalar instructions whenever profitable.
>    if (TM->getOptLevel() != CodeGenOpt::None && EnableAdvSIMDScalar) {
> -    addPass(createAArch64AdvSIMDScalar());
> +    addPass(createAArch64AdvSIMDScalar(), false);
>      // The AdvSIMD pass may produce copies that can be rewritten to
>      // be register coaleascer friendly.
>      addPass(&PeepholeOptimizerID);
>    }
> -  return true;
>  }
>
> -bool AArch64PassConfig::addPostRegAlloc() {
> +void AArch64PassConfig::addPostRegAlloc() {
>    // Change dead register definitions to refer to the zero register.
>    if (TM->getOptLevel() != CodeGenOpt::None && EnableDeadRegisterElimination)
> -    addPass(createAArch64DeadRegisterDefinitions());
> +    addPass(createAArch64DeadRegisterDefinitions(), false);
>    if (TM->getOptLevel() != CodeGenOpt::None &&
>        (TM->getSubtarget<AArch64Subtarget>().isCortexA53() ||
>         TM->getSubtarget<AArch64Subtarget>().isCortexA57()) &&
>        usingDefaultRegAlloc())
>      // Improve performance for some FP/SIMD code for A57.
>      addPass(createAArch64A57FPLoadBalancing());
> -  return true;
>  }
>
> -bool AArch64PassConfig::addPreSched2() {
> +void AArch64PassConfig::addPreSched2() {
>    // Expand some pseudo instructions to allow proper scheduling.
> -  addPass(createAArch64ExpandPseudoPass());
> +  addPass(createAArch64ExpandPseudoPass(), false);
>    // Use load/store pair instructions when possible.
>    if (TM->getOptLevel() != CodeGenOpt::None && EnableLoadStoreOpt)
>      addPass(createAArch64LoadStoreOptimizationPass());
> -  return true;
>  }
>
> -bool AArch64PassConfig::addPreEmitPass() {
> +void AArch64PassConfig::addPreEmitPass() {
>    if (EnableA53Fix835769)
> -    addPass(createAArch64A53Fix835769());
> +    addPass(createAArch64A53Fix835769(), false);
>    // Relax conditional branch instructions if they're otherwise out of
>    // range of their destination.
> -  addPass(createAArch64BranchRelaxation());
> +  addPass(createAArch64BranchRelaxation(), false);
>    if (TM->getOptLevel() != CodeGenOpt::None && EnableCollectLOH &&
>        TM->getSubtarget<AArch64Subtarget>().isTargetMachO())
>      addPass(createAArch64CollectLOHPass());
> -  return true;
>  }
>
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -197,9 +197,9 @@ public:
>    void addIRPasses() override;
>    bool addPreISel() override;
>    bool addInstSelector() override;
> -  bool addPreRegAlloc() override;
> -  bool addPreSched2() override;
> -  bool addPreEmitPass() override;
> +  void addPreRegAlloc() override;
> +  void addPreSched2() override;
> +  void addPreEmitPass() override;
>  };
>  } // namespace
>
> @@ -241,59 +241,53 @@ bool ARMPassConfig::addInstSelector() {
>    return false;
>  }
>
> -bool ARMPassConfig::addPreRegAlloc() {
> +void ARMPassConfig::addPreRegAlloc() {
>    if (getOptLevel() != CodeGenOpt::None)
> -    addPass(createARMLoadStoreOptimizationPass(true));
> +    addPass(createARMLoadStoreOptimizationPass(true), false);
>    if (getOptLevel() != CodeGenOpt::None && getARMSubtarget().isCortexA9())
> -    addPass(createMLxExpansionPass());
> +    addPass(createMLxExpansionPass(), false);
>    // Since the A15SDOptimizer pass can insert VDUP instructions, it can only be
>    // enabled when NEON is available.
>    if (getOptLevel() != CodeGenOpt::None && getARMSubtarget().isCortexA15() &&
>      getARMSubtarget().hasNEON() && !DisableA15SDOptimization) {
>      addPass(createA15SDOptimizerPass());
>    }
> -  return true;
>  }
>
> -bool ARMPassConfig::addPreSched2() {
> +void ARMPassConfig::addPreSched2() {
>    if (getOptLevel() != CodeGenOpt::None) {
> -    addPass(createARMLoadStoreOptimizationPass());
> -    printAndVerify("After ARM load / store optimizer");
> +    addPass(createARMLoadStoreOptimizationPass(), false);
>
>      if (getARMSubtarget().hasNEON())
> -      addPass(createExecutionDependencyFixPass(&ARM::DPRRegClass));
> +      addPass(createExecutionDependencyFixPass(&ARM::DPRRegClass), false);
>    }
>
>    // Expand some pseudo instructions into multiple instructions to allow
>    // proper scheduling.
> -  addPass(createARMExpandPseudoPass());
> +  addPass(createARMExpandPseudoPass(), false);
>
>    if (getOptLevel() != CodeGenOpt::None) {
>      if (!getARMSubtarget().isThumb1Only()) {
>        // in v8, IfConversion depends on Thumb instruction widths
>        if (getARMSubtarget().restrictIT() &&
>            !getARMSubtarget().prefers32BitThumb())
> -        addPass(createThumb2SizeReductionPass());
> -      addPass(&IfConverterID);
> +        addPass(createThumb2SizeReductionPass(), false);
> +      addPass(&IfConverterID, false);
>      }
>    }
>    if (getARMSubtarget().isThumb2())
>      addPass(createThumb2ITBlockPass());
> -
> -  return true;
>  }
>
> -bool ARMPassConfig::addPreEmitPass() {
> +void ARMPassConfig::addPreEmitPass() {
>    if (getARMSubtarget().isThumb2()) {
>      if (!getARMSubtarget().prefers32BitThumb())
> -      addPass(createThumb2SizeReductionPass());
> +      addPass(createThumb2SizeReductionPass(), false);
>
>      // Constant island pass work on unbundled instructions.
> -    addPass(&UnpackMachineBundlesID);
> +    addPass(&UnpackMachineBundlesID, false);
>    }
>
> -  addPass(createARMOptimizeBarriersPass());
> +  addPass(createARMOptimizeBarriersPass(), false);
>    addPass(createARMConstantIslandPass());
> -
> -  return true;
>  }
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -103,10 +103,10 @@ public:
>    }
>
>    bool addInstSelector() override;
> -  bool addPreRegAlloc() override;
> -  bool addPostRegAlloc() override;
> -  bool addPreSched2() override;
> -  bool addPreEmitPass() override;
> +  void addPreRegAlloc() override;
> +  void addPostRegAlloc() override;
> +  void addPreSched2() override;
> +  void addPreEmitPass() override;
>  };
>  } // namespace
>
> @@ -131,51 +131,45 @@ bool HexagonPassConfig::addInstSelector(
>    return false;
>  }
>
> -bool HexagonPassConfig::addPreRegAlloc() {
> +void HexagonPassConfig::addPreRegAlloc() {
>    if (getOptLevel() != CodeGenOpt::None)
>      if (!DisableHardwareLoops)
> -      addPass(createHexagonHardwareLoops());
> -  return false;
> +      addPass(createHexagonHardwareLoops(), false);
>  }
>
> -bool HexagonPassConfig::addPostRegAlloc() {
> +void HexagonPassConfig::addPostRegAlloc() {
>    const HexagonTargetMachine &TM = getHexagonTargetMachine();
>    if (getOptLevel() != CodeGenOpt::None)
>      if (!DisableHexagonCFGOpt)
> -      addPass(createHexagonCFGOptimizer(TM));
> -  return false;
> +      addPass(createHexagonCFGOptimizer(TM), false);
>  }
>
> -bool HexagonPassConfig::addPreSched2() {
> +void HexagonPassConfig::addPreSched2() {
>    const HexagonTargetMachine &TM = getHexagonTargetMachine();
>
> -  addPass(createHexagonCopyToCombine());
> +  addPass(createHexagonCopyToCombine(), false);
>    if (getOptLevel() != CodeGenOpt::None)
> -    addPass(&IfConverterID);
> +    addPass(&IfConverterID, false);
>    addPass(createHexagonSplitConst32AndConst64(TM));
> -  printAndVerify("After hexagon split const32/64 pass");
> -  return true;
>  }
>
> -bool HexagonPassConfig::addPreEmitPass() {
> +void HexagonPassConfig::addPreEmitPass() {
>    const HexagonTargetMachine &TM = getHexagonTargetMachine();
>    bool NoOpt = (getOptLevel() == CodeGenOpt::None);
>
>    if (!NoOpt)
> -    addPass(createHexagonNewValueJump());
> +    addPass(createHexagonNewValueJump(), false);
>
>    // Expand Spill code for predicate registers.
> -  addPass(createHexagonExpandPredSpillCode(TM));
> +  addPass(createHexagonExpandPredSpillCode(TM), false);
>
>    // Split up TFRcondsets into conditional transfers.
> -  addPass(createHexagonSplitTFRCondSets(TM));
> +  addPass(createHexagonSplitTFRCondSets(TM), false);
>
>    // Create Packets.
>    if (!NoOpt) {
>      if (!DisableHardwareLoops)
> -      addPass(createHexagonFixupHwLoops());
> -    addPass(createHexagonPacketizer());
> +      addPass(createHexagonFixupHwLoops(), false);
> +    addPass(createHexagonPacketizer(), false);
>    }
> -
> -  return false;
>  }
>
> Modified: llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -50,7 +50,7 @@ public:
>    }
>
>    bool addInstSelector() override;
> -  bool addPreEmitPass() override;
> +  void addPreEmitPass() override;
>  };
>  } // namespace
>
> @@ -64,8 +64,7 @@ bool MSP430PassConfig::addInstSelector()
>    return false;
>  }
>
> -bool MSP430PassConfig::addPreEmitPass() {
> +void MSP430PassConfig::addPreEmitPass() {
>    // Must run branch selection immediately preceding the asm printer.
> -  addPass(createMSP430BranchSelectionPass());
> -  return false;
> +  addPass(createMSP430BranchSelectionPass(), false);
>  }
>
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -170,9 +170,9 @@ public:
>    void addIRPasses() override;
>    bool addInstSelector() override;
>    void addMachineSSAOptimization() override;
> -  bool addPreEmitPass() override;
> +  void addPreEmitPass() override;
>
> -  bool addPreRegAlloc() override;
> +  void addPreRegAlloc() override;
>
>  };
>  } // namespace
> @@ -203,13 +203,9 @@ void MipsPassConfig::addMachineSSAOptimi
>    TargetPassConfig::addMachineSSAOptimization();
>  }
>
> -bool MipsPassConfig::addPreRegAlloc() {
> -  if (getOptLevel() == CodeGenOpt::None) {
> +void MipsPassConfig::addPreRegAlloc() {
> +  if (getOptLevel() == CodeGenOpt::None)
>      addPass(createMipsOptimizePICCallPass(getMipsTargetMachine()));
> -    return true;
> -  }
> -  else
> -    return false;
>  }
>
>  void MipsTargetMachine::addAnalysisPasses(PassManagerBase &PM) {
> @@ -228,10 +224,9 @@ void MipsTargetMachine::addAnalysisPasse
>  // Implemented by targets that want to run passes immediately before
>  // machine code is emitted. return true if -print-machineinstrs should
>  // print out the code after the passes.
> -bool MipsPassConfig::addPreEmitPass() {
> +void MipsPassConfig::addPreEmitPass() {
>    MipsTargetMachine &TM = getMipsTargetMachine();
> -  addPass(createMipsDelaySlotFillerPass(TM));
> -  addPass(createMipsLongBranchPass(TM));
> +  addPass(createMipsDelaySlotFillerPass(TM), false);
> +  addPass(createMipsLongBranchPass(TM), false);
>    addPass(createMipsConstantIslandPass(TM));
> -  return true;
>  }
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -110,8 +110,7 @@ public:
>
>    void addIRPasses() override;
>    bool addInstSelector() override;
> -  bool addPreRegAlloc() override;
> -  bool addPostRegAlloc() override;
> +  void addPostRegAlloc() override;
>    void addMachineSSAOptimization() override;
>
>    FunctionPass *createTargetRegisterAllocator(bool) override;
> @@ -183,10 +182,8 @@ bool NVPTXPassConfig::addInstSelector()
>    return false;
>  }
>
> -bool NVPTXPassConfig::addPreRegAlloc() { return false; }
> -bool NVPTXPassConfig::addPostRegAlloc() {
> -  addPass(createNVPTXPrologEpilogPass());
> -  return false;
> +void NVPTXPassConfig::addPostRegAlloc() {
> +  addPass(createNVPTXPrologEpilogPass(), false);
>  }
>
>  FunctionPass *NVPTXPassConfig::createTargetRegisterAllocator(bool) {
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -162,9 +162,9 @@ public:
>    bool addPreISel() override;
>    bool addILPOpts() override;
>    bool addInstSelector() override;
> -  bool addPreRegAlloc() override;
> -  bool addPreSched2() override;
> -  bool addPreEmitPass() override;
> +  void addPreRegAlloc() override;
> +  void addPreSched2() override;
> +  void addPreEmitPass() override;
>  };
>  } // namespace
>
> @@ -216,28 +216,24 @@ bool PPCPassConfig::addInstSelector() {
>    return false;
>  }
>
> -bool PPCPassConfig::addPreRegAlloc() {
> +void PPCPassConfig::addPreRegAlloc() {
>    initializePPCVSXFMAMutatePass(*PassRegistry::getPassRegistry());
>    insertPass(VSXFMAMutateEarly ? &RegisterCoalescerID : &MachineSchedulerID,
>               &PPCVSXFMAMutateID);
> -  return false;
>  }
>
> -bool PPCPassConfig::addPreSched2() {
> -  addPass(createPPCVSXCopyCleanupPass());
> +void PPCPassConfig::addPreSched2() {
> +  addPass(createPPCVSXCopyCleanupPass(), false);
>
>    if (getOptLevel() != CodeGenOpt::None)
>      addPass(&IfConverterID);
> -
> -  return true;
>  }
>
> -bool PPCPassConfig::addPreEmitPass() {
> +void PPCPassConfig::addPreEmitPass() {
>    if (getOptLevel() != CodeGenOpt::None)
> -    addPass(createPPCEarlyReturnPass());
> +    addPass(createPPCEarlyReturnPass(), false);
>    // Must run branch selection immediately preceding the asm printer.
> -  addPass(createPPCBranchSelectionPass());
> -  return false;
> +  addPass(createPPCBranchSelectionPass(), false);
>  }
>
>  void PPCTargetMachine::addAnalysisPasses(PassManagerBase &PM) {
>
> Modified: llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -87,10 +87,10 @@ public:
>    void addCodeGenPrepare() override;
>    bool addPreISel() override;
>    bool addInstSelector() override;
> -  bool addPreRegAlloc() override;
> -  bool addPostRegAlloc() override;
> -  bool addPreSched2() override;
> -  bool addPreEmitPass() override;
> +  void addPreRegAlloc() override;
> +  void addPostRegAlloc() override;
> +  void addPreSched2() override;
> +  void addPreEmitPass() override;
>  };
>  } // End of anonymous namespace
>
> @@ -163,7 +163,7 @@ bool AMDGPUPassConfig::addInstSelector()
>    return false;
>  }
>
> -bool AMDGPUPassConfig::addPreRegAlloc() {
> +void AMDGPUPassConfig::addPreRegAlloc() {
>    const AMDGPUSubtarget &ST = TM->getSubtarget<AMDGPUSubtarget>();
>
>    if (ST.getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) {
> @@ -179,47 +179,42 @@ bool AMDGPUPassConfig::addPreRegAlloc()
>        insertPass(&MachineSchedulerID, &SILoadStoreOptimizerID);
>      }
>
> -    addPass(createSIShrinkInstructionsPass());
> -    addPass(createSIFixSGPRLiveRangesPass());
> +    addPass(createSIShrinkInstructionsPass(), false);
> +    addPass(createSIFixSGPRLiveRangesPass(), false);
>    }
> -  return false;
>  }
>
> -bool AMDGPUPassConfig::addPostRegAlloc() {
> +void AMDGPUPassConfig::addPostRegAlloc() {
>    const AMDGPUSubtarget &ST = TM->getSubtarget<AMDGPUSubtarget>();
>
>    if (ST.getGeneration() > AMDGPUSubtarget::NORTHERN_ISLANDS) {
> -    addPass(createSIShrinkInstructionsPass());
> +    addPass(createSIShrinkInstructionsPass(), false);
>    }
> -  return false;
>  }
>
> -bool AMDGPUPassConfig::addPreSched2() {
> +void AMDGPUPassConfig::addPreSched2() {
>    const AMDGPUSubtarget &ST = TM->getSubtarget<AMDGPUSubtarget>();
>
>    if (ST.getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS)
> -    addPass(createR600EmitClauseMarkers());
> +    addPass(createR600EmitClauseMarkers(), false);
>    if (ST.isIfCvtEnabled())
> -    addPass(&IfConverterID);
> +    addPass(&IfConverterID, false);
>    if (ST.getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS)
> -    addPass(createR600ClauseMergePass(*TM));
> +    addPass(createR600ClauseMergePass(*TM), false);
>    if (ST.getGeneration() >= AMDGPUSubtarget::SOUTHERN_ISLANDS) {
> -    addPass(createSIInsertWaits(*TM));
> +    addPass(createSIInsertWaits(*TM), false);
>    }
> -  return false;
>  }
>
> -bool AMDGPUPassConfig::addPreEmitPass() {
> +void AMDGPUPassConfig::addPreEmitPass() {
>    const AMDGPUSubtarget &ST = TM->getSubtarget<AMDGPUSubtarget>();
>    if (ST.getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) {
> -    addPass(createAMDGPUCFGStructurizerPass());
> -    addPass(createR600ExpandSpecialInstrsPass(*TM));
> -    addPass(&FinalizeMachineBundlesID);
> -    addPass(createR600Packetizer(*TM));
> -    addPass(createR600ControlFlowFinalizer(*TM));
> +    addPass(createAMDGPUCFGStructurizerPass(), false);
> +    addPass(createR600ExpandSpecialInstrsPass(*TM), false);
> +    addPass(&FinalizeMachineBundlesID, false);
> +    addPass(createR600Packetizer(*TM), false);
> +    addPass(createR600ControlFlowFinalizer(*TM), false);
>    } else {
> -    addPass(createSILowerControlFlowPass(*TM));
> +    addPass(createSILowerControlFlowPass(*TM), false);
>    }
> -
> -  return false;
>  }
>
> Modified: llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -53,7 +53,7 @@ public:
>
>    void addIRPasses() override;
>    bool addInstSelector() override;
> -  bool addPreEmitPass() override;
> +  void addPreEmitPass() override;
>  };
>  } // namespace
>
> @@ -72,12 +72,8 @@ bool SparcPassConfig::addInstSelector()
>    return false;
>  }
>
> -/// addPreEmitPass - This pass may be implemented by targets that want to run
> -/// passes immediately before machine code is emitted.  This should return
> -/// true if -print-machineinstrs should print out the code after the passes.
> -bool SparcPassConfig::addPreEmitPass(){
> +void SparcPassConfig::addPreEmitPass(){
>    addPass(createSparcDelaySlotFillerPass(getSparcTargetMachine()));
> -  return true;
>  }
>
>  void SparcV8TargetMachine::anchor() { }
>
> Modified: llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -46,8 +46,8 @@ public:
>
>    void addIRPasses() override;
>    bool addInstSelector() override;
> -  bool addPreSched2() override;
> -  bool addPreEmitPass() override;
> +  void addPreSched2() override;
> +  void addPreEmitPass() override;
>  };
>  } // end anonymous namespace
>
> @@ -60,14 +60,13 @@ bool SystemZPassConfig::addInstSelector(
>    return false;
>  }
>
> -bool SystemZPassConfig::addPreSched2() {
> +void SystemZPassConfig::addPreSched2() {
>    if (getOptLevel() != CodeGenOpt::None &&
>        getSystemZTargetMachine().getSubtargetImpl()->hasLoadStoreOnCond())
>      addPass(&IfConverterID);
> -  return true;
>  }
>
> -bool SystemZPassConfig::addPreEmitPass() {
> +void SystemZPassConfig::addPreEmitPass() {
>    // We eliminate comparisons here rather than earlier because some
>    // transformations can change the set of available CC values and we
>    // generally want those transformations to have priority.  This is
> @@ -92,11 +91,10 @@ bool SystemZPassConfig::addPreEmitPass()
>    // between the comparison and the branch, but it isn't clear whether
>    // preventing that would be a win or not.
>    if (getOptLevel() != CodeGenOpt::None)
> -    addPass(createSystemZElimComparePass(getSystemZTargetMachine()));
> +    addPass(createSystemZElimComparePass(getSystemZTargetMachine()), false);
>    if (getOptLevel() != CodeGenOpt::None)
> -    addPass(createSystemZShortenInstPass(getSystemZTargetMachine()));
> +    addPass(createSystemZShortenInstPass(getSystemZTargetMachine()), false);
>    addPass(createSystemZLongBranchPass(getSystemZTargetMachine()));
> -  return true;
>  }
>
>  TargetPassConfig *SystemZTargetMachine::createPassConfig(PassManagerBase &PM) {
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -154,9 +154,8 @@ public:
>    void addIRPasses() override;
>    bool addInstSelector() override;
>    bool addILPOpts() override;
> -  bool addPreRegAlloc() override;
> -  bool addPostRegAlloc() override;
> -  bool addPreEmitPass() override;
> +  void addPostRegAlloc() override;
> +  void addPreEmitPass() override;
>  };
>  } // namespace
>
> @@ -188,32 +187,19 @@ bool X86PassConfig::addILPOpts() {
>    return true;
>  }
>
> -bool X86PassConfig::addPreRegAlloc() {
> -  return false;  // -print-machineinstr shouldn't print after this.
> -}
> -
> -bool X86PassConfig::addPostRegAlloc() {
> +void X86PassConfig::addPostRegAlloc() {
>    addPass(createX86FloatingPointStackifierPass());
> -  return true;  // -print-machineinstr should print after this.
>  }
>
> -bool X86PassConfig::addPreEmitPass() {
> -  bool ShouldPrint = false;
> -  if (getOptLevel() != CodeGenOpt::None && getX86Subtarget().hasSSE2()) {
> -    addPass(createExecutionDependencyFixPass(&X86::VR128RegClass));
> -    ShouldPrint = true;
> -  }
> +void X86PassConfig::addPreEmitPass() {
> +  if (getOptLevel() != CodeGenOpt::None && getX86Subtarget().hasSSE2())
> +    addPass(createExecutionDependencyFixPass(&X86::VR128RegClass), false);
>
> -  if (UseVZeroUpper) {
> -    addPass(createX86IssueVZeroUpperPass());
> -    ShouldPrint = true;
> -  }
> +  if (UseVZeroUpper)
> +    addPass(createX86IssueVZeroUpperPass(), false);
>
>    if (getOptLevel() != CodeGenOpt::None) {
> -    addPass(createX86PadShortFunctions());
> +    addPass(createX86PadShortFunctions(), false);
>      addPass(createX86FixupLEAs());
> -    ShouldPrint = true;
>    }
> -
> -  return ShouldPrint;
>  }
>
> Modified: llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp?rev=224042&r1=224041&r2=224042&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp Thu Dec 11 13:42:05 2014
> @@ -48,7 +48,7 @@ public:
>    void addIRPasses() override;
>    bool addPreISel() override;
>    bool addInstSelector() override;
> -  bool addPreEmitPass() override;
> +  void addPreEmitPass() override;
>  };
>  } // namespace
>
> @@ -72,9 +72,8 @@ bool XCorePassConfig::addInstSelector()
>    return false;
>  }
>
> -bool XCorePassConfig::addPreEmitPass() {
> -  addPass(createXCoreFrameToArgsOffsetEliminationPass());
> -  return false;
> +void XCorePassConfig::addPreEmitPass() {
> +  addPass(createXCoreFrameToArgsOffsetEliminationPass(), false);
>  }
>
>  // Force static initialization.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list