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("pass-instrumentation", PassInstrumentationAnalysis, (PIC)) 20#undef MODULE_ANALYSIS 21 22#ifndef MODULE_PASS 23#define MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) 24#endif 25MODULE_PASS("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass, ()) 26#undef MODULE_PASS 27 28#ifndef FUNCTION_ANALYSIS 29#define FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) 30#endif 31FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis, (PIC)) 32FUNCTION_ANALYSIS("targetir", TargetIRAnalysis, (std::move(TM.getTargetIRAnalysis()))) 33#undef FUNCTION_ANALYSIS 34 35#ifndef FUNCTION_PASS 36#define FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) 37#endif 38FUNCTION_PASS("mergeicmps", MergeICmpsPass, ()) 39FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass, ()) 40FUNCTION_PASS("unreachableblockelim", UnreachableBlockElimPass, ()) 41FUNCTION_PASS("consthoist", ConstantHoistingPass, ()) 42FUNCTION_PASS("replace-with-veclib", ReplaceWithVeclib, ()) 43FUNCTION_PASS("partially-inline-libcalls", PartiallyInlineLibCallsPass, ()) 44FUNCTION_PASS("ee-instrument", EntryExitInstrumenterPass, (false)) 45FUNCTION_PASS("post-inline-ee-instrument", EntryExitInstrumenterPass, (true)) 46FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass, ()) 47FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass, ()) 48FUNCTION_PASS("expand-reductions", ExpandReductionsPass, ()) 49FUNCTION_PASS("expandvp", ExpandVectorPredicationPass, ()) 50FUNCTION_PASS("lowerinvoke", LowerInvokePass, ()) 51FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass, ()) 52FUNCTION_PASS("tlshoist", TLSVariableHoistPass, ()) 53FUNCTION_PASS("verify", VerifierPass, ()) 54#undef FUNCTION_PASS 55 56#ifndef LOOP_PASS 57#define LOOP_PASS(NAME, PASS_NAME, CONSTRUCTOR) 58#endif 59LOOP_PASS("loop-reduce", LoopStrengthReducePass, ()) 60#undef LOOP_PASS 61 62#ifndef MACHINE_MODULE_PASS 63#define MACHINE_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) 64#endif 65#undef MACHINE_MODULE_PASS 66 67#ifndef MACHINE_FUNCTION_ANALYSIS 68#define MACHINE_FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) 69#endif 70MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis, (PIC)) 71// LiveVariables currently requires pure SSA form. 72// FIXME: Once TwoAddressInstruction pass no longer uses kill flags, 73// LiveVariables can be removed completely, and LiveIntervals can be directly 74// computed. (We still either need to regenerate kill flags after regalloc, or 75// preferably fix the scavenger to not depend on them). 76// MACHINE_FUNCTION_ANALYSIS("live-vars", LiveVariablesAnalysis()) 77 78// MACHINE_FUNCTION_ANALYSIS("live-stacks", LiveStacksPass()) 79// MACHINE_FUNCTION_ANALYSIS("slot-indexes", SlotIndexesAnalysis()) 80// MACHINE_FUNCTION_ANALYSIS("edge-bundles", EdgeBundlesAnalysis()) 81// MACHINE_FUNCTION_ANALYSIS("lazy-machine-bfi", LazyMachineBlockFrequencyInfoAnalysis()) 82// MACHINE_FUNCTION_ANALYSIS("machine-bfi", MachineBlockFrequencyInfoAnalysis()) 83// MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopInfoAnalysis()) 84// MACHINE_FUNCTION_ANALYSIS("machine-dom-frontier", MachineDominanceFrontierAnalysis()) 85// MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis()) 86// MACHINE_FUNCTION_ANALYSIS("machine-ore", MachineOptimizationRemarkEmitterPassAnalysis()) 87// MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree", MachinePostDominatorTreeAnalysis()) 88// MACHINE_FUNCTION_ANALYSIS("machine-region-info", MachineRegionInfoPassAnalysis()) 89// MACHINE_FUNCTION_ANALYSIS("machine-trace-metrics", MachineTraceMetricsAnalysis()) 90// MACHINE_FUNCTION_ANALYSIS("reaching-def", ReachingDefAnalysisAnalysis()) 91// MACHINE_FUNCTION_ANALYSIS("live-reg-matrix", LiveRegMatrixAnalysis()) 92// MACHINE_FUNCTION_ANALYSIS("gc-analysis", GCMachineCodeAnalysisPass()) 93#undef MACHINE_FUNCTION_ANALYSIS 94 95#ifndef MACHINE_FUNCTION_PASS 96#define MACHINE_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) 97#endif 98// MACHINE_FUNCTION_PASS("mir-printer", PrintMIRPass, ()) 99// MACHINE_FUNCTION_PASS("free-machine-function", FreeMachineFunctionPass, ()) 100#undef MACHINE_FUNCTION_PASS 101 102// After a pass is converted to new pass manager, its entry should be moved from 103// dummy table to the normal one. For example, for a machine function pass, 104// DUMMY_MACHINE_FUNCTION_PASS to MACHINE_FUNCTION_PASS. 105 106#ifndef DUMMY_FUNCTION_PASS 107#define DUMMY_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) 108#endif 109DUMMY_FUNCTION_PASS("expandmemcmp", ExpandMemCmpPass, ()) 110DUMMY_FUNCTION_PASS("gc-lowering", GCLoweringPass, ()) 111DUMMY_FUNCTION_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass, ()) 112DUMMY_FUNCTION_PASS("sjljehprepare", SjLjEHPreparePass, ()) 113DUMMY_FUNCTION_PASS("dwarfehprepare", DwarfEHPass, ()) 114DUMMY_FUNCTION_PASS("winehprepare", WinEHPass, ()) 115DUMMY_FUNCTION_PASS("wasmehprepare", WasmEHPass, ()) 116DUMMY_FUNCTION_PASS("codegenprepare", CodeGenPreparePass, ()) 117DUMMY_FUNCTION_PASS("safe-stack", SafeStackPass, ()) 118DUMMY_FUNCTION_PASS("stack-protector", StackProtectorPass, ()) 119DUMMY_FUNCTION_PASS("atomic-expand", AtomicExpandPass, ()) 120DUMMY_FUNCTION_PASS("interleaved-access", InterleavedAccessPass, ()) 121DUMMY_FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass, ()) 122DUMMY_FUNCTION_PASS("cfguard-dispatch", CFGuardDispatchPass, ()) 123DUMMY_FUNCTION_PASS("cfguard-check", CFGuardCheckPass, ()) 124DUMMY_FUNCTION_PASS("gc-info-printer", GCInfoPrinterPass, ()) 125DUMMY_FUNCTION_PASS("select-optimize", SelectOptimizePass, ()) 126DUMMY_FUNCTION_PASS("callbrprepare", CallBrPrepare, ()) 127#undef DUMMY_FUNCTION_PASS 128 129#ifndef DUMMY_MODULE_PASS 130#define DUMMY_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) 131#endif 132DUMMY_MODULE_PASS("lower-emutls", LowerEmuTLSPass, ()) 133#undef DUMMY_MODULE_PASS 134 135#ifndef DUMMY_MACHINE_MODULE_PASS 136#define DUMMY_MACHINE_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) 137#endif 138DUMMY_MACHINE_MODULE_PASS("machine-outliner", MachineOutlinerPass, ()) 139#undef DUMMY_MACHINE_MODULE_PASS 140 141#ifndef DUMMY_MACHINE_FUNCTION_PASS 142#define DUMMY_MACHINE_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) 143#endif 144DUMMY_MACHINE_FUNCTION_PASS("mir-printer", PrintMIRPass, ()) 145DUMMY_MACHINE_FUNCTION_PASS("free-machine-function", FreeMachineFunctionPass, ()) 146DUMMY_MACHINE_FUNCTION_PASS("finalize-isel", FinalizeISelPass, ()) 147DUMMY_MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotPass, ()) 148DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass, ()) 149DUMMY_MACHINE_FUNCTION_PASS("prologepilog", PrologEpilogInserterPass, ()) 150DUMMY_MACHINE_FUNCTION_PASS("postrapseudos", ExpandPostRAPseudosPass, ()) 151DUMMY_MACHINE_FUNCTION_PASS("implicit-null-checks", ImplicitNullChecksPass, ()) 152DUMMY_MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass, ()) 153DUMMY_MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass, ()) 154DUMMY_MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass, ()) 155DUMMY_MACHINE_FUNCTION_PASS("machine-latecleanup", MachineLateInstrsCleanupPass, ()) 156DUMMY_MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass, ()) 157DUMMY_MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass, ()) 158DUMMY_MACHINE_FUNCTION_PASS("xray-instrumentation", XRayInstrumentationPass, ()) 159DUMMY_MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass, ()) 160DUMMY_MACHINE_FUNCTION_PASS("reg-usage-propagation", RegUsageInfoPropagationPass, ()) 161DUMMY_MACHINE_FUNCTION_PASS("reg-usage-collector", RegUsageInfoCollectorPass, ()) 162DUMMY_MACHINE_FUNCTION_PASS("funclet-layout", FuncletLayoutPass, ()) 163DUMMY_MACHINE_FUNCTION_PASS("stackmap-liveness", StackMapLivenessPass, ()) 164DUMMY_MACHINE_FUNCTION_PASS("removeredundantdebugvalues", RemoveRedundantDebugValuesPass, ()) 165DUMMY_MACHINE_FUNCTION_PASS("dot-machine-cfg", MachineCFGPrinter, ()) 166DUMMY_MACHINE_FUNCTION_PASS("livedebugvalues", LiveDebugValuesPass, ()) 167DUMMY_MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass, ()) 168DUMMY_MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass, ()) 169DUMMY_MACHINE_FUNCTION_PASS("stack-coloring", StackColoringPass, ()) 170DUMMY_MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass, ()) 171DUMMY_MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass, ()) 172DUMMY_MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass, ()) 173DUMMY_MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass, ()) 174DUMMY_MACHINE_FUNCTION_PASS("machine-sink", MachineSinkingPass, ()) 175DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass, ()) 176DUMMY_MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass, ()) 177DUMMY_MACHINE_FUNCTION_PASS("regalloc", RegAllocPass, ()) 178DUMMY_MACHINE_FUNCTION_PASS("virtregrewriter", VirtRegRewriterPass, ()) 179DUMMY_MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass, ()) 180DUMMY_MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass, ()) 181DUMMY_MACHINE_FUNCTION_PASS("twoaddressinstruction", TwoAddressInstructionPass, ()) 182DUMMY_MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass, ()) 183DUMMY_MACHINE_FUNCTION_PASS("processimpdefs", ProcessImplicitDefsPass, ()) 184DUMMY_MACHINE_FUNCTION_PASS("liveintervals", LiveIntervalsPass, ()) 185DUMMY_MACHINE_FUNCTION_PASS("simple-register-coalescing", RegisterCoalescerPass, ()) 186DUMMY_MACHINE_FUNCTION_PASS("rename-independent-subregs", RenameIndependentSubregsPass, ()) 187DUMMY_MACHINE_FUNCTION_PASS("branch-folder", BranchFolderPass, ()) 188DUMMY_MACHINE_FUNCTION_PASS("tailduplication", TailDuplicatePass, ()) 189DUMMY_MACHINE_FUNCTION_PASS("block-placement", MachineBlockPlacementPass, ()) 190DUMMY_MACHINE_FUNCTION_PASS("block-placement-stats", MachineBlockPlacementStatsPass, ()) 191DUMMY_MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass, ()) 192DUMMY_MACHINE_FUNCTION_PASS("machine-combiner", MachineCombinerPass, ()) 193DUMMY_MACHINE_FUNCTION_PASS("lrshrink", LiveRangeShrinkPass, ()) 194DUMMY_MACHINE_FUNCTION_PASS("break-false-deps", BreakFalseDepsPass, ()) 195DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter", CFIInstrInserterPass, ()) 196DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp", CFGuardLongjmpPass, ()) 197DUMMY_MACHINE_FUNCTION_PASS("ra-basic", RABasicPass, ()) 198DUMMY_MACHINE_FUNCTION_PASS("ra-fast", RAFastPass, ()) 199DUMMY_MACHINE_FUNCTION_PASS("ra-greedy", RAGreedyPass, ()) 200DUMMY_MACHINE_FUNCTION_PASS("ra-pbqp", RAPBQPPass, ()) 201DUMMY_MACHINE_FUNCTION_PASS("legalizer", LegalizerPass, ()) 202DUMMY_MACHINE_FUNCTION_PASS("irtranslator", IRTranslatorPass, ()) 203DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass, ()) 204DUMMY_MACHINE_FUNCTION_PASS("instruction-select", InstructionSelectPass, ()) 205DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass, ()) 206DUMMY_MACHINE_FUNCTION_PASS("machineverifier", MachineVerifierPass, ()) 207DUMMY_MACHINE_FUNCTION_PASS("print-machine-cycles", MachineCycleInfoPrinterPass, ()) 208DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata, ()) 209DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass, ()) 210DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", MachineUniformityInfoPrinterPass, ()) 211#undef DUMMY_MACHINE_FUNCTION_PASS 212