|
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