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 |
19 | MODULE_ANALYSIS("collector-metadata" , CollectorMetadataAnalysis()) |
20 | MODULE_ANALYSIS("pass-instrumentation" , PassInstrumentationAnalysis(PIC)) |
21 | #undef MODULE_ANALYSIS |
22 | |
23 | #ifndef MODULE_PASS |
24 | #define MODULE_PASS(NAME, CREATE_PASS) |
25 | #endif |
26 | MODULE_PASS("global-merge" , GlobalMergePass(TM, GlobalMergeOptions())) |
27 | MODULE_PASS("jmc-instrumenter" , JMCInstrumenterPass()) |
28 | MODULE_PASS("lower-emutls" , LowerEmuTLSPass()) |
29 | MODULE_PASS("pre-isel-intrinsic-lowering" , PreISelIntrinsicLoweringPass()) |
30 | MODULE_PASS("shadow-stack-gc-lowering" , ShadowStackGCLoweringPass()) |
31 | #undef MODULE_PASS |
32 | |
33 | #ifndef FUNCTION_ANALYSIS |
34 | #define FUNCTION_ANALYSIS(NAME, CREATE_PASS) |
35 | #endif |
36 | FUNCTION_ANALYSIS("gc-function" , GCFunctionAnalysis()) |
37 | FUNCTION_ANALYSIS("pass-instrumentation" , PassInstrumentationAnalysis(PIC)) |
38 | FUNCTION_ANALYSIS("ssp-layout" , SSPLayoutAnalysis()) |
39 | FUNCTION_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 |
45 | FUNCTION_PASS("callbr-prepare" , CallBrPreparePass()) |
46 | FUNCTION_PASS("cfguard" , CFGuardPass()) |
47 | FUNCTION_PASS("codegenprepare" , CodeGenPreparePass(TM)) |
48 | FUNCTION_PASS("consthoist" , ConstantHoistingPass()) |
49 | FUNCTION_PASS("dwarf-eh-prepare" , DwarfEHPreparePass(TM)) |
50 | FUNCTION_PASS("ee-instrument" , EntryExitInstrumenterPass(false)) |
51 | FUNCTION_PASS("expand-large-div-rem" , ExpandLargeDivRemPass(TM)) |
52 | FUNCTION_PASS("expand-large-fp-convert" , ExpandLargeFpConvertPass(TM)) |
53 | FUNCTION_PASS("expand-memcmp" , ExpandMemCmpPass(TM)) |
54 | FUNCTION_PASS("expand-reductions" , ExpandReductionsPass()) |
55 | FUNCTION_PASS("expandvp" , ExpandVectorPredicationPass()) |
56 | FUNCTION_PASS("gc-lowering" , GCLoweringPass()) |
57 | FUNCTION_PASS("indirectbr-expand" , IndirectBrExpandPass(TM)) |
58 | FUNCTION_PASS("interleaved-access" , InterleavedAccessPass(TM)) |
59 | FUNCTION_PASS("interleaved-load-combine" , InterleavedLoadCombinePass(TM)) |
60 | FUNCTION_PASS("lower-constant-intrinsics" , LowerConstantIntrinsicsPass()) |
61 | FUNCTION_PASS("lower-invoke" , LowerInvokePass()) |
62 | FUNCTION_PASS("mergeicmps" , MergeICmpsPass()) |
63 | FUNCTION_PASS("partially-inline-libcalls" , PartiallyInlineLibCallsPass()) |
64 | FUNCTION_PASS("post-inline-ee-instrument" , EntryExitInstrumenterPass(true)) |
65 | FUNCTION_PASS("replace-with-veclib" , ReplaceWithVeclib()) |
66 | FUNCTION_PASS("safe-stack" , SafeStackPass(TM)) |
67 | FUNCTION_PASS("scalarize-masked-mem-intrin" , ScalarizeMaskedMemIntrinPass()) |
68 | FUNCTION_PASS("select-optimize" , SelectOptimizePass(TM)) |
69 | FUNCTION_PASS("sjlj-eh-prepare" , SjLjEHPreparePass(TM)) |
70 | FUNCTION_PASS("stack-protector" , StackProtectorPass(TM)) |
71 | FUNCTION_PASS("tlshoist" , TLSVariableHoistPass()) |
72 | FUNCTION_PASS("unreachableblockelim" , UnreachableBlockElimPass()) |
73 | FUNCTION_PASS("verify" , VerifierPass()) |
74 | FUNCTION_PASS("wasm-eh-prepare" , WasmEHPreparePass()) |
75 | FUNCTION_PASS("win-eh-prepare" , WinEHPreparePass()) |
76 | #undef FUNCTION_PASS |
77 | |
78 | #ifndef LOOP_PASS |
79 | #define LOOP_PASS(NAME, CREATE_PASS) |
80 | #endif |
81 | LOOP_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 |
92 | MACHINE_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 |
126 | MACHINE_FUNCTION_PASS("dead-mi-elimination" , DeadMachineInstructionElimPass()) |
127 | // MACHINE_FUNCTION_PASS("free-machine-function", FreeMachineFunctionPass()) |
128 | MACHINE_FUNCTION_PASS("no-op-machine-function" , NoOpMachineFunctionPass()) |
129 | MACHINE_FUNCTION_PASS("print" , PrintMIRPass()) |
130 | MACHINE_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 |
141 | DUMMY_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 |
147 | DUMMY_MACHINE_MODULE_PASS("machine-outliner" , MachineOutlinerPass) |
148 | DUMMY_MACHINE_MODULE_PASS("pseudo-probe-inserter" , PseudoProbeInserterPass) |
149 | DUMMY_MACHINE_MODULE_PASS("mir-debugify" , DebugifyMachineModule) |
150 | DUMMY_MACHINE_MODULE_PASS("mir-check-debugify" , CheckDebugMachineModulePass) |
151 | DUMMY_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 |
157 | DUMMY_MACHINE_FUNCTION_PASS("bbsections-prepare" , BasicBlockSectionsPass) |
158 | DUMMY_MACHINE_FUNCTION_PASS("bbsections-profile-reader" , BasicBlockSectionsProfileReaderPass) |
159 | DUMMY_MACHINE_FUNCTION_PASS("block-placement" , MachineBlockPlacementPass) |
160 | DUMMY_MACHINE_FUNCTION_PASS("block-placement-stats" , MachineBlockPlacementStatsPass) |
161 | DUMMY_MACHINE_FUNCTION_PASS("branch-folder" , BranchFolderPass) |
162 | DUMMY_MACHINE_FUNCTION_PASS("break-false-deps" , BreakFalseDepsPass) |
163 | DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp" , CFGuardLongjmpPass) |
164 | DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup" , CFIFixupPass) |
165 | DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter" , CFIInstrInserterPass) |
166 | DUMMY_MACHINE_FUNCTION_PASS("detect-dead-lanes" , DetectDeadLanesPass) |
167 | DUMMY_MACHINE_FUNCTION_PASS("dot-machine-cfg" , MachineCFGPrinter) |
168 | DUMMY_MACHINE_FUNCTION_PASS("early-ifcvt" , EarlyIfConverterPass) |
169 | DUMMY_MACHINE_FUNCTION_PASS("early-machinelicm" , EarlyMachineLICMPass) |
170 | DUMMY_MACHINE_FUNCTION_PASS("early-tailduplication" , EarlyTailDuplicatePass) |
171 | DUMMY_MACHINE_FUNCTION_PASS("fentry-insert" , FEntryInserterPass) |
172 | DUMMY_MACHINE_FUNCTION_PASS("finalize-isel" , FinalizeISelPass) |
173 | DUMMY_MACHINE_FUNCTION_PASS("fixup-statepoint-caller-saved" , FixupStatepointCallerSavedPass) |
174 | DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader" , MIRProfileLoaderNewPass) |
175 | DUMMY_MACHINE_FUNCTION_PASS("funclet-layout" , FuncletLayoutPass) |
176 | DUMMY_MACHINE_FUNCTION_PASS("gc-empty-basic-blocks" , GCEmptyBasicBlocksPass) |
177 | DUMMY_MACHINE_FUNCTION_PASS("implicit-null-checks" , ImplicitNullChecksPass) |
178 | DUMMY_MACHINE_FUNCTION_PASS("init-undef-pass" , InitUndefPass) |
179 | DUMMY_MACHINE_FUNCTION_PASS("instruction-select" , InstructionSelectPass) |
180 | DUMMY_MACHINE_FUNCTION_PASS("irtranslator" , IRTranslatorPass) |
181 | DUMMY_MACHINE_FUNCTION_PASS("kcfi" , MachineKCFIPass) |
182 | DUMMY_MACHINE_FUNCTION_PASS("legalizer" , LegalizerPass) |
183 | DUMMY_MACHINE_FUNCTION_PASS("livedebugvalues" , LiveDebugValuesPass) |
184 | DUMMY_MACHINE_FUNCTION_PASS("liveintervals" , LiveIntervalsPass) |
185 | DUMMY_MACHINE_FUNCTION_PASS("localstackalloc" , LocalStackSlotPass) |
186 | DUMMY_MACHINE_FUNCTION_PASS("lrshrink" , LiveRangeShrinkPass) |
187 | DUMMY_MACHINE_FUNCTION_PASS("machine-combiner" , MachineCombinerPass) |
188 | DUMMY_MACHINE_FUNCTION_PASS("machine-cp" , MachineCopyPropagationPass) |
189 | DUMMY_MACHINE_FUNCTION_PASS("machine-cse" , MachineCSEPass) |
190 | DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter" , MachineFunctionSplitterPass) |
191 | DUMMY_MACHINE_FUNCTION_PASS("machine-latecleanup" , MachineLateInstrsCleanupPass) |
192 | DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd" , MachineSanitizerBinaryMetadata) |
193 | DUMMY_MACHINE_FUNCTION_PASS("machine-scheduler" , MachineSchedulerPass) |
194 | DUMMY_MACHINE_FUNCTION_PASS("machine-sink" , MachineSinkingPass) |
195 | DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity" , MachineUniformityInfoWrapperPass) |
196 | DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer" , MachineFunctionPrinterPass) |
197 | DUMMY_MACHINE_FUNCTION_PASS("machinelicm" , MachineLICMPass) |
198 | DUMMY_MACHINE_FUNCTION_PASS("machineverifier" , MachineVerifierPass) |
199 | DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators" , MIRAddFSDiscriminatorsPass) |
200 | DUMMY_MACHINE_FUNCTION_PASS("opt-phis" , OptimizePHIsPass) |
201 | DUMMY_MACHINE_FUNCTION_PASS("patchable-function" , PatchableFunctionPass) |
202 | DUMMY_MACHINE_FUNCTION_PASS("peephole-opt" , PeepholeOptimizerPass) |
203 | DUMMY_MACHINE_FUNCTION_PASS("phi-node-elimination" , PHIEliminationPass) |
204 | DUMMY_MACHINE_FUNCTION_PASS("post-RA-sched" , PostRASchedulerPass) |
205 | DUMMY_MACHINE_FUNCTION_PASS("postmisched" , PostMachineSchedulerPass) |
206 | DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink" , PostRAMachineSinkingPass) |
207 | DUMMY_MACHINE_FUNCTION_PASS("postrapseudos" , ExpandPostRAPseudosPass) |
208 | DUMMY_MACHINE_FUNCTION_PASS("print-machine-cycles" , MachineCycleInfoPrinterPass) |
209 | DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity" , MachineUniformityInfoPrinterPass) |
210 | DUMMY_MACHINE_FUNCTION_PASS("processimpdefs" , ProcessImplicitDefsPass) |
211 | DUMMY_MACHINE_FUNCTION_PASS("prologepilog" , PrologEpilogInserterPass) |
212 | DUMMY_MACHINE_FUNCTION_PASS("prologepilog-code" , PrologEpilogCodeInserterPass) |
213 | DUMMY_MACHINE_FUNCTION_PASS("ra-basic" , RABasicPass) |
214 | DUMMY_MACHINE_FUNCTION_PASS("ra-fast" , RAFastPass) |
215 | DUMMY_MACHINE_FUNCTION_PASS("ra-greedy" , RAGreedyPass) |
216 | DUMMY_MACHINE_FUNCTION_PASS("ra-pbqp" , RAPBQPPass) |
217 | DUMMY_MACHINE_FUNCTION_PASS("reg-usage-collector" , RegUsageInfoCollectorPass) |
218 | DUMMY_MACHINE_FUNCTION_PASS("reg-usage-propagation" , RegUsageInfoPropagationPass) |
219 | DUMMY_MACHINE_FUNCTION_PASS("regalloc" , RegAllocPass) |
220 | DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass" , RegAllocScoringPass) |
221 | DUMMY_MACHINE_FUNCTION_PASS("regbankselect" , RegBankSelectPass) |
222 | DUMMY_MACHINE_FUNCTION_PASS("removeredundantdebugvalues" , RemoveRedundantDebugValuesPass) |
223 | DUMMY_MACHINE_FUNCTION_PASS("rename-independent-subregs" , RenameIndependentSubregsPass) |
224 | DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function" , ResetMachineFunctionPass) |
225 | DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap" , ShrinkWrapPass) |
226 | DUMMY_MACHINE_FUNCTION_PASS("simple-register-coalescing" , RegisterCoalescerPass) |
227 | DUMMY_MACHINE_FUNCTION_PASS("stack-coloring" , StackColoringPass) |
228 | DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout" , StackFrameLayoutAnalysisPass) |
229 | DUMMY_MACHINE_FUNCTION_PASS("stack-slot-coloring" , StackSlotColoringPass) |
230 | DUMMY_MACHINE_FUNCTION_PASS("stackmap-liveness" , StackMapLivenessPass) |
231 | DUMMY_MACHINE_FUNCTION_PASS("tailduplication" , TailDuplicatePass) |
232 | DUMMY_MACHINE_FUNCTION_PASS("twoaddressinstruction" , TwoAddressInstructionPass) |
233 | DUMMY_MACHINE_FUNCTION_PASS("unpack-mi-bundles" , UnpackMachineBundlesPass) |
234 | DUMMY_MACHINE_FUNCTION_PASS("virtregrewriter" , VirtRegRewriterPass) |
235 | DUMMY_MACHINE_FUNCTION_PASS("xray-instrumentation" , XRayInstrumentationPass) |
236 | #undef DUMMY_MACHINE_FUNCTION_PASS |
237 | |