1//===- MachinePassRegistry.def - Registry of 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 is used as the registry of passes that are for target-independent
10// code generator.
11//
12//===----------------------------------------------------------------------===//
13
14// NOTE: NO INCLUDE GUARD DESIRED!
15
16#ifndef MODULE_ANALYSIS
17#define MODULE_ANALYSIS(NAME, CREATE_PASS)
18#endif
19MODULE_ANALYSIS("collector-metadata", CollectorMetadataAnalysis())
20MODULE_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
21#undef MODULE_ANALYSIS
22
23#ifndef MODULE_PASS
24#define MODULE_PASS(NAME, CREATE_PASS)
25#endif
26MODULE_PASS("global-merge", GlobalMergePass(TM, GlobalMergeOptions()))
27MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass())
28MODULE_PASS("lower-emutls", LowerEmuTLSPass())
29MODULE_PASS("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass())
30MODULE_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass())
31#undef MODULE_PASS
32
33#ifndef FUNCTION_ANALYSIS
34#define FUNCTION_ANALYSIS(NAME, CREATE_PASS)
35#endif
36FUNCTION_ANALYSIS("gc-function", GCFunctionAnalysis())
37FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
38FUNCTION_ANALYSIS("ssp-layout", SSPLayoutAnalysis())
39FUNCTION_ANALYSIS("target-ir", TargetIRAnalysis(std::move(TM.getTargetIRAnalysis())))
40#undef FUNCTION_ANALYSIS
41
42#ifndef FUNCTION_PASS
43#define FUNCTION_PASS(NAME, CREATE_PASS)
44#endif
45FUNCTION_PASS("callbr-prepare", CallBrPreparePass())
46FUNCTION_PASS("cfguard", CFGuardPass())
47FUNCTION_PASS("codegenprepare", CodeGenPreparePass(TM))
48FUNCTION_PASS("consthoist", ConstantHoistingPass())
49FUNCTION_PASS("dwarf-eh-prepare", DwarfEHPreparePass(TM))
50FUNCTION_PASS("ee-instrument", EntryExitInstrumenterPass(false))
51FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass(TM))
52FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass(TM))
53FUNCTION_PASS("expand-memcmp", ExpandMemCmpPass(TM))
54FUNCTION_PASS("expand-reductions", ExpandReductionsPass())
55FUNCTION_PASS("expandvp", ExpandVectorPredicationPass())
56FUNCTION_PASS("gc-lowering", GCLoweringPass())
57FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass(TM))
58FUNCTION_PASS("interleaved-access", InterleavedAccessPass(TM))
59FUNCTION_PASS("interleaved-load-combine", InterleavedLoadCombinePass(TM))
60FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass())
61FUNCTION_PASS("lower-invoke", LowerInvokePass())
62FUNCTION_PASS("mergeicmps", MergeICmpsPass())
63FUNCTION_PASS("partially-inline-libcalls", PartiallyInlineLibCallsPass())
64FUNCTION_PASS("post-inline-ee-instrument", EntryExitInstrumenterPass(true))
65FUNCTION_PASS("replace-with-veclib", ReplaceWithVeclib())
66FUNCTION_PASS("safe-stack", SafeStackPass(TM))
67FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass())
68FUNCTION_PASS("select-optimize", SelectOptimizePass(TM))
69FUNCTION_PASS("sjlj-eh-prepare", SjLjEHPreparePass(TM))
70FUNCTION_PASS("stack-protector", StackProtectorPass(TM))
71FUNCTION_PASS("tlshoist", TLSVariableHoistPass())
72FUNCTION_PASS("unreachableblockelim", UnreachableBlockElimPass())
73FUNCTION_PASS("verify", VerifierPass())
74FUNCTION_PASS("wasm-eh-prepare", WasmEHPreparePass())
75FUNCTION_PASS("win-eh-prepare", WinEHPreparePass())
76#undef FUNCTION_PASS
77
78#ifndef LOOP_PASS
79#define LOOP_PASS(NAME, CREATE_PASS)
80#endif
81LOOP_PASS("loop-reduce", LoopStrengthReducePass())
82#undef LOOP_PASS
83
84#ifndef MACHINE_MODULE_PASS
85#define MACHINE_MODULE_PASS(NAME, CREATE_PASS)
86#endif
87#undef MACHINE_MODULE_PASS
88
89#ifndef MACHINE_FUNCTION_ANALYSIS
90#define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS)
91#endif
92MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
93// LiveVariables currently requires pure SSA form.
94// FIXME: Once TwoAddressInstruction pass no longer uses kill flags,
95// LiveVariables can be removed completely, and LiveIntervals can be directly
96// computed. (We still either need to regenerate kill flags after regalloc, or
97// preferably fix the scavenger to not depend on them).
98// MACHINE_FUNCTION_ANALYSIS("live-vars", LiveVariablesAnalysis())
99
100// MACHINE_FUNCTION_ANALYSIS("live-stacks", LiveStacksPass())
101// MACHINE_FUNCTION_ANALYSIS("slot-indexes", SlotIndexesAnalysis())
102// MACHINE_FUNCTION_ANALYSIS("edge-bundles", EdgeBundlesAnalysis())
103// MACHINE_FUNCTION_ANALYSIS("lazy-machine-bfi",
104// LazyMachineBlockFrequencyInfoAnalysis())
105// MACHINE_FUNCTION_ANALYSIS("machine-bfi", MachineBlockFrequencyInfoAnalysis())
106// MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopInfoAnalysis())
107// MACHINE_FUNCTION_ANALYSIS("machine-dom-frontier",
108// MachineDominanceFrontierAnalysis())
109// MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis())
110// MACHINE_FUNCTION_ANALYSIS("machine-ore",
111// MachineOptimizationRemarkEmitterPassAnalysis())
112// MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
113// MachinePostDominatorTreeAnalysis())
114// MACHINE_FUNCTION_ANALYSIS("machine-region-info",
115// MachineRegionInfoPassAnalysis())
116// MACHINE_FUNCTION_ANALYSIS("machine-trace-metrics",
117// MachineTraceMetricsAnalysis()) MACHINE_FUNCTION_ANALYSIS("reaching-def",
118// ReachingDefAnalysisAnalysis()) MACHINE_FUNCTION_ANALYSIS("live-reg-matrix",
119// LiveRegMatrixAnalysis()) MACHINE_FUNCTION_ANALYSIS("gc-analysis",
120// GCMachineCodeAnalysisPass())
121#undef MACHINE_FUNCTION_ANALYSIS
122
123#ifndef MACHINE_FUNCTION_PASS
124#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
125#endif
126MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass())
127// MACHINE_FUNCTION_PASS("free-machine-function", FreeMachineFunctionPass())
128MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
129MACHINE_FUNCTION_PASS("print", PrintMIRPass())
130MACHINE_FUNCTION_PASS("require-all-machine-function-properties",
131 RequireAllMachineFunctionPropertiesPass())
132#undef MACHINE_FUNCTION_PASS
133
134// After a pass is converted to new pass manager, its entry should be moved from
135// dummy table to the normal one. For example, for a machine function pass,
136// DUMMY_MACHINE_FUNCTION_PASS to MACHINE_FUNCTION_PASS.
137
138#ifndef DUMMY_FUNCTION_PASS
139#define DUMMY_FUNCTION_PASS(NAME, PASS_NAME)
140#endif
141DUMMY_FUNCTION_PASS("atomic-expand", AtomicExpandPass)
142#undef DUMMY_FUNCTION_PASS
143
144#ifndef DUMMY_MACHINE_MODULE_PASS
145#define DUMMY_MACHINE_MODULE_PASS(NAME, PASS_NAME)
146#endif
147DUMMY_MACHINE_MODULE_PASS("machine-outliner", MachineOutlinerPass)
148DUMMY_MACHINE_MODULE_PASS("pseudo-probe-inserter", PseudoProbeInserterPass)
149DUMMY_MACHINE_MODULE_PASS("mir-debugify", DebugifyMachineModule)
150DUMMY_MACHINE_MODULE_PASS("mir-check-debugify", CheckDebugMachineModulePass)
151DUMMY_MACHINE_MODULE_PASS("mir-strip-debug", StripDebugMachineModulePass)
152#undef DUMMY_MACHINE_MODULE_PASS
153
154#ifndef DUMMY_MACHINE_FUNCTION_PASS
155#define DUMMY_MACHINE_FUNCTION_PASS(NAME, PASS_NAME)
156#endif
157DUMMY_MACHINE_FUNCTION_PASS("bbsections-prepare", BasicBlockSectionsPass)
158DUMMY_MACHINE_FUNCTION_PASS("bbsections-profile-reader", BasicBlockSectionsProfileReaderPass)
159DUMMY_MACHINE_FUNCTION_PASS("block-placement", MachineBlockPlacementPass)
160DUMMY_MACHINE_FUNCTION_PASS("block-placement-stats", MachineBlockPlacementStatsPass)
161DUMMY_MACHINE_FUNCTION_PASS("branch-folder", BranchFolderPass)
162DUMMY_MACHINE_FUNCTION_PASS("break-false-deps", BreakFalseDepsPass)
163DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp", CFGuardLongjmpPass)
164DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass)
165DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter", CFIInstrInserterPass)
166DUMMY_MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass)
167DUMMY_MACHINE_FUNCTION_PASS("dot-machine-cfg", MachineCFGPrinter)
168DUMMY_MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass)
169DUMMY_MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass)
170DUMMY_MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass)
171DUMMY_MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass)
172DUMMY_MACHINE_FUNCTION_PASS("finalize-isel", FinalizeISelPass)
173DUMMY_MACHINE_FUNCTION_PASS("fixup-statepoint-caller-saved", FixupStatepointCallerSavedPass)
174DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderNewPass)
175DUMMY_MACHINE_FUNCTION_PASS("funclet-layout", FuncletLayoutPass)
176DUMMY_MACHINE_FUNCTION_PASS("gc-empty-basic-blocks", GCEmptyBasicBlocksPass)
177DUMMY_MACHINE_FUNCTION_PASS("implicit-null-checks", ImplicitNullChecksPass)
178DUMMY_MACHINE_FUNCTION_PASS("init-undef-pass", InitUndefPass)
179DUMMY_MACHINE_FUNCTION_PASS("instruction-select", InstructionSelectPass)
180DUMMY_MACHINE_FUNCTION_PASS("irtranslator", IRTranslatorPass)
181DUMMY_MACHINE_FUNCTION_PASS("kcfi", MachineKCFIPass)
182DUMMY_MACHINE_FUNCTION_PASS("legalizer", LegalizerPass)
183DUMMY_MACHINE_FUNCTION_PASS("livedebugvalues", LiveDebugValuesPass)
184DUMMY_MACHINE_FUNCTION_PASS("liveintervals", LiveIntervalsPass)
185DUMMY_MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotPass)
186DUMMY_MACHINE_FUNCTION_PASS("lrshrink", LiveRangeShrinkPass)
187DUMMY_MACHINE_FUNCTION_PASS("machine-combiner", MachineCombinerPass)
188DUMMY_MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass)
189DUMMY_MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass)
190DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass)
191DUMMY_MACHINE_FUNCTION_PASS("machine-latecleanup", MachineLateInstrsCleanupPass)
192DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata)
193DUMMY_MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass)
194DUMMY_MACHINE_FUNCTION_PASS("machine-sink", MachineSinkingPass)
195DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
196DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
197DUMMY_MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass)
198DUMMY_MACHINE_FUNCTION_PASS("machineverifier", MachineVerifierPass)
199DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
200DUMMY_MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass)
201DUMMY_MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass)
202DUMMY_MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass)
203DUMMY_MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass)
204DUMMY_MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass)
205DUMMY_MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass)
206DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass)
207DUMMY_MACHINE_FUNCTION_PASS("postrapseudos", ExpandPostRAPseudosPass)
208DUMMY_MACHINE_FUNCTION_PASS("print-machine-cycles", MachineCycleInfoPrinterPass)
209DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", MachineUniformityInfoPrinterPass)
210DUMMY_MACHINE_FUNCTION_PASS("processimpdefs", ProcessImplicitDefsPass)
211DUMMY_MACHINE_FUNCTION_PASS("prologepilog", PrologEpilogInserterPass)
212DUMMY_MACHINE_FUNCTION_PASS("prologepilog-code", PrologEpilogCodeInserterPass)
213DUMMY_MACHINE_FUNCTION_PASS("ra-basic", RABasicPass)
214DUMMY_MACHINE_FUNCTION_PASS("ra-fast", RAFastPass)
215DUMMY_MACHINE_FUNCTION_PASS("ra-greedy", RAGreedyPass)
216DUMMY_MACHINE_FUNCTION_PASS("ra-pbqp", RAPBQPPass)
217DUMMY_MACHINE_FUNCTION_PASS("reg-usage-collector", RegUsageInfoCollectorPass)
218DUMMY_MACHINE_FUNCTION_PASS("reg-usage-propagation", RegUsageInfoPropagationPass)
219DUMMY_MACHINE_FUNCTION_PASS("regalloc", RegAllocPass)
220DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass)
221DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass)
222DUMMY_MACHINE_FUNCTION_PASS("removeredundantdebugvalues", RemoveRedundantDebugValuesPass)
223DUMMY_MACHINE_FUNCTION_PASS("rename-independent-subregs", RenameIndependentSubregsPass)
224DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass)
225DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass)
226DUMMY_MACHINE_FUNCTION_PASS("simple-register-coalescing", RegisterCoalescerPass)
227DUMMY_MACHINE_FUNCTION_PASS("stack-coloring", StackColoringPass)
228DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass)
229DUMMY_MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass)
230DUMMY_MACHINE_FUNCTION_PASS("stackmap-liveness", StackMapLivenessPass)
231DUMMY_MACHINE_FUNCTION_PASS("tailduplication", TailDuplicatePass)
232DUMMY_MACHINE_FUNCTION_PASS("twoaddressinstruction", TwoAddressInstructionPass)
233DUMMY_MACHINE_FUNCTION_PASS("unpack-mi-bundles", UnpackMachineBundlesPass)
234DUMMY_MACHINE_FUNCTION_PASS("virtregrewriter", VirtRegRewriterPass)
235DUMMY_MACHINE_FUNCTION_PASS("xray-instrumentation", XRayInstrumentationPass)
236#undef DUMMY_MACHINE_FUNCTION_PASS
237

source code of llvm/include/llvm/Passes/MachinePassRegistry.def