[PATCH] D11683: Create a wrapper pass for MachineDominatorTree to remove pass dependence when it is only used conditionally.

Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Jul 31 17:08:31 PDT 2015


> On 2015-Jul-31, at 10:44, Cong Hou <congh at google.com> wrote:
> 
> congh created this revision.
> congh added reviewers: dexonsmith, dblaikie.
> congh added subscribers: llvm-commits, davidxl.
> Herald added subscribers: qcolombet, MatzeB.
> 
> This patch adds a wrapper pass MachineDominatorTreeWrapperPass that contains MachineDominatorTree analysis, which could be done flexibly without declaring pass dependence. This is good to the compilation time: in some cases we only need to do this analysis conditionally (like in MachineBlockPlacement in this patch). This is quite similar to the wrapper pass for DominatorTree.
> 
> Most changes are mechanical due to the name and usage changes.
> 
> http://reviews.llvm.org/D11683
> 
> Files:
>  include/llvm/CodeGen/MachineDominators.h
>  include/llvm/InitializePasses.h
>  lib/CodeGen/CodeGen.cpp
>  lib/CodeGen/EarlyIfConversion.cpp
>  lib/CodeGen/InlineSpiller.cpp
>  lib/CodeGen/LiveDebugVariables.cpp
>  lib/CodeGen/LiveIntervalAnalysis.cpp
>  lib/CodeGen/MachineBasicBlock.cpp
>  lib/CodeGen/MachineBlockPlacement.cpp
>  lib/CodeGen/MachineCSE.cpp
>  lib/CodeGen/MachineCombiner.cpp
>  lib/CodeGen/MachineDominanceFrontier.cpp
>  lib/CodeGen/MachineDominators.cpp
>  lib/CodeGen/MachineLICM.cpp
>  lib/CodeGen/MachineLoopInfo.cpp
>  lib/CodeGen/MachineRegionInfo.cpp
>  lib/CodeGen/MachineScheduler.cpp
>  lib/CodeGen/MachineSink.cpp
>  lib/CodeGen/PHIElimination.cpp
>  lib/CodeGen/PeepholeOptimizer.cpp
>  lib/CodeGen/PostRASchedulerList.cpp
>  lib/CodeGen/PrologEpilogInserter.cpp
>  lib/CodeGen/RegAllocBasic.cpp
>  lib/CodeGen/RegAllocGreedy.cpp
>  lib/CodeGen/RegAllocPBQP.cpp
>  lib/CodeGen/ShrinkWrap.cpp
>  lib/CodeGen/StackColoring.cpp
>  lib/CodeGen/UnreachableBlockElim.cpp
>  lib/Target/AArch64/AArch64CleanupLocalDynamicTLSPass.cpp
>  lib/Target/AArch64/AArch64CollectLOH.cpp
>  lib/Target/AArch64/AArch64ConditionOptimizer.cpp
>  lib/Target/AArch64/AArch64ConditionalCompares.cpp
>  lib/Target/AMDGPU/AMDILCFGStructurizer.cpp
>  lib/Target/AMDGPU/R600OptimizeVectorRegisters.cpp
>  lib/Target/AMDGPU/R600Packetizer.cpp
>  lib/Target/AMDGPU/SIFoldOperands.cpp
>  lib/Target/AMDGPU/SILowerI1Copies.cpp
>  lib/Target/Hexagon/HexagonFrameLowering.cpp
>  lib/Target/Hexagon/HexagonGenInsert.cpp
>  lib/Target/Hexagon/HexagonGenPredicate.cpp
>  lib/Target/Hexagon/HexagonHardwareLoops.cpp
>  lib/Target/Hexagon/HexagonVLIWPacketizer.cpp
>  lib/Target/Mips/MipsOptimizePICCall.cpp
>  lib/Target/PowerPC/PPCCTRLoops.cpp
>  lib/Target/SystemZ/SystemZLDCleanup.cpp
>  lib/Target/X86/X86InstrInfo.cpp
> 
> <D11683.31132.patch>

I have some comments on the MachineBlockPlacement changes (I'm not
comfortable signing off even after you address my comments, though,
so someone else will have to chime in).

> Index: lib/CodeGen/MachineBlockPlacement.cpp
> ===================================================================
> --- lib/CodeGen/MachineBlockPlacement.cpp
> +++ lib/CodeGen/MachineBlockPlacement.cpp
> @@ -202,7 +202,7 @@
>    const TargetLoweringBase *TLI;
>  
>    /// \brief A handle to the post dominator tree.
> -  MachineDominatorTree *MDT;
> +  std::unique_ptr<MachineDominatorTree> MDT;

I don't see you releasing this memory anywhere.  Should you?

>  
>    /// \brief A set of blocks that are unavoidably execute, i.e. they dominate
>    /// all terminators of the MachineFunction.
> @@ -262,7 +262,6 @@
>    void getAnalysisUsage(AnalysisUsage &AU) const override {
>      AU.addRequired<MachineBranchProbabilityInfo>();
>      AU.addRequired<MachineBlockFrequencyInfo>();
> -    AU.addRequired<MachineDominatorTree>();

If the MDT is already available, shouldn't we use it?  Should this be
changed to `addOptional<>`?

>      AU.addRequired<MachineLoopInfo>();
>      MachineFunctionPass::getAnalysisUsage(AU);
>    }
> @@ -275,7 +274,6 @@
>                        "Branch Probability Basic Block Placement", false, false)
>  INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo)
>  INITIALIZE_PASS_DEPENDENCY(MachineBlockFrequencyInfo)
> -INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
>  INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
>  INITIALIZE_PASS_END(MachineBlockPlacement, "block-placement",
>                      "Branch Probability Basic Block Placement", false, false)
> @@ -1138,7 +1136,8 @@
>    MLI = &getAnalysis<MachineLoopInfo>();
>    TII = F.getSubtarget().getInstrInfo();
>    TLI = F.getSubtarget().getTargetLowering();
> -  MDT = &getAnalysis<MachineDominatorTree>();
> +  if (OutlineOptionalBranches)
> +    MDT.reset(new MachineDominatorTree(F));
>    assert(BlockToChain.empty());
>  
>    buildCFGChains(F);
> 





More information about the llvm-commits mailing list