MCPcopy Create free account
hub / github.com/apache/arrow / OptimizeModuleWithNewPassManager

Function OptimizeModuleWithNewPassManager

cpp/src/gandiva/engine.cc:477–514  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

475// several passes requiring LLVM 14+ that are not available in the legacy pass manager
476#if LLVM_VERSION_MAJOR >= 14
477static void OptimizeModuleWithNewPassManager(llvm::Module& module,
478 llvm::TargetIRAnalysis target_analysis) {
479 // Setup an optimiser pipeline
480 llvm::PassBuilder pass_builder;
481 llvm::LoopAnalysisManager loop_am;
482 llvm::FunctionAnalysisManager function_am;
483 llvm::CGSCCAnalysisManager cgscc_am;
484 llvm::ModuleAnalysisManager module_am;
485
486 function_am.registerPass([&] { return target_analysis; });
487
488 // Register required analysis managers
489 pass_builder.registerModuleAnalyses(module_am);
490 pass_builder.registerCGSCCAnalyses(cgscc_am);
491 pass_builder.registerFunctionAnalyses(function_am);
492 pass_builder.registerLoopAnalyses(loop_am);
493 pass_builder.crossRegisterProxies(loop_am, function_am, cgscc_am, module_am);
494
495 pass_builder.registerPipelineStartEPCallback([&](llvm::ModulePassManager& module_pm,
496 llvm::OptimizationLevel Level) {
497 module_pm.addPass(llvm::ModuleInlinerPass());
498
499 llvm::FunctionPassManager function_pm;
500 function_pm.addPass(llvm::InstCombinePass());
501 function_pm.addPass(llvm::PromotePass());
502 function_pm.addPass(llvm::GVNPass());
503 function_pm.addPass(llvm::NewGVNPass());
504 function_pm.addPass(llvm::SimplifyCFGPass());
505 function_pm.addPass(llvm::LoopVectorizePass());
506 function_pm.addPass(llvm::SLPVectorizerPass());
507 module_pm.addPass(llvm::createModuleToFunctionPassAdaptor(std::move(function_pm)));
508
509 module_pm.addPass(llvm::GlobalOptPass());
510 });
511
512 pass_builder.buildPerModuleDefaultPipeline(llvm::OptimizationLevel::O3)
513 .run(module, module_am);
514}
515#else
516static void OptimizeModuleWithLegacyPassManager(llvm::Module& module,
517 llvm::TargetIRAnalysis target_analysis) {

Callers 1

FinalizeModuleMethod · 0.85

Calls 1

runMethod · 0.45

Tested by

no test coverage detected