| //===- MachinePassRegistry.def - Registry of passes -------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file is used as the registry of passes that are for target-independent |
| // code generator. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // NOTE: NO INCLUDE GUARD DESIRED! |
| |
| #ifndef MODULE_ANALYSIS |
| #define MODULE_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| MODULE_ANALYSIS("collector-metadata", CollectorMetadataAnalysis, ()) |
| MODULE_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis, (PIC)) |
| #undef MODULE_ANALYSIS |
| |
| #ifndef MODULE_PASS |
| #define MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| MODULE_PASS("global-merge", GlobalMergePass, (TM, GlobalMergeOptions())) |
| MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass, ()) |
| MODULE_PASS("lower-emutls", LowerEmuTLSPass, ()) |
| MODULE_PASS("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass, ()) |
| MODULE_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass, ()) |
| #undef MODULE_PASS |
| |
| #ifndef FUNCTION_ANALYSIS |
| #define FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| FUNCTION_ANALYSIS("gc-function", GCFunctionAnalysis, ()) |
| FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis, (PIC)) |
| FUNCTION_ANALYSIS("ssp-layout", SSPLayoutAnalysis, ()) |
| FUNCTION_ANALYSIS("targetir", TargetIRAnalysis, |
| (std::move(TM.getTargetIRAnalysis()))) |
| #undef FUNCTION_ANALYSIS |
| |
| #ifndef FUNCTION_PASS |
| #define FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| FUNCTION_PASS("callbrprepare", CallBrPreparePass, ()) |
| FUNCTION_PASS("cfguard", CFGuardPass, ()) |
| FUNCTION_PASS("codegenprepare", CodeGenPreparePass, (TM)) |
| FUNCTION_PASS("consthoist", ConstantHoistingPass, ()) |
| FUNCTION_PASS("dwarf-eh-prepare", DwarfEHPreparePass, (TM)) |
| FUNCTION_PASS("ee-instrument", EntryExitInstrumenterPass, (false)) |
| FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass, (TM)) |
| FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass, (TM)) |
| FUNCTION_PASS("expand-memcmp", ExpandMemCmpPass, (TM)) |
| FUNCTION_PASS("expand-reductions", ExpandReductionsPass, ()) |
| FUNCTION_PASS("expandvp", ExpandVectorPredicationPass, ()) |
| FUNCTION_PASS("gc-lowering", GCLoweringPass, ()) |
| FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass, (TM)) |
| FUNCTION_PASS("interleaved-access", InterleavedAccessPass, (TM)) |
| FUNCTION_PASS("interleaved-load-combine", InterleavedLoadCombinePass, (TM)) |
| FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass, ()) |
| FUNCTION_PASS("lowerinvoke", LowerInvokePass, ()) |
| FUNCTION_PASS("mergeicmps", MergeICmpsPass, ()) |
| FUNCTION_PASS("partially-inline-libcalls", PartiallyInlineLibCallsPass, ()) |
| FUNCTION_PASS("post-inline-ee-instrument", EntryExitInstrumenterPass, (true)) |
| FUNCTION_PASS("replace-with-veclib", ReplaceWithVeclib, ()) |
| FUNCTION_PASS("safe-stack", SafeStackPass, (TM)) |
| FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass, ()) |
| FUNCTION_PASS("select-optimize", SelectOptimizePass, (TM)) |
| FUNCTION_PASS("sjlj-eh-prepare", SjLjEHPreparePass, (TM)) |
| FUNCTION_PASS("stack-protector", StackProtectorPass, (TM)) |
| FUNCTION_PASS("tlshoist", TLSVariableHoistPass, ()) |
| FUNCTION_PASS("unreachableblockelim", UnreachableBlockElimPass, ()) |
| FUNCTION_PASS("verify", VerifierPass, ()) |
| FUNCTION_PASS("wasm-eh-prepare", WasmEHPreparePass, ()) |
| FUNCTION_PASS("win-eh-prepare", WinEHPreparePass, ()) |
| #undef FUNCTION_PASS |
| |
| #ifndef LOOP_PASS |
| #define LOOP_PASS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| LOOP_PASS("loop-reduce", LoopStrengthReducePass, ()) |
| #undef LOOP_PASS |
| |
| #ifndef MACHINE_MODULE_PASS |
| #define MACHINE_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| #undef MACHINE_MODULE_PASS |
| |
| #ifndef MACHINE_FUNCTION_ANALYSIS |
| #define MACHINE_FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis, |
| (PIC)) |
| // LiveVariables currently requires pure SSA form. |
| // FIXME: Once TwoAddressInstruction pass no longer uses kill flags, |
| // LiveVariables can be removed completely, and LiveIntervals can be directly |
| // computed. (We still either need to regenerate kill flags after regalloc, or |
| // preferably fix the scavenger to not depend on them). |
| // MACHINE_FUNCTION_ANALYSIS("live-vars", LiveVariablesAnalysis()) |
| |
| // MACHINE_FUNCTION_ANALYSIS("live-stacks", LiveStacksPass()) |
| // MACHINE_FUNCTION_ANALYSIS("slot-indexes", SlotIndexesAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("edge-bundles", EdgeBundlesAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("lazy-machine-bfi", |
| // LazyMachineBlockFrequencyInfoAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("machine-bfi", MachineBlockFrequencyInfoAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopInfoAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("machine-dom-frontier", |
| // MachineDominanceFrontierAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("machine-ore", |
| // MachineOptimizationRemarkEmitterPassAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree", |
| // MachinePostDominatorTreeAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("machine-region-info", |
| // MachineRegionInfoPassAnalysis()) |
| // MACHINE_FUNCTION_ANALYSIS("machine-trace-metrics", |
| // MachineTraceMetricsAnalysis()) MACHINE_FUNCTION_ANALYSIS("reaching-def", |
| // ReachingDefAnalysisAnalysis()) MACHINE_FUNCTION_ANALYSIS("live-reg-matrix", |
| // LiveRegMatrixAnalysis()) MACHINE_FUNCTION_ANALYSIS("gc-analysis", |
| // GCMachineCodeAnalysisPass()) |
| #undef MACHINE_FUNCTION_ANALYSIS |
| |
| #ifndef MACHINE_FUNCTION_PASS |
| #define MACHINE_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| // MACHINE_FUNCTION_PASS("mir-printer", PrintMIRPass, ()) |
| // MACHINE_FUNCTION_PASS("free-machine-function", FreeMachineFunctionPass, ()) |
| #undef MACHINE_FUNCTION_PASS |
| |
| // After a pass is converted to new pass manager, its entry should be moved from |
| // dummy table to the normal one. For example, for a machine function pass, |
| // DUMMY_MACHINE_FUNCTION_PASS to MACHINE_FUNCTION_PASS. |
| |
| #ifndef DUMMY_FUNCTION_PASS |
| #define DUMMY_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| DUMMY_FUNCTION_PASS("atomic-expand", AtomicExpandPass, ()) |
| #undef DUMMY_FUNCTION_PASS |
| |
| #ifndef DUMMY_MACHINE_MODULE_PASS |
| #define DUMMY_MACHINE_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| DUMMY_MACHINE_MODULE_PASS("machine-outliner", MachineOutlinerPass, ()) |
| DUMMY_MACHINE_MODULE_PASS("pseudo-probe-inserter", PseudoProbeInserterPass, ()) |
| DUMMY_MACHINE_MODULE_PASS("mir-debugify", DebugifyMachineModule, ()) |
| DUMMY_MACHINE_MODULE_PASS("mir-check-debugify", CheckDebugMachineModulePass, ()) |
| DUMMY_MACHINE_MODULE_PASS("mir-strip-debug", StripDebugMachineModulePass, |
| (OnlyDebugified)) |
| #undef DUMMY_MACHINE_MODULE_PASS |
| |
| #ifndef DUMMY_MACHINE_FUNCTION_PASS |
| #define DUMMY_MACHINE_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| DUMMY_MACHINE_FUNCTION_PASS("bbsections-prepare", BasicBlockSectionsPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("bbsections-profile-reader", |
| BasicBlockSectionsProfileReaderPass, (Buf)) |
| DUMMY_MACHINE_FUNCTION_PASS("block-placement", MachineBlockPlacementPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("block-placement-stats", |
| MachineBlockPlacementStatsPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("branch-folder", BranchFolderPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("break-false-deps", BreakFalseDepsPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp", CFGuardLongjmpPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter", CFIInstrInserterPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("dead-mi-elimination", |
| DeadMachineInstructionElimPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("dot-machine-cfg", MachineCFGPrinter, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("finalize-isel", FinalizeISelPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("fixup-statepoint-caller-saved", |
| FixupStatepointCallerSavedPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("free-machine-function", FreeMachineFunctionPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderNewPass, |
| (File, ProfileFile, P, FS)) |
| DUMMY_MACHINE_FUNCTION_PASS("funclet-layout", FuncletLayoutPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("gc-empty-basic-blocks", GCEmptyBasicBlocksPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("implicit-null-checks", ImplicitNullChecksPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("instruction-select", InstructionSelectPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("irtranslator", IRTranslatorPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("kcfi", MachineKCFIPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("legalizer", LegalizerPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("livedebugvalues", LiveDebugValuesPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("liveintervals", LiveIntervalsPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("lrshrink", LiveRangeShrinkPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-combiner", MachineCombinerPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", |
| MachineFunctionSplitterPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-latecleanup", MachineLateInstrsCleanupPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-sink", MachineSinkingPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", |
| MachineUniformityInfoWrapperPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass, |
| (OS, Banner)) |
| DUMMY_MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("machineverifier", MachineVerifierPass, (Banner)) |
| DUMMY_MACHINE_FUNCTION_PASS("mir-printer", PrintMIRPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass, |
| (P)) |
| DUMMY_MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("postrapseudos", ExpandPostRAPseudosPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("print-machine-cycles", MachineCycleInfoPrinterPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", |
| MachineUniformityInfoPrinterPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("processimpdefs", ProcessImplicitDefsPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("prologepilog", PrologEpilogInserterPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("prologepilog-code", PrologEpilogCodeInserterPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("ra-basic", RABasicPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("ra-fast", RAFastPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("ra-greedy", RAGreedyPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("ra-pbqp", RAPBQPPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("reg-usage-collector", RegUsageInfoCollectorPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("reg-usage-propagation", |
| RegUsageInfoPropagationPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("regalloc", RegAllocPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("removeredundantdebugvalues", |
| RemoveRedundantDebugValuesPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("rename-independent-subregs", |
| RenameIndependentSubregsPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("simple-register-coalescing", RegisterCoalescerPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("stack-coloring", StackColoringPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("stackmap-liveness", StackMapLivenessPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("tailduplication", TailDuplicatePass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("twoaddressinstruction", TwoAddressInstructionPass, |
| ()) |
| DUMMY_MACHINE_FUNCTION_PASS("unpack-mi-bundles", UnpackMachineBundlesPass, |
| (Ftor)) |
| DUMMY_MACHINE_FUNCTION_PASS("virtregrewriter", VirtRegRewriterPass, ()) |
| DUMMY_MACHINE_FUNCTION_PASS("xray-instrumentation", XRayInstrumentationPass, ()) |
| #undef DUMMY_MACHINE_FUNCTION_PASS |
| |
| #ifndef DUMMY_MACHINE_FUNCTION_ANALYSIS |
| #define DUMMY_MACHINE_FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) |
| #endif |
| DUMMY_MACHINE_FUNCTION_ANALYSIS("gc-analysis", GCMachineCodeAnalysisPass, ()) |
| #undef DUMMY_MACHINE_FUNCTION_ANALYSIS |