LLVM 24.0.0git
PassBuilder.h
Go to the documentation of this file.
1//===- Parsing, selection, and construction of pass pipelines --*- C++ -*--===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8/// \file
9///
10/// Interfaces for registering analysis passes, producing common pass manager
11/// configurations, and parsing of pass pipelines.
12///
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_PASSES_PASSBUILDER_H
16#define LLVM_PASSES_PASSBUILDER_H
17
21#include "llvm/IR/PassManager.h"
24#include "llvm/Support/Error.h"
31#include <optional>
32#include <vector>
33
34namespace llvm {
35class StringRef;
36class AAManager;
37class LLVMContext;
38class TargetMachine;
40struct PassesOptions;
41namespace cl {
43} // namespace cl
44
45/// Tunable parameters for passes in the default pipelines.
47public:
48 /// Constructor sets pipeline tuning defaults based on the global values of
49 /// the library options. Each option can be set in the PassBuilder when using
50 /// a LLVM as a library.
52
53 /// Reads the defaults from \p LibraryOptions, or their global values if
54 /// null.
56 const cl::LibraryOptionsContext *LibraryOptions);
57
58 /// Tuning option to set loop interleaving on/off, set based on opt level.
60
61 /// Tuning option to enable/disable loop vectorization, set based on opt
62 /// level.
64
65 /// Tuning option to enable/disable slp loop vectorization, set based on opt
66 /// level.
68
69 /// Tuning option to enable/disable loop unrolling. Its default value is true.
71
72 /// Tuning option to enable/disable loop interchange. Its default value is
73 /// false.
75
76 /// Tuning option to enable/disable loop fusion. Its default value is false.
78
79 /// Tuning option to forget all SCEV loops in LoopUnroll. Its default value
80 /// is that of the flag: `-forget-scev-loop-unroll`.
82
83 /// Tuning option to cap the number of calls to retrive clobbering accesses in
84 /// MemorySSA, in LICM.
86
87 /// Tuning option to disable promotion to scalars in LICM with MemorySSA, if
88 /// the number of access is too large.
90
91 /// Tuning option to enable/disable call graph profile. Its default value is
92 /// that of the flag: `-enable-npm-call-graph-profile`.
94
95 // Add LTO pipeline tuning option to enable the unified LTO pipeline.
97
98 /// Tuning option to enable/disable function merging. Its default value is
99 /// false.
101
102 /// Tuning option to override the default inliner threshold.
104
105 /// Tuning option to cap how many times the inliner pipeline reruns on an SCC
106 /// after devirtualizing a call. Its default value is that of the flag:
107 /// `-max-devirt-iterations`.
109
110 // Experimental option to eagerly invalidate more analyses. This has the
111 // potential to decrease max memory usage in exchange for more compile time.
112 // This may affect codegen due to either passes using analyses only when
113 // cached, or invalidating and recalculating an analysis that was
114 // stale/imprecise but still valid. Currently this invalidates all function
115 // analyses after various module->function or cgscc->function adaptors in the
116 // default pipelines.
118
119 // Tuning option to enable/disable speculative devirtualization.
120 // Its default value is false.
122};
123
128
129/// This class provides access to building LLVM's passes.
130///
131/// Its members provide the baseline state available to passes during their
132/// construction. The \c PassRegistry.def file specifies how to construct all
133/// of the built-in passes, and those may reference these members during
134/// construction.
136 LLVMContext &Context;
137 const PassesOptions &Opts;
138 TargetMachine *TM;
140 std::optional<PGOOptions> PGOOpt;
143
144public:
145 /// A struct to capture parsed pass pipeline names.
146 ///
147 /// A pipeline is defined as a series of names, each of which may in itself
148 /// recursively contain a nested pipeline. A name is either the name of a pass
149 /// (e.g. "instcombine") or the name of a pipeline type (e.g. "cgscc"). If the
150 /// name is the name of a pass, the InnerPipeline is empty, since passes
151 /// cannot contain inner pipelines. See parsePassPipeline() for a more
152 /// detailed description of the textual pipeline format.
155 std::vector<PipelineElement> InnerPipeline;
156 };
157
158 /// The pipelines read the library options of \p Context, which must outlive
159 /// the PassBuilder. If \p PTO is not given, it reads its defaults from
160 /// \p Context.
161 LLVM_ABI explicit PassBuilder(
162 LLVMContext &Context, TargetMachine *TM = nullptr,
163 std::optional<PipelineTuningOptions> PTO = std::nullopt,
164 std::optional<PGOOptions> PGOOpt = std::nullopt,
165 PassInstrumentationCallbacks *PIC = nullptr,
167
168 /// Cross register the analysis managers through their proxies.
169 ///
170 /// This is an interface that can be used to cross register each
171 /// AnalysisManager with all the others analysis managers.
172 LLVM_ABI void
175 MachineFunctionAnalysisManager *MFAM = nullptr);
176
177 /// Registers all available module analysis passes.
178 ///
179 /// This is an interface that can be used to populate a \c
180 /// ModuleAnalysisManager with all registered module analyses. Callers can
181 /// still manually register any additional analyses. Callers can also
182 /// pre-register analyses and this will not override those.
184
185 /// Registers all available CGSCC analysis passes.
186 ///
187 /// This is an interface that can be used to populate a \c CGSCCAnalysisManager
188 /// with all registered CGSCC analyses. Callers can still manually register any
189 /// additional analyses. Callers can also pre-register analyses and this will
190 /// not override those.
192
193 /// Registers all available function analysis passes.
194 ///
195 /// This is an interface that can be used to populate a \c
196 /// FunctionAnalysisManager with all registered function analyses. Callers can
197 /// still manually register any additional analyses. Callers can also
198 /// pre-register analyses and this will not override those.
200
201 /// Registers all available loop analysis passes.
202 ///
203 /// This is an interface that can be used to populate a \c LoopAnalysisManager
204 /// with all registered loop analyses. Callers can still manually register any
205 /// additional analyses.
207
208 /// Registers all available machine function analysis passes.
209 ///
210 /// This is an interface that can be used to populate a \c
211 /// MachineFunctionAnalysisManager with all registered function analyses.
212 /// Callers can still manually register any additional analyses. Callers can
213 /// also pre-register analyses and this will not override those.
214 LLVM_ABI void
216
217 /// Construct the core LLVM function canonicalization and simplification
218 /// pipeline.
219 ///
220 /// This is a long pipeline and uses most of the per-function optimization
221 /// passes in LLVM to canonicalize and simplify the IR. It is suitable to run
222 /// repeatedly over the IR and is not expected to destroy important
223 /// information about the semantics of the IR.
224 ///
225 /// Note that \p Level cannot be `O0` here. The pipelines produced are
226 /// only intended for use when attempting to optimize code. If frontends
227 /// require some transformations for semantic reasons, they should explicitly
228 /// build them.
229 ///
230 /// \p Phase indicates the current ThinLTO phase.
233
234 /// Construct the core LLVM module canonicalization and simplification
235 /// pipeline.
236 ///
237 /// This pipeline focuses on canonicalizing and simplifying the entire module
238 /// of IR. Much like the function simplification pipeline above, it is
239 /// suitable to run repeatedly over the IR and is not expected to destroy
240 /// important information. It does, however, perform inlining and other
241 /// heuristic based simplifications that are not strictly reversible.
242 ///
243 /// Note that \p Level cannot be `O0` here. The pipelines produced are
244 /// only intended for use when attempting to optimize code. If frontends
245 /// require some transformations for semantic reasons, they should explicitly
246 /// build them.
247 ///
248 /// \p Phase indicates the current ThinLTO phase.
251
252 /// Construct the module pipeline that performs inlining as well as
253 /// the inlining-driven cleanups.
256
257 /// Construct the module pipeline that performs inlining with
258 /// module inliner pass.
261
262 /// Construct the core LLVM module optimization pipeline.
263 ///
264 /// This pipeline focuses on optimizing the execution speed of the IR. It
265 /// uses cost modeling and thresholds to balance code growth against runtime
266 /// improvements. It includes vectorization and other information destroying
267 /// transformations. It also cannot generally be run repeatedly on a module
268 /// without potentially seriously regressing either runtime performance of
269 /// the code or serious code size growth.
270 ///
271 /// Note that \p Level cannot be `O0` here. The pipelines produced are
272 /// only intended for use when attempting to optimize code. If frontends
273 /// require some transformations for semantic reasons, they should explicitly
274 /// build them.
276 OptimizationLevel Level, ThinOrFullLTOPhase LTOPhase);
277
278 /// Build a per-module default optimization pipeline.
279 ///
280 /// This provides a good default optimization pipeline for per-module
281 /// optimization and code generation without any link-time optimization. It
282 /// typically correspond to frontend "-O[123]" options for optimization
283 /// levels \c O1, \c O2 and \c O3 resp.
285 OptimizationLevel Level,
287
288 /// Build a fat object default optimization pipeline.
289 ///
290 /// This builds a pipeline that runs the LTO/ThinLTO pre-link pipeline, and
291 /// emits a section containing the pre-link bitcode along side the object code
292 /// generated in non-LTO compilation.
294 bool ThinLTO,
295 bool EmitSummary,
296 bool Verify = true);
297
298 /// Build a pre-link, ThinLTO-targeting default optimization pipeline to
299 /// a pass manager.
300 ///
301 /// This adds the pre-link optimizations tuned to prepare a module for
302 /// a ThinLTO run. It works to minimize the IR which needs to be analyzed
303 /// without making irreversible decisions which could be made better during
304 /// the LTO run.
307
308 /// Build a ThinLTO default optimization pipeline to a pass manager.
309 ///
310 /// This provides a good default optimization pipeline for link-time
311 /// optimization and code generation. It is particularly tuned to fit well
312 /// when IR coming into the LTO phase was first run through \c
313 /// buildThinLTOPreLinkDefaultPipeline, and the two coordinate closely.
315 OptimizationLevel Level, const ModuleSummaryIndex *ImportSummary);
316
317 /// Build a pre-link, LTO-targeting default optimization pipeline to a pass
318 /// manager.
319 ///
320 /// This adds the pre-link optimizations tuned to work well with a later LTO
321 /// run. It works to minimize the IR which needs to be analyzed without
322 /// making irreversible decisions which could be made better during the LTO
323 /// run.
326
327 /// Build an LTO default optimization pipeline to a pass manager.
328 ///
329 /// This provides a good default optimization pipeline for link-time
330 /// optimization and code generation. It is particularly tuned to fit well
331 /// when IR coming into the LTO phase was first run through \c
332 /// buildLTOPreLinkDefaultPipeline, and the two coordinate closely.
334 OptimizationLevel Level, ModuleSummaryIndex *ExportSummary);
335
336 /// Build an O0 pipeline with the minimal semantically required passes.
337 ///
338 /// This should only be used for non-LTO and LTO pre-link pipelines.
342
343 /// Build the default `AAManager` with the default alias analysis pipeline
344 /// registered.
345 ///
346 /// This also adds target-specific alias analyses registered via
347 /// TargetMachine::registerDefaultAliasAnalyses().
349
350 /// Parse a textual pass pipeline description into a \c
351 /// ModulePassManager.
352 ///
353 /// The format of the textual pass pipeline description looks something like:
354 ///
355 /// module(function(instcombine,sroa),dce,cgscc(inliner,function(...)),...)
356 ///
357 /// Pass managers have ()s describing the nest structure of passes. All passes
358 /// are comma separated. As a special shortcut, if the very first pass is not
359 /// a module pass (as a module pass manager is), this will automatically form
360 /// the shortest stack of pass managers that allow inserting that first pass.
361 /// So, assuming function passes 'fpassN', CGSCC passes 'cgpassN', and loop
362 /// passes 'lpassN', all of these are valid:
363 ///
364 /// fpass1,fpass2,fpass3
365 /// cgpass1,cgpass2,cgpass3
366 /// lpass1,lpass2,lpass3
367 ///
368 /// And they are equivalent to the following (resp.):
369 ///
370 /// module(function(fpass1,fpass2,fpass3))
371 /// module(cgscc(cgpass1,cgpass2,cgpass3))
372 /// module(function(loop(lpass1,lpass2,lpass3)))
373 ///
374 /// This shortcut is especially useful for debugging and testing small pass
375 /// combinations.
376 ///
377 /// The sequence of passes aren't necessarily the exact same kind of pass.
378 /// You can mix different levels implicitly if adaptor passes are defined to
379 /// make them work. For example,
380 ///
381 /// mpass1,fpass1,fpass2,mpass2,lpass1
382 ///
383 /// This pipeline uses only one pass manager: the top-level module manager.
384 /// fpass1,fpass2 and lpass1 are added into the top-level module manager
385 /// using only adaptor passes. No nested function/loop pass managers are
386 /// added. The purpose is to allow easy pass testing when the user
387 /// specifically want the pass to run under a adaptor directly. This is
388 /// preferred when a pipeline is largely of one type, but one or just a few
389 /// passes are of different types(See PassBuilder.cpp for examples).
391 StringRef PipelineText);
392
393 /// {{@ Parse a textual pass pipeline description into a specific PassManager
394 ///
395 /// Automatic deduction of an appropriate pass manager stack is not supported.
396 /// For example, to insert a loop pass 'lpass' into a FunctionPassManager,
397 /// this is the valid pipeline text:
398 ///
399 /// function(lpass)
401 StringRef PipelineText);
403 StringRef PipelineText);
405 StringRef PipelineText);
406 /// @}}
407
408 /// Parse a textual MIR pipeline into the provided \c MachineFunctionPass
409 /// manager.
410 /// The format of the textual machine pipeline is a comma separated list of
411 /// machine pass names:
412 ///
413 /// machine-funciton-pass,machine-module-pass,...
414 ///
415 /// There is no need to specify the pass nesting, and this function
416 /// currently cannot handle the pass nesting.
418 StringRef PipelineText);
419
420 /// Parse a textual alias analysis pipeline into the provided AA manager.
421 ///
422 /// The format of the textual AA pipeline is a comma separated list of AA
423 /// pass names:
424 ///
425 /// basic-aa,globals-aa,...
426 ///
427 /// The AA manager is set up such that the provided alias analyses are tried
428 /// in the order specified. See the \c AAManaager documentation for details
429 /// about the logic used. This routine just provides the textual mapping
430 /// between AA names and the analyses to register with the manager.
431 ///
432 /// Returns false if the text cannot be parsed cleanly. The specific state of
433 /// the \p AA manager is unspecified if such an error is encountered and this
434 /// returns false.
436
437 /// Parse RegAllocFilterName to get RegAllocFilterFunc.
438 LLVM_ABI std::optional<RegAllocFilterFunc>
439 parseRegAllocFilter(StringRef RegAllocFilterName);
440
441 /// Print pass names.
443
444 /// The format -print-pipeline-passes requests, or std::nullopt if it is not
445 /// given.
446 LLVM_ABI std::optional<PrintPipelinePassesFormat>
448
449 /// Register a callback for a default optimizer pipeline extension
450 /// point
451 ///
452 /// This extension point allows adding passes that perform peephole
453 /// optimizations similar to the instruction combiner. These passes will be
454 /// inserted after each instance of the instruction combiner pass.
456 const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
457 PeepholeEPCallbacks.push_back(C);
458 }
459
460 /// Register a callback for a default optimizer pipeline extension
461 /// point
462 ///
463 /// This extension point allows adding late loop canonicalization and
464 /// simplification passes. This is the last point in the loop optimization
465 /// pipeline before loop deletion. Each pass added
466 /// here must be an instance of LoopPass.
467 /// This is the place to add passes that can remove loops, such as target-
468 /// specific loop idiom recognition.
470 const std::function<void(LoopPassManager &, OptimizationLevel)> &C) {
471 LateLoopOptimizationsEPCallbacks.push_back(C);
472 }
473
474 /// Register a callback for a default optimizer pipeline extension
475 /// point
476 ///
477 /// This extension point allows adding loop passes to the end of the loop
478 /// optimizer.
480 const std::function<void(LoopPassManager &, OptimizationLevel)> &C) {
481 LoopOptimizerEndEPCallbacks.push_back(C);
482 }
483
484 /// Register a callback for a default optimizer pipeline extension
485 /// point
486 ///
487 /// This extension point allows adding optimization passes after most of the
488 /// main optimizations, but before the last cleanup-ish optimizations.
490 const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
491 ScalarOptimizerLateEPCallbacks.push_back(C);
492 }
493
494 /// Register a callback for a default optimizer pipeline extension
495 /// point
496 ///
497 /// This extension point allows adding CallGraphSCC passes at the end of the
498 /// main CallGraphSCC passes and before any function simplification passes run
499 /// by CGPassManager.
501 const std::function<void(CGSCCPassManager &, OptimizationLevel)> &C) {
502 CGSCCOptimizerLateEPCallbacks.push_back(C);
503 }
504
505 /// Register a callback for a default optimizer pipeline extension
506 /// point
507 ///
508 /// This extension point allows adding optimization passes before the
509 /// vectorizer and other highly target specific optimization passes are
510 /// executed.
512 const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
513 VectorizerStartEPCallbacks.push_back(C);
514 }
515
516 /// Register a callback for a default optimizer pipeline extension
517 /// point
518 ///
519 /// This extension point allows adding optimization passes after the
520 /// vectorizer and other highly target specific optimization passes are
521 /// executed.
523 const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
524 VectorizerEndEPCallbacks.push_back(C);
525 }
526
527 /// Register a callback for a default optimizer pipeline extension point.
528 ///
529 /// This extension point allows adding optimization once at the start of the
530 /// pipeline. This does not apply to 'backend' compiles (LTO and ThinLTO
531 /// link-time pipelines).
533 const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
534 PipelineStartEPCallbacks.push_back(C);
535 }
536
537 /// Register a callback for a default optimizer pipeline extension point.
538 ///
539 /// This extension point allows adding optimization right after passes that do
540 /// basic simplification of the input IR.
542 const std::function<void(ModulePassManager &, OptimizationLevel,
544 PipelineEarlySimplificationEPCallbacks.push_back(C);
545 }
546
547 /// Register a callback for a default optimizer pipeline extension point
548 ///
549 /// This extension point allows adding optimizations before the function
550 /// optimization pipeline.
552 const std::function<void(ModulePassManager &, OptimizationLevel,
554 OptimizerEarlyEPCallbacks.push_back(C);
555 }
556
557 /// Register a callback for a default optimizer pipeline extension point
558 ///
559 /// This extension point allows adding optimizations at the very end of the
560 /// function optimization pipeline.
562 const std::function<void(ModulePassManager &, OptimizationLevel,
564 OptimizerLastEPCallbacks.push_back(C);
565 }
566
567 /// Register a callback for a default optimizer pipeline extension point
568 ///
569 /// This extension point allows adding optimizations at the start of the full
570 /// LTO pipeline.
572 const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
573 FullLinkTimeOptimizationEarlyEPCallbacks.push_back(C);
574 }
575
576 /// Register a callback for a default optimizer pipeline extension point
577 ///
578 /// This extension point allows adding optimizations at the end of the full
579 /// LTO pipeline.
581 const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
582 FullLinkTimeOptimizationLastEPCallbacks.push_back(C);
583 }
584
585 /// Register a callback for ThinLTO default optimizer pipeline extension point
586 ///
587 /// This extension point allows adding optimizations at the start of the
588 /// thin LTO pipeline.
590 const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
591 ThinLinkTimeOptimizationEarlyEPCallbacks.push_back(C);
592 }
593
594 /// Register a callback for ThinLTO default optimizer pipeline extension point
595 ///
596 /// This extension point allows adding optimizations at the end of the thin
597 /// LTO pipeline.
599 const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
600 ThinLinkTimeOptimizationLastEPCallbacks.push_back(C);
601 }
602
603 /// Register a callback for parsing an AliasAnalysis Name to populate
604 /// the given AAManager \p AA
606 const std::function<bool(StringRef Name, AAManager &AA)> &C) {
607 AAParsingCallbacks.push_back(C);
608 }
609
610 /// {{@ Register callbacks for analysis registration with this PassBuilder
611 /// instance.
612 /// Callees register their analyses with the given AnalysisManager objects.
614 const std::function<void(CGSCCAnalysisManager &)> &C) {
615 CGSCCAnalysisRegistrationCallbacks.push_back(C);
616 }
618 const std::function<void(FunctionAnalysisManager &)> &C) {
619 FunctionAnalysisRegistrationCallbacks.push_back(C);
620 }
622 const std::function<void(LoopAnalysisManager &)> &C) {
623 LoopAnalysisRegistrationCallbacks.push_back(C);
624 }
626 const std::function<void(ModuleAnalysisManager &)> &C) {
627 ModuleAnalysisRegistrationCallbacks.push_back(C);
628 }
630 const std::function<void(MachineFunctionAnalysisManager &)> &C) {
631 MachineFunctionAnalysisRegistrationCallbacks.push_back(C);
632 }
633 /// @}}
634
635 /// {{@ Register pipeline parsing callbacks with this pass builder instance.
636 /// Using these callbacks, callers can parse both a single pass name, as well
637 /// as entire sub-pipelines, and populate the PassManager instance
638 /// accordingly.
640 const std::function<bool(StringRef Name, CGSCCPassManager &,
642 CGSCCPipelineParsingCallbacks.push_back(C);
643 }
645 const std::function<bool(StringRef Name, FunctionPassManager &,
647 FunctionPipelineParsingCallbacks.push_back(C);
648 }
650 const std::function<bool(StringRef Name, LoopPassManager &,
652 LoopPipelineParsingCallbacks.push_back(C);
653 }
655 const std::function<bool(StringRef Name, ModulePassManager &,
657 ModulePipelineParsingCallbacks.push_back(C);
658 }
660 const std::function<bool(StringRef Name, MachineFunctionPassManager &,
662 MachineFunctionPipelineParsingCallbacks.push_back(C);
663 }
664 /// @}}
665
666 /// Register callbacks to parse target specific filter field if regalloc pass
667 /// needs it. E.g. AMDGPU requires regalloc passes can handle sgpr and vgpr
668 /// separately.
670 const std::function<RegAllocFilterFunc(StringRef)> &C) {
671 RegClassFilterParsingCallbacks.push_back(C);
672 }
673
674 /// Register a callback for a top-level pipeline entry.
675 ///
676 /// If the PassManager type is not given at the top level of the pipeline
677 /// text, this Callback should be used to determine the appropriate stack of
678 /// PassManagers and populate the passed ModulePassManager.
680 const std::function<bool(ModulePassManager &, ArrayRef<PipelineElement>)>
681 &C);
682
683 /// Add PGOInstrumenation passes for O0 only.
685 bool RunProfileGen, bool IsCS,
686 bool AtomicCounterUpdate,
687 std::string ProfileFile,
688 std::string ProfileRemappingFile);
689
690 LLVMContext &getContext() const { return Context; }
691
692 /// Returns PIC. External libraries can use this to register pass
693 /// instrumentation callbacks.
697
698 /// Returns the virtual file system.
702
703 // Invoke the callbacks registered for the various extension points.
704 // Custom pipelines should use these to invoke the callbacks registered
705 // by TargetMachines and other clients.
707 OptimizationLevel Level);
709 OptimizationLevel Level);
711 OptimizationLevel Level);
713 OptimizationLevel Level);
715 OptimizationLevel Level);
717 OptimizationLevel Level);
719 OptimizationLevel Level);
721 OptimizationLevel Level,
724 OptimizationLevel Level,
726 LLVM_ABI void
728 OptimizationLevel Level);
729 LLVM_ABI void
731 OptimizationLevel Level);
732 LLVM_ABI void
734 OptimizationLevel Level);
735 LLVM_ABI void
737 OptimizationLevel Level);
739 OptimizationLevel Level);
740 LLVM_ABI void
742 OptimizationLevel Level,
744
746 if (!Name.consume_front(PassName))
747 return false;
748 // normal pass name w/o parameters == default parameters
749 if (Name.empty())
750 return true;
751 return Name.starts_with("<") && Name.ends_with(">");
752 }
753
754 /// This performs customized parsing of pass name with parameters.
755 ///
756 /// We do not need parametrization of passes in textual pipeline very often,
757 /// yet on a rare occasion ability to specify parameters right there can be
758 /// useful.
759 ///
760 /// \p Name - parameterized specification of a pass from a textual pipeline
761 /// is a string in a form of :
762 /// PassName '<' parameter-list '>'
763 ///
764 /// Parameter list is being parsed by the parser callable argument, \p Parser,
765 /// It takes a string-ref of parameters and returns either StringError or a
766 /// parameter list in a form of a custom parameters type, all wrapped into
767 /// Expected<> template class.
768 ///
769 template <typename ParametersParseCallableT>
770 static auto parsePassParameters(ParametersParseCallableT &&Parser,
772 -> decltype(Parser(StringRef{})) {
773 using ParametersT = typename decltype(Parser(StringRef{}))::value_type;
774
775 StringRef Params = Name;
776 if (!Params.consume_front(PassName)) {
778 "unable to strip pass name from parametrized pass specification");
779 }
780 if (!Params.empty() &&
781 (!Params.consume_front("<") || !Params.consume_back(">"))) {
782 llvm_unreachable("invalid format for parametrized pass name");
783 }
784
785 Expected<ParametersT> Result = Parser(Params);
786 assert((Result || Result.template errorIsA<StringError>()) &&
787 "Pass parameter parser can only return StringErrors.");
788 return Result;
789 }
790
791 /// Handle passes only accept one bool-valued parameter.
792 ///
793 /// \return false when Params is empty.
794 LLVM_ABI static Expected<bool> parseSinglePassOption(StringRef Params,
795 StringRef OptionName,
796 StringRef PassName);
797
798private:
799 // O1 pass pipeline
801 buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
803
804 void addRequiredLTOPreLinkPasses(ModulePassManager &MPM);
805
806 void addVectorPasses(OptimizationLevel Level, FunctionPassManager &FPM,
807 ThinOrFullLTOPhase LTOPhase);
808
809 static std::optional<std::vector<PipelineElement>>
810 parsePipelineText(StringRef Text);
811
812 Error parseModulePass(ModulePassManager &MPM, const PipelineElement &E);
813 Error parseCGSCCPass(CGSCCPassManager &CGPM, const PipelineElement &E);
814 Error parseFunctionPass(FunctionPassManager &FPM, const PipelineElement &E);
815 Error parseLoopPass(LoopPassManager &LPM, const PipelineElement &E);
816 Error parseMachinePass(MachineFunctionPassManager &MFPM,
817 const PipelineElement &E);
818 bool parseAAPassName(AAManager &AA, StringRef Name);
819
820 Error parseMachinePassPipeline(MachineFunctionPassManager &MFPM,
822 Error parseLoopPassPipeline(LoopPassManager &LPM,
824 Error parseFunctionPassPipeline(FunctionPassManager &FPM,
826 Error parseCGSCCPassPipeline(CGSCCPassManager &CGPM,
828 Error parseModulePassPipeline(ModulePassManager &MPM,
830
831 // Adds passes to do pre-inlining and related cleanup passes before
832 // profile instrumentation/matching (to enable better context sensitivity),
833 // and for memprof to enable better matching with missing debug frames.
834 void addPreInlinerPasses(ModulePassManager &MPM, OptimizationLevel Level,
835 ThinOrFullLTOPhase LTOPhase,
836 bool IgnoreProfile = false);
837
838 void addPGOInstrPasses(ModulePassManager &MPM, OptimizationLevel Level,
839 bool RunProfileGen, bool IsCS,
840 bool AtomicCounterUpdate, std::string ProfileFile,
841 std::string ProfileRemappingFile);
842 void addPostPGOLoopRotation(ModulePassManager &MPM, OptimizationLevel Level);
843
844 bool isInstrumentedPGOUse() const;
845
846 // Extension Point callbacks
847 SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
848 PeepholeEPCallbacks;
849 SmallVector<std::function<void(LoopPassManager &, OptimizationLevel)>, 2>
850 LateLoopOptimizationsEPCallbacks;
851 SmallVector<std::function<void(LoopPassManager &, OptimizationLevel)>, 2>
852 LoopOptimizerEndEPCallbacks;
853 SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
854 ScalarOptimizerLateEPCallbacks;
855 SmallVector<std::function<void(CGSCCPassManager &, OptimizationLevel)>, 2>
856 CGSCCOptimizerLateEPCallbacks;
857 SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
858 VectorizerStartEPCallbacks;
859 SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
860 VectorizerEndEPCallbacks;
861 // Module callbacks
862 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel,
864 2>
865 OptimizerEarlyEPCallbacks;
866 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel,
868 2>
869 OptimizerLastEPCallbacks;
870 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
871 FullLinkTimeOptimizationEarlyEPCallbacks;
872 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
873 FullLinkTimeOptimizationLastEPCallbacks;
874 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
875 ThinLinkTimeOptimizationEarlyEPCallbacks;
876 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
877 ThinLinkTimeOptimizationLastEPCallbacks;
878 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
879 PipelineStartEPCallbacks;
880 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel,
882 2>
883 PipelineEarlySimplificationEPCallbacks;
884
885 SmallVector<std::function<void(ModuleAnalysisManager &)>, 2>
886 ModuleAnalysisRegistrationCallbacks;
887 SmallVector<std::function<bool(StringRef, ModulePassManager &,
889 2>
890 ModulePipelineParsingCallbacks;
892 std::function<bool(ModulePassManager &, ArrayRef<PipelineElement>)>, 2>
893 TopLevelPipelineParsingCallbacks;
894 // CGSCC callbacks
895 SmallVector<std::function<void(CGSCCAnalysisManager &)>, 2>
896 CGSCCAnalysisRegistrationCallbacks;
897 SmallVector<std::function<bool(StringRef, CGSCCPassManager &,
899 2>
900 CGSCCPipelineParsingCallbacks;
901 // Function callbacks
902 SmallVector<std::function<void(FunctionAnalysisManager &)>, 2>
903 FunctionAnalysisRegistrationCallbacks;
904 SmallVector<std::function<bool(StringRef, FunctionPassManager &,
906 2>
907 FunctionPipelineParsingCallbacks;
908 // Loop callbacks
909 SmallVector<std::function<void(LoopAnalysisManager &)>, 2>
910 LoopAnalysisRegistrationCallbacks;
911 SmallVector<std::function<bool(StringRef, LoopPassManager &,
913 2>
914 LoopPipelineParsingCallbacks;
915 // AA callbacks
916 SmallVector<std::function<bool(StringRef Name, AAManager &AA)>, 2>
917 AAParsingCallbacks;
918 // Machine pass callbackcs
919 SmallVector<std::function<void(MachineFunctionAnalysisManager &)>, 2>
920 MachineFunctionAnalysisRegistrationCallbacks;
921 SmallVector<std::function<bool(StringRef, MachineFunctionPassManager &,
923 2>
924 MachineFunctionPipelineParsingCallbacks;
925 // Callbacks to parse `filter` parameter in register allocation passes
926 SmallVector<std::function<RegAllocFilterFunc(StringRef)>, 2>
927 RegClassFilterParsingCallbacks;
928};
929
930/// This utility template takes care of adding require<> and invalidate<>
931/// passes for an analysis to a given \c PassManager. It is intended to be used
932/// during parsing of a pass pipeline when parsing a single PipelineName.
933/// When registering a new function analysis FancyAnalysis with the pass
934/// pipeline name "fancy-analysis", a matching ParsePipelineCallback could look
935/// like this:
936///
937/// static bool parseFunctionPipeline(StringRef Name, FunctionPassManager &FPM,
938/// ArrayRef<PipelineElement> P) {
939/// if (parseAnalysisUtilityPasses<FancyAnalysis>("fancy-analysis", Name,
940/// FPM))
941/// return true;
942/// return false;
943/// }
944template <typename AnalysisT, typename IRUnitT, typename AnalysisManagerT,
945 typename... ExtraArgTs>
947 StringRef AnalysisName, StringRef PipelineName,
949 if (!PipelineName.ends_with(">"))
950 return false;
951 // See if this is an invalidate<> pass name
952 if (PipelineName.starts_with("invalidate<")) {
953 PipelineName = PipelineName.substr(11, PipelineName.size() - 12);
954 if (PipelineName != AnalysisName)
955 return false;
957 return true;
958 }
959
960 // See if this is a require<> pass name
961 if (PipelineName.starts_with("require<")) {
962 PipelineName = PipelineName.substr(8, PipelineName.size() - 9);
963 if (PipelineName != AnalysisName)
964 return false;
965 PM.addPass(RequireAnalysisPass<AnalysisT, IRUnitT, AnalysisManagerT,
966 ExtraArgTs...>());
967 return true;
968 }
969
970 return false;
971}
972
973// These are special since they are only for testing purposes.
974
975/// No-op module pass which does nothing.
981
982/// No-op module analysis.
983class NoOpModuleAnalysis : public AnalysisInfoMixin<NoOpModuleAnalysis> {
985 LLVM_ABI static AnalysisKey Key;
986
987public:
988 struct Result {};
990};
991
992/// No-op CGSCC pass which does nothing.
999
1000/// No-op CGSCC analysis.
1001class NoOpCGSCCAnalysis : public AnalysisInfoMixin<NoOpCGSCCAnalysis> {
1003 LLVM_ABI static AnalysisKey Key;
1004
1005public:
1006 struct Result {};
1010};
1011
1012/// No-op function pass which does nothing.
1018
1019/// No-op function analysis.
1020class NoOpFunctionAnalysis : public AnalysisInfoMixin<NoOpFunctionAnalysis> {
1022 LLVM_ABI static AnalysisKey Key;
1023
1024public:
1025 struct Result {};
1027};
1028
1029/// No-op loop nest pass which does nothing.
1036
1037/// No-op loop pass which does nothing.
1044
1045/// No-op machine function pass which does nothing.
1052
1053/// No-op loop analysis.
1054class NoOpLoopAnalysis : public AnalysisInfoMixin<NoOpLoopAnalysis> {
1056 LLVM_ABI static AnalysisKey Key;
1057
1058public:
1059 struct Result {};
1063};
1064
1066 raw_ostream &OS, StringRef Pipeline,
1068}
1069
1070#endif
aarch64 falkor hwpf fix Falkor HW Prefetch Fix Late Phase
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This header provides classes for managing passes over SCCs of the call graph.
#define LLVM_ABI
Definition Compiler.h:211
This header defines various interfaces for pass management in LLVM.
This header provides classes for managing a pipeline of passes over loops in LLVM IR.
#define F(x, y, z)
Definition MD5.cpp:54
#define G(x, y, z)
Definition MD5.cpp:55
This header enumerates the LLVM-provided high-level optimization levels.
Define option tunables for PGO.
ppc ctr loops PowerPC CTR Loops Verify
CGSCCAnalysisManager CGAM
LoopAnalysisManager LAM
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
Defines the virtual file system interface vfs::FileSystem.
static const char PassName[]
A manager for alias analyses.
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
A smart pointer to a reference-counted object that inherits from RefCountedBase or ThreadSafeRefCount...
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:76
This class provides an interface for updating the loop pass manager based on mutations to the loop ne...
An SCC of the call graph.
A lazily constructed view of the call graph of a module.
This class represents a loop nest and can be used to query its properties.
Represents a single loop in the control flow graph.
Definition LoopInfo.h:40
Module pass, wrapping the inliner pass.
Definition Inliner.h:65
Class to hold module path string table and global value map, and encapsulate methods for operating on...
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:68
No-op CGSCC analysis.
Result run(LazyCallGraph::SCC &, CGSCCAnalysisManager &, LazyCallGraph &G)
No-op function analysis.
Result run(Function &, FunctionAnalysisManager &)
No-op loop analysis.
Result run(Loop &, LoopAnalysisManager &, LoopStandardAnalysisResults &)
No-op module analysis.
Result run(Module &, ModuleAnalysisManager &)
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.
void registerAnalysisRegistrationCallback(const std::function< void(MachineFunctionAnalysisManager &)> &C)
LLVM_ABI void printPassNames(raw_ostream &OS)
Print pass names.
static bool checkParametrizedPassName(StringRef Name, StringRef PassName)
LLVM_ABI void invokeOptimizerEarlyEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level, ThinOrFullLTOPhase Phase)
LLVM_ABI ModulePassManager buildFatLTODefaultPipeline(OptimizationLevel Level, bool ThinLTO, bool EmitSummary, bool Verify=true)
Build a fat object default optimization pipeline.
LLVM_ABI void invokeVectorizerStartEPCallbacks(FunctionPassManager &FPM, OptimizationLevel Level)
void registerPipelineParsingCallback(const std::function< bool(StringRef Name, ModulePassManager &, ArrayRef< PipelineElement >)> &C)
LLVM_ABI AAManager buildDefaultAAPipeline()
Build the default AAManager with the default alias analysis pipeline registered.
LLVM_ABI Error parseAAPipeline(AAManager &AA, StringRef PipelineText)
Parse a textual alias analysis pipeline into the provided AA manager.
void registerThinLinkTimeOptimizationEarlyEPCallback(const std::function< void(ModulePassManager &, OptimizationLevel)> &C)
Register a callback for ThinLTO default optimizer pipeline extension point.
LLVM_ABI void invokeCGSCCOptimizerLateEPCallbacks(CGSCCPassManager &CGPM, OptimizationLevel Level)
void registerPipelineEarlySimplificationEPCallback(const std::function< void(ModulePassManager &, OptimizationLevel, ThinOrFullLTOPhase)> &C)
Register a callback for a default optimizer pipeline extension point.
LLVM_ABI ModulePassManager buildThinLTOPreLinkDefaultPipeline(OptimizationLevel Level)
Build a pre-link, ThinLTO-targeting default optimization pipeline to a pass manager.
void registerAnalysisRegistrationCallback(const std::function< void(ModuleAnalysisManager &)> &C)
LLVM_ABI void addPGOInstrPassesForO0(ModulePassManager &MPM, bool RunProfileGen, bool IsCS, bool AtomicCounterUpdate, std::string ProfileFile, std::string ProfileRemappingFile)
Add PGOInstrumenation passes for O0 only.
void registerPipelineStartEPCallback(const std::function< void(ModulePassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
LLVM_ABI void invokeScalarOptimizerLateEPCallbacks(FunctionPassManager &FPM, OptimizationLevel Level)
void registerPipelineParsingCallback(const std::function< bool(StringRef Name, LoopPassManager &, ArrayRef< PipelineElement >)> &C)
LLVM_ABI void registerLoopAnalyses(LoopAnalysisManager &LAM)
Registers all available loop analysis passes.
LLVM_ABI std::optional< RegAllocFilterFunc > parseRegAllocFilter(StringRef RegAllocFilterName)
Parse RegAllocFilterName to get RegAllocFilterFunc.
PassInstrumentationCallbacks * getPassInstrumentationCallbacks() const
Returns PIC.
void registerLateLoopOptimizationsEPCallback(const std::function< void(LoopPassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
LLVM_ABI void crossRegisterProxies(LoopAnalysisManager &LAM, FunctionAnalysisManager &FAM, CGSCCAnalysisManager &CGAM, ModuleAnalysisManager &MAM, MachineFunctionAnalysisManager *MFAM=nullptr)
Cross register the analysis managers through their proxies.
void registerLoopOptimizerEndEPCallback(const std::function< void(LoopPassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
void registerOptimizerLastEPCallback(const std::function< void(ModulePassManager &, OptimizationLevel, ThinOrFullLTOPhase)> &C)
Register a callback for a default optimizer pipeline extension point.
void registerParseAACallback(const std::function< bool(StringRef Name, AAManager &AA)> &C)
Register a callback for parsing an AliasAnalysis Name to populate the given AAManager AA.
LLVMContext & getContext() const
void registerVectorizerStartEPCallback(const std::function< void(FunctionPassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
void registerAnalysisRegistrationCallback(const std::function< void(LoopAnalysisManager &)> &C)
LLVM_ABI ModulePassManager buildPerModuleDefaultPipeline(OptimizationLevel Level, ThinOrFullLTOPhase Phase=ThinOrFullLTOPhase::None)
Build a per-module default optimization pipeline.
void registerPeepholeEPCallback(const std::function< void(FunctionPassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
void registerAnalysisRegistrationCallback(const std::function< void(FunctionAnalysisManager &)> &C)
void registerScalarOptimizerLateEPCallback(const std::function< void(FunctionPassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
void registerAnalysisRegistrationCallback(const std::function< void(CGSCCAnalysisManager &)> &C)
{{@ Register callbacks for analysis registration with this PassBuilder instance.
LLVM_ABI void invokePipelineStartEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level)
LLVM_ABI void invokeVectorizerEndEPCallbacks(FunctionPassManager &FPM, OptimizationLevel Level)
LLVM_ABI void invokeThinLinkTimeOptimizationLastEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level)
IntrusiveRefCntPtr< vfs::FileSystem > getVirtualFileSystemPtr() const
Returns the virtual file system.
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.
void registerCGSCCOptimizerLateEPCallback(const std::function< void(CGSCCPassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
LLVM_ABI void invokePeepholeEPCallbacks(FunctionPassManager &FPM, OptimizationLevel Level)
LLVM_ABI void invokePipelineEarlySimplificationEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level, ThinOrFullLTOPhase Phase)
LLVM_ABI Error parsePassPipeline(ModulePassManager &MPM, StringRef PipelineText)
Parse a textual pass pipeline description into a ModulePassManager.
void registerThinLinkTimeOptimizationLastEPCallback(const std::function< void(ModulePassManager &, OptimizationLevel)> &C)
Register a callback for ThinLTO default optimizer pipeline extension point.
LLVM_ABI void invokeLoopOptimizerEndEPCallbacks(LoopPassManager &LPM, OptimizationLevel Level)
LLVM_ABI PassBuilder(LLVMContext &Context, TargetMachine *TM=nullptr, std::optional< PipelineTuningOptions > PTO=std::nullopt, std::optional< PGOOptions > PGOOpt=std::nullopt, PassInstrumentationCallbacks *PIC=nullptr, IntrusiveRefCntPtr< vfs::FileSystem > FS=vfs::getRealFileSystem())
The pipelines read the library options of Context, which must outlive the PassBuilder.
void registerRegClassFilterParsingCallback(const std::function< RegAllocFilterFunc(StringRef)> &C)
Register callbacks to parse target specific filter field if regalloc pass needs it.
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.
void registerPipelineParsingCallback(const std::function< bool(StringRef Name, CGSCCPassManager &, ArrayRef< PipelineElement >)> &C)
{{@ Register pipeline parsing callbacks with this pass builder instance.
void registerFullLinkTimeOptimizationEarlyEPCallback(const std::function< void(ModulePassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
LLVM_ABI void invokeLateLoopOptimizationsEPCallbacks(LoopPassManager &LPM, OptimizationLevel Level)
void registerPipelineParsingCallback(const std::function< bool(StringRef Name, FunctionPassManager &, ArrayRef< PipelineElement >)> &C)
LLVM_ABI void registerModuleAnalyses(ModuleAnalysisManager &MAM)
Registers all available module analysis passes.
LLVM_ABI std::optional< PrintPipelinePassesFormat > getPrintPipelinePasses() const
The format -print-pipeline-passes requests, or std::nullopt if it is not given.
void registerFullLinkTimeOptimizationLastEPCallback(const std::function< void(ModulePassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
LLVM_ABI void registerCGSCCAnalyses(CGSCCAnalysisManager &CGAM)
Registers all available CGSCC analysis passes.
LLVM_ABI void invokeFullLinkTimeOptimizationEarlyEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level)
static auto parsePassParameters(ParametersParseCallableT &&Parser, StringRef Name, StringRef PassName) -> decltype(Parser(StringRef{}))
This performs customized parsing of pass name with parameters.
LLVM_ABI ModulePassManager buildModuleSimplificationPipeline(OptimizationLevel Level, ThinOrFullLTOPhase Phase)
Construct the core LLVM module canonicalization and simplification pipeline.
void registerPipelineParsingCallback(const std::function< bool(StringRef Name, MachineFunctionPassManager &, ArrayRef< PipelineElement >)> &C)
static LLVM_ABI Expected< bool > parseSinglePassOption(StringRef Params, StringRef OptionName, StringRef PassName)
Handle passes only accept one bool-valued parameter.
void registerOptimizerEarlyEPCallback(const std::function< void(ModulePassManager &, OptimizationLevel, ThinOrFullLTOPhase Phase)> &C)
Register a callback for a default optimizer pipeline extension point.
LLVM_ABI void registerMachineFunctionAnalyses(MachineFunctionAnalysisManager &MFAM)
Registers all available machine function analysis passes.
LLVM_ABI ModulePassManager buildModuleOptimizationPipeline(OptimizationLevel Level, ThinOrFullLTOPhase LTOPhase)
Construct the core LLVM module optimization pipeline.
LLVM_ABI void registerParseTopLevelPipelineCallback(const std::function< bool(ModulePassManager &, ArrayRef< PipelineElement >)> &C)
Register a callback for a top-level pipeline entry.
LLVM_ABI void invokeThinLinkTimeOptimizationEarlyEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level)
LLVM_ABI void invokeOptimizerLastEPCallbacks(ModulePassManager &MPM, OptimizationLevel Level, ThinOrFullLTOPhase Phase)
void registerVectorizerEndEPCallback(const std::function< void(FunctionPassManager &, OptimizationLevel)> &C)
Register a callback for a default optimizer pipeline extension point.
LLVM_ABI ModulePassManager buildLTOPreLinkDefaultPipeline(OptimizationLevel Level)
Build a pre-link, LTO-targeting default optimization pipeline to a pass manager.
LLVM_ABI void registerFunctionAnalyses(FunctionAnalysisManager &FAM)
Registers all available function analysis passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
Manages a sequence of passes over a particular unit of IR.
LLVM_ATTRIBUTE_MINSIZE std::enable_if_t<!std::is_same_v< PassT, PassManager > > addPass(PassT &&Pass)
Tunable parameters for passes in the default pipelines.
Definition PassBuilder.h:46
unsigned LicmMssaNoAccForPromotionCap
Tuning option to disable promotion to scalars in LICM with MemorySSA, if the number of access is too ...
Definition PassBuilder.h:89
bool SLPVectorization
Tuning option to enable/disable slp loop vectorization, set based on opt level.
Definition PassBuilder.h:67
int InlinerThreshold
Tuning option to override the default inliner threshold.
bool LoopFusion
Tuning option to enable/disable loop fusion. Its default value is false.
Definition PassBuilder.h:77
PipelineTuningOptions()
Constructor sets pipeline tuning defaults based on the global values of the library options.
Definition PassBuilder.h:51
bool CallGraphProfile
Tuning option to enable/disable call graph profile.
Definition PassBuilder.h:93
bool MergeFunctions
Tuning option to enable/disable function merging.
bool ForgetAllSCEVInLoopUnroll
Tuning option to forget all SCEV loops in LoopUnroll.
Definition PassBuilder.h:81
unsigned LicmMssaOptCap
Tuning option to cap the number of calls to retrive clobbering accesses in MemorySSA,...
Definition PassBuilder.h:85
bool LoopInterleaving
Tuning option to set loop interleaving on/off, set based on opt level.
Definition PassBuilder.h:59
bool LoopUnrolling
Tuning option to enable/disable loop unrolling. Its default value is true.
Definition PassBuilder.h:70
bool LoopInterchange
Tuning option to enable/disable loop interchange.
Definition PassBuilder.h:74
bool LoopVectorization
Tuning option to enable/disable loop vectorization, set based on opt level.
Definition PassBuilder.h:63
unsigned MaxDevirtIterations
Tuning option to cap how many times the inliner pipeline reruns on an SCC after devirtualizing a call...
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
Definition Analysis.h:118
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
constexpr StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
Definition StringRef.h:597
bool starts_with(StringRef Prefix) const
Check if this string starts with the given Prefix.
Definition StringRef.h:258
constexpr size_t size() const
Get the string size.
Definition StringRef.h:144
bool ends_with(StringRef Suffix) const
Check if this string ends with the given Suffix.
Definition StringRef.h:270
Primary interface to the complete machine description for the target machine.
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Abstract Attribute helper functions.
Definition Attributor.h:164
This namespace contains all of the command line option processing machinery.
LLVM_ABI IntrusiveRefCntPtr< FileSystem > getRealFileSystem()
Gets an vfs::FileSystem for the 'real' file system, as seen by the operating system.
This is an optimization pass for GlobalISel generic memory operations.
std::function< bool(const TargetRegisterInfo &TRI, const MachineRegisterInfo &MRI, const Register Reg)> RegAllocFilterFunc
Filter function for register classes during regalloc.
bool parseAnalysisUtilityPasses(StringRef AnalysisName, StringRef PipelineName, PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs... > &PM)
This utility template takes care of adding require<> and invalidate<> passes for an analysis to a giv...
AnalysisManager< MachineFunction > MachineFunctionAnalysisManager
PassManager< LazyCallGraph::SCC, CGSCCAnalysisManager, LazyCallGraph &, CGSCCUpdateResult & > CGSCCPassManager
The CGSCC pass manager.
AnalysisManager< LazyCallGraph::SCC, LazyCallGraph & > CGSCCAnalysisManager
The CGSCC analysis manager.
AnalysisManager< Loop, LoopStandardAnalysisResults & > LoopAnalysisManager
The loop analysis manager.
ThinOrFullLTOPhase
This enumerates the LLVM full LTO or ThinLTO optimization phases.
Definition Pass.h:75
@ None
No LTO/ThinLTO behavior needed.
Definition Pass.h:77
PassManager< Loop, LoopAnalysisManager, LoopStandardAnalysisResults &, LPMUpdater & > LoopPassManager
The Loop pass manager.
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
class LLVM_GSL_OWNER SmallVector
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference s...
PassManager< Function > FunctionPassManager
Convenience typedef for a pass manager over functions.
ArrayRef(const T &OneElt) -> ArrayRef< T >
LLVM_ABI void printFormattedPipelinePasses(raw_ostream &OS, StringRef Pipeline, PrintPipelinePassesFormat Format=PrintPipelinePassesFormat::Text)
PassManager< MachineFunction > MachineFunctionPassManager
Convenience typedef for a pass manager over functions.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
PrintPipelinePassesFormat
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
A CRTP mix-in that provides informational APIs needed for analysis passes.
A special type used by analysis passes to provide an address that identifies that particular analysis...
Definition Analysis.h:29
Support structure for SCC passes to communicate updates the call graph back to the CGSCC pass manager...
A no-op pass template which simply forces a specific analysis result to be invalidated.
The adaptor from a function pass to a loop pass computes these analyses and makes them available to t...
No-op CGSCC pass which does nothing.
PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &, LazyCallGraph &, CGSCCUpdateResult &UR)
No-op function pass which does nothing.
PreservedAnalyses run(Function &F, FunctionAnalysisManager &)
No-op loop nest pass which does nothing.
PreservedAnalyses run(LoopNest &L, LoopAnalysisManager &, LoopStandardAnalysisResults &, LPMUpdater &)
No-op loop pass which does nothing.
PreservedAnalyses run(Loop &L, LoopAnalysisManager &, LoopStandardAnalysisResults &, LPMUpdater &)
No-op machine function pass which does nothing.
PreservedAnalyses run(MachineFunction &, MachineFunctionAnalysisManager &)
No-op module pass which does nothing.
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
A CRTP mix-in for passes that can be skipped.
A struct to capture parsed pass pipeline names.
std::vector< PipelineElement > InnerPipeline
A utility pass template to force an analysis result to be available.