- `CollectorMetadataAnalysis` provides `GCStrategyMap`. - `GCFunctionAnalysis` provides `GCFunctionInfo`. `GCStrategyMap` owns `GCStrategy` pointers and this pass is used by `AsmPrinter` to iterate all GC strategies. Most passes that require `GCModuleInfo` actually require the `GCFunctionInfo`, so add `GCFunctionAnalysis` for convenience.
236 lines
12 KiB
C++
236 lines
12 KiB
C++
//===- 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("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass, ())
|
|
MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass, ())
|
|
#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("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("consthoist", ConstantHoistingPass, ())
|
|
FUNCTION_PASS("dwarf-eh-prepare", DwarfEHPreparePass, (TM))
|
|
FUNCTION_PASS("ee-instrument", EntryExitInstrumenterPass, (false))
|
|
FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass, ())
|
|
FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass, ())
|
|
FUNCTION_PASS("expand-reductions", ExpandReductionsPass, ())
|
|
FUNCTION_PASS("expandvp", ExpandVectorPredicationPass, ())
|
|
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("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, ())
|
|
DUMMY_FUNCTION_PASS("codegenprepare", CodeGenPreparePass, ())
|
|
DUMMY_FUNCTION_PASS("expandmemcmp", ExpandMemCmpPass, ())
|
|
DUMMY_FUNCTION_PASS("gc-lowering", GCLoweringPass, ())
|
|
DUMMY_FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass, ())
|
|
DUMMY_FUNCTION_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass, ())
|
|
DUMMY_FUNCTION_PASS("stack-protector", StackProtectorPass, ())
|
|
#undef DUMMY_FUNCTION_PASS
|
|
|
|
#ifndef DUMMY_MODULE_PASS
|
|
#define DUMMY_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR)
|
|
#endif
|
|
DUMMY_MODULE_PASS("lower-emutls", LowerEmuTLSPass, ())
|
|
#undef DUMMY_MODULE_PASS
|
|
|
|
#ifndef DUMMY_MACHINE_MODULE_PASS
|
|
#define DUMMY_MACHINE_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR)
|
|
#endif
|
|
DUMMY_MACHINE_MODULE_PASS("machine-outliner", MachineOutlinerPass, ())
|
|
#undef DUMMY_MACHINE_MODULE_PASS
|
|
|
|
#ifndef DUMMY_MACHINE_FUNCTION_PASS
|
|
#define DUMMY_MACHINE_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR)
|
|
#endif
|
|
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-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("free-machine-function", FreeMachineFunctionPass,
|
|
())
|
|
DUMMY_MACHINE_FUNCTION_PASS("funclet-layout", FuncletLayoutPass, ())
|
|
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("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-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("machinelicm", MachineLICMPass, ())
|
|
DUMMY_MACHINE_FUNCTION_PASS("machineverifier", MachineVerifierPass, ())
|
|
DUMMY_MACHINE_FUNCTION_PASS("mir-printer", PrintMIRPass, ())
|
|
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("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("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-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("virtregrewriter", VirtRegRewriterPass, ())
|
|
DUMMY_MACHINE_FUNCTION_PASS("xray-instrumentation", XRayInstrumentationPass, ())
|
|
#undef DUMMY_MACHINE_FUNCTION_PASS
|