LLVM 22.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 TargetMachine;
39
40/// Tunable parameters for passes in the default pipelines.
42public:
43 /// Constructor sets pipeline tuning defaults based on cl::opts. Each option
44 /// can be set in the PassBuilder when using a LLVM as a library.
46
47 /// Tuning option to set loop interleaving on/off, set based on opt level.
49
50 /// Tuning option to enable/disable loop vectorization, set based on opt
51 /// level.
53
54 /// Tuning option to enable/disable slp loop vectorization, set based on opt
55 /// level.
57
58 /// Tuning option to enable/disable loop unrolling. Its default value is true.
60
61 /// Tuning option to enable/disable loop interchange. Its default value is
62 /// false.
64
65 /// Tuning option to enable/disable loop fusion. Its default value is false.
67
68 /// Tuning option to forget all SCEV loops in LoopUnroll. Its default value
69 /// is that of the flag: `-forget-scev-loop-unroll`.
71
72 /// Tuning option to cap the number of calls to retrive clobbering accesses in
73 /// MemorySSA, in LICM.
75
76 /// Tuning option to disable promotion to scalars in LICM with MemorySSA, if
77 /// the number of access is too large.
79
80 /// Tuning option to enable/disable call graph profile. Its default value is
81 /// that of the flag: `-enable-npm-call-graph-profile`.
83
84 // Add LTO pipeline tuning option to enable the unified LTO pipeline.
86
87 /// Tuning option to enable/disable function merging. Its default value is
88 /// false.
90
91 /// Tuning option to override the default inliner threshold.
93
94 // Experimental option to eagerly invalidate more analyses. This has the
95 // potential to decrease max memory usage in exchange for more compile time.
96 // This may affect codegen due to either passes using analyses only when
97 // cached, or invalidating and recalculating an analysis that was
98 // stale/imprecise but still valid. Currently this invalidates all function
99 // analyses after various module->function or cgscc->function adaptors in the
100 // default pipelines.
102
103 // Tuning option to enable/disable speculative devirtualization.
104 // Its default value is false.
106};
107
108/// This class provides access to building LLVM's passes.
109///
110/// Its members provide the baseline state available to passes during their
111/// construction. The \c PassRegistry.def file specifies how to construct all
112/// of the built-in passes, and those may reference these members during
113/// construction.
115 TargetMachine *TM;
117 std::optional<PGOOptions> PGOOpt;
120
121public:
122 /// A struct to capture parsed pass pipeline names.
123 ///
124 /// A pipeline is defined as a series of names, each of which may in itself
125 /// recursively contain a nested pipeline. A name is either the name of a pass
126 /// (e.g. "instcombine") or the name of a pipeline type (e.g. "cgscc"). If the
127 /// name is the name of a pass, the InnerPipeline is empty, since passes
128 /// cannot contain inner pipelines. See parsePassPipeline() for a more
129 /// detailed description of the textual pipeline format.
132 std::vector<PipelineElement> InnerPipeline;
133 };
134
135 LLVM_ABI explicit PassBuilder(
136 TargetMachine *TM = nullptr,
138 std::optional<PGOOptions> PGOOpt = std::nullopt,
139 PassInstrumentationCallbacks *PIC = nullptr,
141
142 /// Cross register the analysis managers through their proxies.
143 ///
144 /// This is an interface that can be used to cross register each
145 /// AnalysisManager with all the others analysis managers.
146 LLVM_ABI void
149 MachineFunctionAnalysisManager *MFAM = nullptr);
150
151 /// Registers all available module analysis passes.
152 ///
153 /// This is an interface that can be used to populate a \c
154 /// ModuleAnalysisManager with all registered module analyses. Callers can
155 /// still manually register any additional analyses. Callers can also
156 /// pre-register analyses and this will not override those.
158
159 /// Registers all available CGSCC analysis passes.
160 ///
161 /// This is an interface that can be used to populate a \c CGSCCAnalysisManager
162 /// with all registered CGSCC analyses. Callers can still manually register any
163 /// additional analyses. Callers can also pre-register analyses and this will
164 /// not override those.
166
167 /// Registers all available function analysis passes.
168 ///
169 /// This is an interface that can be used to populate a \c
170 /// FunctionAnalysisManager with all registered function analyses. Callers can
171 /// still manually register any additional analyses. Callers can also
172 /// pre-register analyses and this will not override those.
174
175 /// Registers all available loop analysis passes.
176 ///
177 /// This is an interface that can be used to populate a \c LoopAnalysisManager
178 /// with all registered loop analyses. Callers can still manually register any
179 /// additional analyses.
181
182 /// Registers all available machine function analysis passes.
183 ///
184 /// This is an interface that can be used to populate a \c
185 /// MachineFunctionAnalysisManager with all registered function analyses.
186 /// Callers can still manually register any additional analyses. Callers can
187 /// also pre-register analyses and this will not override those.
188 LLVM_ABI void
190
191 /// Construct the core LLVM function canonicalization and simplification
192 /// pipeline.
193 ///
194 /// This is a long pipeline and uses most of the per-function optimization
195 /// passes in LLVM to canonicalize and simplify the IR. It is suitable to run
196 /// repeatedly over the IR and is not expected to destroy important
197 /// information about the semantics of the IR.
198 ///
199 /// Note that \p Level cannot be `O0` here. The pipelines produced are
200 /// only intended for use when attempting to optimize code. If frontends
201 /// require some transformations for semantic reasons, they should explicitly
202 /// build them.
203 ///
204 /// \p Phase indicates the current ThinLTO phase.
207
208 /// Construct the core LLVM module canonicalization and simplification
209 /// pipeline.
210 ///
211 /// This pipeline focuses on canonicalizing and simplifying the entire module
212 /// of IR. Much like the function simplification pipeline above, it is
213 /// suitable to run repeatedly over the IR and is not expected to destroy
214 /// important information. It does, however, perform inlining and other
215 /// heuristic based simplifications that are not strictly reversible.
216 ///
217 /// Note that \p Level cannot be `O0` here. The pipelines produced are
218 /// only intended for use when attempting to optimize code. If frontends
219 /// require some transformations for semantic reasons, they should explicitly
220 /// build them.
221 ///
222 /// \p Phase indicates the current ThinLTO phase.
225
226 /// Construct the module pipeline that performs inlining as well as
227 /// the inlining-driven cleanups.
230
231 /// Construct the module pipeline that performs inlining with
232 /// module inliner pass.
235
236 /// Construct the core LLVM module optimization pipeline.
237 ///
238 /// This pipeline focuses on optimizing the execution speed of the IR. It
239 /// uses cost modeling and thresholds to balance code growth against runtime
240 /// improvements. It includes vectorization and other information destroying
241 /// transformations. It also cannot generally be run repeatedly on a module
242 /// without potentially seriously regressing either runtime performance of
243 /// the code or serious code size growth.
244 ///
245 /// Note that \p Level cannot be `O0` here. The pipelines produced are
246 /// only intended for use when attempting to optimize code. If frontends
247 /// require some transformations for semantic reasons, they should explicitly
248 /// build them.
250 OptimizationLevel Level, ThinOrFullLTOPhase LTOPhase);
251
252 /// Build a per-module default optimization pipeline.
253 ///
254 /// This provides a good default optimization pipeline for per-module
255 /// optimization and code generation without any link-time optimization. It
256 /// typically correspond to frontend "-O[123]" options for optimization
257 /// levels \c O1, \c O2 and \c O3 resp.
259 OptimizationLevel Level,
261
262 /// Build a fat object default optimization pipeline.
263 ///
264 /// This builds a pipeline that runs the LTO/ThinLTO pre-link pipeline, and
265 /// emits a section containing the pre-link bitcode along side the object code
266 /// generated in non-LTO compilation.
268 bool ThinLTO,
269 bool EmitSummary);
270
271 /// Build a pre-link, ThinLTO-targeting default optimization pipeline to
272 /// a pass manager.
273 ///
274 /// This adds the pre-link optimizations tuned to prepare a module for
275 /// a ThinLTO run. It works to minimize the IR which needs to be analyzed
276 /// without making irreversible decisions which could be made better during
277 /// the LTO run.
280
281 /// Build a ThinLTO default optimization pipeline to a pass manager.
282 ///
283 /// This provides a good default optimization pipeline for link-time
284 /// optimization and code generation. It is particularly tuned to fit well
285 /// when IR coming into the LTO phase was first run through \c
286 /// buildThinLTOPreLinkDefaultPipeline, and the two coordinate closely.
288 OptimizationLevel Level, const ModuleSummaryIndex *ImportSummary);
289
290 /// Build a pre-link, LTO-targeting default optimization pipeline to a pass
291 /// manager.
292 ///
293 /// This adds the pre-link optimizations tuned to work well with a later LTO
294 /// run. It works to minimize the IR which needs to be analyzed without
295 /// making irreversible decisions which could be made better during the LTO
296 /// run.
299
300 /// Build an LTO default optimization pipeline to a pass manager.
301 ///
302 /// This provides a good default optimization pipeline for link-time
303 /// optimization and code generation. It is particularly tuned to fit well
304 /// when IR coming into the LTO phase was first run through \c
305 /// buildLTOPreLinkDefaultPipeline, and the two coordinate closely.
307 OptimizationLevel Level, ModuleSummaryIndex *ExportSummary);
308
309 /// Build an O0 pipeline with the minimal semantically required passes.
310 ///
311 /// This should only be used for non-LTO and LTO pre-link pipelines.
315
316 /// Build the default `AAManager` with the default alias analysis pipeline
317 /// registered.
318 ///
319 /// This also adds target-specific alias analyses registered via
320 /// TargetMachine::registerDefaultAliasAnalyses().
322
323 /// Parse a textual pass pipeline description into a \c
324 /// ModulePassManager.
325 ///
326 /// The format of the textual pass pipeline description looks something like:
327 ///
328 /// module(function(instcombine,sroa),dce,cgscc(inliner,function(...)),...)
329 ///
330 /// Pass managers have ()s describing the nest structure of passes. All passes
331 /// are comma separated. As a special shortcut, if the very first pass is not
332 /// a module pass (as a module pass manager is), this will automatically form
333 /// the shortest stack of pass managers that allow inserting that first pass.
334 /// So, assuming function passes 'fpassN', CGSCC passes 'cgpassN', and loop
335 /// passes 'lpassN', all of these are valid:
336 ///
337 /// fpass1,fpass2,fpass3
338 /// cgpass1,cgpass2,cgpass3
339 /// lpass1,lpass2,lpass3
340 ///
341 /// And they are equivalent to the following (resp.):
342 ///
343 /// module(function(fpass1,fpass2,fpass3))
344 /// module(cgscc(cgpass1,cgpass2,cgpass3))
345 /// module(function(loop(lpass1,lpass2,lpass3)))
346 ///
347 /// This shortcut is especially useful for debugging and testing small pass
348 /// combinations.
349 ///
350 /// The sequence of passes aren't necessarily the exact same kind of pass.
351 /// You can mix different levels implicitly if adaptor passes are defined to
352 /// make them work. For example,
353 ///
354 /// mpass1,fpass1,fpass2,mpass2,lpass1
355 ///
356 /// This pipeline uses only one pass manager: the top-level module manager.
357 /// fpass1,fpass2 and lpass1 are added into the top-level module manager
358 /// using only adaptor passes. No nested function/loop pass managers are
359 /// added. The purpose is to allow easy pass testing when the user
360 /// specifically want the pass to run under a adaptor directly. This is
361 /// preferred when a pipeline is largely of one type, but one or just a few
362 /// passes are of different types(See PassBuilder.cpp for examples).
364 StringRef PipelineText);
365
366 /// {{@ Parse a textual pass pipeline description into a specific PassManager
367 ///
368 /// Automatic deduction of an appropriate pass manager stack is not supported.
369 /// For example, to insert a loop pass 'lpass' into a FunctionPassManager,
370 /// this is the valid pipeline text:
371 ///
372 /// function(lpass)
374 StringRef PipelineText);
376 StringRef PipelineText);
378 StringRef PipelineText);
379 /// @}}
380
381 /// Parse a textual MIR pipeline into the provided \c MachineFunctionPass
382 /// manager.
383 /// The format of the textual machine pipeline is a comma separated list of
384 /// machine pass names:
385 ///
386 /// machine-funciton-pass,machine-module-pass,...
387 ///
388 /// There is no need to specify the pass nesting, and this function
389 /// currently cannot handle the pass nesting.
391 StringRef PipelineText);
392
393 /// Parse a textual alias analysis pipeline into the provided AA manager.
394 ///
395 /// The format of the textual AA pipeline is a comma separated list of AA
396 /// pass names:
397 ///
398 /// basic-aa,globals-aa,...
399 ///
400 /// The AA manager is set up such that the provided alias analyses are tried
401 /// in the order specified. See the \c AAManaager documentation for details
402 /// about the logic used. This routine just provides the textual mapping
403 /// between AA names and the analyses to register with the manager.
404 ///
405 /// Returns false if the text cannot be parsed cleanly. The specific state of
406 /// the \p AA manager is unspecified if such an error is encountered and this
407 /// returns false.
409
410 /// Parse RegAllocFilterName to get RegAllocFilterFunc.
411 LLVM_ABI std::optional<RegAllocFilterFunc>
412 parseRegAllocFilter(StringRef RegAllocFilterName);
413
414 /// Print pass names.
416
417 /// Register a callback for a default optimizer pipeline extension
418 /// point
419 ///
420 /// This extension point allows adding passes that perform peephole
421 /// optimizations similar to the instruction combiner. These passes will be
422 /// inserted after each instance of the instruction combiner pass.
424 const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
425 PeepholeEPCallbacks.push_back(C);
426 }
427
428 /// Register a callback for a default optimizer pipeline extension
429 /// point
430 ///
431 /// This extension point allows adding late loop canonicalization and
432 /// simplification passes. This is the last point in the loop optimization
433 /// pipeline before loop deletion. Each pass added
434 /// here must be an instance of LoopPass.
435 /// This is the place to add passes that can remove loops, such as target-
436 /// specific loop idiom recognition.
438 const std::function<void(LoopPassManager &, OptimizationLevel)> &C) {
439 LateLoopOptimizationsEPCallbacks.push_back(C);
440 }
441
442 /// Register a callback for a default optimizer pipeline extension
443 /// point
444 ///
445 /// This extension point allows adding loop passes to the end of the loop
446 /// optimizer.
448 const std::function<void(LoopPassManager &, OptimizationLevel)> &C) {
449 LoopOptimizerEndEPCallbacks.push_back(C);
450 }
451
452 /// Register a callback for a default optimizer pipeline extension
453 /// point
454 ///
455 /// This extension point allows adding optimization passes after most of the
456 /// main optimizations, but before the last cleanup-ish optimizations.
458 const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
459 ScalarOptimizerLateEPCallbacks.push_back(C);
460 }
461
462 /// Register a callback for a default optimizer pipeline extension
463 /// point
464 ///
465 /// This extension point allows adding CallGraphSCC passes at the end of the
466 /// main CallGraphSCC passes and before any function simplification passes run
467 /// by CGPassManager.
469 const std::function<void(CGSCCPassManager &, OptimizationLevel)> &C) {
470 CGSCCOptimizerLateEPCallbacks.push_back(C);
471 }
472
473 /// Register a callback for a default optimizer pipeline extension
474 /// point
475 ///
476 /// This extension point allows adding optimization passes before the
477 /// vectorizer and other highly target specific optimization passes are
478 /// executed.
480 const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
481 VectorizerStartEPCallbacks.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 the
488 /// vectorizer and other highly target specific optimization passes are
489 /// executed.
491 const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
492 VectorizerEndEPCallbacks.push_back(C);
493 }
494
495 /// Register a callback for a default optimizer pipeline extension point.
496 ///
497 /// This extension point allows adding optimization once at the start of the
498 /// pipeline. This does not apply to 'backend' compiles (LTO and ThinLTO
499 /// link-time pipelines).
501 const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
502 PipelineStartEPCallbacks.push_back(C);
503 }
504
505 /// Register a callback for a default optimizer pipeline extension point.
506 ///
507 /// This extension point allows adding optimization right after passes that do
508 /// basic simplification of the input IR.
510 const std::function<void(ModulePassManager &, OptimizationLevel,
512 PipelineEarlySimplificationEPCallbacks.push_back(C);
513 }
514
515 /// Register a callback for a default optimizer pipeline extension point
516 ///
517 /// This extension point allows adding optimizations before the function
518 /// optimization pipeline.
520 const std::function<void(ModulePassManager &, OptimizationLevel,
522 OptimizerEarlyEPCallbacks.push_back(C);
523 }
524
525 /// Register a callback for a default optimizer pipeline extension point
526 ///
527 /// This extension point allows adding optimizations at the very end of the
528 /// function optimization pipeline.
530 const std::function<void(ModulePassManager &, OptimizationLevel,
532 OptimizerLastEPCallbacks.push_back(C);
533 }
534
535 /// Register a callback for a default optimizer pipeline extension point
536 ///
537 /// This extension point allows adding optimizations at the start of the full
538 /// LTO pipeline.
540 const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
541 FullLinkTimeOptimizationEarlyEPCallbacks.push_back(C);
542 }
543
544 /// Register a callback for a default optimizer pipeline extension point
545 ///
546 /// This extension point allows adding optimizations at the end of the full
547 /// LTO pipeline.
549 const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
550 FullLinkTimeOptimizationLastEPCallbacks.push_back(C);
551 }
552
553 /// Register a callback for parsing an AliasAnalysis Name to populate
554 /// the given AAManager \p AA
556 const std::function<bool(StringRef Name, AAManager &AA)> &C) {
557 AAParsingCallbacks.push_back(C);
558 }
559
560 /// {{@ Register callbacks for analysis registration with this PassBuilder
561 /// instance.
562 /// Callees register their analyses with the given AnalysisManager objects.
564 const std::function<void(CGSCCAnalysisManager &)> &C) {
565 CGSCCAnalysisRegistrationCallbacks.push_back(C);
566 }
568 const std::function<void(FunctionAnalysisManager &)> &C) {
569 FunctionAnalysisRegistrationCallbacks.push_back(C);
570 }
572 const std::function<void(LoopAnalysisManager &)> &C) {
573 LoopAnalysisRegistrationCallbacks.push_back(C);
574 }
576 const std::function<void(ModuleAnalysisManager &)> &C) {
577 ModuleAnalysisRegistrationCallbacks.push_back(C);
578 }
580 const std::function<void(MachineFunctionAnalysisManager &)> &C) {
581 MachineFunctionAnalysisRegistrationCallbacks.push_back(C);
582 }
583 /// @}}
584
585 /// {{@ Register pipeline parsing callbacks with this pass builder instance.
586 /// Using these callbacks, callers can parse both a single pass name, as well
587 /// as entire sub-pipelines, and populate the PassManager instance
588 /// accordingly.
590 const std::function<bool(StringRef Name, CGSCCPassManager &,
592 CGSCCPipelineParsingCallbacks.push_back(C);
593 }
595 const std::function<bool(StringRef Name, FunctionPassManager &,
597 FunctionPipelineParsingCallbacks.push_back(C);
598 }
600 const std::function<bool(StringRef Name, LoopPassManager &,
602 LoopPipelineParsingCallbacks.push_back(C);
603 }
605 const std::function<bool(StringRef Name, ModulePassManager &,
607 ModulePipelineParsingCallbacks.push_back(C);
608 }
610 const std::function<bool(StringRef Name, MachineFunctionPassManager &,
612 MachineFunctionPipelineParsingCallbacks.push_back(C);
613 }
614 /// @}}
615
616 /// Register callbacks to parse target specific filter field if regalloc pass
617 /// needs it. E.g. AMDGPU requires regalloc passes can handle sgpr and vgpr
618 /// separately.
620 const std::function<RegAllocFilterFunc(StringRef)> &C) {
621 RegClassFilterParsingCallbacks.push_back(C);
622 }
623
624 /// Register a callback for a top-level pipeline entry.
625 ///
626 /// If the PassManager type is not given at the top level of the pipeline
627 /// text, this Callback should be used to determine the appropriate stack of
628 /// PassManagers and populate the passed ModulePassManager.
630 const std::function<bool(ModulePassManager &, ArrayRef<PipelineElement>)>
631 &C);
632
633 /// Add PGOInstrumenation passes for O0 only.
635 bool RunProfileGen, bool IsCS,
636 bool AtomicCounterUpdate,
637 std::string ProfileFile,
638 std::string ProfileRemappingFile);
639
640 /// Returns PIC. External libraries can use this to register pass
641 /// instrumentation callbacks.
645
646 /// Returns the virtual file system.
650
651 // Invoke the callbacks registered for the various extension points.
652 // Custom pipelines should use these to invoke the callbacks registered
653 // by TargetMachines and other clients.
655 OptimizationLevel Level);
657 OptimizationLevel Level);
659 OptimizationLevel Level);
661 OptimizationLevel Level);
663 OptimizationLevel Level);
665 OptimizationLevel Level);
667 OptimizationLevel Level);
669 OptimizationLevel Level,
672 OptimizationLevel Level,
674 LLVM_ABI void
676 OptimizationLevel Level);
677 LLVM_ABI void
679 OptimizationLevel Level);
681 OptimizationLevel Level);
682 LLVM_ABI void
684 OptimizationLevel Level,
686
688 if (!Name.consume_front(PassName))
689 return false;
690 // normal pass name w/o parameters == default parameters
691 if (Name.empty())
692 return true;
693 return Name.starts_with("<") && Name.ends_with(">");
694 }
695
696 /// This performs customized parsing of pass name with parameters.
697 ///
698 /// We do not need parametrization of passes in textual pipeline very often,
699 /// yet on a rare occasion ability to specify parameters right there can be
700 /// useful.
701 ///
702 /// \p Name - parameterized specification of a pass from a textual pipeline
703 /// is a string in a form of :
704 /// PassName '<' parameter-list '>'
705 ///
706 /// Parameter list is being parsed by the parser callable argument, \p Parser,
707 /// It takes a string-ref of parameters and returns either StringError or a
708 /// parameter list in a form of a custom parameters type, all wrapped into
709 /// Expected<> template class.
710 ///
711 template <typename ParametersParseCallableT>
712 static auto parsePassParameters(ParametersParseCallableT &&Parser,
714 -> decltype(Parser(StringRef{})) {
715 using ParametersT = typename decltype(Parser(StringRef{}))::value_type;
716
717 StringRef Params = Name;
718 if (!Params.consume_front(PassName)) {
720 "unable to strip pass name from parametrized pass specification");
721 }
722 if (!Params.empty() &&
723 (!Params.consume_front("<") || !Params.consume_back(">"))) {
724 llvm_unreachable("invalid format for parametrized pass name");
725 }
726
727 Expected<ParametersT> Result = Parser(Params);
728 assert((Result || Result.template errorIsA<StringError>()) &&
729 "Pass parameter parser can only return StringErrors.");
730 return Result;
731 }
732
733 /// Handle passes only accept one bool-valued parameter.
734 ///
735 /// \return false when Params is empty.
736 LLVM_ABI static Expected<bool> parseSinglePassOption(StringRef Params,
737 StringRef OptionName,
738 StringRef PassName);
739
740private:
741 // O1 pass pipeline
743 buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
745
746 void addRequiredLTOPreLinkPasses(ModulePassManager &MPM);
747
748 void addVectorPasses(OptimizationLevel Level, FunctionPassManager &FPM,
749 ThinOrFullLTOPhase LTOPhase);
750
751 static std::optional<std::vector<PipelineElement>>
752 parsePipelineText(StringRef Text);
753
754 Error parseModulePass(ModulePassManager &MPM, const PipelineElement &E);
755 Error parseCGSCCPass(CGSCCPassManager &CGPM, const PipelineElement &E);
756 Error parseFunctionPass(FunctionPassManager &FPM, const PipelineElement &E);
757 Error parseLoopPass(LoopPassManager &LPM, const PipelineElement &E);
758 Error parseMachinePass(MachineFunctionPassManager &MFPM,
759 const PipelineElement &E);
760 bool parseAAPassName(AAManager &AA, StringRef Name);
761
762 Error parseMachinePassPipeline(MachineFunctionPassManager &MFPM,
764 Error parseLoopPassPipeline(LoopPassManager &LPM,
766 Error parseFunctionPassPipeline(FunctionPassManager &FPM,
768 Error parseCGSCCPassPipeline(CGSCCPassManager &CGPM,
770 Error parseModulePassPipeline(ModulePassManager &MPM,
772
773 // Adds passes to do pre-inlining and related cleanup passes before
774 // profile instrumentation/matching (to enable better context sensitivity),
775 // and for memprof to enable better matching with missing debug frames.
776 void addPreInlinerPasses(ModulePassManager &MPM, OptimizationLevel Level,
777 ThinOrFullLTOPhase LTOPhase);
778
779 void addPGOInstrPasses(ModulePassManager &MPM, OptimizationLevel Level,
780 bool RunProfileGen, bool IsCS,
781 bool AtomicCounterUpdate, std::string ProfileFile,
782 std::string ProfileRemappingFile);
783 void addPostPGOLoopRotation(ModulePassManager &MPM, OptimizationLevel Level);
784
785 bool isInstrumentedPGOUse() const;
786
787 // Extension Point callbacks
788 SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
789 PeepholeEPCallbacks;
790 SmallVector<std::function<void(LoopPassManager &, OptimizationLevel)>, 2>
791 LateLoopOptimizationsEPCallbacks;
792 SmallVector<std::function<void(LoopPassManager &, OptimizationLevel)>, 2>
793 LoopOptimizerEndEPCallbacks;
794 SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
795 ScalarOptimizerLateEPCallbacks;
796 SmallVector<std::function<void(CGSCCPassManager &, OptimizationLevel)>, 2>
797 CGSCCOptimizerLateEPCallbacks;
798 SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
799 VectorizerStartEPCallbacks;
800 SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
801 VectorizerEndEPCallbacks;
802 // Module callbacks
803 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel,
805 2>
806 OptimizerEarlyEPCallbacks;
807 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel,
809 2>
810 OptimizerLastEPCallbacks;
811 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
812 FullLinkTimeOptimizationEarlyEPCallbacks;
813 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
814 FullLinkTimeOptimizationLastEPCallbacks;
815 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
816 PipelineStartEPCallbacks;
817 SmallVector<std::function<void(ModulePassManager &, OptimizationLevel,
819 2>
820 PipelineEarlySimplificationEPCallbacks;
821
822 SmallVector<std::function<void(ModuleAnalysisManager &)>, 2>
823 ModuleAnalysisRegistrationCallbacks;
824 SmallVector<std::function<bool(StringRef, ModulePassManager &,
826 2>
827 ModulePipelineParsingCallbacks;
829 std::function<bool(ModulePassManager &, ArrayRef<PipelineElement>)>, 2>
830 TopLevelPipelineParsingCallbacks;
831 // CGSCC callbacks
832 SmallVector<std::function<void(CGSCCAnalysisManager &)>, 2>
833 CGSCCAnalysisRegistrationCallbacks;
834 SmallVector<std::function<bool(StringRef, CGSCCPassManager &,
836 2>
837 CGSCCPipelineParsingCallbacks;
838 // Function callbacks
839 SmallVector<std::function<void(FunctionAnalysisManager &)>, 2>
840 FunctionAnalysisRegistrationCallbacks;
841 SmallVector<std::function<bool(StringRef, FunctionPassManager &,
843 2>
844 FunctionPipelineParsingCallbacks;
845 // Loop callbacks
846 SmallVector<std::function<void(LoopAnalysisManager &)>, 2>
847 LoopAnalysisRegistrationCallbacks;
848 SmallVector<std::function<bool(StringRef, LoopPassManager &,
850 2>
851 LoopPipelineParsingCallbacks;
852 // AA callbacks
853 SmallVector<std::function<bool(StringRef Name, AAManager &AA)>, 2>
854 AAParsingCallbacks;
855 // Machine pass callbackcs
856 SmallVector<std::function<void(MachineFunctionAnalysisManager &)>, 2>
857 MachineFunctionAnalysisRegistrationCallbacks;
858 SmallVector<std::function<bool(StringRef, MachineFunctionPassManager &,
860 2>
861 MachineFunctionPipelineParsingCallbacks;
862 // Callbacks to parse `filter` parameter in register allocation passes
863 SmallVector<std::function<RegAllocFilterFunc(StringRef)>, 2>
864 RegClassFilterParsingCallbacks;
865};
866
867/// This utility template takes care of adding require<> and invalidate<>
868/// passes for an analysis to a given \c PassManager. It is intended to be used
869/// during parsing of a pass pipeline when parsing a single PipelineName.
870/// When registering a new function analysis FancyAnalysis with the pass
871/// pipeline name "fancy-analysis", a matching ParsePipelineCallback could look
872/// like this:
873///
874/// static bool parseFunctionPipeline(StringRef Name, FunctionPassManager &FPM,
875/// ArrayRef<PipelineElement> P) {
876/// if (parseAnalysisUtilityPasses<FancyAnalysis>("fancy-analysis", Name,
877/// FPM))
878/// return true;
879/// return false;
880/// }
881template <typename AnalysisT, typename IRUnitT, typename AnalysisManagerT,
882 typename... ExtraArgTs>
884 StringRef AnalysisName, StringRef PipelineName,
886 if (!PipelineName.ends_with(">"))
887 return false;
888 // See if this is an invalidate<> pass name
889 if (PipelineName.starts_with("invalidate<")) {
890 PipelineName = PipelineName.substr(11, PipelineName.size() - 12);
891 if (PipelineName != AnalysisName)
892 return false;
894 return true;
895 }
896
897 // See if this is a require<> pass name
898 if (PipelineName.starts_with("require<")) {
899 PipelineName = PipelineName.substr(8, PipelineName.size() - 9);
900 if (PipelineName != AnalysisName)
901 return false;
902 PM.addPass(RequireAnalysisPass<AnalysisT, IRUnitT, AnalysisManagerT,
903 ExtraArgTs...>());
904 return true;
905 }
906
907 return false;
908}
909
910// These are special since they are only for testing purposes.
911
912/// No-op module pass which does nothing.
918
919/// No-op module analysis.
920class NoOpModuleAnalysis : public AnalysisInfoMixin<NoOpModuleAnalysis> {
922 LLVM_ABI static AnalysisKey Key;
923
924public:
925 struct Result {};
927};
928
929/// No-op CGSCC pass which does nothing.
936
937/// No-op CGSCC analysis.
938class NoOpCGSCCAnalysis : public AnalysisInfoMixin<NoOpCGSCCAnalysis> {
940 LLVM_ABI static AnalysisKey Key;
941
942public:
943 struct Result {};
947};
948
949/// No-op function pass which does nothing.
955
956/// No-op function analysis.
957class NoOpFunctionAnalysis : public AnalysisInfoMixin<NoOpFunctionAnalysis> {
959 LLVM_ABI static AnalysisKey Key;
960
961public:
962 struct Result {};
964};
965
966/// No-op loop nest pass which does nothing.
973
974/// No-op loop pass which does nothing.
981
982/// No-op machine function pass which does nothing.
988
989/// No-op loop analysis.
990class NoOpLoopAnalysis : public AnalysisInfoMixin<NoOpLoopAnalysis> {
992 LLVM_ABI static AnalysisKey Key;
993
994public:
995 struct Result {};
999};
1000
1001/// Common option used by multiple tools to print pipeline passes
1003}
1004
1005#endif
aarch64 falkor hwpf fix Falkor HW Prefetch Fix Late Phase
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
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:213
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.
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.
ArrayRef - 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 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:67
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 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.
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.
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.
LLVM_ABI PassBuilder(TargetMachine *TM=nullptr, PipelineTuningOptions PTO=PipelineTuningOptions(), std::optional< PGOOptions > PGOOpt=std::nullopt, PassInstrumentationCallbacks *PIC=nullptr, IntrusiveRefCntPtr< vfs::FileSystem > FS=vfs::getRealFileSystem())
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)
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.
LLVM_ABI void invokeLoopOptimizerEndEPCallbacks(LoopPassManager &LPM, OptimizationLevel Level)
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.
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)
LLVM_ABI ModulePassManager buildFatLTODefaultPipeline(OptimizationLevel Level, bool ThinLTO, bool EmitSummary)
Build a fat object default optimization pipeline.
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 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:41
unsigned LicmMssaNoAccForPromotionCap
Tuning option to disable promotion to scalars in LICM with MemorySSA, if the number of access is too ...
Definition PassBuilder.h:78
bool SLPVectorization
Tuning option to enable/disable slp loop vectorization, set based on opt level.
Definition PassBuilder.h:56
int InlinerThreshold
Tuning option to override the default inliner threshold.
Definition PassBuilder.h:92
bool LoopFusion
Tuning option to enable/disable loop fusion. Its default value is false.
Definition PassBuilder.h:66
bool CallGraphProfile
Tuning option to enable/disable call graph profile.
Definition PassBuilder.h:82
bool MergeFunctions
Tuning option to enable/disable function merging.
Definition PassBuilder.h:89
bool ForgetAllSCEVInLoopUnroll
Tuning option to forget all SCEV loops in LoopUnroll.
Definition PassBuilder.h:70
unsigned LicmMssaOptCap
Tuning option to cap the number of calls to retrive clobbering accesses in MemorySSA,...
Definition PassBuilder.h:74
bool LoopInterleaving
Tuning option to set loop interleaving on/off, set based on opt level.
Definition PassBuilder.h:48
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.
Definition PassBuilder.h:59
bool LoopInterchange
Tuning option to enable/disable loop interchange.
Definition PassBuilder.h:63
bool LoopVectorization
Tuning option to enable/disable loop vectorization, set based on opt level.
Definition PassBuilder.h:52
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
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
constexpr StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
Definition StringRef.h:573
bool starts_with(StringRef Prefix) const
Check if this string starts with the given Prefix.
Definition StringRef.h:261
constexpr size_t size() const
size - Get the string size.
Definition StringRef.h:146
bool ends_with(StringRef Suffix) const
Check if this string ends with the given Suffix.
Definition StringRef.h:273
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:165
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
template class LLVM_TEMPLATE_ABI opt< bool >
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:77
@ None
No LTO/ThinLTO behavior needed.
Definition Pass.h:79
PassManager< Loop, LoopAnalysisManager, LoopStandardAnalysisResults &, LPMUpdater & > LoopPassManager
The Loop pass manager.
LLVM_ABI cl::opt< bool > PrintPipelinePasses
Common option used by multiple tools to print pipeline passes.
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 >
PassManager< MachineFunction > MachineFunctionPassManager
Convenience typedef for a pass manager over functions.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
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.
Definition PassManager.h:92
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 struct to capture parsed pass pipeline names.
std::vector< PipelineElement > InnerPipeline
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition PassManager.h:69
A utility pass template to force an analysis result to be available.