[llvm] r224042 - [CodeGen] Add print and verify pass after each MachineFunctionPass by default
Matthias Braun
matze at braunis.de
Thu Dec 11 14:12:24 PST 2014
Thanks for letting me know. Apparently PassManager::add() may actually remove the pass when it is redundant which made it illegal to query for the passes name afterwards.
- Matthias
> On Dec 11, 2014, at 12:09 PM, Rafael EspĂndola <rafael.espindola at gmail.com> wrote:
>
> 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
> _______________________________________________
> 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