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