153 cl::desc(
"Enable ML policy for inliner. Currently trained for -Oz only"),
155 "Heuristics-based inliner version"),
157 "Use development mode (runtime-loadable model)"),
159 "Use release mode (AOT-compiled model)")));
165 cl::desc(
"Enable inline deferral during PGO"));
173 cl::desc(
"Perform mandatory inlinings module-wide, before performing "
178 cl::desc(
"Eagerly invalidate more analyses in default pipelines"));
182 cl::desc(
"Enable function merging as part of the optimization pipeline"));
186 cl::desc(
"Run the loop rotation transformation after PGO instrumentation"));
190 cl::desc(
"Enable inter-procedural analyses"));
194 cl::desc(
"Run Partial inlining pass"));
198 cl::desc(
"Run cleanup optimization passes after vectorization"));
205 cl::desc(
"Enable the LoopInterchange Pass"));
209 cl::desc(
"Enable Unroll And Jam Pass"));
213 cl::desc(
"Enable the LoopFlatten Pass"));
222 cl::desc(
"Enable loop header duplication at any optimization level"));
226 cl::desc(
"Enable DFA jump threading"),
231 cl::desc(
"Enable hot-cold splitting pass"));
235 cl::desc(
"Enable ir outliner pass"));
239 cl::desc(
"Disable pre-instrumentation inliner"));
243 cl::desc(
"Control the amount of inlining in pre-instrumentation inliner "
248 cl::desc(
"Enable the GVN hoisting pass (default = off)"));
252 cl::desc(
"Enable the GVN sinking pass (default = off)"));
255 "enable-jump-table-to-switch",
256 cl::desc(
"Enable JumpTableToSwitch pass (default = off)"));
262 cl::desc(
"Enable control height reduction optimization (CHR)"));
266 cl::desc(
"Indicate the sample profile being used is flattened, i.e., "
267 "no inline hierarchy exists in the profile"));
271 cl::desc(
"Enable lowering of the matrix intrinsics"));
276 "Enable pass to eliminate conditions based on linear constraints"));
280 cl::desc(
"Enable the attributor inter-procedural deduction pass"),
282 "enable all attributor runs"),
284 "enable module-wide attributor runs"),
286 "enable call graph SCC attributor runs"),
288 "disable attributor runs")));
292 cl::desc(
"Enable profile instrumentation sampling (default = off)"));
295 cl::desc(
"Enable the experimental Loop Versioning LICM pass"));
298 "instrument-cold-function-only-path",
cl::init(
""),
299 cl::desc(
"File path for cold function only instrumentation(requires use "
300 "with --pgo-instrument-cold-function-only)"),
332 for (
auto &
C : PeepholeEPCallbacks)
337 for (
auto &
C : LateLoopOptimizationsEPCallbacks)
342 for (
auto &
C : LoopOptimizerEndEPCallbacks)
347 for (
auto &
C : ScalarOptimizerLateEPCallbacks)
352 for (
auto &
C : CGSCCOptimizerLateEPCallbacks)
357 for (
auto &
C : VectorizerStartEPCallbacks)
362 for (
auto &
C : VectorizerEndEPCallbacks)
368 for (
auto &
C : OptimizerEarlyEPCallbacks)
374 for (
auto &
C : OptimizerLastEPCallbacks)
379 for (
auto &
C : FullLinkTimeOptimizationEarlyEPCallbacks)
384 for (
auto &
C : FullLinkTimeOptimizationLastEPCallbacks)
389 for (
auto &
C : PipelineStartEPCallbacks)
394 for (
auto &
C : PipelineEarlySimplificationEPCallbacks)
436 FPM.
addPass(CountVisitsPass());
443 FPM.
addPass(EarlyCSEPass(
true ));
447 SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(
true)));
448 FPM.
addPass(InstCombinePass());
450 FPM.
addPass(LibCallsShrinkWrapPass());
455 SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(
true)));
460 FPM.
addPass(ReassociatePass());
476 LPM1.addPass(LoopInstSimplifyPass());
477 LPM1.addPass(LoopSimplifyCFGPass());
485 LPM1.addPass(LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
488 LPM1.addPass(LoopRotatePass(
true,
491 LPM1.addPass(LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
493 LPM1.addPass(SimpleLoopUnswitchPass());
495 LPM1.addPass(LoopFlattenPass());
497 LPM2.addPass(LoopIdiomRecognizePass());
498 LPM2.addPass(IndVarSimplifyPass());
502 LPM2.addPass(LoopDeletionPass());
511 LPM2.addPass(LoopFullUnrollPass(
Level.getSpeedupLevel(),
513 PTO.ForgetAllSCEVInLoopUnroll));
521 SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(
true)));
522 FPM.
addPass(InstCombinePass());
547 FPM.
addPass(InstCombinePass());
559 SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(
true)));
560 FPM.
addPass(InstCombinePass());
573 if (Level.getSpeedupLevel() == 1)
574 return buildO1FunctionSimplificationPipeline(Level,
Phase);
617 if (!Level.isOptimizingForSize())
625 !Level.isOptimizingForSize())
629 isInstrumentedPGOUse()));
664 LPM1.addPass(
LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
672 LPM1.addPass(
LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
686 LPM2.addPass(std::move(ExtraPasses));
702 PTO.ForgetAllSCEVInLoopUnroll));
768 LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
777 .convertSwitchRangeToICmp(
true)
778 .hoistCommonInsts(
true)
779 .sinkCommonInsts(
true)));
814 FPM.
addPass(SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(
816 FPM.
addPass(InstCombinePass());
820 std::move(FPM), PTO.EagerlyInvalidateAnalyses));
840 PTO.EagerlyInvalidateAnalyses));
846 bool IsCS,
bool AtomicCounterUpdate,
847 std::string ProfileFile,
848 std::string ProfileRemappingFile,
852 if (!RunProfileGen) {
853 assert(!ProfileFile.empty() &&
"Profile use expecting a profile file!");
855 PGOInstrumentationUse(ProfileFile, ProfileRemappingFile, IsCS, FS));
858 MPM.
addPass(RequireAnalysisPass<ProfileSummaryAnalysis, Module>());
866 addPostPGOLoopRotation(MPM, Level);
869 if (!ProfileFile.empty())
870 Options.InstrProfileOutput = ProfileFile;
872 Options.DoCounterPromotion =
true;
873 Options.UseBFIInPromotion = IsCS;
878 Options.DoCounterPromotion =
false;
880 Options.Atomic = AtomicCounterUpdate;
886 bool AtomicCounterUpdate, std::string ProfileFile,
888 if (!RunProfileGen) {
889 assert(!ProfileFile.empty() &&
"Profile use expecting a profile file!");
903 if (!ProfileFile.empty())
904 Options.InstrProfileOutput = ProfileFile;
906 Options.DoCounterPromotion =
false;
907 Options.UseBFIInPromotion = IsCS;
908 Options.Atomic = AtomicCounterUpdate;
920 if (PTO.InlinerThreshold == -1)
991 PTO.EagerlyInvalidateAnalyses,
true));
1051 PTO.EagerlyInvalidateAnalyses));
1067 "Should not be used for O0 pipeline");
1070 "FullLTOPostLink shouldn't call buildModuleSimplificationPipeline!");
1076 if (PGOOpt && PGOOpt->PseudoProbeForProfiling &&
1085 bool LoadSampleProfile =
1127 std::move(EarlyFPM), PTO.EagerlyInvalidateAnalyses));
1130 if (LoadSampleProfile) {
1134 PGOOpt->ProfileRemappingFile,
Phase));
1192 PTO.EagerlyInvalidateAnalyses));
1197 const bool IsCtxProfGen =
1199 const bool IsPGOPreLink = !IsCtxProfGen && PGOOpt && IsPreLink;
1200 const bool IsPGOInstrGen =
1202 const bool IsPGOInstrUse =
1204 const bool IsMemprofUse = IsPGOPreLink && !PGOOpt->MemoryProfile.empty();
1208 "Enabling both instrumented PGO and contextual instrumentation is not "
1210 const bool IsCtxProfUse =
1215 "--instrument-cold-function-only-path is provided but "
1216 "--pgo-instrument-cold-function-only is not enabled");
1221 if (IsPGOInstrGen || IsPGOInstrUse || IsMemprofUse || IsCtxProfGen ||
1222 IsCtxProfUse || IsColdFuncOnlyInstrGen)
1223 addPreInlinerPasses(MPM, Level,
Phase);
1226 if (IsPGOInstrGen || IsPGOInstrUse) {
1227 addPGOInstrPasses(MPM, Level,
1229 false, PGOOpt->AtomicCounterUpdate,
1230 PGOOpt->ProfileFile, PGOOpt->ProfileRemappingFile,
1232 }
else if (IsCtxProfGen || IsCtxProfUse) {
1251 addPostPGOLoopRotation(MPM, Level);
1253 }
else if (IsColdFuncOnlyInstrGen) {
1255 MPM, Level,
true,
false,
1260 if (IsPGOInstrGen || IsPGOInstrUse || IsCtxProfGen)
1336 FPM.
addPass(InstCombinePass());
1339 ExtraFunctionPassManager<ShouldRunExtraVectorPasses> ExtraPasses;
1346 ExtraPasses.
addPass(EarlyCSEPass());
1347 ExtraPasses.
addPass(CorrelatedValuePropagationPass());
1348 ExtraPasses.
addPass(InstCombinePass());
1350 LPM.addPass(LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
1352 LPM.addPass(SimpleLoopUnswitchPass( Level ==
1358 SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(
true)));
1359 ExtraPasses.
addPass(InstCombinePass());
1360 FPM.
addPass(std::move(ExtraPasses));
1372 FPM.
addPass(SimplifyCFGPass(SimplifyCFGOptions()
1373 .forwardSwitchCondToPhi(
true)
1374 .convertSwitchRangeToICmp(
true)
1375 .convertSwitchToLookupTable(
true)
1376 .needCanonicalLoops(
false)
1377 .hoistCommonInsts(
true)
1378 .sinkCommonInsts(
true)));
1382 FPM.
addPass(InstCombinePass());
1387 if (PTO.SLPVectorization) {
1388 FPM.
addPass(SLPVectorizerPass());
1394 FPM.
addPass(VectorCombinePass());
1397 FPM.
addPass(InstCombinePass());
1407 LoopUnrollAndJamPass(
Level.getSpeedupLevel())));
1409 FPM.
addPass(LoopUnrollPass(LoopUnrollOptions(
1410 Level.getSpeedupLevel(), !PTO.LoopUnrolling,
1411 PTO.ForgetAllSCEVInLoopUnroll)));
1412 FPM.
addPass(WarnMissedTransformationsPass());
1422 FPM.
addPass(InferAlignmentPass());
1423 FPM.
addPass(InstCombinePass());
1432 LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
1438 FPM.
addPass(AlignmentFromAssumptionsPass());
1473 if (!LTOPreLink && PGOOpt) {
1475 addPGOInstrPasses(MPM, Level,
true,
1476 true, PGOOpt->AtomicCounterUpdate,
1477 PGOOpt->CSProfileGenFile, PGOOpt->ProfileRemappingFile,
1480 addPGOInstrPasses(MPM, Level,
false,
1481 true, PGOOpt->AtomicCounterUpdate,
1482 PGOOpt->ProfileFile, PGOOpt->ProfileRemappingFile,
1509 LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
1548 if (PTO.LoopInterchange)
1552 std::move(LPM),
false,
false));
1564 addVectorPasses(Level, OptimizePM,
false);
1590 .convertSwitchRangeToICmp(
true)
1591 .speculateUnpredictables(
true)
1592 .hoistLoadsStoresWithCondFaulting(
true)));
1596 PTO.EagerlyInvalidateAnalyses));
1622 if (PTO.MergeFunctions)
1625 if (PTO.CallGraphProfile && !LTOPreLink)
1649 if (PGOOpt && PGOOpt->DebugInfoForProfiling)
1661 if (PGOOpt && PGOOpt->PseudoProbeForProfiling &&
1669 addRequiredLTOPreLinkPasses(MPM);
1735 if (PGOOpt && PGOOpt->DebugInfoForProfiling)
1750 addRequiredLTOPreLinkPasses(MPM);
1764 if (PGOOpt && PGOOpt->PseudoProbeForProfiling &&
1779 addRequiredLTOPreLinkPasses(MPM);
1788 if (ImportSummary) {
1885 PGOOpt->ProfileRemappingFile,
1903 if (Level.getSpeedupLevel() > 1) {
1990 if (Level.getSpeedupLevel() > 1)
1995 PTO.EagerlyInvalidateAnalyses));
2056 addPGOInstrPasses(MPM, Level,
true,
2057 true, PGOOpt->AtomicCounterUpdate,
2058 PGOOpt->CSProfileGenFile, PGOOpt->ProfileRemappingFile,
2061 addPGOInstrPasses(MPM, Level,
false,
2062 true, PGOOpt->AtomicCounterUpdate,
2063 PGOOpt->ProfileFile, PGOOpt->ProfileRemappingFile,
2077 PTO.EagerlyInvalidateAnalyses));
2094 LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
2123 PTO.ForgetAllSCEVInLoopUnroll));
2127 std::move(LPM),
false,
true));
2131 addVectorPasses(Level, MainFPM,
true);
2142 PTO.EagerlyInvalidateAnalyses));
2174 .convertSwitchRangeToICmp(
true)
2175 .hoistCommonInsts(
true)
2176 .speculateUnpredictables(
true)));
2185 if (PTO.MergeFunctions)
2190 if (PTO.CallGraphProfile)
2207 "buildO0DefaultPipeline should only be used with O0");
2215 if (PGOOpt && PGOOpt->PseudoProbeForProfiling)
2223 false, PGOOpt->AtomicCounterUpdate, PGOOpt->ProfileFile,
2224 PGOOpt->ProfileRemappingFile, PGOOpt->FS);
2232 if (PGOOpt && PGOOpt->DebugInfoForProfiling)
2239 PGOOpt->ProfileRemappingFile,
2257 if (PTO.MergeFunctions)
2264 if (!CGSCCOptimizerLateEPCallbacks.empty()) {
2270 if (!LateLoopOptimizationsEPCallbacks.empty()) {
2273 if (!LPM.isEmpty()) {
2278 if (!LoopOptimizerEndEPCallbacks.empty()) {
2281 if (!LPM.isEmpty()) {
2286 if (!ScalarOptimizerLateEPCallbacks.empty()) {
2295 if (!VectorizerStartEPCallbacks.empty()) {
2302 if (!VectorizerEndEPCallbacks.empty()) {
2314 addRequiredLTOPreLinkPasses(MPM);
2329 TM->registerEarlyDefaultAliasAnalyses(
AA);
2350 TM->registerDefaultAliasAnalyses(
AA);
2355bool PassBuilder::isInstrumentedPGOUse()
const {
aarch64 falkor hwpf fix Falkor HW Prefetch Fix Late Phase
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
AggressiveInstCombiner - Combine expression patterns to form expressions with fewer,...
Provides passes to inlining "always_inline" functions.
This is the interface for LLVM's primary stateless and local alias analysis.
This file provides the interface for LLVM's Call Graph Profile pass.
This header provides classes for managing passes over SCCs of the call graph.
#define clEnumValN(ENUMVAL, FLAGNAME, DESC)
cl::opt< std::string > UseCtxProfile("use-ctx-profile", cl::init(""), cl::Hidden, cl::desc("Use the specified contextual profile file"))
This file provides the interface for a simple, fast CSE pass.
This file provides a pass which clones the current module and runs the provided pass pipeline on the ...
Super simple passes to force specific function attrs from the commandline into the IR for debugging p...
Provides passes for computing function attributes based on interprocedural analyses.
This file provides the interface for LLVM's Global Value Numbering pass which eliminates fully redund...
This is the interface for a simple mod/ref and alias analysis over globals.
AcceleratorCodeSelection - Identify all functions reachable from a kernel, removing those that are un...
This header defines various interfaces for pass management in LLVM.
Interfaces for passes which infer implicit function attributes from the name and signature of functio...
This file provides the primary interface to the instcombine pass.
Defines passes for running instruction simplification across chunks of IR.
This file provides the interface for LLVM's PGO Instrumentation lowering pass.
See the comments on JumpThreadingPass.
This header defines the LoopLoadEliminationPass object.
This header provides classes for managing a pipeline of passes over loops in LLVM IR.
The header file for the LowerConstantIntrinsics pass as used by the new pass manager.
The header file for the LowerExpectIntrinsic pass as used by the new pass manager.
This pass performs merges of loads and stores on both sides of a.
This file provides the interface for LLVM's Global Value Numbering pass.
This header enumerates the LLVM-provided high-level optimization levels.
This file provides the interface for IR based instrumentation passes ( (profile-gen,...
Define option tunables for PGO.
static cl::opt< bool > EnableMergeFunctions("enable-merge-functions", cl::init(false), cl::Hidden, cl::desc("Enable function merging as part of the optimization pipeline"))
static cl::opt< bool > EnableGlobalAnalyses("enable-global-analyses", cl::init(true), cl::Hidden, cl::desc("Enable inter-procedural analyses"))
static cl::opt< bool > EnableIROutliner("ir-outliner", cl::init(false), cl::Hidden, cl::desc("Enable ir outliner pass"))
static cl::opt< bool > RunNewGVN("enable-newgvn", cl::init(false), cl::Hidden, cl::desc("Run the NewGVN pass"))
static cl::opt< bool > DisablePreInliner("disable-preinline", cl::init(false), cl::Hidden, cl::desc("Disable pre-instrumentation inliner"))
static cl::opt< bool > EnableEagerlyInvalidateAnalyses("eagerly-invalidate-analyses", cl::init(true), cl::Hidden, cl::desc("Eagerly invalidate more analyses in default pipelines"))
static cl::opt< bool > ExtraVectorizerPasses("extra-vectorizer-passes", cl::init(false), cl::Hidden, cl::desc("Run cleanup optimization passes after vectorization"))
static void addAnnotationRemarksPass(ModulePassManager &MPM)
static cl::opt< bool > EnablePostPGOLoopRotation("enable-post-pgo-loop-rotation", cl::init(true), cl::Hidden, cl::desc("Run the loop rotation transformation after PGO instrumentation"))
static InlineParams getInlineParamsFromOptLevel(OptimizationLevel Level)
static cl::opt< bool > EnableGVNSink("enable-gvn-sink", cl::desc("Enable the GVN sinking pass (default = off)"))
static cl::opt< bool > PerformMandatoryInliningsFirst("mandatory-inlining-first", cl::init(false), cl::Hidden, cl::desc("Perform mandatory inlinings module-wide, before performing " "inlining"))
static cl::opt< bool > EnableLoopInterchange("enable-loopinterchange", cl::init(false), cl::Hidden, cl::desc("Enable the LoopInterchange Pass"))
static cl::opt< bool > EnableGVNHoist("enable-gvn-hoist", cl::desc("Enable the GVN hoisting pass (default = off)"))
static cl::opt< bool > RunPartialInlining("enable-partial-inlining", cl::init(false), cl::Hidden, cl::desc("Run Partial inlining pass"))
static cl::opt< bool > EnableDFAJumpThreading("enable-dfa-jump-thread", cl::desc("Enable DFA jump threading"), cl::init(false), cl::Hidden)
static cl::opt< bool > EnableCHR("enable-chr", cl::init(true), cl::Hidden, cl::desc("Enable control height reduction optimization (CHR)"))
static CoroConditionalWrapper buildCoroWrapper(ThinOrFullLTOPhase Phase)
static cl::opt< bool > EnableHotColdSplit("hot-cold-split", cl::desc("Enable hot-cold splitting pass"))
static cl::opt< bool > EnableSampledInstr("enable-sampled-instrumentation", cl::init(false), cl::Hidden, cl::desc("Enable profile instrumentation sampling (default = off)"))
static cl::opt< int > PreInlineThreshold("preinline-threshold", cl::Hidden, cl::init(75), cl::desc("Control the amount of inlining in pre-instrumentation inliner " "(default = 75)"))
static cl::opt< bool > FlattenedProfileUsed("flattened-profile-used", cl::init(false), cl::Hidden, cl::desc("Indicate the sample profile being used is flattened, i.e., " "no inline hierarchy exists in the profile"))
static cl::opt< bool > EnableLoopHeaderDuplication("enable-loop-header-duplication", cl::init(false), cl::Hidden, cl::desc("Enable loop header duplication at any optimization level"))
static cl::opt< bool > EnableUnrollAndJam("enable-unroll-and-jam", cl::init(false), cl::Hidden, cl::desc("Enable Unroll And Jam Pass"))
static cl::opt< std::string > InstrumentColdFuncOnlyPath("instrument-cold-function-only-path", cl::init(""), cl::desc("File path for cold function only instrumentation(requires use " "with --pgo-instrument-cold-function-only)"), cl::Hidden)
cl::opt< bool > PGOInstrumentColdFunctionOnly
static cl::opt< bool > EnableModuleInliner("enable-module-inliner", cl::init(false), cl::Hidden, cl::desc("Enable module inliner"))
static cl::opt< bool > EnableMatrix("enable-matrix", cl::init(false), cl::Hidden, cl::desc("Enable lowering of the matrix intrinsics"))
static cl::opt< AttributorRunOption > AttributorRun("attributor-enable", cl::Hidden, cl::init(AttributorRunOption::NONE), cl::desc("Enable the attributor inter-procedural deduction pass"), cl::values(clEnumValN(AttributorRunOption::ALL, "all", "enable all attributor runs"), clEnumValN(AttributorRunOption::MODULE, "module", "enable module-wide attributor runs"), clEnumValN(AttributorRunOption::CGSCC, "cgscc", "enable call graph SCC attributor runs"), clEnumValN(AttributorRunOption::NONE, "none", "disable attributor runs")))
static cl::opt< bool > UseLoopVersioningLICM("enable-loop-versioning-licm", cl::init(false), cl::Hidden, cl::desc("Enable the experimental Loop Versioning LICM pass"))
static bool isLTOPreLink(ThinOrFullLTOPhase Phase)
static cl::opt< bool > EnablePGOInlineDeferral("enable-npm-pgo-inline-deferral", cl::init(true), cl::Hidden, cl::desc("Enable inline deferral during PGO"))
Flag to enable inline deferral during PGO.
static cl::opt< bool > EnableJumpTableToSwitch("enable-jump-table-to-switch", cl::desc("Enable JumpTableToSwitch pass (default = off)"))
static cl::opt< InliningAdvisorMode > UseInlineAdvisor("enable-ml-inliner", cl::init(InliningAdvisorMode::Default), cl::Hidden, cl::desc("Enable ML policy for inliner. Currently trained for -Oz only"), cl::values(clEnumValN(InliningAdvisorMode::Default, "default", "Heuristics-based inliner version"), clEnumValN(InliningAdvisorMode::Development, "development", "Use development mode (runtime-loadable model)"), clEnumValN(InliningAdvisorMode::Release, "release", "Use release mode (AOT-compiled model)")))
static bool isLTOPostLink(ThinOrFullLTOPhase Phase)
static cl::opt< bool > EnableConstraintElimination("enable-constraint-elimination", cl::init(true), cl::Hidden, cl::desc("Enable pass to eliminate conditions based on linear constraints"))
static cl::opt< bool > EnableLoopFlatten("enable-loop-flatten", cl::init(false), cl::Hidden, cl::desc("Enable the LoopFlatten Pass"))
This file implements relative lookup table converter that converts lookup tables to relative lookup t...
This file provides the interface for LLVM's Scalar Replacement of Aggregates pass.
This file provides the interface for the pseudo probe implementation for AutoFDO.
This file provides the interface for the sampled PGO loader pass.
This is the interface for a metadata-based scoped no-alias analysis.
This file provides the interface for the pass responsible for both simplifying and canonicalizing the...
This file defines the 'Statistic' class, which is designed to be an easy way to expose various metric...
This is the interface for a metadata-based TBAA.
Defines the virtual file system interface vfs::FileSystem.
A manager for alias analyses.
Inlines functions marked as "always_inline".
Assign a GUID to functions as metadata.
Analysis pass providing a never-invalidated alias analysis result.
Simple pass that canonicalizes aliases.
A pass that merges duplicate global constants into a single constant.
This class implements a trivial dead store elimination.
Eliminate dead arguments (and return values) from functions.
A pass that transforms external global definitions into declarations.
Pass embeds a copy of the module optimized with the provided pass pipeline into a global variable.
The core GVN pass object.
Pass to remove unused function declarations.
Optimize globals that never have their address taken.
Pass to perform split of global variables.
Analysis pass providing a never-invalidated alias analysis result.
Pass to outline cold regions.
Pass to perform interprocedural constant propagation.
Pass to outline similar regions.
Run instruction simplification across each instruction in the function.
Instrumentation based profiling lowering pass.
A smart pointer to a reference-counted object that inherits from RefCountedBase or ThreadSafeRefCount...
This pass performs 'jump threading', which looks at blocks that have multiple predecessors and multip...
Performs Loop Invariant Code Motion Pass.
Loop unroll pass that only does full loop unrolling and peeling.
Performs Loop Idiom Recognize Pass.
Performs Loop Inst Simplify Pass.
A simple loop rotation transformation.
Performs basic CFG simplifications to assist other loop passes.
A pass that does profile-guided sinking of instructions into loops.
A simple loop rotation transformation.
Loop unroll pass that will support both full and partial unrolling.
Merge identical functions.
The module inliner pass for the new pass manager.
Module pass, wrapping the inliner pass.
void addModulePass(T Pass)
Add a module pass that runs before the CGSCC passes.
Class to hold module path string table and global value map, and encapsulate methods for operating on...
Simple pass that provides a name to every anonymous globals.
OpenMP optimizations pass.
static LLVM_ABI const OptimizationLevel O3
Optimize for fast execution as much as possible.
static LLVM_ABI const OptimizationLevel Oz
A very specialized mode that will optimize for code size at any and all costs.
static LLVM_ABI const OptimizationLevel O0
Disable as many optimizations as possible.
static LLVM_ABI const OptimizationLevel Os
Similar to O2 but tries to optimize for small code size instead of fast execution without triggering ...
static LLVM_ABI const OptimizationLevel O2
Optimize for fast execution as much as possible without triggering significant incremental compile ti...
static LLVM_ABI const OptimizationLevel O1
Optimize quickly without destroying debuggability.
static bool isCtxIRPGOInstrEnabled()
The instrumentation (profile-instr-gen) pass for IR based PGO.
The instrumentation (profile-instr-gen) pass for IR based PGO.
The profile annotation (profile-instr-use) pass for IR based PGO.
The profile size based optimization pass for memory intrinsics.
Pass to remove unused function declarations.
LLVM_ABI void invokeFullLinkTimeOptimizationLastEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level)
LLVM_ABI ModuleInlinerWrapperPass buildInlinerPipeline(OptimizationLevel Level, ThinOrFullLTOPhase Phase)
Construct the module pipeline that performs inlining as well as the inlining-driven cleanups.
LLVM_ABI void invokeOptimizerEarlyEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level, ThinOrFullLTOPhase Phase)
LLVM_ABI void invokeVectorizerStartEPCallbacks(FunctionPassManager &FPM, OptimizationLevel Level)
LLVM_ABI AAManager buildDefaultAAPipeline()
Build the default AAManager with the default alias analysis pipeline registered.
LLVM_ABI void invokeCGSCCOptimizerLateEPCallbacks(CGSCCPassManager &CGPM, OptimizationLevel Level)
LLVM_ABI ModulePassManager buildThinLTOPreLinkDefaultPipeline(OptimizationLevel Level)
Build a pre-link, ThinLTO-targeting default optimization pipeline to a pass manager.
LLVM_ABI void invokeScalarOptimizerLateEPCallbacks(FunctionPassManager &FPM, OptimizationLevel Level)
LLVM_ABI ModulePassManager buildPerModuleDefaultPipeline(OptimizationLevel Level, ThinOrFullLTOPhase Phase=ThinOrFullLTOPhase::None)
Build a per-module default optimization pipeline.
LLVM_ABI void invokePipelineStartEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level)
LLVM_ABI void invokeVectorizerEndEPCallbacks(FunctionPassManager &FPM, OptimizationLevel Level)
LLVM_ABI ModulePassManager buildO0DefaultPipeline(OptimizationLevel Level, ThinOrFullLTOPhase Phase=ThinOrFullLTOPhase::None)
Build an O0 pipeline with the minimal semantically required passes.
LLVM_ABI FunctionPassManager buildFunctionSimplificationPipeline(OptimizationLevel Level, ThinOrFullLTOPhase Phase)
Construct the core LLVM function canonicalization and simplification pipeline.
LLVM_ABI void invokePeepholeEPCallbacks(FunctionPassManager &FPM, OptimizationLevel Level)
LLVM_ABI void invokePipelineEarlySimplificationEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level, ThinOrFullLTOPhase Phase)
LLVM_ABI void invokeLoopOptimizerEndEPCallbacks(LoopPassManager &LPM, OptimizationLevel Level)
LLVM_ABI ModulePassManager buildLTODefaultPipeline(OptimizationLevel Level, ModuleSummaryIndex *ExportSummary)
Build an LTO default optimization pipeline to a pass manager.
LLVM_ABI ModulePassManager buildModuleInlinerPipeline(OptimizationLevel Level, ThinOrFullLTOPhase Phase)
Construct the module pipeline that performs inlining with module inliner pass.
LLVM_ABI ModulePassManager buildThinLTODefaultPipeline(OptimizationLevel Level, const ModuleSummaryIndex *ImportSummary)
Build a ThinLTO default optimization pipeline to a pass manager.
LLVM_ABI void invokeLateLoopOptimizationsEPCallbacks(LoopPassManager &LPM, OptimizationLevel Level)
LLVM_ABI void invokeFullLinkTimeOptimizationEarlyEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level)
LLVM_ABI ModulePassManager buildFatLTODefaultPipeline(OptimizationLevel Level, bool ThinLTO, bool EmitSummary)
Build a fat object default optimization pipeline.
LLVM_ABI ModulePassManager buildModuleSimplificationPipeline(OptimizationLevel Level, ThinOrFullLTOPhase Phase)
Construct the core LLVM module canonicalization and simplification pipeline.
LLVM_ABI ModulePassManager buildModuleOptimizationPipeline(OptimizationLevel Level, ThinOrFullLTOPhase LTOPhase)
Construct the core LLVM module optimization pipeline.
LLVM_ABI void addPGOInstrPassesForO0(ModulePassManager &MPM, bool RunProfileGen, bool IsCS, bool AtomicCounterUpdate, std::string ProfileFile, std::string ProfileRemappingFile, IntrusiveRefCntPtr< vfs::FileSystem > FS)
Add PGOInstrumenation passes for O0 only.
LLVM_ABI void invokeOptimizerLastEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level, ThinOrFullLTOPhase Phase)
LLVM_ABI ModulePassManager buildLTOPreLinkDefaultPipeline(OptimizationLevel Level)
Build a pre-link, LTO-targeting default optimization pipeline to a pass manager.
LLVM_ATTRIBUTE_MINSIZE std::enable_if_t<!std::is_same_v< PassT, PassManager > > addPass(PassT &&Pass)
bool isEmpty() const
Returns if the pass manager contains any passes.
unsigned LicmMssaNoAccForPromotionCap
Tuning option to disable promotion to scalars in LICM with MemorySSA, if the number of access is too ...
bool SLPVectorization
Tuning option to enable/disable slp loop vectorization, set based on opt level.
int InlinerThreshold
Tuning option to override the default inliner threshold.
bool EagerlyInvalidateAnalyses
bool CallGraphProfile
Tuning option to enable/disable call graph profile.
bool MergeFunctions
Tuning option to enable/disable function merging.
bool ForgetAllSCEVInLoopUnroll
Tuning option to forget all SCEV loops in LoopUnroll.
unsigned LicmMssaOptCap
Tuning option to cap the number of calls to retrive clobbering accesses in MemorySSA,...
bool LoopInterleaving
Tuning option to set loop interleaving on/off, set based on opt level.
LLVM_ABI PipelineTuningOptions()
Constructor sets pipeline tuning defaults based on cl::opts.
bool LoopUnrolling
Tuning option to enable/disable loop unrolling. Its default value is true.
bool LoopInterchange
Tuning option to enable/disable loop interchange.
bool LoopVectorization
Tuning option to enable/disable loop vectorization, set based on opt level.
Reassociate commutative expressions.
A pass to do RPO deduction and propagation of function attributes.
This pass performs function-level constant propagation and merging.
The sample profiler data loader pass.
Analysis pass providing a never-invalidated alias analysis result.
This pass transforms loops that contain branches or switches on loop- invariant conditions to have mu...
A pass to simplify and canonicalize the CFG of a function.
Analysis pass providing a never-invalidated alias analysis result.
Optimize scalar/vector interactions in IR using target cost models.
Interfaces for registering analysis passes, producing common pass manager configurations,...
Abstract Attribute helper functions.
@ C
The default llvm calling convention, compatible with C.
ValuesClass values(OptsTy... Options)
Helper to build a ValuesClass by forwarding a variable number of arguments as an initializer list to ...
initializer< Ty > init(const Ty &Val)
@ Assume
Do not drop type tests (default).
@ All
Drop only llvm.assumes using type test value.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI cl::opt< bool > EnableKnowledgeRetention
ModuleToFunctionPassAdaptor createModuleToFunctionPassAdaptor(FunctionPassT &&Pass, bool EagerlyInvalidate=false)
A function to deduce a function pass type and wrap it in the templated adaptor.
PassManager< LazyCallGraph::SCC, CGSCCAnalysisManager, LazyCallGraph &, CGSCCUpdateResult & > CGSCCPassManager
The CGSCC pass manager.
ThinOrFullLTOPhase
This enumerates the LLVM full LTO or ThinLTO optimization phases.
@ FullLTOPreLink
Full LTO prelink phase.
@ ThinLTOPostLink
ThinLTO postlink (backend compile) phase.
@ None
No LTO/ThinLTO behavior needed.
@ FullLTOPostLink
Full LTO postlink (backend compile) phase.
@ ThinLTOPreLink
ThinLTO prelink (summary) phase.
PassManager< Loop, LoopAnalysisManager, LoopStandardAnalysisResults &, LPMUpdater & > LoopPassManager
The Loop pass manager.
ModuleToPostOrderCGSCCPassAdaptor createModuleToPostOrderCGSCCPassAdaptor(CGSCCPassT &&Pass)
A function to deduce a function pass type and wrap it in the templated adaptor.
CGSCCToFunctionPassAdaptor createCGSCCToFunctionPassAdaptor(FunctionPassT &&Pass, bool EagerlyInvalidate=false, bool NoRerun=false)
A function to deduce a function pass type and wrap it in the templated adaptor.
cl::opt< bool > ForgetSCEVInLoopUnroll
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
LLVM_ABI bool AreStatisticsEnabled()
Check if statistics are enabled.
cl::opt< bool > EnableMemProfContextDisambiguation
Enable MemProf context disambiguation for thin link.
PassManager< Function > FunctionPassManager
Convenience typedef for a pass manager over functions.
LLVM_ABI InlineParams getInlineParams()
Generate the parameters to tune the inline cost analysis based only on the commandline options.
FunctionToLoopPassAdaptor createFunctionToLoopPassAdaptor(LoopPassT &&Pass, bool UseMemorySSA=false, bool UseBlockFrequencyInfo=false, bool UseBranchProbabilityInfo=false)
A function to deduce a loop pass type and wrap it in the templated adaptor.
cl::opt< unsigned > SetLicmMssaNoAccForPromotionCap
cl::opt< unsigned > MaxDevirtIterations("max-devirt-iterations", cl::ReallyHidden, cl::init(4))
cl::opt< unsigned > SetLicmMssaOptCap
A DCE pass that assumes instructions are dead until proven otherwise.
This pass attempts to minimize the number of assume without loosing any information.
Hoist/decompose integer division and remainder instructions to enable CFG improvements and better cod...
A simple and fast domtree-based CSE pass.
Pass which forces specific function attributes into the IR, primarily as a debugging tool.
A simple and fast domtree-based GVN pass to hoist common expressions from sibling branches.
Uses an "inverted" value numbering to decide the similarity of expressions and sinks similar expressi...
A set of parameters to control various transforms performed by IPSCCP pass.
A pass which infers function attributes from the names and signatures of function declarations in a m...
Provides context on when an inline advisor is constructed in the pipeline (e.g., link phase,...
Thresholds to tune inline cost analysis.
std::optional< int > HotCallSiteThreshold
Threshold to use when the callsite is considered hot.
int DefaultThreshold
The default threshold to start with for a callee.
std::optional< bool > EnableDeferral
Indicate whether we should allow inline deferral.
std::optional< int > HintThreshold
Threshold to use for callees with inline hint.
Options for the frontend instrumentation based profiling pass.
A no-op pass template which simply forces a specific analysis result to be invalidated.
Pass to forward loads in a loop around the backedge to subsequent iterations.
A set of parameters used to control various transforms performed by the LoopUnroll pass.
Computes function attributes in post-order over the call graph.
A utility pass template to force an analysis result to be available.