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