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