[llvm] r344869 - Schedule Hot Cold Splitting pass after most optimization passes

Fedor Sergeev via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 22 00:23:13 PDT 2018


This change seems to  cause many buildbot failures on the new test
(due to the mismatch in -debug-pass output).

regards,
   Fedor.

On 10/21/2018 09:11 PM, Aditya Kumar via llvm-commits wrote:
> Author: hiraditya
> Date: Sun Oct 21 11:11:56 2018
> New Revision: 344869
>
> URL: http://llvm.org/viewvc/llvm-project?rev=344869&view=rev
> Log:
> Schedule Hot Cold Splitting pass after most optimization passes
>
> Summary:
> In the new+old pass manager, hot cold splitting was schedule too early.
> Thanks to Vedant for pointing this out.
>
> Reviewers: sebpop, vsk
>
> Reviewed By: sebpop, vsk
>
> Subscribers: mehdi_amini, llvm-commits
>
> Differential Revision: https://reviews.llvm.org/D53437
>
> Added:
>      llvm/trunk/test/Other/opt-hot-cold-split.ll
> Modified:
>      llvm/trunk/lib/Passes/PassBuilder.cpp
>      llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
>
> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=344869&r1=344868&r2=344869&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)
> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Sun Oct 21 11:11:56 2018
> @@ -621,9 +621,6 @@ PassBuilder::buildModuleSimplificationPi
>                                              true));
>     }
>   
> -  if (EnableHotColdSplit)
> -    MPM.addPass(HotColdSplittingPass());
> -
>     // Interprocedural constant propagation now that basic cleanup has occurred
>     // and prior to optimizing globals.
>     // FIXME: This position in the pipeline hasn't been carefully considered in
> @@ -713,6 +710,9 @@ PassBuilder::buildModuleSimplificationPi
>     MainCGPipeline.addPass(createCGSCCToFunctionPassAdaptor(
>         buildFunctionSimplificationPipeline(Level, Phase, DebugLogging)));
>   
> +  if (EnableHotColdSplit)
> +    MPM.addPass(HotColdSplittingPass());
> +
>     for (auto &C : CGSCCOptimizerLateEPCallbacks)
>       C(MainCGPipeline, Level);
>   
>
> Modified: llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp?rev=344869&r1=344868&r2=344869&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp (original)
> +++ llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp Sun Oct 21 11:11:56 2018
> @@ -499,9 +499,6 @@ void PassManagerBuilder::populateModuleP
>     // Infer attributes about declarations if possible.
>     MPM.add(createInferFunctionAttrsLegacyPass());
>   
> -  if (EnableHotColdSplit)
> -    MPM.add(createHotColdSplittingPass());
> -
>     addExtensionsToPM(EP_ModuleOptimizerEarly, MPM);
>   
>     if (OptLevel > 2)
> @@ -735,6 +732,9 @@ void PassManagerBuilder::populateModuleP
>     // flattening of blocks.
>     MPM.add(createDivRemPairsPass());
>   
> +  if (EnableHotColdSplit)
> +    MPM.add(createHotColdSplittingPass());
> +
>     // LoopSink (and other loop passes since the last simplifyCFG) might have
>     // resulted in single-entry-single-exit or empty blocks. Clean up the CFG.
>     MPM.add(createCFGSimplificationPass());
>
> Added: llvm/trunk/test/Other/opt-hot-cold-split.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/opt-hot-cold-split.ll?rev=344869&view=auto
> ==============================================================================
> --- llvm/trunk/test/Other/opt-hot-cold-split.ll (added)
> +++ llvm/trunk/test/Other/opt-hot-cold-split.ll Sun Oct 21 11:11:56 2018
> @@ -0,0 +1,292 @@
> +; RUN: opt -mtriple=x86_64-- -Os -hotcoldsplit -debug-pass=Structure < %s -o /dev/null 2>&1 | FileCheck %s
> +; REQUIRES: asserts
> +
> +; CHECK-LABEL: Pass Arguments:
> +; CHECK-NEXT: Target Transform Information
> +; CHECK-NEXT: Type-Based Alias Analysis
> +; CHECK-NEXT: Scoped NoAlias Alias Analysis
> +; CHECK-NEXT: Assumption Cache Tracker
> +; CHECK-NEXT: Target Library Information
> +; CHECK-NEXT:   FunctionPass Manager
> +; CHECK-NEXT:     Module Verifier
> +; CHECK-NEXT:     Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
> +; CHECK-NEXT:     Simplify the CFG
> +; CHECK-NEXT:     Dominator Tree Construction
> +; CHECK-NEXT:     SROA
> +; CHECK-NEXT:     Early CSE
> +; CHECK-NEXT:     Lower 'expect' Intrinsics
> +; CHECK-NEXT:  Pass Arguments:
> +; CHECK-NEXT:  Target Library Information
> +; CHECK-NEXT:  Target Transform Information
> +; CHECK-NEXT:  Target Pass Configuration
> +; CHECK-NEXT:  Type-Based Alias Analysis
> +; CHECK-NEXT:  Scoped NoAlias Alias Analysis
> +; CHECK-NEXT:  Assumption Cache Tracker
> +; CHECK-NEXT:  Profile summary info
> +; CHECK-NEXT:    ModulePass Manager
> +; CHECK-NEXT:      Force set function attributes
> +; CHECK-NEXT:      Infer set function attributes
> +; CHECK-NEXT:      Interprocedural Sparse Conditional Constant Propagation
> +; CHECK-NEXT:        Unnamed pass: implement Pass::getPassName()
> +; CHECK-NEXT:     Called Value Propagation
> +; CHECK-NEXT:     Global Variable Optimizer
> +; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
> +; CHECK-NEXT:     FunctionPass Manager
> +; CHECK-NEXT:       Dominator Tree Construction
> +; CHECK-NEXT:       Promote Memory to Register
> +; CHECK-NEXT:     Dead Argument Elimination
> +; CHECK-NEXT:     FunctionPass Manager
> +; CHECK-NEXT:       Dominator Tree Construction
> +; CHECK-NEXT:       Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:       Function Alias Analysis Results
> +; CHECK-NEXT:       Natural Loop Information
> +; CHECK-NEXT:       Lazy Branch Probability Analysis
> +; CHECK-NEXT:       Lazy Block Frequency Analysis
> +; CHECK-NEXT:       Optimization Remark Emitter
> +; CHECK-NEXT:       Combine redundant instructions
> +; CHECK-NEXT:       Simplify the CFG
> +; CHECK-NEXT:     CallGraph Construction
> +; CHECK-NEXT:     Globals Alias Analysis
> +; CHECK-NEXT:     Call Graph SCC Pass Manager
> +; CHECK-NEXT:       Remove unused exception handling info
> +; CHECK-NEXT:       Function Integration/Inlining
> +; CHECK-NEXT:       Deduce function attributes
> +; CHECK-NEXT:       FunctionPass Manager
> +; CHECK-NEXT:         Dominator Tree Construction
> +; CHECK-NEXT:         SROA
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Memory SSA
> +; CHECK-NEXT:         Early CSE w/ MemorySSA
> +; CHECK-NEXT:         Speculatively execute instructions if target has divergent branches
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Lazy Value Information Analysis
> +; CHECK-NEXT:         Jump Threading
> +; CHECK-NEXT:         Value Propagation
> +; CHECK-NEXT:         Simplify the CFG
> +; CHECK-NEXT:         Dominator Tree Construction
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Natural Loop Information
> +; CHECK-NEXT:         Lazy Branch Probability Analysis
> +; CHECK-NEXT:         Lazy Block Frequency Analysis
> +; CHECK-NEXT:         Optimization Remark Emitter
> +; CHECK-NEXT:         Combine redundant instructions
> +; CHECK-NEXT:         Optimization Remark Emitter
> +; CHECK-NEXT:         Tail Call Elimination
> +; CHECK-NEXT:         Simplify the CFG
> +; CHECK-NEXT:         Reassociate expressions
> +; CHECK-NEXT:         Dominator Tree Construction
> +; CHECK-NEXT:         Natural Loop Information
> +; CHECK-NEXT:         Canonicalize natural loops
> +; CHECK-NEXT:         LCSSA Verifier
> +; CHECK-NEXT:         Loop-Closed SSA Form Pass
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Scalar Evolution Analysis
> +; CHECK-NEXT:         Loop Pass Manager
> +; CHECK-NEXT:           Rotate Loops
> +; CHECK-NEXT:           Loop Invariant Code Motion
> +; CHECK-NEXT:           Unswitch loops
> +; CHECK-NEXT:         Simplify the CFG
> +; CHECK-NEXT:         Dominator Tree Construction
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Natural Loop Information
> +; CHECK-NEXT:         Lazy Branch Probability Analysis
> +; CHECK-NEXT:         Lazy Block Frequency Analysis
> +; CHECK-NEXT:         Optimization Remark Emitter
> +; CHECK-NEXT:         Combine redundant instructions
> +; CHECK-NEXT:         Canonicalize natural loops
> +; CHECK-NEXT:         LCSSA Verifier
> +; CHECK-NEXT:         Loop-Closed SSA Form Pass
> +; CHECK-NEXT:         Scalar Evolution Analysis
> +; CHECK-NEXT:         Loop Pass Manager
> +; CHECK-NEXT:           Induction Variable Simplification
> +; CHECK-NEXT:           Recognize loop idioms
> +; CHECK-NEXT:           Delete dead loops
> +; CHECK-NEXT:           Unroll loops
> +; CHECK-NEXT:         MergedLoadStoreMotion
> +; CHECK-NEXT:         Phi Values Analysis
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Memory Dependence Analysis
> +; CHECK-NEXT:         Lazy Branch Probability Analysis
> +; CHECK-NEXT:         Lazy Block Frequency Analysis
> +; CHECK-NEXT:         Optimization Remark Emitter
> +; CHECK-NEXT:         Global Value Numbering
> +; CHECK-NEXT:         Phi Values Analysis
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Memory Dependence Analysis
> +; CHECK-NEXT:         MemCpy Optimization
> +; CHECK-NEXT:         Sparse Conditional Constant Propagation
> +; CHECK-NEXT:         Demanded bits analysis
> +; CHECK-NEXT:         Bit-Tracking Dead Code Elimination
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Natural Loop Information
> +; CHECK-NEXT:         Lazy Branch Probability Analysis
> +; CHECK-NEXT:         Lazy Block Frequency Analysis
> +; CHECK-NEXT:         Optimization Remark Emitter
> +; CHECK-NEXT:         Combine redundant instructions
> +; CHECK-NEXT:         Lazy Value Information Analysis
> +; CHECK-NEXT:         Jump Threading
> +; CHECK-NEXT:         Value Propagation
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Phi Values Analysis
> +; CHECK-NEXT:         Memory Dependence Analysis
> +; CHECK-NEXT:         Dead Store Elimination
> +; CHECK-NEXT:         Natural Loop Information
> +; CHECK-NEXT:         Canonicalize natural loops
> +; CHECK-NEXT:         LCSSA Verifier
> +; CHECK-NEXT:         Loop-Closed SSA Form Pass
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Scalar Evolution Analysis
> +; CHECK-NEXT:         Loop Pass Manager
> +; CHECK-NEXT:           Loop Invariant Code Motion
> +; CHECK-NEXT:         Post-Dominator Tree Construction
> +; CHECK-NEXT:         Aggressive Dead Code Elimination
> +; CHECK-NEXT:         Simplify the CFG
> +; CHECK-NEXT:         Dominator Tree Construction
> +; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Natural Loop Information
> +; CHECK-NEXT:         Lazy Branch Probability Analysis
> +; CHECK-NEXT:         Lazy Block Frequency Analysis
> +; CHECK-NEXT:         Optimization Remark Emitter
> +; CHECK-NEXT:         Combine redundant instructions
> +; CHECK-NEXT:     A No-Op Barrier Pass
> +; CHECK-NEXT:     Eliminate Available Externally Globals
> +; CHECK-NEXT:     CallGraph Construction
> +; CHECK-NEXT:     Deduce function attributes in RPO
> +; CHECK-NEXT:     Global Variable Optimizer
> +; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
> +; CHECK-NEXT:     Dead Global Elimination
> +; CHECK-NEXT:     CallGraph Construction
> +; CHECK-NEXT:     Globals Alias Analysis
> +; CHECK-NEXT:     FunctionPass Manager
> +; CHECK-NEXT:       Float to int
> +; CHECK-NEXT:       Dominator Tree Construction
> +; CHECK-NEXT:       Natural Loop Information
> +; CHECK-NEXT:       Canonicalize natural loops
> +; CHECK-NEXT:       LCSSA Verifier
> +; CHECK-NEXT:       Loop-Closed SSA Form Pass
> +; CHECK-NEXT:       Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:       Function Alias Analysis Results
> +; CHECK-NEXT:       Scalar Evolution Analysis
> +; CHECK-NEXT:       Loop Pass Manager
> +; CHECK-NEXT:         Rotate Loops
> +; CHECK-NEXT:       Loop Access Analysis
> +; CHECK-NEXT:       Lazy Branch Probability Analysis
> +; CHECK-NEXT:       Lazy Block Frequency Analysis
> +; CHECK-NEXT:       Optimization Remark Emitter
> +; CHECK-NEXT:       Loop Distribution
> +; CHECK-NEXT:       Branch Probability Analysis
> +; CHECK-NEXT:       Block Frequency Analysis
> +; CHECK-NEXT:       Scalar Evolution Analysis
> +; CHECK-NEXT:       Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:       Function Alias Analysis Results
> +; CHECK-NEXT:       Loop Access Analysis
> +; CHECK-NEXT:       Demanded bits analysis
> +; CHECK-NEXT:       Lazy Branch Probability Analysis
> +; CHECK-NEXT:       Lazy Block Frequency Analysis
> +; CHECK-NEXT:       Optimization Remark Emitter
> +; CHECK-NEXT:       Loop Vectorization
> +; CHECK-NEXT:       Canonicalize natural loops
> +; CHECK-NEXT:       Scalar Evolution Analysis
> +; CHECK-NEXT:       Function Alias Analysis Results
> +; CHECK-NEXT:       Loop Access Analysis
> +; CHECK-NEXT:       Loop Load Elimination
> +; CHECK-NEXT:       Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:       Function Alias Analysis Results
> +; CHECK-NEXT:       Lazy Branch Probability Analysis
> +; CHECK-NEXT:       Lazy Block Frequency Analysis
> +; CHECK-NEXT:       Optimization Remark Emitter
> +; CHECK-NEXT:       Combine redundant instructions
> +; CHECK-NEXT:       Simplify the CFG
> +; CHECK-NEXT:       Dominator Tree Construction
> +; CHECK-NEXT:       Natural Loop Information
> +; CHECK-NEXT:       Scalar Evolution Analysis
> +; CHECK-NEXT:       Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:       Function Alias Analysis Results
> +; CHECK-NEXT:       Demanded bits analysis
> +; CHECK-NEXT:       Lazy Branch Probability Analysis
> +; CHECK-NEXT:       Lazy Block Frequency Analysis
> +; CHECK-NEXT:       Optimization Remark Emitter
> +; CHECK-NEXT:       SLP Vectorizer
> +; CHECK-NEXT:       Optimization Remark Emitter
> +; CHECK-NEXT:       Combine redundant instructions
> +; CHECK-NEXT:       Canonicalize natural loops
> +; CHECK-NEXT:       LCSSA Verifier
> +; CHECK-NEXT:       Loop-Closed SSA Form Pass
> +; CHECK-NEXT:       Scalar Evolution Analysis
> +; CHECK-NEXT:       Loop Pass Manager
> +; CHECK-NEXT:         Unroll loops
> +; CHECK-NEXT:       Lazy Branch Probability Analysis
> +; CHECK-NEXT:       Lazy Block Frequency Analysis
> +; CHECK-NEXT:       Optimization Remark Emitter
> +; CHECK-NEXT:       Combine redundant instructions
> +; CHECK-NEXT:       Canonicalize natural loops
> +; CHECK-NEXT:       LCSSA Verifier
> +; CHECK-NEXT:       Loop-Closed SSA Form Pass
> +; CHECK-NEXT:       Scalar Evolution Analysis
> +; CHECK-NEXT:       Loop Pass Manager
> +; CHECK-NEXT:         Loop Invariant Code Motion
> +; CHECK-NEXT:       Alignment from assumptions
> +; CHECK-NEXT:     Strip Unused Function Prototypes
> +; CHECK-NEXT:     Dead Global Elimination
> +; CHECK-NEXT:     Merge Duplicate Global Constants
> +; CHECK-NEXT:     FunctionPass Manager
> +; CHECK-NEXT:       Dominator Tree Construction
> +; CHECK-NEXT:       Natural Loop Information
> +; CHECK-NEXT:       Branch Probability Analysis
> +; CHECK-NEXT:       Block Frequency Analysis
> +; CHECK-NEXT:       Canonicalize natural loops
> +; CHECK-NEXT:       LCSSA Verifier
> +; CHECK-NEXT:       Loop-Closed SSA Form Pass
> +; CHECK-NEXT:       Basic Alias Analysis (stateless AA impl)
> +; CHECK-NEXT:       Function Alias Analysis Results
> +; CHECK-NEXT:       Scalar Evolution Analysis
> +; CHECK-NEXT:       Branch Probability Analysis
> +; CHECK-NEXT:       Block Frequency Analysis
> +; CHECK-NEXT:       Loop Pass Manager
> +; CHECK-NEXT:         Loop Sink
> +; CHECK-NEXT:       Lazy Branch Probability Analysis
> +; CHECK-NEXT:       Lazy Block Frequency Analysis
> +; CHECK-NEXT:       Optimization Remark Emitter
> +; CHECK-NEXT:       Remove redundant instructions
> +; CHECK-NEXT:       Hoist/decompose integer division and remainder
> +; CHECK-NEXT:       Simplify the CFG
> +; CHECK-NEXT:     Hot Cold Splitting
> +; CHECK-NEXT:       Unnamed pass: implement Pass::getPassName()
> +; CHECK-NEXT:     FunctionPass Manager
> +; CHECK-NEXT:       Module Verifier
> +; CHECK-NEXT:     Bitcode Writer
> +; CHECK-NEXT: Pass Arguments:  -domtree
> +; CHECK-NEXT:   FunctionPass Manager
> +; CHECK-NEXT:     Dominator Tree Construction
> +; CHECK-NEXT: Pass Arguments:  -targetlibinfo -domtree -loops -branch-prob -block-freq
> +; CHECK-NEXT: Target Library Information
> +; CHECK-NEXT:   FunctionPass Manager
> +; CHECK-NEXT:     Dominator Tree Construction
> +; CHECK-NEXT:     Natural Loop Information
> +; CHECK-NEXT:     Branch Probability Analysis
> +; CHECK-NEXT:     Block Frequency Analysis
> +; CHECK-NEXT: Pass Arguments:  -targetlibinfo -domtree -loops -branch-prob -block-freq
> +; CHECK-NEXT: Target Library Information
> +; CHECK-NEXT:   FunctionPass Manager
> +; CHECK-NEXT:     Dominator Tree Construction
> +; CHECK-NEXT:     Natural Loop Information
> +; CHECK-NEXT:     Branch Probability Analysis
> +; CHECK-NEXT:     Block Frequency Analysis
> +; CHECK-NEXT: Pass Arguments:  -targetlibinfo -domtree -loops -branch-prob -block-freq
> +; CHECK-NEXT: Target Library Information
> +; CHECK-NEXT:   FunctionPass Manager
> +; CHECK-NEXT:     Dominator Tree Construction
> +; CHECK-NEXT:     Natural Loop Information
> +; CHECK-NEXT:     Branch Probability Analysis
> +; CHECK-NEXT:     Block Frequency Analysis
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list