1//===- PassRegistry.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 part of the core LLVM 10// libraries. This file describes both transformation passes and analyses 11// Analyses are registered while transformation passes have names registered 12// that can be used when providing a textual pass pipeline. 13// 14//===----------------------------------------------------------------------===// 15 16// NOTE: NO INCLUDE GUARD DESIRED! 17 18#ifndef MODULE_ANALYSIS 19#define MODULE_ANALYSIS(NAME, CREATE_PASS) 20#endif 21MODULE_ANALYSIS("callgraph", CallGraphAnalysis()) 22MODULE_ANALYSIS("collector-metadata", CollectorMetadataAnalysis()) 23MODULE_ANALYSIS("ctx-prof-analysis", CtxProfAnalysis()) 24MODULE_ANALYSIS("dxil-metadata", DXILMetadataAnalysis()) 25MODULE_ANALYSIS("dxil-resource-binding", DXILResourceBindingAnalysis()) 26MODULE_ANALYSIS("dxil-resource-type", DXILResourceTypeAnalysis()) 27MODULE_ANALYSIS("inline-advisor", InlineAdvisorAnalysis()) 28MODULE_ANALYSIS("ir-similarity", IRSimilarityAnalysis()) 29MODULE_ANALYSIS("last-run-tracking", LastRunTrackingAnalysis()) 30MODULE_ANALYSIS("lcg", LazyCallGraphAnalysis()) 31MODULE_ANALYSIS("module-summary", ModuleSummaryIndexAnalysis()) 32MODULE_ANALYSIS("no-op-module", NoOpModuleAnalysis()) 33MODULE_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC)) 34MODULE_ANALYSIS("profile-summary", ProfileSummaryAnalysis()) 35MODULE_ANALYSIS("reg-usage", PhysicalRegisterUsageAnalysis()) 36MODULE_ANALYSIS("stack-safety", StackSafetyGlobalAnalysis()) 37MODULE_ANALYSIS("verify", VerifierAnalysis()) 38 39#ifndef MODULE_ALIAS_ANALYSIS 40#define MODULE_ALIAS_ANALYSIS(NAME, CREATE_PASS) \ 41 MODULE_ANALYSIS(NAME, CREATE_PASS) 42#endif 43MODULE_ALIAS_ANALYSIS("globals-aa", GlobalsAA()) 44#undef MODULE_ALIAS_ANALYSIS 45#undef MODULE_ANALYSIS 46 47#ifndef MODULE_PASS 48#define MODULE_PASS(NAME, CREATE_PASS) 49#endif 50MODULE_PASS("always-inline", AlwaysInlinerPass()) 51MODULE_PASS("annotation2metadata", Annotation2MetadataPass()) 52MODULE_PASS("assign-guid", AssignGUIDPass()) 53MODULE_PASS("attributor", AttributorPass()) 54MODULE_PASS("attributor-light", AttributorLightPass()) 55MODULE_PASS("called-value-propagation", CalledValuePropagationPass()) 56MODULE_PASS("canonicalize-aliases", CanonicalizeAliasesPass()) 57MODULE_PASS("check-debugify", NewPMCheckDebugifyPass()) 58MODULE_PASS("constmerge", ConstantMergePass()) 59MODULE_PASS("coro-cleanup", CoroCleanupPass()) 60MODULE_PASS("coro-early", CoroEarlyPass()) 61MODULE_PASS("cross-dso-cfi", CrossDSOCFIPass()) 62MODULE_PASS("ctx-instr-gen", 63 PGOInstrumentationGen(PGOInstrumentationType::CTXPROF)) 64MODULE_PASS("ctx-prof-flatten", PGOCtxProfFlatteningPass()) 65MODULE_PASS("deadargelim", DeadArgumentEliminationPass()) 66MODULE_PASS("debugify", NewPMDebugifyPass()) 67MODULE_PASS("dfsan", DataFlowSanitizerPass()) 68MODULE_PASS("dot-callgraph", CallGraphDOTPrinterPass()) 69MODULE_PASS("dxil-upgrade", DXILUpgradePass()) 70MODULE_PASS("elim-avail-extern", EliminateAvailableExternallyPass()) 71MODULE_PASS("extract-blocks", BlockExtractorPass({}, false)) 72MODULE_PASS("expand-variadics", ExpandVariadicsPass(ExpandVariadicsMode::Disable)) 73MODULE_PASS("forceattrs", ForceFunctionAttrsPass()) 74MODULE_PASS("function-import", FunctionImportPass()) 75MODULE_PASS("global-merge-func", GlobalMergeFuncPass()) 76MODULE_PASS("globalopt", GlobalOptPass()) 77MODULE_PASS("globalsplit", GlobalSplitPass()) 78MODULE_PASS("hipstdpar-interpose-alloc", HipStdParAllocationInterpositionPass()) 79MODULE_PASS("hipstdpar-select-accelerator-code", 80 HipStdParAcceleratorCodeSelectionPass()) 81MODULE_PASS("hotcoldsplit", HotColdSplittingPass()) 82MODULE_PASS("inferattrs", InferFunctionAttrsPass()) 83MODULE_PASS("inliner-ml-advisor-release", 84 ModuleInlinerWrapperPass(getInlineParams(), true, {}, 85 InliningAdvisorMode::Release, 0)) 86MODULE_PASS("inliner-wrapper", ModuleInlinerWrapperPass()) 87MODULE_PASS("inliner-wrapper-no-mandatory-first", 88 ModuleInlinerWrapperPass(getInlineParams(), false)) 89MODULE_PASS("insert-gcov-profiling", GCOVProfilerPass()) 90MODULE_PASS("instrorderfile", InstrOrderFilePass()) 91MODULE_PASS("instrprof", InstrProfilingLoweringPass()) 92MODULE_PASS("ctx-instr-lower", PGOCtxProfLoweringPass()) 93MODULE_PASS("print<ctx-prof-analysis>", CtxProfAnalysisPrinterPass(errs())) 94MODULE_PASS("invalidate<all>", InvalidateAllAnalysesPass()) 95MODULE_PASS("iroutliner", IROutlinerPass()) 96MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass()) 97MODULE_PASS("lower-emutls", LowerEmuTLSPass()) 98MODULE_PASS("lower-global-dtors", LowerGlobalDtorsPass()) 99MODULE_PASS("lower-ifunc", LowerIFuncPass()) 100MODULE_PASS("lowertypetests", LowerTypeTestsPass()) 101MODULE_PASS("pgo-force-function-attrs", PGOForceFunctionAttrsPass(PGOOpt ? PGOOpt->ColdOptType : PGOOptions::ColdFuncOpt::Default)) 102MODULE_PASS("memprof-context-disambiguation", MemProfContextDisambiguation()) 103MODULE_PASS("memprof-module", ModuleMemProfilerPass()) 104MODULE_PASS("mergefunc", MergeFunctionsPass()) 105MODULE_PASS("metarenamer", MetaRenamerPass()) 106MODULE_PASS("module-inline", ModuleInlinerPass()) 107MODULE_PASS("name-anon-globals", NameAnonGlobalPass()) 108MODULE_PASS("no-op-module", NoOpModulePass()) 109MODULE_PASS("nsan", NumericalStabilitySanitizerPass()) 110MODULE_PASS("objc-arc-apelim", ObjCARCAPElimPass()) 111MODULE_PASS("openmp-opt", OpenMPOptPass()) 112MODULE_PASS("openmp-opt-postlink", 113 OpenMPOptPass(ThinOrFullLTOPhase::FullLTOPostLink)) 114MODULE_PASS("partial-inliner", PartialInlinerPass()) 115MODULE_PASS("pgo-icall-prom", PGOIndirectCallPromotion()) 116MODULE_PASS("pgo-instr-gen", PGOInstrumentationGen()) 117MODULE_PASS("pgo-instr-use", PGOInstrumentationUse()) 118MODULE_PASS("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass(TM)) 119MODULE_PASS("print", PrintModulePass(errs())) 120MODULE_PASS("print-callgraph", CallGraphPrinterPass(errs())) 121MODULE_PASS("print-callgraph-sccs", CallGraphSCCsPrinterPass(errs())) 122MODULE_PASS("print-ir-similarity", IRSimilarityAnalysisPrinterPass(errs())) 123MODULE_PASS("print-lcg", LazyCallGraphPrinterPass(errs())) 124MODULE_PASS("print-lcg-dot", LazyCallGraphDOTPrinterPass(errs())) 125MODULE_PASS("print-must-be-executed-contexts", 126 MustBeExecutedContextPrinterPass(errs())) 127MODULE_PASS("print-profile-summary", ProfileSummaryPrinterPass(errs())) 128MODULE_PASS("print-stack-safety", StackSafetyGlobalPrinterPass(errs())) 129MODULE_PASS("print<dxil-metadata>", DXILMetadataAnalysisPrinterPass(errs())) 130MODULE_PASS("print<dxil-resource-binding>", 131 DXILResourceBindingPrinterPass(errs())) 132MODULE_PASS("print<inline-advisor>", InlineAdvisorAnalysisPrinterPass(errs())) 133MODULE_PASS("print<module-debuginfo>", ModuleDebugInfoPrinterPass(errs())) 134MODULE_PASS("print<reg-usage>", PhysicalRegisterUsageInfoPrinterPass(errs())) 135MODULE_PASS("pseudo-probe", SampleProfileProbePass(TM)) 136MODULE_PASS("pseudo-probe-update", PseudoProbeUpdatePass()) 137MODULE_PASS("recompute-globalsaa", RecomputeGlobalsAAPass()) 138MODULE_PASS("rel-lookup-table-converter", RelLookupTableConverterPass()) 139MODULE_PASS("rewrite-statepoints-for-gc", RewriteStatepointsForGC()) 140MODULE_PASS("rewrite-symbols", RewriteSymbolPass()) 141MODULE_PASS("rpo-function-attrs", ReversePostOrderFunctionAttrsPass()) 142MODULE_PASS("rtsan", RealtimeSanitizerPass()) 143MODULE_PASS("sample-profile", SampleProfileLoaderPass()) 144MODULE_PASS("sancov-module", SanitizerCoveragePass()) 145MODULE_PASS("sanmd-module", SanitizerBinaryMetadataPass()) 146MODULE_PASS("scc-oz-module-inliner", 147 buildInlinerPipeline(OptimizationLevel::Oz, 148 ThinOrFullLTOPhase::None)) 149MODULE_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass()) 150MODULE_PASS("strip", StripSymbolsPass()) 151MODULE_PASS("strip-dead-debug-info", StripDeadDebugInfoPass()) 152MODULE_PASS("strip-dead-prototypes", StripDeadPrototypesPass()) 153MODULE_PASS("strip-debug-declare", StripDebugDeclarePass()) 154MODULE_PASS("strip-nondebug", StripNonDebugSymbolsPass()) 155MODULE_PASS("strip-nonlinetable-debuginfo", StripNonLineTableDebugInfoPass()) 156MODULE_PASS("trigger-crash-module", TriggerCrashModulePass()) 157MODULE_PASS("trigger-verifier-error", TriggerVerifierErrorPass()) 158MODULE_PASS("tsan-module", ModuleThreadSanitizerPass()) 159MODULE_PASS("tysan", TypeSanitizerPass()) 160MODULE_PASS("verify", VerifierPass()) 161MODULE_PASS("view-callgraph", CallGraphViewerPass()) 162MODULE_PASS("wholeprogramdevirt", WholeProgramDevirtPass()) 163#undef MODULE_PASS 164 165#ifndef MODULE_PASS_WITH_PARAMS 166#define MODULE_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) 167#endif 168MODULE_PASS_WITH_PARAMS( 169 "asan", "AddressSanitizerPass", 170 [](AddressSanitizerOptions Opts) { return AddressSanitizerPass(Opts); }, 171 parseASanPassOptions, "kernel") 172MODULE_PASS_WITH_PARAMS( 173 "cg-profile", "CGProfilePass", 174 [](bool InLTOPostLink) { return CGProfilePass(InLTOPostLink);}, 175 parseCGProfilePassOptions, "in-lto-post-link") 176MODULE_PASS_WITH_PARAMS( 177 "global-merge", "GlobalMergePass", 178 [TM = TM](GlobalMergeOptions Opts) { return GlobalMergePass(TM, Opts); }, 179 parseGlobalMergeOptions, 180 "group-by-use;ignore-single-use;max-offset=N;merge-const;merge-external;" 181 "no-group-by-use;no-ignore-single-use;no-merge-const;no-merge-external;" 182 "size-only") 183MODULE_PASS_WITH_PARAMS( 184 "embed-bitcode", "EmbedBitcodePass", 185 [](EmbedBitcodeOptions Opts) { return EmbedBitcodePass(Opts); }, 186 parseEmbedBitcodePassOptions, "thinlto;emit-summary") 187MODULE_PASS_WITH_PARAMS( 188 "globaldce", "GlobalDCEPass", 189 [](bool InLTOPostLink) { return GlobalDCEPass(InLTOPostLink); }, 190 parseGlobalDCEPassOptions, "in-lto-post-link") 191MODULE_PASS_WITH_PARAMS( 192 "hwasan", "HWAddressSanitizerPass", 193 [](HWAddressSanitizerOptions Opts) { return HWAddressSanitizerPass(Opts); }, 194 parseHWASanPassOptions, "kernel;recover") 195MODULE_PASS_WITH_PARAMS( 196 "internalize", "InternalizePass", 197 [](SmallVector<std::string, 0> PreservedGVs) { 198 if (PreservedGVs.empty()) 199 return InternalizePass(); 200 auto MustPreserveGV = [=](const GlobalValue &GV) { 201 for (auto &PreservedGV : PreservedGVs) 202 if (GV.getName() == PreservedGV) 203 return true; 204 return false; 205 }; 206 return InternalizePass(MustPreserveGV); 207 }, 208 parseInternalizeGVs, "preserve-gv=GV") 209MODULE_PASS_WITH_PARAMS( 210 "ipsccp", "IPSCCPPass", [](IPSCCPOptions Opts) { return IPSCCPPass(Opts); }, 211 parseIPSCCPOptions, "no-func-spec;func-spec") 212MODULE_PASS_WITH_PARAMS( 213 "loop-extract", "LoopExtractorPass", 214 [](bool Single) { 215 if (Single) 216 return LoopExtractorPass(1); 217 return LoopExtractorPass(); 218 }, 219 parseLoopExtractorPassOptions, "single") 220MODULE_PASS_WITH_PARAMS( 221 "memprof-use", "MemProfUsePass", 222 [](std::string Opts) { return MemProfUsePass(Opts); }, 223 parseMemProfUsePassOptions, "profile-filename=S") 224MODULE_PASS_WITH_PARAMS( 225 "msan", "MemorySanitizerPass", 226 [](MemorySanitizerOptions Opts) { return MemorySanitizerPass(Opts); }, 227 parseMSanPassOptions, "recover;kernel;eager-checks;track-origins=N") 228MODULE_PASS_WITH_PARAMS( 229 "print<structural-hash>", "StructuralHashPrinterPass", 230 [](StructuralHashOptions Options) { 231 return StructuralHashPrinterPass(errs(), Options); 232 }, 233 parseStructuralHashPrinterPassOptions, "detailed;call-target-ignored") 234 235#undef MODULE_PASS_WITH_PARAMS 236 237#ifndef CGSCC_ANALYSIS 238#define CGSCC_ANALYSIS(NAME, CREATE_PASS) 239#endif 240CGSCC_ANALYSIS("no-op-cgscc", NoOpCGSCCAnalysis()) 241CGSCC_ANALYSIS("fam-proxy", FunctionAnalysisManagerCGSCCProxy()) 242CGSCC_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC)) 243#undef CGSCC_ANALYSIS 244 245#ifndef CGSCC_PASS 246#define CGSCC_PASS(NAME, CREATE_PASS) 247#endif 248CGSCC_PASS("argpromotion", ArgumentPromotionPass()) 249CGSCC_PASS("attributor-cgscc", AttributorCGSCCPass()) 250CGSCC_PASS("attributor-light-cgscc", AttributorLightCGSCCPass()) 251CGSCC_PASS("invalidate<all>", InvalidateAllAnalysesPass()) 252CGSCC_PASS("no-op-cgscc", NoOpCGSCCPass()) 253CGSCC_PASS("openmp-opt-cgscc", OpenMPOptCGSCCPass()) 254CGSCC_PASS("coro-annotation-elide", CoroAnnotationElidePass()) 255#undef CGSCC_PASS 256 257#ifndef CGSCC_PASS_WITH_PARAMS 258#define CGSCC_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) 259#endif 260CGSCC_PASS_WITH_PARAMS( 261 "coro-split", "CoroSplitPass", 262 [](bool OptimizeFrame) { return CoroSplitPass(OptimizeFrame); }, 263 parseCoroSplitPassOptions, "reuse-storage") 264CGSCC_PASS_WITH_PARAMS( 265 "function-attrs", "PostOrderFunctionAttrsPass", 266 [](bool SkipNonRecursive) { 267 return PostOrderFunctionAttrsPass(SkipNonRecursive); 268 }, 269 parsePostOrderFunctionAttrsPassOptions, "skip-non-recursive-function-attrs") 270CGSCC_PASS_WITH_PARAMS( 271 "inline", "InlinerPass", 272 [](bool OnlyMandatory) { return InlinerPass(OnlyMandatory); }, 273 parseInlinerPassOptions, "only-mandatory") 274#undef CGSCC_PASS_WITH_PARAMS 275 276#ifndef FUNCTION_ANALYSIS 277#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) 278#endif 279FUNCTION_ANALYSIS("aa", AAManager()) 280FUNCTION_ANALYSIS("access-info", LoopAccessAnalysis()) 281FUNCTION_ANALYSIS("assumptions", AssumptionAnalysis()) 282FUNCTION_ANALYSIS("bb-sections-profile-reader", BasicBlockSectionsProfileReaderAnalysis(TM)) 283FUNCTION_ANALYSIS("block-freq", BlockFrequencyAnalysis()) 284FUNCTION_ANALYSIS("branch-prob", BranchProbabilityAnalysis()) 285FUNCTION_ANALYSIS("cycles", CycleAnalysis()) 286FUNCTION_ANALYSIS("da", DependenceAnalysis()) 287FUNCTION_ANALYSIS("debug-ata", DebugAssignmentTrackingAnalysis()) 288FUNCTION_ANALYSIS("demanded-bits", DemandedBitsAnalysis()) 289FUNCTION_ANALYSIS("domfrontier", DominanceFrontierAnalysis()) 290FUNCTION_ANALYSIS("domtree", DominatorTreeAnalysis()) 291FUNCTION_ANALYSIS("func-properties", FunctionPropertiesAnalysis()) 292FUNCTION_ANALYSIS("machine-function-info", MachineFunctionAnalysis(TM)) 293FUNCTION_ANALYSIS("gc-function", GCFunctionAnalysis()) 294FUNCTION_ANALYSIS("inliner-size-estimator", InlineSizeEstimatorAnalysis()) 295FUNCTION_ANALYSIS("last-run-tracking", LastRunTrackingAnalysis()) 296FUNCTION_ANALYSIS("lazy-value-info", LazyValueAnalysis()) 297FUNCTION_ANALYSIS("loops", LoopAnalysis()) 298FUNCTION_ANALYSIS("memdep", MemoryDependenceAnalysis()) 299FUNCTION_ANALYSIS("memoryssa", MemorySSAAnalysis()) 300FUNCTION_ANALYSIS("no-op-function", NoOpFunctionAnalysis()) 301FUNCTION_ANALYSIS("opt-remark-emit", OptimizationRemarkEmitterAnalysis()) 302FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC)) 303FUNCTION_ANALYSIS("phi-values", PhiValuesAnalysis()) 304FUNCTION_ANALYSIS("postdomtree", PostDominatorTreeAnalysis()) 305FUNCTION_ANALYSIS("regions", RegionInfoAnalysis()) 306FUNCTION_ANALYSIS("scalar-evolution", ScalarEvolutionAnalysis()) 307FUNCTION_ANALYSIS("should-not-run-function-passes", 308 ShouldNotRunFunctionPassesAnalysis()) 309FUNCTION_ANALYSIS("should-run-extra-vector-passes", 310 ShouldRunExtraVectorPasses()) 311FUNCTION_ANALYSIS("ssp-layout", SSPLayoutAnalysis()) 312FUNCTION_ANALYSIS("stack-safety-local", StackSafetyAnalysis()) 313FUNCTION_ANALYSIS("target-ir", 314 TM ? TM->getTargetIRAnalysis() : TargetIRAnalysis()) 315FUNCTION_ANALYSIS("target-lib-info", TargetLibraryAnalysis()) 316FUNCTION_ANALYSIS("uniformity", UniformityInfoAnalysis()) 317FUNCTION_ANALYSIS("verify", VerifierAnalysis()) 318 319#ifndef FUNCTION_ALIAS_ANALYSIS 320#define FUNCTION_ALIAS_ANALYSIS(NAME, CREATE_PASS) \ 321 FUNCTION_ANALYSIS(NAME, CREATE_PASS) 322#endif 323FUNCTION_ALIAS_ANALYSIS("basic-aa", BasicAA()) 324FUNCTION_ALIAS_ANALYSIS("objc-arc-aa", objcarc::ObjCARCAA()) 325FUNCTION_ALIAS_ANALYSIS("scev-aa", SCEVAA()) 326FUNCTION_ALIAS_ANALYSIS("scoped-noalias-aa", ScopedNoAliasAA()) 327FUNCTION_ALIAS_ANALYSIS("tbaa", TypeBasedAA()) 328#undef FUNCTION_ALIAS_ANALYSIS 329#undef FUNCTION_ANALYSIS 330 331#ifndef FUNCTION_PASS 332#define FUNCTION_PASS(NAME, CREATE_PASS) 333#endif 334FUNCTION_PASS("aa-eval", AAEvaluator()) 335FUNCTION_PASS("adce", ADCEPass()) 336FUNCTION_PASS("add-discriminators", AddDiscriminatorsPass()) 337FUNCTION_PASS("aggressive-instcombine", AggressiveInstCombinePass()) 338FUNCTION_PASS("alignment-from-assumptions", AlignmentFromAssumptionsPass()) 339FUNCTION_PASS("annotation-remarks", AnnotationRemarksPass()) 340FUNCTION_PASS("assume-builder", AssumeBuilderPass()) 341FUNCTION_PASS("assume-simplify", AssumeSimplifyPass()) 342FUNCTION_PASS("atomic-expand", AtomicExpandPass(TM)) 343FUNCTION_PASS("bdce", BDCEPass()) 344FUNCTION_PASS("break-crit-edges", BreakCriticalEdgesPass()) 345FUNCTION_PASS("callbr-prepare", CallBrPreparePass()) 346FUNCTION_PASS("callsite-splitting", CallSiteSplittingPass()) 347FUNCTION_PASS("chr", ControlHeightReductionPass()) 348FUNCTION_PASS("codegenprepare", CodeGenPreparePass(TM)) 349FUNCTION_PASS("complex-deinterleaving", ComplexDeinterleavingPass(TM)) 350FUNCTION_PASS("consthoist", ConstantHoistingPass()) 351FUNCTION_PASS("constraint-elimination", ConstraintEliminationPass()) 352FUNCTION_PASS("coro-elide", CoroElidePass()) 353FUNCTION_PASS("correlated-propagation", CorrelatedValuePropagationPass()) 354FUNCTION_PASS("count-visits", CountVisitsPass()) 355FUNCTION_PASS("dce", DCEPass()) 356FUNCTION_PASS("declare-to-assign", llvm::AssignmentTrackingPass()) 357FUNCTION_PASS("dfa-jump-threading", DFAJumpThreadingPass()) 358FUNCTION_PASS("div-rem-pairs", DivRemPairsPass()) 359FUNCTION_PASS("dot-cfg", CFGPrinterPass()) 360FUNCTION_PASS("dot-cfg-only", CFGOnlyPrinterPass()) 361FUNCTION_PASS("dot-dom", DomPrinter()) 362FUNCTION_PASS("dot-dom-only", DomOnlyPrinter()) 363FUNCTION_PASS("dot-post-dom", PostDomPrinter()) 364FUNCTION_PASS("dot-post-dom-only", PostDomOnlyPrinter()) 365FUNCTION_PASS("dse", DSEPass()) 366FUNCTION_PASS("dwarf-eh-prepare", DwarfEHPreparePass(TM)) 367FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass(TM)) 368FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass(TM)) 369FUNCTION_PASS("expand-memcmp", ExpandMemCmpPass(TM)) 370FUNCTION_PASS("extra-vector-passes", 371 ExtraFunctionPassManager<ShouldRunExtraVectorPasses>()) 372FUNCTION_PASS("fix-irreducible", FixIrreduciblePass()) 373FUNCTION_PASS("flatten-cfg", FlattenCFGPass()) 374FUNCTION_PASS("float2int", Float2IntPass()) 375FUNCTION_PASS("gc-lowering", GCLoweringPass()) 376FUNCTION_PASS("guard-widening", GuardWideningPass()) 377FUNCTION_PASS("gvn-hoist", GVNHoistPass()) 378FUNCTION_PASS("gvn-sink", GVNSinkPass()) 379FUNCTION_PASS("helloworld", HelloWorldPass()) 380FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass(TM)) 381FUNCTION_PASS("infer-address-spaces", InferAddressSpacesPass()) 382FUNCTION_PASS("infer-alignment", InferAlignmentPass()) 383FUNCTION_PASS("inject-tli-mappings", InjectTLIMappings()) 384FUNCTION_PASS("instcount", InstCountPass()) 385FUNCTION_PASS("instnamer", InstructionNamerPass()) 386FUNCTION_PASS("instsimplify", InstSimplifyPass()) 387FUNCTION_PASS("interleaved-access", InterleavedAccessPass(TM)) 388FUNCTION_PASS("interleaved-load-combine", InterleavedLoadCombinePass(TM)) 389FUNCTION_PASS("invalidate<all>", InvalidateAllAnalysesPass()) 390FUNCTION_PASS("irce", IRCEPass()) 391FUNCTION_PASS("jump-threading", JumpThreadingPass()) 392FUNCTION_PASS("jump-table-to-switch", JumpTableToSwitchPass()); 393FUNCTION_PASS("kcfi", KCFIPass()) 394FUNCTION_PASS("kernel-info", KernelInfoPrinter(TM)) 395FUNCTION_PASS("lcssa", LCSSAPass()) 396FUNCTION_PASS("libcalls-shrinkwrap", LibCallsShrinkWrapPass()) 397FUNCTION_PASS("lint", LintPass()) 398FUNCTION_PASS("load-store-vectorizer", LoadStoreVectorizerPass()) 399FUNCTION_PASS("loop-data-prefetch", LoopDataPrefetchPass()) 400FUNCTION_PASS("loop-distribute", LoopDistributePass()) 401FUNCTION_PASS("loop-fusion", LoopFusePass()) 402FUNCTION_PASS("loop-load-elim", LoopLoadEliminationPass()) 403FUNCTION_PASS("loop-simplify", LoopSimplifyPass()) 404FUNCTION_PASS("loop-sink", LoopSinkPass()) 405FUNCTION_PASS("loop-versioning", LoopVersioningPass()) 406FUNCTION_PASS("lower-atomic", LowerAtomicPass()) 407FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass()) 408FUNCTION_PASS("lower-expect", LowerExpectIntrinsicPass()) 409FUNCTION_PASS("lower-guard-intrinsic", LowerGuardIntrinsicPass()) 410FUNCTION_PASS("lower-invoke", LowerInvokePass()) 411FUNCTION_PASS("lower-switch", LowerSwitchPass()) 412FUNCTION_PASS("lower-widenable-condition", LowerWidenableConditionPass()) 413FUNCTION_PASS("make-guards-explicit", MakeGuardsExplicitPass()) 414FUNCTION_PASS("mem2reg", PromotePass()) 415FUNCTION_PASS("memcpyopt", MemCpyOptPass()) 416FUNCTION_PASS("memprof", MemProfilerPass()) 417FUNCTION_PASS("mergeicmps", MergeICmpsPass()) 418FUNCTION_PASS("mergereturn", UnifyFunctionExitNodesPass()) 419FUNCTION_PASS("move-auto-init", MoveAutoInitPass()) 420FUNCTION_PASS("nary-reassociate", NaryReassociatePass()) 421FUNCTION_PASS("newgvn", NewGVNPass()) 422FUNCTION_PASS("no-op-function", NoOpFunctionPass()) 423FUNCTION_PASS("normalize", IRNormalizerPass()) 424FUNCTION_PASS("objc-arc", ObjCARCOptPass()) 425FUNCTION_PASS("objc-arc-contract", ObjCARCContractPass()) 426FUNCTION_PASS("objc-arc-expand", ObjCARCExpandPass()) 427FUNCTION_PASS("pa-eval", PAEvalPass()) 428FUNCTION_PASS("partially-inline-libcalls", PartiallyInlineLibCallsPass()) 429FUNCTION_PASS("pgo-memop-opt", PGOMemOPSizeOpt()) 430FUNCTION_PASS("place-safepoints", PlaceSafepointsPass()) 431FUNCTION_PASS("print", PrintFunctionPass(errs())) 432// TODO: rename to print<foo> after NPM switch 433FUNCTION_PASS("print-alias-sets", AliasSetsPrinterPass(errs())) 434FUNCTION_PASS("print-cfg-sccs", CFGSCCPrinterPass(errs())) 435FUNCTION_PASS("print-memderefs", MemDerefPrinterPass(errs())) 436FUNCTION_PASS("print-mustexecute", MustExecutePrinterPass(errs())) 437FUNCTION_PASS("print-predicateinfo", PredicateInfoPrinterPass(errs())) 438FUNCTION_PASS("print<access-info>", LoopAccessInfoPrinterPass(errs())) 439FUNCTION_PASS("print<assumptions>", AssumptionPrinterPass(errs())) 440FUNCTION_PASS("print<block-freq>", BlockFrequencyPrinterPass(errs())) 441FUNCTION_PASS("print<branch-prob>", BranchProbabilityPrinterPass(errs())) 442FUNCTION_PASS("print<cost-model>", CostModelPrinterPass(errs())) 443FUNCTION_PASS("print<cycles>", CycleInfoPrinterPass(errs())) 444FUNCTION_PASS("print<da>", DependenceAnalysisPrinterPass(errs())) 445FUNCTION_PASS("print<debug-ata>", DebugAssignmentTrackingPrinterPass(errs())) 446FUNCTION_PASS("print<delinearization>", DelinearizationPrinterPass(errs())) 447FUNCTION_PASS("print<demanded-bits>", DemandedBitsPrinterPass(errs())) 448FUNCTION_PASS("print<domfrontier>", DominanceFrontierPrinterPass(errs())) 449FUNCTION_PASS("print<domtree>", DominatorTreePrinterPass(errs())) 450FUNCTION_PASS("print<func-properties>", FunctionPropertiesPrinterPass(errs())) 451FUNCTION_PASS("print<inline-cost>", InlineCostAnnotationPrinterPass(errs())) 452FUNCTION_PASS("print<inliner-size-estimator>", 453 InlineSizeEstimatorAnalysisPrinterPass(errs())) 454FUNCTION_PASS("print<lazy-value-info>", LazyValueInfoPrinterPass(errs())) 455FUNCTION_PASS("print<loops>", LoopPrinterPass(errs())) 456FUNCTION_PASS("print<memoryssa-walker>", MemorySSAWalkerPrinterPass(errs())) 457FUNCTION_PASS("print<phi-values>", PhiValuesPrinterPass(errs())) 458FUNCTION_PASS("print<postdomtree>", PostDominatorTreePrinterPass(errs())) 459FUNCTION_PASS("print<regions>", RegionInfoPrinterPass(errs())) 460FUNCTION_PASS("print<scalar-evolution>", ScalarEvolutionPrinterPass(errs())) 461FUNCTION_PASS("print<stack-safety-local>", StackSafetyPrinterPass(errs())) 462FUNCTION_PASS("print<uniformity>", UniformityInfoPrinterPass(errs())) 463FUNCTION_PASS("reassociate", ReassociatePass()) 464FUNCTION_PASS("redundant-dbg-inst-elim", RedundantDbgInstEliminationPass()) 465FUNCTION_PASS("reg2mem", RegToMemPass()) 466FUNCTION_PASS("safe-stack", SafeStackPass(TM)) 467FUNCTION_PASS("sandbox-vectorizer", SandboxVectorizerPass()) 468FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass()) 469FUNCTION_PASS("sccp", SCCPPass()) 470FUNCTION_PASS("select-optimize", SelectOptimizePass(TM)) 471FUNCTION_PASS("separate-const-offset-from-gep", 472 SeparateConstOffsetFromGEPPass()) 473FUNCTION_PASS("sink", SinkingPass()) 474FUNCTION_PASS("sjlj-eh-prepare", SjLjEHPreparePass(TM)) 475FUNCTION_PASS("slp-vectorizer", SLPVectorizerPass()) 476FUNCTION_PASS("slsr", StraightLineStrengthReducePass()) 477FUNCTION_PASS("stack-protector", StackProtectorPass(TM)) 478FUNCTION_PASS("strip-gc-relocates", StripGCRelocates()) 479FUNCTION_PASS("tailcallelim", TailCallElimPass()) 480FUNCTION_PASS("transform-warning", WarnMissedTransformationsPass()) 481FUNCTION_PASS("trigger-crash-function", TriggerCrashFunctionPass()) 482FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass()) 483FUNCTION_PASS("tsan", ThreadSanitizerPass()) 484FUNCTION_PASS("typepromotion", TypePromotionPass(TM)) 485FUNCTION_PASS("unify-loop-exits", UnifyLoopExitsPass()) 486FUNCTION_PASS("vector-combine", VectorCombinePass()) 487FUNCTION_PASS("verify", VerifierPass()) 488FUNCTION_PASS("verify<cycles>", CycleInfoVerifierPass()) 489FUNCTION_PASS("verify<domtree>", DominatorTreeVerifierPass()) 490FUNCTION_PASS("verify<loops>", LoopVerifierPass()) 491FUNCTION_PASS("verify<memoryssa>", MemorySSAVerifierPass()) 492FUNCTION_PASS("verify<regions>", RegionInfoVerifierPass()) 493FUNCTION_PASS("verify<safepoint-ir>", SafepointIRVerifierPass()) 494FUNCTION_PASS("verify<scalar-evolution>", ScalarEvolutionVerifierPass()) 495FUNCTION_PASS("view-cfg", CFGViewerPass()) 496FUNCTION_PASS("view-cfg-only", CFGOnlyViewerPass()) 497FUNCTION_PASS("view-dom", DomViewer()) 498FUNCTION_PASS("view-dom-only", DomOnlyViewer()) 499FUNCTION_PASS("view-post-dom", PostDomViewer()) 500FUNCTION_PASS("view-post-dom-only", PostDomOnlyViewer()) 501FUNCTION_PASS("wasm-eh-prepare", WasmEHPreparePass()) 502#undef FUNCTION_PASS 503 504#ifndef FUNCTION_PASS_WITH_PARAMS 505#define FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) 506#endif 507FUNCTION_PASS_WITH_PARAMS( 508 "cfguard", "CFGuardPass", 509 [](CFGuardPass::Mechanism M) { return CFGuardPass(M); }, 510 parseCFGuardPassOptions, "check;dispatch") 511FUNCTION_PASS_WITH_PARAMS( 512 "early-cse", "EarlyCSEPass", 513 [](bool UseMemorySSA) { return EarlyCSEPass(UseMemorySSA); }, 514 parseEarlyCSEPassOptions, "memssa") 515FUNCTION_PASS_WITH_PARAMS( 516 "ee-instrument", "EntryExitInstrumenterPass", 517 [](bool PostInlining) { return EntryExitInstrumenterPass(PostInlining); }, 518 parseEntryExitInstrumenterPassOptions, "post-inline") 519FUNCTION_PASS_WITH_PARAMS( 520 "function-simplification", "", 521 [this](OptimizationLevel OL) { 522 return buildFunctionSimplificationPipeline(OL, ThinOrFullLTOPhase::None); 523 }, 524 parseFunctionSimplificationPipelineOptions, "O1;O2;O3;Os;Oz") 525FUNCTION_PASS_WITH_PARAMS( 526 "gvn", "GVNPass", [](GVNOptions Opts) { return GVNPass(Opts); }, 527 parseGVNOptions, 528 "no-pre;pre;no-load-pre;load-pre;no-split-backedge-load-pre;" 529 "split-backedge-load-pre;no-memdep;memdep;no-memoryssa;memoryssa") 530FUNCTION_PASS_WITH_PARAMS( 531 "hardware-loops", "HardwareLoopsPass", 532 [](HardwareLoopOptions Opts) { return HardwareLoopsPass(Opts); }, 533 parseHardwareLoopOptions, 534 "force-hardware-loops;force-hardware-loop-phi;force-nested-hardware-loop;" 535 "force-hardware-loop-guard;hardware-loop-decrement=N;" 536 "hardware-loop-counter-bitwidth=N") 537FUNCTION_PASS_WITH_PARAMS( 538 "instcombine", "InstCombinePass", 539 [](InstCombineOptions Opts) { return InstCombinePass(Opts); }, 540 parseInstCombineOptions, 541 "no-use-loop-info;use-loop-info;no-verify-fixpoint;verify-fixpoint;" 542 "max-iterations=N") 543FUNCTION_PASS_WITH_PARAMS( 544 "loop-unroll", "LoopUnrollPass", 545 [](LoopUnrollOptions Opts) { return LoopUnrollPass(Opts); }, 546 parseLoopUnrollOptions, 547 "O0;O1;O2;O3;full-unroll-max=N;no-partial;partial;no-peeling;peeling;" 548 "no-profile-peeling;profile-peeling;no-runtime;runtime;no-upperbound;" 549 "upperbound") 550FUNCTION_PASS_WITH_PARAMS( 551 "loop-vectorize", "LoopVectorizePass", 552 [](LoopVectorizeOptions Opts) { return LoopVectorizePass(Opts); }, 553 parseLoopVectorizeOptions, 554 "no-interleave-forced-only;interleave-forced-only;no-vectorize-forced-only;" 555 "vectorize-forced-only") 556FUNCTION_PASS_WITH_PARAMS( 557 "lower-allow-check", "LowerAllowCheckPass", 558 [](LowerAllowCheckPass::Options Opts) { return LowerAllowCheckPass(Opts); }, 559 parseLowerAllowCheckPassOptions, "") 560FUNCTION_PASS_WITH_PARAMS( 561 "lower-matrix-intrinsics", "LowerMatrixIntrinsicsPass", 562 [](bool Minimal) { return LowerMatrixIntrinsicsPass(Minimal); }, 563 parseLowerMatrixIntrinsicsPassOptions, "minimal") 564FUNCTION_PASS_WITH_PARAMS( 565 "mldst-motion", "MergedLoadStoreMotionPass", 566 [](MergedLoadStoreMotionOptions Opts) { 567 return MergedLoadStoreMotionPass(Opts); 568 }, 569 parseMergedLoadStoreMotionOptions, "no-split-footer-bb;split-footer-bb") 570FUNCTION_PASS_WITH_PARAMS( 571 "print<da>", "DependenceAnalysisPrinterPass", 572 [](bool NormalizeResults) { 573 return DependenceAnalysisPrinterPass(errs(), NormalizeResults); 574 }, 575 parseDependenceAnalysisPrinterOptions, "normalized-results") 576FUNCTION_PASS_WITH_PARAMS( 577 "print<memoryssa>", "MemorySSAPrinterPass", 578 [](bool NoEnsureOptimizedUses) { 579 return MemorySSAPrinterPass(errs(), !NoEnsureOptimizedUses); 580 }, 581 parseMemorySSAPrinterPassOptions, "no-ensure-optimized-uses") 582FUNCTION_PASS_WITH_PARAMS( 583 "print<stack-lifetime>", "StackLifetimePrinterPass", 584 [](StackLifetime::LivenessType Type) { 585 return StackLifetimePrinterPass(errs(), Type); 586 }, 587 parseStackLifetimeOptions, "may;must") 588FUNCTION_PASS_WITH_PARAMS( 589 "scalarizer", "ScalarizerPass", 590 [](ScalarizerPassOptions Opts) { return ScalarizerPass(Opts); }, 591 parseScalarizerOptions, 592 "load-store;no-load-store;variable-insert-extract;" 593 "no-variable-insert-extract;min-bits=N;") 594FUNCTION_PASS_WITH_PARAMS( 595 "separate-const-offset-from-gep", "SeparateConstOffsetFromGEPPass", 596 [](bool LowerGEP) { return SeparateConstOffsetFromGEPPass(LowerGEP); }, 597 parseSeparateConstOffsetFromGEPPassOptions, "lower-gep") 598FUNCTION_PASS_WITH_PARAMS( 599 "simplifycfg", "SimplifyCFGPass", 600 [](SimplifyCFGOptions Opts) { return SimplifyCFGPass(Opts); }, 601 parseSimplifyCFGOptions, 602 "no-forward-switch-cond;forward-switch-cond;no-switch-range-to-icmp;" 603 "switch-range-to-icmp;no-switch-to-lookup;switch-to-lookup;no-keep-loops;" 604 "keep-loops;no-hoist-common-insts;hoist-common-insts;no-sink-common-insts;" 605 "sink-common-insts;bonus-inst-threshold=N") 606FUNCTION_PASS_WITH_PARAMS( 607 "speculative-execution", "SpeculativeExecutionPass", 608 [](bool OnlyIfDivergentTarget) { 609 return SpeculativeExecutionPass(OnlyIfDivergentTarget); 610 }, 611 parseSpeculativeExecutionPassOptions, "only-if-divergent-target") 612FUNCTION_PASS_WITH_PARAMS( 613 "sroa", "SROAPass", 614 [](SROAOptions PreserveCFG) { return SROAPass(PreserveCFG); }, 615 parseSROAOptions, "preserve-cfg;modify-cfg") 616FUNCTION_PASS_WITH_PARAMS( 617 "structurizecfg", "StructurizeCFG", 618 [](bool SkipUniformRegions) { 619 return StructurizeCFGPass(SkipUniformRegions); 620 }, 621 parseStructurizeCFGPassOptions, "skip-uniform-regions") 622FUNCTION_PASS_WITH_PARAMS( 623 "win-eh-prepare", "WinEHPreparePass", 624 [](bool DemoteCatchSwitchPHIOnly) { 625 return WinEHPreparePass(DemoteCatchSwitchPHIOnly); 626 }, 627 parseWinEHPrepareOptions, "demote-catchswitch-only") 628FUNCTION_PASS_WITH_PARAMS( 629 "bounds-checking", "BoundsCheckingPass", 630 [](BoundsCheckingPass::Options Options) { 631 return BoundsCheckingPass(Options); 632 }, 633 parseBoundsCheckingOptions, "trap") 634#undef FUNCTION_PASS_WITH_PARAMS 635 636#ifndef LOOPNEST_PASS 637#define LOOPNEST_PASS(NAME, CREATE_PASS) 638#endif 639LOOPNEST_PASS("loop-flatten", LoopFlattenPass()) 640LOOPNEST_PASS("loop-interchange", LoopInterchangePass()) 641LOOPNEST_PASS("loop-unroll-and-jam", LoopUnrollAndJamPass()) 642LOOPNEST_PASS("no-op-loopnest", NoOpLoopNestPass()) 643#undef LOOPNEST_PASS 644 645#ifndef LOOP_ANALYSIS 646#define LOOP_ANALYSIS(NAME, CREATE_PASS) 647#endif 648LOOP_ANALYSIS("ddg", DDGAnalysis()) 649LOOP_ANALYSIS("iv-users", IVUsersAnalysis()) 650LOOP_ANALYSIS("no-op-loop", NoOpLoopAnalysis()) 651LOOP_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC)) 652LOOP_ANALYSIS("should-run-extra-simple-loop-unswitch", 653 ShouldRunExtraSimpleLoopUnswitch()) 654 655#undef LOOP_ANALYSIS 656 657#ifndef LOOP_PASS 658#define LOOP_PASS(NAME, CREATE_PASS) 659#endif 660LOOP_PASS("canon-freeze", CanonicalizeFreezeInLoopsPass()) 661LOOP_PASS("dot-ddg", DDGDotPrinterPass()) 662LOOP_PASS("guard-widening", GuardWideningPass()) 663LOOP_PASS("extra-simple-loop-unswitch-passes", 664 ExtraLoopPassManager<ShouldRunExtraSimpleLoopUnswitch>()) 665LOOP_PASS("indvars", IndVarSimplifyPass()) 666LOOP_PASS("invalidate<all>", InvalidateAllAnalysesPass()) 667LOOP_PASS("loop-bound-split", LoopBoundSplitPass()) 668LOOP_PASS("loop-deletion", LoopDeletionPass()) 669LOOP_PASS("loop-idiom", LoopIdiomRecognizePass()) 670LOOP_PASS("loop-idiom-vectorize", LoopIdiomVectorizePass()) 671LOOP_PASS("loop-instsimplify", LoopInstSimplifyPass()) 672LOOP_PASS("loop-predication", LoopPredicationPass()) 673LOOP_PASS("loop-reduce", LoopStrengthReducePass()) 674LOOP_PASS("loop-term-fold", LoopTermFoldPass()) 675LOOP_PASS("loop-simplifycfg", LoopSimplifyCFGPass()) 676LOOP_PASS("loop-unroll-full", LoopFullUnrollPass()) 677LOOP_PASS("loop-versioning-licm", LoopVersioningLICMPass()) 678LOOP_PASS("no-op-loop", NoOpLoopPass()) 679LOOP_PASS("print", PrintLoopPass(errs())) 680LOOP_PASS("print<ddg>", DDGAnalysisPrinterPass(errs())) 681LOOP_PASS("print<iv-users>", IVUsersPrinterPass(errs())) 682LOOP_PASS("print<loop-cache-cost>", LoopCachePrinterPass(errs())) 683LOOP_PASS("print<loopnest>", LoopNestPrinterPass(errs())) 684#undef LOOP_PASS 685 686#ifndef LOOP_PASS_WITH_PARAMS 687#define LOOP_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) 688#endif 689LOOP_PASS_WITH_PARAMS( 690 "licm", "LICMPass", [](LICMOptions Params) { return LICMPass(Params); }, 691 parseLICMOptions, "allowspeculation") 692LOOP_PASS_WITH_PARAMS( 693 "lnicm", "LNICMPass", [](LICMOptions Params) { return LNICMPass(Params); }, 694 parseLICMOptions, "allowspeculation") 695LOOP_PASS_WITH_PARAMS( 696 "loop-rotate", "LoopRotatePass", 697 [](std::pair<bool, bool> Params) { 698 return LoopRotatePass(Params.first, Params.second); 699 }, 700 parseLoopRotateOptions, 701 "no-header-duplication;header-duplication;" 702 "no-prepare-for-lto;prepare-for-lto") 703LOOP_PASS_WITH_PARAMS( 704 "simple-loop-unswitch", "SimpleLoopUnswitchPass", 705 [](std::pair<bool, bool> Params) { 706 return SimpleLoopUnswitchPass(Params.first, Params.second); 707 }, 708 parseLoopUnswitchOptions, "nontrivial;no-nontrivial;trivial;no-trivial") 709#undef LOOP_PASS_WITH_PARAMS 710