xref: /llvm-project/llvm/include/llvm/Passes/MachinePassRegistry.def (revision de209fa11b5455155228bcdba012b6074388b917)
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("machine-module-info", MachineModuleAnalysis())
21MODULE_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
22#undef MODULE_ANALYSIS
23
24#ifndef MODULE_PASS
25#define MODULE_PASS(NAME, CREATE_PASS)
26#endif
27MODULE_PASS("global-merge", GlobalMergePass(TM, GlobalMergeOptions()))
28MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass())
29MODULE_PASS("lower-emutls", LowerEmuTLSPass())
30MODULE_PASS("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass())
31MODULE_PASS("print<regusage>", PhysicalRegisterUsageInfoPrinterPass(errs()))
32MODULE_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass())
33MODULE_PASS("global-merge-func", GlobalMergeFuncPass())
34#undef MODULE_PASS
35
36#ifndef FUNCTION_ANALYSIS
37#define FUNCTION_ANALYSIS(NAME, CREATE_PASS)
38#endif
39FUNCTION_ANALYSIS("gc-function", GCFunctionAnalysis())
40FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
41FUNCTION_ANALYSIS("ssp-layout", SSPLayoutAnalysis())
42FUNCTION_ANALYSIS("target-ir", TargetIRAnalysis(std::move(TM.getTargetIRAnalysis())))
43#undef FUNCTION_ANALYSIS
44
45#ifndef FUNCTION_PASS
46#define FUNCTION_PASS(NAME, CREATE_PASS)
47#endif
48FUNCTION_PASS("callbr-prepare", CallBrPreparePass())
49FUNCTION_PASS("cfguard", CFGuardPass())
50FUNCTION_PASS("codegenprepare", CodeGenPreparePass(TM))
51FUNCTION_PASS("consthoist", ConstantHoistingPass())
52FUNCTION_PASS("dwarf-eh-prepare", DwarfEHPreparePass(TM))
53FUNCTION_PASS("ee-instrument", EntryExitInstrumenterPass(false))
54FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass(TM))
55FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass(TM))
56FUNCTION_PASS("expand-memcmp", ExpandMemCmpPass(TM))
57FUNCTION_PASS("expand-reductions", ExpandReductionsPass())
58FUNCTION_PASS("gc-lowering", GCLoweringPass())
59FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass(TM))
60FUNCTION_PASS("interleaved-access", InterleavedAccessPass(TM))
61FUNCTION_PASS("interleaved-load-combine", InterleavedLoadCombinePass(TM))
62FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass())
63FUNCTION_PASS("lower-invoke", LowerInvokePass())
64FUNCTION_PASS("mergeicmps", MergeICmpsPass())
65FUNCTION_PASS("partially-inline-libcalls", PartiallyInlineLibCallsPass())
66FUNCTION_PASS("post-inline-ee-instrument", EntryExitInstrumenterPass(true))
67FUNCTION_PASS("replace-with-veclib", ReplaceWithVeclib())
68FUNCTION_PASS("safe-stack", SafeStackPass(TM))
69FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass())
70FUNCTION_PASS("select-optimize", SelectOptimizePass(TM))
71FUNCTION_PASS("sjlj-eh-prepare", SjLjEHPreparePass(TM))
72FUNCTION_PASS("stack-protector", StackProtectorPass(TM))
73FUNCTION_PASS("tlshoist", TLSVariableHoistPass())
74FUNCTION_PASS("unreachableblockelim", UnreachableBlockElimPass())
75FUNCTION_PASS("verify", VerifierPass())
76FUNCTION_PASS("wasm-eh-prepare", WasmEHPreparePass())
77FUNCTION_PASS("win-eh-prepare", WinEHPreparePass())
78#undef FUNCTION_PASS
79
80#ifndef LOOP_PASS
81#define LOOP_PASS(NAME, CREATE_PASS)
82#endif
83LOOP_PASS("loop-reduce", LoopStrengthReducePass())
84LOOP_PASS("loop-term-fold", LoopTermFoldPass())
85#undef LOOP_PASS
86
87#ifndef MACHINE_MODULE_PASS
88#define MACHINE_MODULE_PASS(NAME, CREATE_PASS)
89#endif
90#undef MACHINE_MODULE_PASS
91
92#ifndef MACHINE_FUNCTION_ANALYSIS
93#define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS)
94#endif
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).
100MACHINE_FUNCTION_ANALYSIS("edge-bundles", EdgeBundlesAnalysis())
101MACHINE_FUNCTION_ANALYSIS("livedebugvars", LiveDebugVariablesAnalysis())
102MACHINE_FUNCTION_ANALYSIS("live-intervals", LiveIntervalsAnalysis())
103MACHINE_FUNCTION_ANALYSIS("live-reg-matrix", LiveRegMatrixAnalysis())
104MACHINE_FUNCTION_ANALYSIS("live-stacks", LiveStacksAnalysis())
105MACHINE_FUNCTION_ANALYSIS("live-vars", LiveVariablesAnalysis())
106MACHINE_FUNCTION_ANALYSIS("machine-block-freq", MachineBlockFrequencyAnalysis())
107MACHINE_FUNCTION_ANALYSIS("machine-branch-prob",
108                          MachineBranchProbabilityAnalysis())
109MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis())
110MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopAnalysis())
111MACHINE_FUNCTION_ANALYSIS("machine-opt-remark-emitter",
112                          MachineOptimizationRemarkEmitterAnalysis())
113MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
114                          MachinePostDominatorTreeAnalysis())
115MACHINE_FUNCTION_ANALYSIS("machine-trace-metrics", MachineTraceMetricsAnalysis())
116MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
117MACHINE_FUNCTION_ANALYSIS("slot-indexes", SlotIndexesAnalysis())
118MACHINE_FUNCTION_ANALYSIS("spill-code-placement", SpillPlacementAnalysis())
119MACHINE_FUNCTION_ANALYSIS("virtregmap", VirtRegMapAnalysis())
120// MACHINE_FUNCTION_ANALYSIS("lazy-machine-bfi",
121// LazyMachineBlockFrequencyInfoAnalysis())
122// MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopInfoAnalysis())
123// MACHINE_FUNCTION_ANALYSIS("machine-dom-frontier",
124// MachineDominanceFrontierAnalysis())
125// MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
126// MachinePostDominatorTreeAnalysis())
127// MACHINE_FUNCTION_ANALYSIS("machine-region-info",
128// MachineRegionInfoPassAnalysis())
129// MACHINE_FUNCTION_ANALYSIS("reaching-def",
130// ReachingDefAnalysisAnalysis()) MACHINE_FUNCTION_ANALYSIS("gc-analysis",
131// GCMachineCodeAnalysisPass())
132#undef MACHINE_FUNCTION_ANALYSIS
133
134#ifndef MACHINE_FUNCTION_PASS
135#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
136#endif
137MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass())
138MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass())
139MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass())
140MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass())
141MACHINE_FUNCTION_PASS("finalize-isel", FinalizeISelPass())
142MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass())
143MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass())
144MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass())
145MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
146MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass())
147MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass())
148MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass())
149MACHINE_FUNCTION_PASS("print", PrintMIRPass())
150MACHINE_FUNCTION_PASS("print<livedebugvars>", LiveDebugVariablesPrinterPass(errs()))
151MACHINE_FUNCTION_PASS("print<live-intervals>", LiveIntervalsPrinterPass(errs()))
152MACHINE_FUNCTION_PASS("print<live-stacks>", LiveStacksPrinterPass(errs()))
153MACHINE_FUNCTION_PASS("print<live-vars>", LiveVariablesPrinterPass(errs()))
154MACHINE_FUNCTION_PASS("print<machine-block-freq>",
155                      MachineBlockFrequencyPrinterPass(errs()))
156MACHINE_FUNCTION_PASS("print<machine-branch-prob>",
157                      MachineBranchProbabilityPrinterPass(errs()))
158MACHINE_FUNCTION_PASS("print<machine-dom-tree>",
159                      MachineDominatorTreePrinterPass(errs()))
160MACHINE_FUNCTION_PASS("print<machine-loops>", MachineLoopPrinterPass(errs()))
161MACHINE_FUNCTION_PASS("print<machine-post-dom-tree>",
162                      MachinePostDominatorTreePrinterPass(errs()))
163MACHINE_FUNCTION_PASS("print<slot-indexes>", SlotIndexesPrinterPass(errs()))
164MACHINE_FUNCTION_PASS("print<virtregmap>", VirtRegMapPrinterPass(errs()))
165MACHINE_FUNCTION_PASS("reg-usage-collector", RegUsageInfoCollectorPass())
166MACHINE_FUNCTION_PASS("reg-usage-propagation", RegUsageInfoPropagationPass())
167MACHINE_FUNCTION_PASS("require-all-machine-function-properties",
168                      RequireAllMachineFunctionPropertiesPass())
169MACHINE_FUNCTION_PASS("stack-coloring", StackColoringPass())
170MACHINE_FUNCTION_PASS("tailduplication", TailDuplicatePass())
171MACHINE_FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass())
172MACHINE_FUNCTION_PASS("two-address-instruction", TwoAddressInstructionPass())
173MACHINE_FUNCTION_PASS("verify", MachineVerifierPass())
174MACHINE_FUNCTION_PASS("verify<machine-trace-metrics>", MachineTraceMetricsVerifierPass())
175#undef MACHINE_FUNCTION_PASS
176
177#ifndef MACHINE_FUNCTION_PASS_WITH_PARAMS
178#define MACHINE_FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER,    \
179                                          PARAMS)
180#endif
181MACHINE_FUNCTION_PASS_WITH_PARAMS(
182    "regallocfast", "RegAllocFastPass",
183    [](RegAllocFastPassOptions Opts) { return RegAllocFastPass(Opts); },
184    [PB = this](StringRef Params) {
185      return parseRegAllocFastPassOptions(*PB, Params);
186    },
187    "filter=reg-filter;no-clear-vregs")
188#undef MACHINE_FUNCTION_PASS_WITH_PARAMS
189
190// After a pass is converted to new pass manager, its entry should be moved from
191// dummy table to the normal one. For example, for a machine function pass,
192// DUMMY_MACHINE_FUNCTION_PASS to MACHINE_FUNCTION_PASS.
193
194#ifndef DUMMY_FUNCTION_PASS
195#define DUMMY_FUNCTION_PASS(NAME, PASS_NAME)
196#endif
197#undef DUMMY_FUNCTION_PASS
198
199#ifndef DUMMY_MACHINE_MODULE_PASS
200#define DUMMY_MACHINE_MODULE_PASS(NAME, PASS_NAME)
201#endif
202DUMMY_MACHINE_MODULE_PASS("machine-outliner", MachineOutlinerPass)
203DUMMY_MACHINE_MODULE_PASS("pseudo-probe-inserter", PseudoProbeInserterPass)
204DUMMY_MACHINE_MODULE_PASS("mir-debugify", DebugifyMachineModule)
205DUMMY_MACHINE_MODULE_PASS("mir-check-debugify", CheckDebugMachineModulePass)
206DUMMY_MACHINE_MODULE_PASS("mir-strip-debug", StripDebugMachineModulePass)
207#undef DUMMY_MACHINE_MODULE_PASS
208
209#ifndef DUMMY_MACHINE_FUNCTION_PASS
210#define DUMMY_MACHINE_FUNCTION_PASS(NAME, PASS_NAME)
211#endif
212DUMMY_MACHINE_FUNCTION_PASS("bbsections-prepare", BasicBlockSectionsPass)
213DUMMY_MACHINE_FUNCTION_PASS("bbsections-profile-reader", BasicBlockSectionsProfileReaderPass)
214DUMMY_MACHINE_FUNCTION_PASS("block-placement", MachineBlockPlacementPass)
215DUMMY_MACHINE_FUNCTION_PASS("block-placement-stats", MachineBlockPlacementStatsPass)
216DUMMY_MACHINE_FUNCTION_PASS("branch-folder", BranchFolderPass)
217DUMMY_MACHINE_FUNCTION_PASS("break-false-deps", BreakFalseDepsPass)
218DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp", CFGuardLongjmpPass)
219DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass)
220DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter", CFIInstrInserterPass)
221DUMMY_MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass)
222DUMMY_MACHINE_FUNCTION_PASS("dot-machine-cfg", MachineCFGPrinter)
223DUMMY_MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass)
224DUMMY_MACHINE_FUNCTION_PASS("fixup-statepoint-caller-saved", FixupStatepointCallerSavedPass)
225DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderNewPass)
226DUMMY_MACHINE_FUNCTION_PASS("funclet-layout", FuncletLayoutPass)
227DUMMY_MACHINE_FUNCTION_PASS("gc-empty-basic-blocks", GCEmptyBasicBlocksPass)
228DUMMY_MACHINE_FUNCTION_PASS("implicit-null-checks", ImplicitNullChecksPass)
229DUMMY_MACHINE_FUNCTION_PASS("init-undef-pass", InitUndefPass)
230DUMMY_MACHINE_FUNCTION_PASS("instruction-select", InstructionSelectPass)
231DUMMY_MACHINE_FUNCTION_PASS("irtranslator", IRTranslatorPass)
232DUMMY_MACHINE_FUNCTION_PASS("kcfi", MachineKCFIPass)
233DUMMY_MACHINE_FUNCTION_PASS("legalizer", LegalizerPass)
234DUMMY_MACHINE_FUNCTION_PASS("livedebugvalues", LiveDebugValuesPass)
235DUMMY_MACHINE_FUNCTION_PASS("lrshrink", LiveRangeShrinkPass)
236DUMMY_MACHINE_FUNCTION_PASS("machine-combiner", MachineCombinerPass)
237DUMMY_MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass)
238DUMMY_MACHINE_FUNCTION_PASS("static-data-splitter", StaticDataSplitter)
239DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass)
240DUMMY_MACHINE_FUNCTION_PASS("machine-latecleanup", MachineLateInstrsCleanupPass)
241DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata)
242DUMMY_MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass)
243DUMMY_MACHINE_FUNCTION_PASS("machine-sink", MachineSinkingPass)
244DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
245DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
246DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
247DUMMY_MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass)
248DUMMY_MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass)
249DUMMY_MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass)
250DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass)
251DUMMY_MACHINE_FUNCTION_PASS("postrapseudos", ExpandPostRAPseudosPass)
252DUMMY_MACHINE_FUNCTION_PASS("print-machine-cycles", MachineCycleInfoPrinterPass)
253DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", MachineUniformityInfoPrinterPass)
254DUMMY_MACHINE_FUNCTION_PASS("processimpdefs", ProcessImplicitDefsPass)
255DUMMY_MACHINE_FUNCTION_PASS("prologepilog", PrologEpilogInserterPass)
256DUMMY_MACHINE_FUNCTION_PASS("prologepilog-code", PrologEpilogCodeInserterPass)
257DUMMY_MACHINE_FUNCTION_PASS("ra-basic", RABasicPass)
258DUMMY_MACHINE_FUNCTION_PASS("ra-greedy", RAGreedyPass)
259DUMMY_MACHINE_FUNCTION_PASS("ra-pbqp", RAPBQPPass)
260DUMMY_MACHINE_FUNCTION_PASS("regalloc", RegAllocPass)
261DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass)
262DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass)
263DUMMY_MACHINE_FUNCTION_PASS("remove-loads-into-fake-uses", RemoveLoadsIntoFakeUsesPass)
264DUMMY_MACHINE_FUNCTION_PASS("removeredundantdebugvalues", RemoveRedundantDebugValuesPass)
265DUMMY_MACHINE_FUNCTION_PASS("rename-independent-subregs", RenameIndependentSubregsPass)
266DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass)
267DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass)
268DUMMY_MACHINE_FUNCTION_PASS("simple-register-coalescing", RegisterCoalescerPass)
269DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass)
270DUMMY_MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass)
271DUMMY_MACHINE_FUNCTION_PASS("stackmap-liveness", StackMapLivenessPass)
272DUMMY_MACHINE_FUNCTION_PASS("unpack-mi-bundles", UnpackMachineBundlesPass)
273DUMMY_MACHINE_FUNCTION_PASS("virtregrewriter", VirtRegRewriterPass)
274DUMMY_MACHINE_FUNCTION_PASS("xray-instrumentation", XRayInstrumentationPass)
275#undef DUMMY_MACHINE_FUNCTION_PASS
276