Lines Matching +full:- +full:pm
1 //===- PassManagerBuilder.cpp - Build Standard Pass -----------------------===//
8 //===----------------------------------------------------------------------===//
13 //===----------------------------------------------------------------------===//
16 #include "llvm-c/Transforms/PassManagerBuilder.h"
45 RunLoopVectorization("vectorize-loops", cl::Hidden,
49 RunSLPVectorization("vectorize-slp", cl::Hidden,
53 RunBBVectorization("vectorize-slp-aggressive", cl::Hidden,
57 UseGVNAfterVectorization("use-gvn-after-vectorization",
62 "extra-vectorizer-passes", cl::init(false), cl::Hidden,
66 RunLoopRerolling("reroll-loops", cl::Hidden,
70 RunFloat2Int("float-to-int", cl::Hidden, cl::init(true),
73 static cl::opt<bool> RunLoadCombine("combine-loads", cl::init(false),
78 RunSLPAfterLoopVectorization("run-slp-after-loop-vectorization",
83 // Experimental option to use CFL-AA
86 UseCFLAA("use-cfl-aa", cl::init(CFLAAType::None), cl::Hidden,
88 cl::values(clEnumValN(CFLAAType::None, "none", "Disable CFL-AA"),
90 "Enable unification-based CFL-AA"),
92 "Enable inclusion-based CFL-AA"),
94 "Enable both variants of CFL-aa"),
102 "enable-loopinterchange", cl::init(false), cl::Hidden,
106 "enable-non-lto-gmr", cl::init(true), cl::Hidden,
111 "enable-loop-load-elim", cl::init(true), cl::Hidden,
115 "profile-generate", cl::init(""), cl::Hidden,
120 "profile-use", cl::init(""), cl::Hidden, cl::value_desc("filename"),
125 "enable-loop-versioning-licm", cl::init(false), cl::Hidden,
164 GlobalExtensions->push_back(std::make_pair(Ty, std::move(Fn))); in addGlobalExtension()
172 legacy::PassManagerBase &PM) const { in addExtensionsToPM()
173 for (unsigned i = 0, e = GlobalExtensions->size(); i != e; ++i) in addExtensionsToPM()
175 (*GlobalExtensions)[i].second(*this, PM); in addExtensionsToPM()
178 Extensions[i].second(*this, PM); in addExtensionsToPM()
182 legacy::PassManagerBase &PM) const { in addInitialAliasAnalysisPasses()
185 PM.add(createCFLSteensAAWrapperPass()); in addInitialAliasAnalysisPasses()
188 PM.add(createCFLAndersAAWrapperPass()); in addInitialAliasAnalysisPasses()
191 PM.add(createCFLSteensAAWrapperPass()); in addInitialAliasAnalysisPasses()
192 PM.add(createCFLAndersAAWrapperPass()); in addInitialAliasAnalysisPasses()
200 // support "obvious" type-punning idioms. in addInitialAliasAnalysisPasses()
201 PM.add(createTypeBasedAAWrapperPass()); in addInitialAliasAnalysisPasses()
202 PM.add(createScopedNoAliasAAWrapperPass()); in addInitialAliasAnalysisPasses()
206 legacy::PassManagerBase &PM) const { in addInstructionCombiningPass()
208 PM.add(createInstructionCombiningPass(ExpensiveCombines)); in addInstructionCombiningPass()
259 // Rotate Loop - disable header duplication at -Oz in addFunctionSimplificationPasses()
260 MPM.add(createLoopRotatePass(SizeLevel == 2 ? 0 : -1)); in addFunctionSimplificationPasses()
336 // If all optimizations are disabled, just run the always-inline pass and, in populateModulePassManager()
347 // that pass manager. To prevent this we insert a no-op module pass to reset in populateModulePassManager()
348 // the pass manager to get the same behavior as EP_OptimizerLast in non-O0 in populateModulePassManager()
352 else if (!GlobalExtensions->empty() || !Extensions.empty()) in populateModulePassManager()
387 // Indirect call promotion that promotes intra-module targets only. in populateModulePassManager()
413 // we must insert a no-op module pass to reset the pass manager. in populateModulePassManager()
420 // these so they are eligible for inlining at link-time. Note if they in populateModulePassManager()
452 // later might get benefit of no-alias assumption in clone loop. in populateModulePassManager()
460 // useful as the above will have inlined, DCE'ed, and function-attr in populateModulePassManager()
481 // Re-rotate loops in all our loop nests. These may have fallout out of in populateModulePassManager()
483 // on the rotated form. Disable header duplication at -Oz. in populateModulePassManager()
484 MPM.add(createLoopRotatePass(SizeLevel == 2 ? 0 : -1)); in populateModulePassManager()
489 // llvm.loop.distribute=true or when -enable-loop-distribute is specified. in populateModulePassManager()
501 // on -O1 and no #pragma is found). Would be good to have these two passes in populateModulePassManager()
509 // common computations, hoist loop-invariant aspects out of any outer loop, in populateModulePassManager()
572 // GlobalOpt already deletes dead functions and globals, at -O2 try a in populateModulePassManager()
586 void PassManagerBuilder::addLTOOptimizationPasses(legacy::PassManagerBase &PM) { in addLTOOptimizationPasses() argument
588 // whole-program devirtualization and bitset lowering. in addLTOOptimizationPasses()
589 PM.add(createGlobalDCEPass()); in addLTOOptimizationPasses()
592 addInitialAliasAnalysisPasses(PM); in addLTOOptimizationPasses()
595 PM.add(createFunctionImportPass(ModuleSummary)); in addLTOOptimizationPasses()
598 PM.add(createForceFunctionAttrsLegacyPass()); in addLTOOptimizationPasses()
601 PM.add(createInferFunctionAttrsLegacyPass()); in addLTOOptimizationPasses()
605 // left by the earlier promotion pass that promotes intra-module targets. in addLTOOptimizationPasses()
606 // This two-step promotion is to save the compile time. For LTO, it should in addLTOOptimizationPasses()
608 PM.add(createPGOIndirectCallPromotionLegacyPass(true)); in addLTOOptimizationPasses()
613 PM.add(createIPSCCPPass()); in addLTOOptimizationPasses()
618 PM.add(createPostOrderFunctionAttrsLegacyPass()); in addLTOOptimizationPasses()
619 PM.add(createReversePostOrderFunctionAttrsPass()); in addLTOOptimizationPasses()
621 // Apply whole-program devirtualization and virtual constant propagation. in addLTOOptimizationPasses()
622 PM.add(createWholeProgramDevirtPass()); in addLTOOptimizationPasses()
629 PM.add(createGlobalOptimizerPass()); in addLTOOptimizationPasses()
631 PM.add(createPromoteMemoryToRegisterPass()); in addLTOOptimizationPasses()
635 PM.add(createConstantMergePass()); in addLTOOptimizationPasses()
638 PM.add(createDeadArgEliminationPass()); in addLTOOptimizationPasses()
644 addInstructionCombiningPass(PM); in addLTOOptimizationPasses()
645 addExtensionsToPM(EP_Peephole, PM); in addLTOOptimizationPasses()
650 PM.add(Inliner); in addLTOOptimizationPasses()
654 PM.add(createPruneEHPass()); // Remove dead EH info. in addLTOOptimizationPasses()
658 PM.add(createGlobalOptimizerPass()); in addLTOOptimizationPasses()
659 PM.add(createGlobalDCEPass()); // Remove dead functions. in addLTOOptimizationPasses()
663 PM.add(createArgumentPromotionPass()); in addLTOOptimizationPasses()
666 addInstructionCombiningPass(PM); in addLTOOptimizationPasses()
667 addExtensionsToPM(EP_Peephole, PM); in addLTOOptimizationPasses()
668 PM.add(createJumpThreadingPass()); in addLTOOptimizationPasses()
671 PM.add(createSROAPass()); in addLTOOptimizationPasses()
674 PM.add(createPostOrderFunctionAttrsLegacyPass()); // Add nocapture. in addLTOOptimizationPasses()
675 PM.add(createGlobalsAAWrapperPass()); // IP alias analysis. in addLTOOptimizationPasses()
677 PM.add(createLICMPass()); // Hoist loop invariants. in addLTOOptimizationPasses()
679 PM.add(createMergedLoadStoreMotionPass()); // Merge ld/st in diamonds. in addLTOOptimizationPasses()
680 PM.add(createGVNPass(DisableGVNLoadPRE)); // Remove redundancies. in addLTOOptimizationPasses()
681 PM.add(createMemCpyOptPass()); // Remove dead memcpys. in addLTOOptimizationPasses()
684 PM.add(createDeadStoreEliminationPass()); in addLTOOptimizationPasses()
687 PM.add(createIndVarSimplifyPass()); in addLTOOptimizationPasses()
688 PM.add(createLoopDeletionPass()); in addLTOOptimizationPasses()
690 PM.add(createLoopInterchangePass()); in addLTOOptimizationPasses()
693 PM.add(createSimpleLoopUnrollPass()); // Unroll small loops in addLTOOptimizationPasses()
694 PM.add(createLoopVectorizePass(true, LoopVectorize)); in addLTOOptimizationPasses()
697 PM.add(createLoopUnrollPass()); in addLTOOptimizationPasses()
702 addInstructionCombiningPass(PM); // Initial cleanup in addLTOOptimizationPasses()
703 PM.add(createCFGSimplificationPass()); // if-convert in addLTOOptimizationPasses()
704 PM.add(createSCCPPass()); // Propagate exposed constants in addLTOOptimizationPasses()
705 addInstructionCombiningPass(PM); // Clean up again in addLTOOptimizationPasses()
706 PM.add(createBitTrackingDCEPass()); in addLTOOptimizationPasses()
711 PM.add(createSLPVectorizerPass()); // Vectorize parallel scalar chains. in addLTOOptimizationPasses()
715 PM.add(createAlignmentFromAssumptionsPass()); in addLTOOptimizationPasses()
718 PM.add(createLoadCombinePass()); in addLTOOptimizationPasses()
721 addInstructionCombiningPass(PM); in addLTOOptimizationPasses()
722 addExtensionsToPM(EP_Peephole, PM); in addLTOOptimizationPasses()
724 PM.add(createJumpThreadingPass()); in addLTOOptimizationPasses()
728 legacy::PassManagerBase &PM) { in addLateLTOOptimizationPasses() argument
730 PM.add(createCFGSimplificationPass()); in addLateLTOOptimizationPasses()
733 PM.add(createEliminateAvailableExternallyPass()); in addLateLTOOptimizationPasses()
736 PM.add(createGlobalDCEPass()); in addLateLTOOptimizationPasses()
738 // FIXME: this is profitable (for compiler time) to do at -O0 too, but in addLateLTOOptimizationPasses()
741 PM.add(createMergeFunctionsPass()); in addLateLTOOptimizationPasses()
745 legacy::PassManagerBase &PM) { in populateThinLTOPassManager() argument
749 PM.add(createVerifierPass()); in populateThinLTOPassManager()
752 PM.add(createFunctionImportPass(ModuleSummary)); in populateThinLTOPassManager()
754 populateModulePassManager(PM); in populateThinLTOPassManager()
757 PM.add(createVerifierPass()); in populateThinLTOPassManager()
761 void PassManagerBuilder::populateLTOPassManager(legacy::PassManagerBase &PM) { in populateLTOPassManager() argument
763 PM.add(new TargetLibraryInfoWrapperPass(*LibraryInfo)); in populateLTOPassManager()
766 PM.add(createVerifierPass()); in populateLTOPassManager()
769 addLTOOptimizationPasses(PM); in populateLTOPassManager()
771 // Create a function that performs CFI checks for cross-DSO calls with targets in populateLTOPassManager()
773 PM.add(createCrossDSOCFIPass()); in populateLTOPassManager()
776 // control flow integrity mechanisms (-fsanitize=cfi*) and needs to run at in populateLTOPassManager()
778 PM.add(createLowerTypeTestsPass()); in populateLTOPassManager()
781 addLateLTOOptimizationPasses(PM); in populateLTOPassManager()
784 PM.add(createVerifierPass()); in populateLTOPassManager()
809 Builder->OptLevel = OptLevel; in LLVMPassManagerBuilderSetOptLevel()
816 Builder->SizeLevel = SizeLevel; in LLVMPassManagerBuilderSetSizeLevel()
823 Builder->DisableUnitAtATime = Value; in LLVMPassManagerBuilderSetDisableUnitAtATime()
830 Builder->DisableUnrollLoops = Value; in LLVMPassManagerBuilderSetDisableUnrollLoops()
836 // NOTE: The simplify-libcalls pass has been removed. in LLVMPassManagerBuilderSetDisableSimplifyLibCalls()
843 Builder->Inliner = createFunctionInliningPass(Threshold); in LLVMPassManagerBuilderUseInlinerWithThreshold()
848 LLVMPassManagerRef PM) { in LLVMPassManagerBuilderPopulateFunctionPassManager() argument
850 legacy::FunctionPassManager *FPM = unwrap<legacy::FunctionPassManager>(PM); in LLVMPassManagerBuilderPopulateFunctionPassManager()
851 Builder->populateFunctionPassManager(*FPM); in LLVMPassManagerBuilderPopulateFunctionPassManager()
856 LLVMPassManagerRef PM) { in LLVMPassManagerBuilderPopulateModulePassManager() argument
858 legacy::PassManagerBase *MPM = unwrap(PM); in LLVMPassManagerBuilderPopulateModulePassManager()
859 Builder->populateModulePassManager(*MPM); in LLVMPassManagerBuilderPopulateModulePassManager()
863 LLVMPassManagerRef PM, in LLVMPassManagerBuilderPopulateLTOPassManager() argument
867 legacy::PassManagerBase *LPM = unwrap(PM); in LLVMPassManagerBuilderPopulateLTOPassManager()
871 if (RunInliner && !Builder->Inliner) in LLVMPassManagerBuilderPopulateLTOPassManager()
872 Builder->Inliner = createFunctionInliningPass(); in LLVMPassManagerBuilderPopulateLTOPassManager()
874 Builder->populateLTOPassManager(*LPM); in LLVMPassManagerBuilderPopulateLTOPassManager()