|
27 | 27 | #include <llvm/IR/LegacyPassManager.h> |
28 | 28 | #include <llvm/IR/Verifier.h> |
29 | 29 | #include <llvm/IRReader/IRReader.h> |
| 30 | +#include <llvm/Passes/PassBuilder.h> |
30 | 31 | #include <llvm/Support/TargetSelect.h> |
31 | 32 | #include <llvm/Transforms/IPO/PassManagerBuilder.h> |
32 | 33 |
|
@@ -592,7 +593,6 @@ auto insert_emtpy_abort_replacement(llvm::Module* m) { |
592 | 593 |
|
593 | 594 | void CUDABackend::linkModuleWithLibdevice(const std::unique_ptr<llvm::Module>& ext, |
594 | 595 | llvm::Module& llvm_module, |
595 | | - llvm::PassManagerBuilder& pass_manager_builder, |
596 | 596 | const GPUTarget& gpu_target, |
597 | 597 | llvm::TargetMachine* nvptx_target_machine) { |
598 | 598 | #ifdef HAVE_CUDA |
@@ -641,17 +641,13 @@ void CUDABackend::linkModuleWithLibdevice(const std::unique_ptr<llvm::Module>& e |
641 | 641 | fn.addFnAttr("nvptx-f32ftz", "true"); |
642 | 642 | } |
643 | 643 |
|
644 | | - // add nvvm reflect pass replacing any NVVM conditionals with constants |
645 | | - nvptx_target_machine->adjustPassManager(pass_manager_builder); |
646 | | - llvm::legacy::FunctionPassManager FPM(&llvm_module); |
647 | | - pass_manager_builder.populateFunctionPassManager(FPM); |
| 644 | + llvm::PassBuilder pass_builder(nvptx_target_machine); |
| 645 | + llvm::ModuleAnalysisManager module_analysis_manager; |
| 646 | + pass_builder.registerModuleAnalyses(module_analysis_manager); |
| 647 | + llvm::ModulePassManager module_pass_manager; |
| 648 | + CHECK(!pass_builder.parsePassPipeline(module_pass_manager, "NVVMReflect")); |
648 | 649 |
|
649 | | - // Run the NVVMReflectPass here rather than inside optimize_ir |
650 | | - FPM.doInitialization(); |
651 | | - for (auto& F : llvm_module) { |
652 | | - FPM.run(F); |
653 | | - } |
654 | | - FPM.doFinalization(); |
| 650 | + module_pass_manager.run(llvm_module, module_analysis_manager); |
655 | 651 | #endif |
656 | 652 | } |
657 | 653 |
|
@@ -688,18 +684,12 @@ std::shared_ptr<CudaCompilationContext> CUDABackend::generateNativeGPUCode( |
688 | 684 | `gpu_target.cgen_state->module_` appears to be the same as `llvm_module` |
689 | 685 | */ |
690 | 686 | CHECK(gpu_target.cgen_state->module_ == llvm_module); |
691 | | - llvm::PassManagerBuilder pass_manager_builder = llvm::PassManagerBuilder(); |
692 | | - |
693 | | - pass_manager_builder.OptLevel = 0; |
694 | | - llvm::legacy::PassManager module_pass_manager; |
695 | | - pass_manager_builder.populateModulePassManager(module_pass_manager); |
696 | 687 |
|
697 | 688 | bool requires_libdevice = check_module_requires_libdevice(llvm_module); |
698 | 689 |
|
699 | 690 | if (requires_libdevice) { |
700 | 691 | linkModuleWithLibdevice(exts.at(ExtModuleKinds::rt_libdevice_module), |
701 | 692 | *llvm_module, |
702 | | - pass_manager_builder, |
703 | 693 | gpu_target, |
704 | 694 | nvptx_target_machine); |
705 | 695 | } |
|
0 commit comments