Skip to content

Commit 938b38f

Browse files
committed
[Passes] Always run LowerMatrixIntrinsics, request EarlyCSE on demand.
1 parent 624cc70 commit 938b38f

File tree

10 files changed

+47
-22
lines changed

10 files changed

+47
-22
lines changed

llvm/include/llvm/Transforms/Scalar/LowerMatrixIntrinsics.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#define LLVM_TRANSFORMS_SCALAR_LOWERMATRIXINTRINSICS_H
1515

1616
#include "llvm/IR/PassManager.h"
17+
#include "llvm/Transforms/Utils/ExtraPassManager.h"
1718

1819
namespace llvm {
1920
class LowerMatrixIntrinsicsPass
@@ -27,6 +28,15 @@ class LowerMatrixIntrinsicsPass
2728
function_ref<StringRef(StringRef)> MapClassName2PassName);
2829
static bool isRequired() { return true; }
2930
};
31+
32+
/// A marker analyss to determine if extra passes should be run after lowering
33+
/// matrix intrinsics.
34+
struct ShouldRunExtraMatrixPasses
35+
: public ShouldRunExtraPasses<ShouldRunExtraMatrixPasses>,
36+
public AnalysisInfoMixin<ShouldRunExtraMatrixPasses> {
37+
static AnalysisKey Key;
38+
};
39+
3040
} // namespace llvm
3141

3242
#endif

llvm/lib/Passes/PassBuilderPipelines.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,6 @@ static cl::opt<bool> EnableOrderFileInstrumentation(
270270
"enable-order-file-instrumentation", cl::init(false), cl::Hidden,
271271
cl::desc("Enable order file instrumentation (default = off)"));
272272

273-
static cl::opt<bool>
274-
EnableMatrix("enable-matrix", cl::init(false), cl::Hidden,
275-
cl::desc("Enable lowering of the matrix intrinsics"));
276-
277273
static cl::opt<bool> EnableConstraintElimination(
278274
"enable-constraint-elimination", cl::init(true), cl::Hidden,
279275
cl::desc(
@@ -1489,10 +1485,10 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
14891485
OptimizePM.addPass(Float2IntPass());
14901486
OptimizePM.addPass(LowerConstantIntrinsicsPass());
14911487

1492-
if (EnableMatrix) {
1493-
OptimizePM.addPass(LowerMatrixIntrinsicsPass());
1494-
OptimizePM.addPass(EarlyCSEPass());
1495-
}
1488+
OptimizePM.addPass(LowerMatrixIntrinsicsPass());
1489+
ExtraPassManager<ShouldRunExtraMatrixPasses> ExtraPasses;
1490+
ExtraPasses.addPass(EarlyCSEPass());
1491+
OptimizePM.addPass(std::move(ExtraPasses));
14961492

14971493
// CHR pass should only be applied with the profile information.
14981494
// The check is to check the profile summary information in CHR.
@@ -2189,9 +2185,8 @@ PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
21892185
if (PTO.MergeFunctions)
21902186
MPM.addPass(MergeFunctionsPass());
21912187

2192-
if (EnableMatrix)
2193-
MPM.addPass(
2194-
createModuleToFunctionPassAdaptor(LowerMatrixIntrinsicsPass(true)));
2188+
MPM.addPass(
2189+
createModuleToFunctionPassAdaptor(LowerMatrixIntrinsicsPass(true)));
21952190

21962191
if (!CGSCCOptimizerLateEPCallbacks.empty()) {
21972192
CGSCCPassManager CGPM;

llvm/lib/Passes/PassRegistry.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,8 @@ FUNCTION_ANALYSIS("scalar-evolution", ScalarEvolutionAnalysis())
305305
FUNCTION_ANALYSIS("should-not-run-function-passes",
306306
ShouldNotRunFunctionPassesAnalysis())
307307
FUNCTION_ANALYSIS("should-run-extra-vector-passes",
308+
ShouldRunExtraMatrixPasses())
309+
FUNCTION_ANALYSIS("should-run-extra-matrix-passes",
308310
ShouldRunExtraVectorPasses())
309311
FUNCTION_ANALYSIS("ssp-layout", SSPLayoutAnalysis())
310312
FUNCTION_ANALYSIS("stack-safety-local", StackSafetyAnalysis())

llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ auto m_AnyAdd(const LTy &L, const RTy &R) {
117117
return m_CombineOr(m_Add(L, R), m_FAdd(L, R));
118118
}
119119

120+
AnalysisKey ShouldRunExtraMatrixPasses::Key;
121+
120122
namespace {
121123

122124
// Given an element pointer \p BasePtr to the start of a (sub) matrix, compute
@@ -2651,6 +2653,8 @@ PreservedAnalyses LowerMatrixIntrinsicsPass::run(Function &F,
26512653
if (!Minimal) {
26522654
PA.preserve<LoopAnalysis>();
26532655
PA.preserve<DominatorTreeAnalysis>();
2656+
AM.getResult<ShouldRunExtraMatrixPasses>(F);
2657+
PA.preserve<ShouldRunExtraMatrixPasses>();
26542658
}
26552659
return PA;
26562660
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
3+
; RUN: -passes='default<O3>' -S %s 2>&1 | FileCheck %s
4+
5+
define <4 x float> @multiply_2x2(<4 x float> %a, <4 x float> %b) {
6+
; CHECK: Running pass: LowerMatrixIntrinsicsPass
7+
; CHECK-NEXT: Running analysis: ShouldRunExtraPasses
8+
; CHECK-NEXT: Invalidating analysis: PostDominatorTreeAnalysis
9+
; CHECK-NEXT: Running pass: EarlyCSEPass
10+
; CHECK-NEXT: Invalidating analysis: ShouldRunExtraPasses
11+
;
12+
entry:
13+
%c = call <4 x float> @llvm.matrix.multiply.v4f32.v4f32.v4f32(<4 x float> %a, <4 x float> %b, i32 2, i32 2, i32 2)
14+
ret <4 x float> %c
15+
}
16+
17+
declare <4 x float> @llvm.matrix.multiply.v4f32.v4f32.v4f32(<4 x float>, <4 x float>, i32, i32, i32)

llvm/test/Other/new-pm-O0-defaults.ll

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@
1010
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager \
1111
; RUN: -passes='default<O0>' -S %s 2>&1 \
1212
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-DEFAULT,CHECK-CORO
13-
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager -enable-matrix \
14-
; RUN: -passes='default<O0>' -S %s 2>&1 \
15-
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-DEFAULT,CHECK-MATRIX,CHECK-CORO
1613
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager -debug-info-for-profiling \
1714
; RUN: -passes='default<O0>' -S %s 2>&1 \
1815
; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-DIS,CHECK-CORO
@@ -34,12 +31,14 @@
3431
; CHECK-DIS-NEXT: Running pass: AddDiscriminatorsPass
3532
; CHECK-DIS-NEXT: Running pass: AlwaysInlinerPass
3633
; CHECK-DIS-NEXT: Running analysis: ProfileSummaryAnalysis
34+
; CHECK-DIS: Running pass: LowerMatrixIntrinsicsPass
35+
; CHECK-DIS-NEXT: Running analysis: TargetIRAnalysis
3736
; CHECK-DEFAULT: Running analysis: InnerAnalysisManagerProxy
3837
; CHECK-DEFAULT-NEXT: Running pass: EntryExitInstrumenterPass
3938
; CHECK-DEFAULT-NEXT: Running pass: AlwaysInlinerPass
4039
; CHECK-DEFAULT-NEXT: Running analysis: ProfileSummaryAnalysis
41-
; CHECK-MATRIX: Running pass: LowerMatrixIntrinsicsPass
42-
; CHECK-MATRIX-NEXT: Running analysis: TargetIRAnalysis
40+
; CHECK-DEFAULT: Running pass: LowerMatrixIntrinsicsPass
41+
; CHECK-DEFAULT-NEXT: Running analysis: TargetIRAnalysis
4342
; CHECK-CORO-NEXT: Running pass: CoroConditionalWrapper
4443
; CHECK-PRE-LINK: Running pass: CanonicalizeAliasesPass
4544
; CHECK-PRE-LINK-NEXT: Running pass: NameAnonGlobalPass

llvm/test/Other/new-pm-defaults.ll

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,6 @@
7575
; RUN: -passes='default<O3>' -enable-jump-table-to-switch -S %s 2>&1 \
7676
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-JUMP-TABLE-TO-SWITCH,CHECK-O23SZ,%llvmcheckext
7777

78-
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
79-
; RUN: -passes='default<O3>' -enable-matrix -S %s 2>&1 \
80-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-MATRIX
81-
8278
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
8379
; RUN: -passes='default<O3>' -enable-merge-functions -S %s 2>&1 \
8480
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-MERGE-FUNCS
@@ -242,8 +238,7 @@
242238
; CHECK-EP-OPTIMIZER-EARLY: Running pass: NoOpModulePass
243239
; CHECK-O-NEXT: Running pass: Float2IntPass
244240
; CHECK-O-NEXT: Running pass: LowerConstantIntrinsicsPass on foo
245-
; CHECK-MATRIX: Running pass: LowerMatrixIntrinsicsPass on f
246-
; CHECK-MATRIX-NEXT: Running pass: EarlyCSEPass on f
241+
; CHECK-O-NEXT: Running pass: LowerMatrixIntrinsicsPass
247242
; CHECK-O3-NEXT: Running pass: ControlHeightReductionPass
248243
; CHECK-EP-VECTORIZER-START-NEXT: Running pass: NoOpFunctionPass
249244
; CHECK-EXT: Running pass: {{.*}}::Bye on foo

llvm/test/Other/new-pm-thinlto-postlink-defaults.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@
168168
; CHECK-POST-EP-OPT-EARLY-NEXT: Running pass: NoOpModulePass
169169
; CHECK-POSTLINK-O-NEXT: Running pass: Float2IntPass
170170
; CHECK-POSTLINK-O-NEXT: Running pass: LowerConstantIntrinsicsPass
171+
; CHECK-POSTLINK-O-NEXT: Running pass: LowerMatrixIntrinsicsPass
171172
; CHECK-POSTLINK-O3-NEXT: Running pass: ControlHeightReductionPass
172173
; CHECK-EXT: Running pass: {{.*}}::Bye
173174
; CHECK-POSTLINK-O-NEXT: Running pass: LoopSimplifyPass

llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
; CHECK-O-NEXT: Running pass: RecomputeGlobalsAAPass
152152
; CHECK-O-NEXT: Running pass: Float2IntPass
153153
; CHECK-O-NEXT: Running pass: LowerConstantIntrinsicsPass
154+
; CHECK-O-NEXT: Running pass: LowerMatrixIntrinsicsPass
154155
; CHECK-O3-NEXT: Running pass: ControlHeightReductionPass
155156
; CHECK-O3-NEXT: Running analysis: RegionInfoAnalysis
156157
; CHECK-O3-NEXT: Running analysis: DominanceFrontierAnalysis

llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@
160160
; CHECK-O-NEXT: Running pass: RecomputeGlobalsAAPass
161161
; CHECK-O-NEXT: Running pass: Float2IntPass
162162
; CHECK-O-NEXT: Running pass: LowerConstantIntrinsicsPass
163+
; CHECK-O-NEXT: Running pass: LowerMatrixIntrinsicsPass
163164
; CHECK-O3-NEXT: Running pass: ControlHeightReductionPass
164165
; CHECK-O3-NEXT: Running analysis: RegionInfoAnalysis
165166
; CHECK-O3-NEXT: Running analysis: DominanceFrontierAnalysis

0 commit comments

Comments
 (0)