[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