[llvm] 31d71c6 - [Matrix] Only run matrix lowering early with -O0.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 17 07:53:51 PDT 2020
Author: Florian Hahn
Date: 2020-07-17T15:53:16+01:00
New Revision: 31d71c69f1b1da99f99073785a0292820ec34045
URL: https://github.com/llvm/llvm-project/commit/31d71c69f1b1da99f99073785a0292820ec34045
DIFF: https://github.com/llvm/llvm-project/commit/31d71c69f1b1da99f99073785a0292820ec34045.diff
LOG: [Matrix] Only run matrix lowering early with -O0.
Currently matrix lowering is run twice if OptLevel > 0. Fix that and
also add a test for OptLevel > 0 with matrix lowering enabled.
Added:
llvm/test/Other/opt-O3-pipeline-enable-matrix.ll
Modified:
llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
index f5ba86b04ed0..a109d69d0f5e 100644
--- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
+++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
@@ -298,7 +298,7 @@ void PassManagerBuilder::populateFunctionPassManager(
// Make sure they are also lowered in O0.
// FIXME: A lightweight version of the pass should run in the backend
// pipeline on demand.
- if (EnableMatrix)
+ if (EnableMatrix && OptLevel == 0)
FPM.add(createLowerMatrixIntrinsicsPass());
if (OptLevel == 0) return;
diff --git a/llvm/test/Other/opt-O3-pipeline-enable-matrix.ll b/llvm/test/Other/opt-O3-pipeline-enable-matrix.ll
new file mode 100644
index 000000000000..a0b7a8f5e1e3
--- /dev/null
+++ b/llvm/test/Other/opt-O3-pipeline-enable-matrix.ll
@@ -0,0 +1,346 @@
+; RUN: opt -O3 -enable-matrix -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-EXT: Good Bye World Pass
+; CHECK-NOEXT-NOT: Good Bye World Pass
+; 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
+; Target Pass Configuration
+; CHECK: 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: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Call-site splitting
+; CHECK-NEXT: Interprocedural Sparse Conditional Constant Propagation
+; CHECK-NEXT: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Called Value Propagation
+; CHECK-NEXT: Global Variable Optimizer
+; CHECK-NEXT: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Natural Loop Information
+; CHECK-NEXT: Post-Dominator Tree Construction
+; CHECK-NEXT: Branch Probability Analysis
+; CHECK-NEXT: Block Frequency Analysis
+; 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: OpenMP specific optimizations
+; CHECK-NEXT: Deduce function attributes
+; CHECK-NEXT: Promote 'by reference' arguments to scalars
+; 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: 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: Combine pattern based expressions
+; 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: Conditionally eliminate dead library calls
+; CHECK-NEXT: Natural Loop Information
+; CHECK-NEXT: Post-Dominator Tree Construction
+; CHECK-NEXT: Branch Probability Analysis
+; CHECK-NEXT: Block Frequency Analysis
+; CHECK-NEXT: Lazy Branch Probability Analysis
+; CHECK-NEXT: Lazy Block Frequency Analysis
+; CHECK-NEXT: Optimization Remark Emitter
+; CHECK-NEXT: PGOMemOPSize
+; 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: 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: Memory SSA
+; CHECK-NEXT: Loop Pass Manager
+; 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: 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: 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: 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: Function Alias Analysis Results
+; CHECK-NEXT: Memory SSA
+; CHECK-NEXT: Natural Loop Information
+; 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: 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: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Natural Loop Information
+; CHECK-NEXT: Post-Dominator Tree Construction
+; CHECK-NEXT: Branch Probability Analysis
+; CHECK-NEXT: Block Frequency Analysis
+; CHECK-NEXT: Dead Global Elimination
+; CHECK-NEXT: CallGraph Construction
+; CHECK-NEXT: Globals Alias Analysis
+; CHECK-NEXT: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Float to int
+; CHECK-NEXT: Lower constant intrinsics
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Natural Loop Information
+; CHECK-NEXT: Lazy Branch Probability Analysis
+; CHECK-NEXT: Lazy Block Frequency Analysis
+; CHECK-NEXT: Optimization Remark Emitter
+; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
+; CHECK-NEXT: Function Alias Analysis Results
+; CHECK-NEXT: Lower the matrix intrinsics
+; CHECK-NEXT: Early CSE
+; 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: Post-Dominator Tree Construction
+; 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: Inject TLI Mappings
+; 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: Lazy Branch Probability Analysis
+; CHECK-NEXT: Lazy Block Frequency 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: Inject TLI Mappings
+; CHECK-NEXT: SLP Vectorizer
+; CHECK-NEXT: Optimize scalar/vector ops
+; 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: Memory SSA
+; 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: Lazy Branch Probability Analysis
+; CHECK-NEXT: Lazy Block Frequency Analysis
+; CHECK-NEXT: Optimization Remark Emitter
+; CHECK-NEXT: Warn about non-applied transformations
+; CHECK-NEXT: Alignment from assumptions
+; CHECK-NEXT: Strip Unused Function Prototypes
+; CHECK-NEXT: Dead Global Elimination
+; CHECK-NEXT: Merge Duplicate Global Constants
+; CHECK-NEXT: Call Graph Profile
+; CHECK-NEXT: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Natural Loop Information
+; CHECK-NEXT: Lazy Branch Probability Analysis
+; CHECK-NEXT: Lazy Block Frequency Analysis
+; CHECK-NEXT: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Natural Loop Information
+; CHECK-NEXT: Post-Dominator Tree Construction
+; 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: 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: Module Verifier
+; CHECK-NEXT: Bitcode Writer
+; CHECK-NEXT: Pass Arguments:
+; CHECK-NEXT: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Pass Arguments:
+; CHECK-NEXT: Target Library Information
+; CHECK-NEXT: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Natural Loop Information
+; CHECK-NEXT: Post-Dominator Tree Construction
+; CHECK-NEXT: Branch Probability Analysis
+; CHECK-NEXT: Block Frequency Analysis
+; CHECK-NEXT: Pass Arguments:
+; CHECK-NEXT: Target Library Information
+; CHECK-NEXT: FunctionPass Manager
+; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: Natural Loop Information
+; CHECK-NEXT: Post-Dominator Tree Construction
+; CHECK-NEXT: Branch Probability Analysis
+; CHECK-NEXT: Block Frequency Analysis
+
+define void @f() {
+ ret void
+}
More information about the llvm-commits
mailing list