LLVM 23.0.0git
Passes.h
Go to the documentation of this file.
1//===-- Passes.h - Target independent code generation passes ----*- 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//
9// This file defines interfaces to access the target independent code generation
10// passes provided by the LLVM backend.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CODEGEN_PASSES_H
15#define LLVM_CODEGEN_PASSES_H
16
21
22#include <functional>
23#include <string>
24
25namespace llvm {
26
27class FunctionPass;
28class MachineFunction;
30class ModulePass;
31class Pass;
32class TargetMachine;
33class raw_ostream;
34enum class RunOutliner;
35
36template <typename T> class IntrusiveRefCntPtr;
37namespace vfs {
38class FileSystem;
39} // namespace vfs
40
41} // namespace llvm
42
43// List of target independent CodeGen pass IDs.
44namespace llvm {
45
46/// AtomicExpandPass - At IR level this pass replace atomic instructions with
47/// __atomic_* library calls, or target specific instruction which implement the
48/// same semantics in a way which better fits the target backend.
50
51/// createUnreachableBlockEliminationPass - The LLVM code generator does not
52/// work well with unreachable basic blocks (what live ranges make sense for a
53/// block that cannot be reached?). As such, a code generator should either
54/// not instruction select unreachable blocks, or run this pass as its
55/// last LLVM modifying pass to clean up blocks that are not reachable from
56/// the entry block.
58
59/// createGCEmptyBasicblocksPass - Empty basic blocks (basic blocks without
60/// real code) appear as the result of optimization passes removing
61/// instructions. These blocks confuscate profile analysis (e.g., basic block
62/// sections) since they will share the address of their fallthrough blocks.
63/// This pass garbage-collects such basic blocks.
65
66/// createBasicBlockSections Pass - This pass assigns sections to machine
67/// basic blocks and is enabled with -fbasic-block-sections.
69
71
72/// createBasicBlockMatchingAndInferencePass - This pass enables matching
73/// and inference when using propeller.
75
76/// createInsertCodePrefetchPass - This pass enables inserting code prefetch
77/// hints based on the basic block section profile.
79
80/// createMachineBlockHashInfoPass - This pass computes basic block hashes.
82
83/// createMachineFunctionSplitterPass - This pass splits machine functions
84/// using profile information.
86
87/// createStaticDataSplitterPass - This is a machine-function pass that
88/// categorizes static data hotness using profile information.
90
91/// createStaticDataAnnotatorPASS - This is a module pass that reads from
92/// StaticDataProfileInfoWrapperPass and annotates the section prefix of
93/// global variables.
95
96/// MachineFunctionPrinter pass - This pass prints out the machine function to
97/// the given stream as a debugging tool.
100 const std::string &Banner = "");
101
102/// MIR2VecVocabPrinter pass - This pass prints out the MIR2Vec vocabulary
103/// contents to the given stream as a debugging tool.
106
107/// MIR2VecPrinter pass - This pass prints out the MIR2Vec embeddings for
108/// machine functions, basic blocks and instructions.
110
111/// StackFramePrinter pass - This pass prints out the machine function's
112/// stack frame to the given stream as a debugging tool.
114
115/// MIRPrinting pass - this pass prints out the LLVM IR into the given stream
116/// using the MIR serialization format.
118
119/// This pass resets a MachineFunction when it has the FailedISel property
120/// as if it was just created.
121/// If EmitFallbackDiag is true, the pass will emit a
122/// DiagnosticInfoISelFallback for every MachineFunction it resets.
123/// If AbortOnFailedISel is true, abort compilation instead of resetting.
125createResetMachineFunctionPass(bool EmitFallbackDiag, bool AbortOnFailedISel);
126
127/// createCodeGenPrepareLegacyPass - Transform the code to expose more pattern
128/// matching during instruction selection.
130
131/// This pass implements generation of target-specific intrinsics to support
132/// handling of complex number arithmetic
134
135/// AtomicExpandID -- Lowers atomic operations in terms of either cmpxchg
136/// load-linked/store-conditional loops.
137LLVM_ABI extern char &AtomicExpandID;
138
139/// MachineLoopInfo - This pass is a loop analysis pass.
140LLVM_ABI extern char &MachineLoopInfoID;
141
142/// MachineDominators - This pass is a machine dominators analysis pass.
143LLVM_ABI extern char &MachineDominatorsID;
144
145/// MachineDominanaceFrontier - This pass is a machine dominators analysis.
147
148/// MachineRegionInfo - This pass computes SESE regions for machine functions.
150
151/// EdgeBundles analysis - Bundle machine CFG edges.
153
154/// LiveVariables pass - This pass computes the set of blocks in which each
155/// variable is life and sets machine operand kill flags.
156LLVM_ABI extern char &LiveVariablesID;
157
158/// PHIElimination - This pass eliminates machine instruction PHI nodes
159/// by inserting copy instructions. This destroys SSA information, but is the
160/// desired input for some register allocators. This pass is "required" by
161/// these register allocator like this: AU.addRequiredID(PHIEliminationID);
162LLVM_ABI extern char &PHIEliminationID;
163
164/// LiveIntervals - This analysis keeps track of the live ranges of virtual
165/// and physical registers.
166LLVM_ABI extern char &LiveIntervalsID;
167
168/// LiveStacks pass. An analysis keeping track of the liveness of stack slots.
169LLVM_ABI extern char &LiveStacksID;
170
171/// TwoAddressInstruction - This pass reduces two-address instructions to
172/// use two operands. This destroys SSA information but it is desired by
173/// register allocators.
175
176/// ProcessImpicitDefs pass - This pass removes IMPLICIT_DEFs.
178
179/// RegisterCoalescer - This pass merges live ranges to eliminate copies.
180LLVM_ABI extern char &RegisterCoalescerID;
181
182/// MachineScheduler - This pass schedules machine instructions.
183LLVM_ABI extern char &MachineSchedulerID;
184
185/// PostMachineScheduler - This pass schedules machine instructions postRA.
187
188/// SpillPlacement analysis. Suggest optimal placement of spill code between
189/// basic blocks.
190LLVM_ABI extern char &SpillPlacementID;
191
192/// ShrinkWrap pass. Look for the best place to insert save and restore
193// instruction and update the MachineFunctionInfo with that information.
194LLVM_ABI extern char &ShrinkWrapID;
195
196/// LiveRangeShrink pass. Move instruction close to its definition to shrink
197/// the definition's live range.
198LLVM_ABI extern char &LiveRangeShrinkID;
199
200/// Greedy register allocator.
201LLVM_ABI extern char &RAGreedyLegacyID;
202
203/// Basic register allocator.
204LLVM_ABI extern char &RABasicID;
205
206/// VirtRegRewriter pass. Rewrite virtual registers to physical registers as
207/// assigned in VirtRegMap.
208LLVM_ABI extern char &VirtRegRewriterID;
209LLVM_ABI FunctionPass *createVirtRegRewriter(bool ClearVirtRegs = true);
210
211/// UnreachableMachineBlockElimination - This pass removes unreachable
212/// machine basic blocks.
214
215/// DeadMachineInstructionElim - This pass removes dead machine instructions.
217
218/// This pass adds dead/undef flags after analyzing subregister lanes.
219LLVM_ABI extern char &DetectDeadLanesID;
220
221/// This pass perform post-ra machine sink for COPY instructions.
223
224/// This pass adds flow sensitive discriminators.
226
227/// This pass reads flow sensitive profile.
229
230// This pass gives undef values a Pseudo Instruction definition for
231// Instructions to ensure early-clobber is followed when using the greedy
232// register allocator.
233LLVM_ABI extern char &InitUndefID;
234
235/// FastRegisterAllocation Pass - This pass register allocates as fast as
236/// possible. It is best suited for debug code where live ranges are short.
237///
240 bool ClearVirtRegs);
241
242/// BasicRegisterAllocation Pass - This pass implements a degenerate global
243/// register allocator using the basic regalloc framework.
244///
247
248/// Greedy register allocation pass - This pass implements a global register
249/// allocator for optimized builds.
250///
253
254/// PBQPRegisterAllocation Pass - This pass implements the Partitioned Boolean
255/// Quadratic Prograaming (PBQP) based register allocator.
256///
258
259/// PrologEpilogCodeInserter - This pass inserts prolog and epilog code,
260/// and eliminates abstract frame references.
263
264/// ExpandPostRAPseudos - This pass expands pseudo instructions after
265/// register allocation.
267
268/// PostRAHazardRecognizer - This pass runs the post-ra hazard
269/// recognizer.
271
272/// PostRAScheduler - This pass performs post register allocation
273/// scheduling.
274LLVM_ABI extern char &PostRASchedulerID;
275
276/// BranchFolding - This pass performs machine code CFG based
277/// optimizations to delete branches to branches, eliminate branches to
278/// successor blocks (creating fall throughs), and eliminating branches over
279/// branches.
280LLVM_ABI extern char &BranchFolderPassID;
281
282/// BranchRelaxation - This pass replaces branches that need to jump further
283/// than is supported by a branch instruction.
285
286/// MachineFunctionPrinterPass - This pass prints out MachineInstr's.
288
289/// MIRPrintingPass - this pass prints out the LLVM IR using the MIR
290/// serialization format.
291LLVM_ABI extern char &MIRPrintingPassID;
292
293/// TailDuplicate - Duplicate blocks with unconditional branches
294/// into tails of their predecessors.
296
297/// Duplicate blocks with unconditional branches into tails of their
298/// predecessors. Variant that works before register allocation.
300
301/// MachineTraceMetrics - This pass computes critical path and CPU resource
302/// usage in an ensemble of traces.
304
305/// EarlyIfConverter - This pass performs if-conversion on SSA form by
306/// inserting cmov instructions.
308
309/// EarlyIfPredicator - This pass performs if-conversion on SSA form by
310/// predicating if/else block and insert select at the join point.
311LLVM_ABI extern char &EarlyIfPredicatorID;
312
313/// This pass performs instruction combining using trace metrics to estimate
314/// critical-path and resource depth.
315LLVM_ABI extern char &MachineCombinerID;
316
317/// StackSlotColoring - This pass performs stack coloring and merging.
318/// It merges disjoint allocas to reduce the stack size.
320
321/// StackFramePrinter - This pass prints the stack frame layout and variable
322/// mappings.
324
325/// IfConverter - This pass performs machine code if conversion.
326LLVM_ABI extern char &IfConverterID;
327
329createIfConverter(std::function<bool(const MachineFunction &)> Ftor);
330
331/// MachineBlockPlacement - This pass places basic blocks based on branch
332/// probabilities.
334
335/// MachineBlockPlacementStats - This pass collects statistics about the
336/// basic block placement using branch probabilities and block frequency
337/// information.
339
340/// GCLowering Pass - Used by gc.root to perform its default lowering
341/// operations.
343
344/// GCLowering Pass - Used by gc.root to perform its default lowering
345/// operations.
346LLVM_ABI extern char &GCLoweringID;
347
348/// ShadowStackGCLowering - Implements the custom lowering mechanism
349/// used by the shadow stack GC. Only runs on functions which opt in to
350/// the shadow stack collector.
352
353/// ShadowStackGCLowering - Implements the custom lowering mechanism
354/// used by the shadow stack GC.
356
357/// GCMachineCodeAnalysis - Target-independent pass to mark safe points
358/// in machine code. Must be added very late during code generation, just
359/// prior to output, and importantly after all CFG transformations (such as
360/// branch folding).
362
363/// MachineCSE - This pass performs global CSE on machine instructions.
364LLVM_ABI extern char &MachineCSELegacyID;
365
366/// MIRCanonicalizer - This pass canonicalizes MIR by renaming vregs
367/// according to the semantics of the instruction as well as hoists
368/// code.
369LLVM_ABI extern char &MIRCanonicalizerID;
370
371/// ImplicitNullChecks - This pass folds null pointer checks into nearby
372/// memory operations.
373LLVM_ABI extern char &ImplicitNullChecksID;
374
375/// This pass performs loop invariant code motion on machine instructions.
376LLVM_ABI extern char &MachineLICMID;
377
378/// This pass performs loop invariant code motion on machine instructions.
379/// This variant works before register allocation. \see MachineLICMID.
380LLVM_ABI extern char &EarlyMachineLICMID;
381
382/// MachineSinking - This pass performs sinking on machine instructions.
384
385/// MachineCopyPropagation - This pass performs copy propagation on
386/// machine instructions.
388
390createMachineCopyPropagationPass(bool UseCopyInstr);
391
392/// MachineLateInstrsCleanup - This pass removes redundant identical
393/// instructions after register allocation and rematerialization.
395
396/// PeepholeOptimizer - This pass performs peephole optimizations -
397/// like extension and comparison eliminations.
399
400/// OptimizePHIs - This pass optimizes machine instruction PHIs
401/// to take advantage of opportunities created during DAG legalization.
402LLVM_ABI extern char &OptimizePHIsLegacyID;
403
404/// StackSlotColoring - This pass performs stack slot coloring.
405LLVM_ABI extern char &StackSlotColoringID;
406
407/// This pass lays out funclets contiguously.
408LLVM_ABI extern char &FuncletLayoutID;
409
410/// This pass inserts the XRay instrumentation sleds if they are supported by
411/// the target platform.
413
414/// This pass inserts FEntry calls
415LLVM_ABI extern char &FEntryInserterID;
416
417/// This pass implements the "patchable-function" attribute.
418LLVM_ABI extern char &PatchableFunctionID;
419
420/// createStackProtectorPass - This pass adds stack protectors to functions.
421///
423
424/// createMachineVerifierPass - This pass verifies cenerated machine code
425/// instructions for correctness.
426///
428
429/// createDwarfEHPass - This pass mulches exception handling code into a form
430/// adapted to code generation. Required if using dwarf exception handling.
432
433/// createWinEHPass - Prepares personality functions used by MSVC on Windows,
434/// in addition to the Itanium LSDA based personalities.
435LLVM_ABI FunctionPass *createWinEHPass(bool DemoteCatchSwitchPHIOnly = false);
436
437/// createSjLjEHPreparePass - This pass adapts exception handling code to use
438/// the GCC-style builtin setjmp/longjmp (sjlj) to handling EH control flow.
439///
441
442/// createWasmEHPass - This pass adapts exception handling code to use
443/// WebAssembly's exception handling scheme.
445
446/// LocalStackSlotAllocation - This pass assigns local frame indices to stack
447/// slots relative to one another and allocates base registers to access them
448/// when it is estimated by the target to be out of range of normal frame
449/// pointer or stack pointer index addressing.
451
452/// This pass expands pseudo-instructions, reserves registers and adjusts
453/// machine frame information.
454LLVM_ABI extern char &FinalizeISelID;
455
456/// UnpackMachineBundles - This pass unpack machine instruction bundles.
458
460 std::function<bool(const MachineFunction &)> Ftor);
461
462/// StackMapLiveness - This pass analyses the register live-out set of
463/// stackmap/patchpoint intrinsics and attaches the calculated information to
464/// the intrinsic for later emission to the StackMap.
465LLVM_ABI extern char &StackMapLivenessID;
466
467// MachineSanitizerBinaryMetadata - appends/finalizes sanitizer binary
468// metadata after llvm SanitizerBinaryMetadata pass.
470
471/// RemoveLoadsIntoFakeUses pass.
473
474/// RemoveRedundantDebugValues pass.
476
477/// MachineCFGPrinter pass.
478LLVM_ABI extern char &MachineCFGPrinterID;
479
480/// LiveDebugValues pass
481LLVM_ABI extern char &LiveDebugValuesID;
482
483/// InterleavedAccess Pass - This pass identifies and matches interleaved
484/// memory accesses to target specific intrinsics.
485///
487
488/// InterleavedLoadCombines Pass - This pass identifies interleaved loads and
489/// combines them into wide loads detectable by InterleavedAccessPass
490///
492
493/// LowerEmuTLS - This pass generates __emutls_[vt].xyz variables for all
494/// TLS variables for the emulated TLS model.
495///
497
499
500/// This pass lowers the \@llvm.load.relative and \@llvm.objc.* intrinsics to
501/// instructions. This is unsafe to do earlier because a pass may combine the
502/// constant initializer into the load, which may result in an overflowing
503/// evaluation.
505
506/// GlobalMerge - This pass merges internal (by default) globals into structs
507/// to enable reuse of a base pointer by indexed addressing modes.
508/// It can also be configured to focus on size optimizations only.
509///
511createGlobalMergePass(const TargetMachine *TM, unsigned MaximalOffset,
512 bool OnlyOptimizeForSize = false,
513 bool MergeExternalByDefault = false,
514 bool MergeConstantByDefault = false,
515 bool MergeConstAggressiveByDefault = false);
516
517/// This pass splits the stack into a safe stack and an unsafe stack to
518/// protect against stack-based overflow vulnerabilities.
520
521/// This pass detects subregister lanes in a virtual register that are used
522/// independently of other lanes and splits them into separate virtual
523/// registers.
525
526/// This pass is executed POST-RA to collect which physical registers are
527/// preserved by given machine function.
529
530/// Return a MachineFunction pass that identifies call sites
531/// and propagates register usage information of callee to caller
532/// if available with PysicalRegisterUsageInfo pass.
534
535/// This pass performs software pipelining on machine instructions.
536LLVM_ABI extern char &MachinePipelinerID;
537
538/// This pass frees the memory occupied by the MachineFunction.
540
541/// This pass performs merging similar functions globally.
543
544/// This pass performs outlining on machine instructions directly before
545/// printing assembly.
547
548/// This pass expands the reduction intrinsics into sequences of shuffles.
550
551// This pass replaces intrinsics operating on vector operands with calls to
552// the corresponding function in a vector library (e.g., SVML, libmvec).
554
555// Expands large div/rem and floating-point instructions.
557
558/// Creates Break False Dependencies pass. \see BreakFalseDeps.cpp
560
561// This pass expands indirectbr instructions.
563
564/// Creates CFI Fixup pass. \see CFIFixup.cpp
566
567/// Creates CFI Instruction Inserter pass. \see CFIInstrInserter.cpp
569
570/// Creates CFGuard longjmp target identification pass.
571/// \see CFGuardLongjmp.cpp
573
574/// Creates Windows EH Continuation Guard target identification pass.
575/// \see EHContGuardTargets.cpp
577
578/// Create Hardware Loop pass. \see HardwareLoops.cpp
580
581/// This pass inserts pseudo probe annotation for callsite profiling.
583
584/// Create IR Type Promotion pass. \see TypePromotion.cpp
586
587/// Add Flow Sensitive Discriminators. PassNum specifies the
588/// sequence number of this pass (starting from 1).
591
592/// Read Flow Sensitive Profile.
594createMIRProfileLoaderPass(std::string File, std::string RemappingFile,
597
598/// Creates MIR Debugify pass. \see MachineDebugify.cpp
600
601/// Creates MIR Strip Debug pass. \see MachineStripDebug.cpp
602/// If OnlyDebugified is true then it will only strip debug info if it was
603/// added by a Debugify pass. The module will be left unchanged if the debug
604/// info was generated by another source such as clang.
606
607/// Creates MIR Check Debug pass. \see MachineCheckDebugify.cpp
609
610/// The pass fixups statepoint machine instruction to replace usage of
611/// caller saved registers with stack slots.
613
614/// When learning an eviction policy, extract score(reward) information,
615/// otherwise this does nothing
617
618/// JMC instrument pass.
620
621/// This pass converts conditional moves to conditional jumps when profitable.
623
625
626/// Creates Windows Secure Hot Patch pass. \see WindowsSecureHotPatching.cpp
628
629/// Lowers KCFI operand bundles for indirect calls.
631} // namespace llvm
632
633#endif
#define LLVM_ABI
Definition Compiler.h:213
#define F(x, y, z)
Definition MD5.cpp:54
#define P(N)
FunctionPass class - This class is used to implement most global optimizations.
Definition Pass.h:314
A smart pointer to a reference-counted object that inherits from RefCountedBase or ThreadSafeRefCount...
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
Definition Pass.h:255
Pass interface - Implemented by all 'passes'.
Definition Pass.h:99
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
The virtual file system interface.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI FunctionPass * createCFIFixup()
Creates CFI Fixup pass.
LLVM_ABI FunctionPass * createIndirectBrExpandPass()
LLVM_ABI FunctionPass * createFastRegisterAllocator()
FastRegisterAllocation Pass - This pass register allocates as fast as possible.
LLVM_ABI char & EarlyMachineLICMID
This pass performs loop invariant code motion on machine instructions.
LLVM_ABI char & GCMachineCodeAnalysisID
GCMachineCodeAnalysis - Target-independent pass to mark safe points in machine code.
LLVM_ABI char & PostRAHazardRecognizerID
PostRAHazardRecognizer - This pass runs the post-ra hazard recognizer.
std::function< bool(const TargetRegisterInfo &TRI, const MachineRegisterInfo &MRI, const Register Reg)> RegAllocFilterFunc
Filter function for register classes during regalloc.
LLVM_ABI char & MachineDominanceFrontierID
MachineDominanaceFrontier - This pass is a machine dominators analysis.
LLVM_ABI char & FEntryInserterID
This pass inserts FEntry calls.
LLVM_ABI char & GCLoweringID
GCLowering Pass - Used by gc.root to perform its default lowering operations.
LLVM_ABI ModulePass * createJMCInstrumenterPass()
JMC instrument pass.
LLVM_ABI char & InitUndefID
LLVM_ABI FunctionPass * createIfConverter(std::function< bool(const MachineFunction &)> Ftor)
LLVM_ABI char & RegisterCoalescerID
RegisterCoalescer - This pass merges live ranges to eliminate copies.
LLVM_ABI char & MIRAddFSDiscriminatorsID
This pass adds flow sensitive discriminators.
LLVM_ABI FunctionPass * createTypePromotionLegacyPass()
Create IR Type Promotion pass.
LLVM_ABI FunctionPass * createGreedyRegisterAllocator()
Greedy register allocation pass - This pass implements a global register allocator for optimized buil...
LLVM_ABI MachineFunctionPass * createPrintMIRPass(raw_ostream &OS)
MIRPrinting pass - this pass prints out the LLVM IR into the given stream using the MIR serialization...
LLVM_ABI FunctionPass * createSafeStackPass()
This pass splits the stack into a safe stack and an unsafe stack to protect against stack-based overf...
LLVM_ABI char & MachineCFGPrinterID
MachineCFGPrinter pass.
LLVM_ABI FunctionPass * createSelectOptimizePass()
This pass converts conditional moves to conditional jumps when profitable.
LLVM_ABI FunctionPass * createWasmEHPass()
createWasmEHPass - This pass adapts exception handling code to use WebAssembly's exception handling s...
LLVM_ABI char & FixupStatepointCallerSavedID
The pass fixups statepoint machine instruction to replace usage of caller saved registers with stack ...
LLVM_ABI Pass * createGlobalMergePass(const TargetMachine *TM, unsigned MaximalOffset, bool OnlyOptimizeForSize=false, bool MergeExternalByDefault=false, bool MergeConstantByDefault=false, bool MergeConstAggressiveByDefault=false)
GlobalMerge - This pass merges internal (by default) globals into structs to enable reuse of a base p...
LLVM_ABI MachineFunctionPass * createBasicBlockSectionsPass()
createBasicBlockSections Pass - This pass assigns sections to machine basic blocks and is enabled wit...
LLVM_ABI FunctionPass * createPseudoProbeInserter()
This pass inserts pseudo probe annotation for callsite profiling.
LLVM_ABI char & MachineDominatorsID
MachineDominators - This pass is a machine dominators analysis pass.
LLVM_ABI ModulePass * createLibcallLoweringInfoWrapper()
LLVM_ABI MachineFunctionPass * createPrologEpilogInserterPass()
LLVM_ABI ModulePass * createStripDebugMachineModulePass(bool OnlyDebugified)
Creates MIR Strip Debug pass.
LLVM_ABI char & TailDuplicateLegacyID
TailDuplicate - Duplicate blocks with unconditional branches into tails of their predecessors.
LLVM_ABI char & LiveStacksID
LiveStacks pass. An analysis keeping track of the liveness of stack slots.
LLVM_ABI char & ExpandPostRAPseudosID
ExpandPostRAPseudos - This pass expands pseudo instructions after register allocation.
LLVM_ABI char & PatchableFunctionID
This pass implements the "patchable-function" attribute.
LLVM_ABI char & PostRASchedulerID
PostRAScheduler - This pass performs post register allocation scheduling.
LLVM_ABI char & RemoveLoadsIntoFakeUsesID
RemoveLoadsIntoFakeUses pass.
LLVM_ABI char & MIRProfileLoaderPassID
This pass reads flow sensitive profile.
LLVM_ABI MachineFunctionPass * createStackFrameLayoutAnalysisPass()
StackFramePrinter pass - This pass prints out the machine function's stack frame to the given stream ...
LLVM_ABI ModulePass * createGlobalMergeFuncPass()
This pass performs merging similar functions globally.
LLVM_ABI char & MachineSanitizerBinaryMetadataID
LLVM_ABI FunctionPass * createStackProtectorPass()
createStackProtectorPass - This pass adds stack protectors to functions.
LLVM_ABI char & MIRCanonicalizerID
MIRCanonicalizer - This pass canonicalizes MIR by renaming vregs according to the semantics of the in...
LLVM_ABI char & MachineSchedulerID
MachineScheduler - This pass schedules machine instructions.
LLVM_ABI char & PostMachineSchedulerID
PostMachineScheduler - This pass schedules machine instructions postRA.
LLVM_ABI char & PeepholeOptimizerLegacyID
PeepholeOptimizer - This pass performs peephole optimizations - like extension and comparison elimina...
LLVM_ABI char & LiveDebugValuesID
LiveDebugValues pass.
LLVM_ABI char & PrologEpilogCodeInserterID
PrologEpilogCodeInserter - This pass inserts prolog and epilog code, and eliminates abstract frame re...
LLVM_ABI FunctionPass * createExpandIRInstsPass(CodeGenOptLevel)
LLVM_ABI char & EarlyIfConverterLegacyID
EarlyIfConverter - This pass performs if-conversion on SSA form by inserting cmov instructions.
LLVM_ABI MachineFunctionPass * createMachineFunctionSplitterPass()
createMachineFunctionSplitterPass - This pass splits machine functions using profile information.
LLVM_ABI FunctionPass * createMachineVerifierPass(const std::string &Banner)
createMachineVerifierPass - This pass verifies cenerated machine code instructions for correctness.
LLVM_ABI char & SpillPlacementID
SpillPlacement analysis.
LLVM_ABI char & MachineLoopInfoID
MachineLoopInfo - This pass is a loop analysis pass.
LLVM_ABI char & ShadowStackGCLoweringID
ShadowStackGCLowering - Implements the custom lowering mechanism used by the shadow stack GC.
LLVM_ABI char & MachineCombinerID
This pass performs instruction combining using trace metrics to estimate critical-path and resource d...
LLVM_ABI FunctionPass * createUnpackMachineBundlesLegacy(std::function< bool(const MachineFunction &)> Ftor)
LLVM_ABI char & ImplicitNullChecksID
ImplicitNullChecks - This pass folds null pointer checks into nearby memory operations.
LLVM_ABI FunctionPass * createMIRAddFSDiscriminatorsPass(sampleprof::FSDiscriminatorPass P)
Add Flow Sensitive Discriminators.
LLVM_ABI ModulePass * createPreISelIntrinsicLoweringPass()
This pass lowers the @llvm.load.relative and @llvm.objc.
LLVM_ABI MachineFunctionPass * createStaticDataSplitterPass()
createStaticDataSplitterPass - This is a machine-function pass that categorizes static data hotness u...
LLVM_ABI char & ShrinkWrapID
ShrinkWrap pass. Look for the best place to insert save and restore.
LLVM_ABI char & MachineLateInstrsCleanupID
MachineLateInstrsCleanup - This pass removes redundant identical instructions after register allocati...
LLVM_ABI char & BranchRelaxationPassID
BranchRelaxation - This pass replaces branches that need to jump further than is supported by a branc...
LLVM_ABI char & UnreachableMachineBlockElimID
UnreachableMachineBlockElimination - This pass removes unreachable machine basic blocks.
LLVM_ABI FunctionPass * createRegUsageInfoCollector()
This pass is executed POST-RA to collect which physical registers are preserved by given machine func...
LLVM_ABI MachineFunctionPass * createMIR2VecPrinterLegacyPass(raw_ostream &OS)
Create a machine pass that prints MIR2Vec embeddings.
Definition MIR2Vec.cpp:683
LLVM_ABI FunctionPass * createKCFIPass()
Lowers KCFI operand bundles for indirect calls.
Definition KCFI.cpp:61
LLVM_ABI MachineFunctionPass * createResetMachineFunctionPass(bool EmitFallbackDiag, bool AbortOnFailedISel)
This pass resets a MachineFunction when it has the FailedISel property as if it was just created.
LLVM_ABI FunctionPass * createComplexDeinterleavingPass(const TargetMachine *TM)
This pass implements generation of target-specific intrinsics to support handling of complex number a...
LLVM_ABI char & LiveRangeShrinkID
LiveRangeShrink pass.
LLVM_ABI char & XRayInstrumentationID
This pass inserts the XRay instrumentation sleds if they are supported by the target platform.
LLVM_ABI char & OptimizePHIsLegacyID
OptimizePHIs - This pass optimizes machine instruction PHIs to take advantage of opportunities create...
LLVM_ABI char & MIRPrintingPassID
MIRPrintingPass - this pass prints out the LLVM IR using the MIR serialization format.
LLVM_ABI char & StackMapLivenessID
StackMapLiveness - This pass analyses the register live-out set of stackmap/patchpoint intrinsics and...
LLVM_ABI ModulePass * createStaticDataAnnotatorPass()
createStaticDataAnnotatorPASS - This is a module pass that reads from StaticDataProfileInfoWrapperPas...
LLVM_ABI char & StackFrameLayoutAnalysisPassID
StackFramePrinter - This pass prints the stack frame layout and variable mappings.
LLVM_ABI char & FuncletLayoutID
This pass lays out funclets contiguously.
LLVM_ABI FunctionPass * createCodeGenPrepareLegacyPass()
createCodeGenPrepareLegacyPass - Transform the code to expose more pattern matching during instructio...
LLVM_ABI MachineFunctionPass * createMachineFunctionPrinterPass(raw_ostream &OS, const std::string &Banner="")
MachineFunctionPrinter pass - This pass prints out the machine function to the given stream as a debu...
LLVM_ABI char & RemoveRedundantDebugValuesID
RemoveRedundantDebugValues pass.
LLVM_ABI char & DetectDeadLanesID
This pass adds dead/undef flags after analyzing subregister lanes.
LLVM_ABI char & PostRAMachineSinkingID
This pass perform post-ra machine sink for COPY instructions.
LLVM_ABI FunctionPass * createDwarfEHPass(CodeGenOptLevel OptLevel)
createDwarfEHPass - This pass mulches exception handling code into a form adapted to code generation.
LLVM_ABI FunctionPass * createRegAllocScoringPass()
When learning an eviction policy, extract score(reward) information, otherwise this does nothing.
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:82
LLVM_ABI FunctionPass * createCFGuardLongjmpPass()
Creates CFGuard longjmp target identification pass.
LLVM_ABI char & StackSlotColoringID
StackSlotColoring - This pass performs stack slot coloring.
LLVM_ABI char & EarlyIfPredicatorID
EarlyIfPredicator - This pass performs if-conversion on SSA form by predicating if/else block and ins...
LLVM_ABI ModulePass * createMachineOutlinerPass(RunOutliner RunOutlinerMode)
This pass performs outlining on machine instructions directly before printing assembly.
LLVM_ABI FunctionPass * createDefaultPBQPRegisterAllocator()
PBQPRegisterAllocation Pass - This pass implements the Partitioned Boolean Quadratic Prograaming (PBQ...
LLVM_ABI FunctionPass * createInterleavedAccessPass()
InterleavedAccess Pass - This pass identifies and matches interleaved memory accesses to target speci...
LLVM_ABI ModulePass * createLowerEmuTLSPass()
LowerEmuTLS - This pass generates __emutls_[vt].xyz variables for all TLS variables for the emulated ...
LLVM_ABI FunctionPass * createBasicRegisterAllocator()
BasicRegisterAllocation Pass - This pass implements a degenerate global register allocator using the ...
LLVM_ABI char & MachineTraceMetricsID
MachineTraceMetrics - This pass computes critical path and CPU resource usage in an ensemble of trace...
LLVM_ABI char & ProcessImplicitDefsID
ProcessImpicitDefs pass - This pass removes IMPLICIT_DEFs.
LLVM_ABI ModulePass * createCheckDebugMachineModulePass()
Creates MIR Check Debug pass.
LLVM_ABI MachineFunctionPass * createInsertCodePrefetchPass()
createInsertCodePrefetchPass - This pass enables inserting code prefetch hints based on the basic blo...
LLVM_ABI FunctionPass * createBreakFalseDeps()
Creates Break False Dependencies pass.
LLVM_ABI char & MachinePipelinerID
This pass performs software pipelining on machine instructions.
LLVM_ABI FunctionPass * createMIRProfileLoaderPass(std::string File, std::string RemappingFile, sampleprof::FSDiscriminatorPass P, IntrusiveRefCntPtr< vfs::FileSystem > FS)
Read Flow Sensitive Profile.
LLVM_ABI char & EdgeBundlesWrapperLegacyID
EdgeBundles analysis - Bundle machine CFG edges.
LLVM_ABI MachineFunctionPass * createMIR2VecVocabPrinterLegacyPass(raw_ostream &OS)
MIR2VecVocabPrinter pass - This pass prints out the MIR2Vec vocabulary contents to the given stream a...
Definition MIR2Vec.cpp:630
LLVM_ABI char & MachineCSELegacyID
MachineCSE - This pass performs global CSE on machine instructions.
LLVM_ABI FunctionPass * createWinEHPass(bool DemoteCatchSwitchPHIOnly=false)
createWinEHPass - Prepares personality functions used by MSVC on Windows, in addition to the Itanium ...
LLVM_ABI char & MachineRegionInfoPassID
MachineRegionInfo - This pass computes SESE regions for machine functions.
LLVM_ABI MachineFunctionPass * createMachineBlockHashInfoPass()
createMachineBlockHashInfoPass - This pass computes basic block hashes.
LLVM_ABI char & LiveVariablesID
LiveVariables pass - This pass computes the set of blocks in which each variable is life and sets mac...
LLVM_ABI char & EarlyTailDuplicateLegacyID
Duplicate blocks with unconditional branches into tails of their predecessors.
LLVM_ABI FunctionPass * createExpandReductionsPass()
This pass expands the reduction intrinsics into sequences of shuffles.
LLVM_ABI FunctionPass * createSjLjEHPreparePass(const TargetMachine *TM)
createSjLjEHPreparePass - This pass adapts exception handling code to use the GCC-style builtin setjm...
LLVM_ABI MachineFunctionPass * createBasicBlockPathCloningPass()
LLVM_ABI char & StackColoringLegacyID
StackSlotColoring - This pass performs stack coloring and merging.
LLVM_ABI char & VirtRegRewriterID
VirtRegRewriter pass.
LLVM_ABI FunctionPass * createEHContGuardTargetsPass()
Creates Windows EH Continuation Guard target identification pass.
LLVM_ABI FunctionPass * createGCLoweringPass()
GCLowering Pass - Used by gc.root to perform its default lowering operations.
LLVM_ABI FunctionPass * createReplaceWithVeclibLegacyPass()
LLVM_ABI FunctionPass * createInlineAsmPreparePass()
LLVM_ABI FunctionPass * createVirtRegRewriter(bool ClearVirtRegs=true)
LLVM_ABI char & FinalizeISelID
This pass expands pseudo-instructions, reserves registers and adjusts machine frame information.
LLVM_ABI char & MachineSinkingLegacyID
MachineSinking - This pass performs sinking on machine instructions.
LLVM_ABI FunctionPass * createRegUsageInfoPropPass()
Return a MachineFunction pass that identifies call sites and propagates register usage information of...
LLVM_ABI char & IfConverterID
IfConverter - This pass performs machine code if conversion.
LLVM_ABI FunctionPass * createShadowStackGCLoweringPass()
ShadowStackGCLowering - Implements the custom lowering mechanism used by the shadow stack GC.
LLVM_ABI char & MachineBlockPlacementID
MachineBlockPlacement - This pass places basic blocks based on branch probabilities.
LLVM_ABI char & TwoAddressInstructionPassID
TwoAddressInstruction - This pass reduces two-address instructions to use two operands.
LLVM_ABI FunctionPass * createAtomicExpandLegacyPass()
AtomicExpandPass - At IR level this pass replace atomic instructions with __atomic_* library calls,...
LLVM_ABI MachineFunctionPass * createBasicBlockMatchingAndInferencePass()
createBasicBlockMatchingAndInferencePass - This pass enables matching and inference when using propel...
LLVM_ABI char & LocalStackSlotAllocationID
LocalStackSlotAllocation - This pass assigns local frame indices to stack slots relative to one anoth...
LLVM_ABI char & RAGreedyLegacyID
Greedy register allocator.
LLVM_ABI char & BranchFolderPassID
BranchFolding - This pass performs machine code CFG based optimizations to delete branches to branche...
LLVM_ABI MachineFunctionPass * createMachineCopyPropagationPass(bool UseCopyInstr)
LLVM_ABI char & PHIEliminationID
PHIElimination - This pass eliminates machine instruction PHI nodes by inserting copy instructions.
LLVM_ABI ModulePass * createDebugifyMachineModulePass()
Creates MIR Debugify pass.
LLVM_ABI char & MachineFunctionPrinterPassID
MachineFunctionPrinterPass - This pass prints out MachineInstr's.
LLVM_ABI FunctionPass * createFreeMachineFunctionPass()
This pass frees the memory occupied by the MachineFunction.
LLVM_ABI FunctionPass * createCFIInstrInserter()
Creates CFI Instruction Inserter pass.
LLVM_ABI ModulePass * createWindowsSecureHotPatchingPass()
Creates Windows Secure Hot Patch pass.
LLVM_ABI char & RenameIndependentSubregsID
This pass detects subregister lanes in a virtual register that are used independently of other lanes ...
LLVM_ABI char & MachineLICMID
This pass performs loop invariant code motion on machine instructions.
LLVM_ABI char & MachineBlockPlacementStatsID
MachineBlockPlacementStats - This pass collects statistics about the basic block placement using bran...
LLVM_ABI MachineFunctionPass * createGCEmptyBasicBlocksLegacyPass()
createGCEmptyBasicblocksPass - Empty basic blocks (basic blocks without real code) appear as the resu...
LLVM_ABI FunctionPass * createInterleavedLoadCombinePass()
InterleavedLoadCombines Pass - This pass identifies interleaved loads and combines them into wide loa...
LLVM_ABI char & RABasicID
Basic register allocator.
LLVM_ABI char & LiveIntervalsID
LiveIntervals - This analysis keeps track of the live ranges of virtual and physical registers.
LLVM_ABI char & MachineCopyPropagationID
MachineCopyPropagation - This pass performs copy propagation on machine instructions.
LLVM_ABI char & AtomicExpandID
AtomicExpandID – Lowers atomic operations in terms of either cmpxchg load-linked/store-conditional lo...
LLVM_ABI char & DeadMachineInstructionElimID
DeadMachineInstructionElim - This pass removes dead machine instructions.
LLVM_ABI FunctionPass * createHardwareLoopsLegacyPass()
Create Hardware Loop pass.
LLVM_ABI char & UnpackMachineBundlesID
UnpackMachineBundles - This pass unpack machine instruction bundles.
LLVM_ABI FunctionPass * createUnreachableBlockEliminationPass()
createUnreachableBlockEliminationPass - The LLVM code generator does not work well with unreachable b...