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