Skip to content

Commit 1b12320

Browse files
committed
[FuncSpec] Replace LoopInfo with BlockFrequencyInfo.
Using AvgLoopIters on any loop is too imprecise making the cost model favor users inside loop nests regardless of the actual tripcount. Differential Revision: https://reviews.llvm.org/D150375
1 parent c067c6e commit 1b12320

15 files changed

+83
-167
lines changed

llvm/include/llvm/Transforms/IPO/FunctionSpecialization.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@
4848
#ifndef LLVM_TRANSFORMS_IPO_FUNCTIONSPECIALIZATION_H
4949
#define LLVM_TRANSFORMS_IPO_FUNCTIONSPECIALIZATION_H
5050

51+
#include "llvm/Analysis/BlockFrequencyInfo.h"
5152
#include "llvm/Analysis/CodeMetrics.h"
5253
#include "llvm/Analysis/InlineCost.h"
53-
#include "llvm/Analysis/LoopInfo.h"
5454
#include "llvm/Analysis/TargetTransformInfo.h"
5555
#include "llvm/Transforms/Scalar/SCCP.h"
5656
#include "llvm/Transforms/Utils/Cloning.h"
@@ -126,6 +126,7 @@ class FunctionSpecializer {
126126
FunctionAnalysisManager *FAM;
127127

128128
/// Analyses used to help determine if a function should be specialized.
129+
std::function<BlockFrequencyInfo &(Function &)> GetBFI;
129130
std::function<const TargetLibraryInfo &(Function &)> GetTLI;
130131
std::function<TargetTransformInfo &(Function &)> GetTTI;
131132
std::function<AssumptionCache &(Function &)> GetAC;
@@ -137,11 +138,12 @@ class FunctionSpecializer {
137138
public:
138139
FunctionSpecializer(
139140
SCCPSolver &Solver, Module &M, FunctionAnalysisManager *FAM,
141+
std::function<BlockFrequencyInfo &(Function &)> GetBFI,
140142
std::function<const TargetLibraryInfo &(Function &)> GetTLI,
141143
std::function<TargetTransformInfo &(Function &)> GetTTI,
142144
std::function<AssumptionCache &(Function &)> GetAC)
143-
: Solver(Solver), M(M), FAM(FAM), GetTLI(GetTLI), GetTTI(GetTTI),
144-
GetAC(GetAC) {}
145+
: Solver(Solver), M(M), FAM(FAM), GetBFI(GetBFI), GetTLI(GetTLI),
146+
GetTTI(GetTTI), GetAC(GetAC) {}
145147

146148
~FunctionSpecializer();
147149

@@ -193,7 +195,7 @@ class FunctionSpecializer {
193195
Cost getSpecializationCost(Function *F);
194196

195197
/// Compute a bonus for replacing argument \p A with constant \p C.
196-
Cost getSpecializationBonus(Argument *A, Constant *C, const LoopInfo &LI);
198+
Cost getSpecializationBonus(Argument *A, Constant *C);
197199

198200
/// Determine if it is possible to specialise the function for constant values
199201
/// of the formal parameter \p A.

llvm/include/llvm/Transforms/Utils/SCCPSolver.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ struct AnalysisResultsForFn {
4444
std::unique_ptr<PredicateInfo> PredInfo;
4545
DominatorTree *DT;
4646
PostDominatorTree *PDT;
47-
LoopInfo *LI;
4847
};
4948

5049
/// Helper struct shared between Function Specialization and SCCP Solver.
@@ -91,8 +90,6 @@ class SCCPSolver {
9190

9291
const PredicateBase *getPredicateInfoFor(Instruction *I);
9392

94-
const LoopInfo &getLoopInfo(Function &F);
95-
9693
DomTreeUpdater getDTU(Function &F);
9794

9895
/// trackValueOfGlobalVariable - Clients can use this method to

llvm/lib/Transforms/IPO/FunctionSpecialization.cpp

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
#include "llvm/ADT/Statistic.h"
5050
#include "llvm/Analysis/CodeMetrics.h"
5151
#include "llvm/Analysis/InlineCost.h"
52-
#include "llvm/Analysis/LoopInfo.h"
5352
#include "llvm/Analysis/TargetTransformInfo.h"
5453
#include "llvm/Analysis/ValueLattice.h"
5554
#include "llvm/Analysis/ValueLatticeUtils.h"
@@ -82,10 +81,6 @@ static cl::opt<unsigned> MinFunctionSize(
8281
"Don't specialize functions that have less than this number of "
8382
"instructions"));
8483

85-
static cl::opt<unsigned> AvgLoopIters(
86-
"funcspec-avg-loop-iters", cl::init(10), cl::Hidden, cl::desc(
87-
"Average loop iteration count"));
88-
8984
static cl::opt<bool> SpecializeOnAddress(
9085
"funcspec-on-address", cl::init(false), cl::Hidden, cl::desc(
9186
"Enable function specialization on the address of global values"));
@@ -502,8 +497,7 @@ bool FunctionSpecializer::findSpecializations(Function *F, Cost SpecCost,
502497
// Calculate the specialisation gain.
503498
Cost Score = 0 - SpecCost;
504499
for (ArgInfo &A : S.Args)
505-
Score +=
506-
getSpecializationBonus(A.Formal, A.Actual, Solver.getLoopInfo(*F));
500+
Score += getSpecializationBonus(A.Formal, A.Actual);
507501

508502
// Discard unprofitable specialisations.
509503
if (!ForceSpecialization && Score <= 0)
@@ -594,41 +588,42 @@ Cost FunctionSpecializer::getSpecializationCost(Function *F) {
594588
}
595589

596590
static Cost getUserBonus(User *U, TargetTransformInfo &TTI,
597-
const LoopInfo &LI) {
591+
BlockFrequencyInfo &BFI) {
598592
auto *I = dyn_cast_or_null<Instruction>(U);
599593
// If not an instruction we do not know how to evaluate.
600594
// Keep minimum possible cost for now so that it doesnt affect
601595
// specialization.
602596
if (!I)
603-
return std::numeric_limits<unsigned>::min();
597+
return 0;
604598

605-
Cost Bonus =
606-
TTI.getInstructionCost(U, TargetTransformInfo::TCK_SizeAndLatency);
599+
uint64_t Weight = BFI.getBlockFreq(I->getParent()).getFrequency() /
600+
BFI.getEntryFreq();
601+
if (!Weight)
602+
return 0;
607603

608-
// Increase the cost if it is inside the loop.
609-
unsigned LoopDepth = LI.getLoopDepth(I->getParent());
610-
Bonus *= std::pow((double)AvgLoopIters, LoopDepth);
604+
Cost Bonus = Weight *
605+
TTI.getInstructionCost(U, TargetTransformInfo::TCK_SizeAndLatency);
611606

612607
// Traverse recursively if there are more uses.
613608
// TODO: Any other instructions to be added here?
614609
if (I->mayReadFromMemory() || I->isCast())
615610
for (auto *User : I->users())
616-
Bonus += getUserBonus(User, TTI, LI);
611+
Bonus += getUserBonus(User, TTI, BFI);
617612

618613
return Bonus;
619614
}
620615

621616
/// Compute a bonus for replacing argument \p A with constant \p C.
622-
Cost FunctionSpecializer::getSpecializationBonus(Argument *A, Constant *C,
623-
const LoopInfo &LI) {
617+
Cost FunctionSpecializer::getSpecializationBonus(Argument *A, Constant *C) {
624618
Function *F = A->getParent();
625619
auto &TTI = (GetTTI)(*F);
620+
auto &BFI = (GetBFI)(*F);
626621
LLVM_DEBUG(dbgs() << "FnSpecialization: Analysing bonus for constant: "
627622
<< C->getNameOrAsOperand() << "\n");
628623

629624
Cost TotalCost = 0;
630625
for (auto *U : A->users()) {
631-
TotalCost += getUserBonus(U, TTI, LI);
626+
TotalCost += getUserBonus(U, TTI, BFI);
632627
LLVM_DEBUG(dbgs() << "FnSpecialization: User cost ";
633628
TotalCost.print(dbgs()); dbgs() << " for: " << *U << "\n");
634629
}

llvm/lib/Transforms/IPO/SCCP.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "llvm/Transforms/IPO/SCCP.h"
1414
#include "llvm/ADT/SetVector.h"
1515
#include "llvm/Analysis/AssumptionCache.h"
16-
#include "llvm/Analysis/LoopInfo.h"
16+
#include "llvm/Analysis/BlockFrequencyInfo.h"
1717
#include "llvm/Analysis/PostDominators.h"
1818
#include "llvm/Analysis/TargetLibraryInfo.h"
1919
#include "llvm/Analysis/TargetTransformInfo.h"
@@ -107,13 +107,15 @@ static void findReturnsToZap(Function &F,
107107

108108
static bool runIPSCCP(
109109
Module &M, const DataLayout &DL, FunctionAnalysisManager *FAM,
110+
std::function<BlockFrequencyInfo &(Function &)> GetBFI,
110111
std::function<const TargetLibraryInfo &(Function &)> GetTLI,
111112
std::function<TargetTransformInfo &(Function &)> GetTTI,
112113
std::function<AssumptionCache &(Function &)> GetAC,
113114
function_ref<AnalysisResultsForFn(Function &)> getAnalysis,
114115
bool IsFuncSpecEnabled) {
115116
SCCPSolver Solver(DL, GetTLI, M.getContext());
116-
FunctionSpecializer Specializer(Solver, M, FAM, GetTLI, GetTTI, GetAC);
117+
FunctionSpecializer Specializer(Solver, M, FAM, GetBFI, GetTLI, GetTTI,
118+
GetAC);
117119

118120
// Loop over all functions, marking arguments to those with their addresses
119121
// taken or that are external as overdefined.
@@ -381,6 +383,9 @@ PreservedAnalyses IPSCCPPass::run(Module &M, ModuleAnalysisManager &AM) {
381383
auto GetTLI = [&FAM](Function &F) -> const TargetLibraryInfo & {
382384
return FAM.getResult<TargetLibraryAnalysis>(F);
383385
};
386+
auto GetBFI = [&](Function &F) -> BlockFrequencyInfo & {
387+
return FAM.getResult<BlockFrequencyAnalysis>(F);
388+
};
384389
auto GetTTI = [&FAM](Function &F) -> TargetTransformInfo & {
385390
return FAM.getResult<TargetIRAnalysis>(F);
386391
};
@@ -391,11 +396,10 @@ PreservedAnalyses IPSCCPPass::run(Module &M, ModuleAnalysisManager &AM) {
391396
DominatorTree &DT = FAM.getResult<DominatorTreeAnalysis>(F);
392397
return {
393398
std::make_unique<PredicateInfo>(F, DT, FAM.getResult<AssumptionAnalysis>(F)),
394-
&DT, FAM.getCachedResult<PostDominatorTreeAnalysis>(F),
395-
isFuncSpecEnabled() ? &FAM.getResult<LoopAnalysis>(F) : nullptr };
399+
&DT, FAM.getCachedResult<PostDominatorTreeAnalysis>(F) };
396400
};
397401

398-
if (!runIPSCCP(M, DL, &FAM, GetTLI, GetTTI, GetAC, getAnalysis,
402+
if (!runIPSCCP(M, DL, &FAM, GetBFI, GetTLI, GetTTI, GetAC, getAnalysis,
399403
isFuncSpecEnabled()))
400404
return PreservedAnalyses::all();
401405

llvm/lib/Transforms/Utils/SCCPSolver.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -664,13 +664,6 @@ class SCCPInstVisitor : public InstVisitor<SCCPInstVisitor> {
664664
return A->second.PredInfo->getPredicateInfoFor(I);
665665
}
666666

667-
const LoopInfo &getLoopInfo(Function &F) {
668-
auto A = AnalysisResults.find(&F);
669-
assert(A != AnalysisResults.end() && A->second.LI &&
670-
"Need LoopInfo analysis results for function.");
671-
return *A->second.LI;
672-
}
673-
674667
DomTreeUpdater getDTU(Function &F) {
675668
auto A = AnalysisResults.find(&F);
676669
assert(A != AnalysisResults.end() && "Need analysis results for function.");
@@ -1962,10 +1955,6 @@ const PredicateBase *SCCPSolver::getPredicateInfoFor(Instruction *I) {
19621955
return Visitor->getPredicateInfoFor(I);
19631956
}
19641957

1965-
const LoopInfo &SCCPSolver::getLoopInfo(Function &F) {
1966-
return Visitor->getLoopInfo(F);
1967-
}
1968-
19691958
DomTreeUpdater SCCPSolver::getDTU(Function &F) { return Visitor->getDTU(F); }
19701959

19711960
void SCCPSolver::trackValueOfGlobalVariable(GlobalVariable *GV) {

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

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,83 +9,83 @@
99

1010
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
1111
; RUN: -passes='default<O1>' -S %s 2>&1 \
12-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O1,%llvmcheckext
12+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O1,%llvmcheckext
1313
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
1414
; RUN: -passes='default<O2>' -S %s 2>&1 \
15-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O2,CHECK-O23SZ,%llvmcheckext
15+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O2,CHECK-O23SZ,%llvmcheckext
1616
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
1717
; RUN: -passes='default<O3>' -S %s 2>&1 \
18-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,CHECK-O23SZ,%llvmcheckext
18+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23SZ,%llvmcheckext
1919
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
2020
; RUN: -passes='default<Os>' -S %s 2>&1 \
21-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-NO-FUNC-SPEC,CHECK-Os,CHECK-O23SZ,%llvmcheckext
21+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-Os,CHECK-O23SZ,%llvmcheckext
2222
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
2323
; RUN: -passes='default<Oz>' -S %s 2>&1 \
24-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-NO-FUNC-SPEC,CHECK-Oz,CHECK-O23SZ,%llvmcheckext
24+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-Oz,CHECK-O23SZ,%llvmcheckext
2525
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
2626
; RUN: -passes='lto-pre-link<O2>' -S %s 2>&1 \
27-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-LTO,CHECK-NO-FUNC-SPEC,CHECK-O2,CHECK-O23SZ,%llvmcheckext
27+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-LTO,CHECK-O2,CHECK-O23SZ,%llvmcheckext
2828

2929
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
3030
; RUN: -passes-ep-peephole='no-op-function' \
3131
; RUN: -passes='default<O3>' -S %s 2>&1 \
32-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-PEEPHOLE,CHECK-O23SZ
32+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-PEEPHOLE,CHECK-O23SZ
3333
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
3434
; RUN: -passes-ep-late-loop-optimizations='no-op-loop' \
3535
; RUN: -passes='default<O3>' -S %s 2>&1 \
36-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-LOOP-LATE,CHECK-O23SZ
36+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-LOOP-LATE,CHECK-O23SZ
3737
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
3838
; RUN: -passes-ep-loop-optimizer-end='no-op-loop' \
3939
; RUN: -passes='default<O3>' -S %s 2>&1 \
40-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-LOOP-END,CHECK-O23SZ
40+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-LOOP-END,CHECK-O23SZ
4141
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
4242
; RUN: -passes-ep-scalar-optimizer-late='no-op-function' \
4343
; RUN: -passes='default<O3>' -S %s 2>&1 \
44-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-SCALAR-LATE,CHECK-O23SZ
44+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-SCALAR-LATE,CHECK-O23SZ
4545
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
4646
; RUN: -passes-ep-cgscc-optimizer-late='no-op-cgscc' \
4747
; RUN: -passes='default<O3>' -S %s 2>&1 \
48-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-CGSCC-LATE,CHECK-O23SZ
48+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-CGSCC-LATE,CHECK-O23SZ
4949
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
5050
; RUN: -passes-ep-vectorizer-start='no-op-function' \
5151
; RUN: -passes='default<O3>' -S %s 2>&1 \
52-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-VECTORIZER-START,CHECK-O23SZ
52+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-VECTORIZER-START,CHECK-O23SZ
5353
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
5454
; RUN: -passes-ep-pipeline-start='no-op-module' \
5555
; RUN: -passes='default<O3>' -S %s 2>&1 \
56-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-START,CHECK-O23SZ
56+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-START,CHECK-O23SZ
5757
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
5858
; RUN: -passes-ep-pipeline-early-simplification='no-op-module' \
5959
; RUN: -passes='default<O3>' -S %s 2>&1 \
60-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-EARLY-SIMPLIFICATION,CHECK-O23SZ
60+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-EARLY-SIMPLIFICATION,CHECK-O23SZ
6161
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
6262
; RUN: -passes-ep-pipeline-start='no-op-module' \
6363
; RUN: -passes='lto-pre-link<O3>' -S %s 2>&1 \
64-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-LTO,CHECK-NO-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-START,CHECK-O23SZ
64+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-LTO,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-START,CHECK-O23SZ
6565
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
6666
; RUN: -passes-ep-optimizer-early='no-op-module' \
6767
; RUN: -passes='default<O3>' -S %s 2>&1 \
68-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-OPTIMIZER-EARLY,CHECK-O23SZ
68+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-OPTIMIZER-EARLY,CHECK-O23SZ
6969
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
7070
; RUN: -passes-ep-optimizer-last='no-op-module' \
7171
; RUN: -passes='default<O3>' -S %s 2>&1 \
72-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,%llvmcheckext,CHECK-EP-OPTIMIZER-LAST,CHECK-O23SZ
72+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-OPTIMIZER-LAST,CHECK-O23SZ
7373

7474
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
7575
; RUN: -passes='default<O3>' -enable-matrix -S %s 2>&1 \
76-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-MATRIX
76+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-MATRIX
7777

7878
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
7979
; RUN: -passes='default<O3>' -enable-merge-functions -S %s 2>&1 \
80-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-MERGE-FUNCS
80+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-MERGE-FUNCS
8181

8282
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
8383
; RUN: -passes='default<O3>' -ir-outliner -S %s 2>&1 \
84-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-IR-OUTLINER
84+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-IR-OUTLINER
8585

8686
; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \
8787
; RUN: -passes='default<O3>' -hot-cold-split -S %s 2>&1 \
88-
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-FUNC-SPEC,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-HOT-COLD-SPLIT
88+
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23SZ,%llvmcheckext,CHECK-HOT-COLD-SPLIT
8989

9090
; Suppress FileCheck --allow-unused-prefixes=false diagnostics.
9191
; CHECK-Oz: {{^}}
@@ -109,7 +109,6 @@
109109
; CHECK-O-NEXT: Running pass: OpenMPOptPass
110110
; CHECK-EP-PIPELINE-EARLY-SIMPLIFICATION-NEXT: Running pass: NoOpModulePass
111111
; CHECK-O-NEXT: Running pass: IPSCCPPass
112-
; CHECK-FUNC-SPEC-NEXT: Running analysis: LoopAnalysis
113112
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
114113
; CHECK-O-NEXT: Running pass: GlobalOptPass
115114
; CHECK-O-NEXT: Running pass: PromotePass
@@ -164,7 +163,7 @@
164163
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
165164
; CHECK-O-NEXT: Running pass: ReassociatePass
166165
; CHECK-O-NEXT: Running pass: LoopSimplifyPass
167-
; CHECK-NO-FUNC-SPEC-NEXT: Running analysis: LoopAnalysis
166+
; CHECK-O-NEXT: Running analysis: LoopAnalysis
168167
; CHECK-O-NEXT: Running pass: LCSSAPass
169168
; CHECK-O-NEXT: Running analysis: ScalarEvolutionAnalysis
170169
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy

0 commit comments

Comments
 (0)