authorgravatar for minyihh@uci.eduMin-Yih Hsu <minyihh@uci.edu> 2021-04-09 13:00:46-07:00
committergravatar for minyihh@uci.eduMin-Yih Hsu <minyihh@uci.edu> 2021-04-09 16:51:35-07:00
log52d871844c643f396a2bddee0753d24ff71ca3bb
tree05adee310cd34a85fd6ced7777d669e7442f6817
parent6b3eaa62e86d2652cf0b0802d704ab16d148c2ce

llvm new-pm: Build O0 pipeline in the correct way

Use `PassBuilder::buildO0DefaultPipeline` to build pipeline for -O0 in replacement of `PassBuilder::buildPerModuleDefaultPipeline`. This affects both normal and LTO settings. Two redundant Passes - which were added by accident - were also removed from LTO pipeline.

1 files changed, 5 insertions(+), 12 deletions(-)

src/zig_llvm.cpp+5-12
...@@ -277,15 +277,8 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM...@@ -277,15 +277,8 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM
277 });277 });
278 }278 }
279279
280 // Passes for either debug or release build280 // Passes specific for release build
281 if (is_debug) {281 if (!is_debug) {
282 // NOTE: Always inliner will go away (in debug build)
283 // when the self-hosted compiler becomes mature.
284 pass_builder.registerPipelineStartEPCallback(
285 [](ModulePassManager &module_pm, OptimizationLevel OL) {
286 module_pm.addPass(AlwaysInlinerPass());
287 });
288 } else {
289 pass_builder.registerPipelineStartEPCallback(282 pass_builder.registerPipelineStartEPCallback(
290 [](ModulePassManager &module_pm, OptimizationLevel OL) {283 [](ModulePassManager &module_pm, OptimizationLevel OL) {
291 module_pm.addPass(284 module_pm.addPass(
...@@ -312,10 +305,10 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM...@@ -312,10 +305,10 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM
312 opt_level = OptimizationLevel::O3;305 opt_level = OptimizationLevel::O3;
313306
314 // Initialize the PassManager307 // Initialize the PassManager
315 if (lto) {308 if (opt_level == OptimizationLevel::O0) {
309 module_pm = pass_builder.buildO0DefaultPipeline(opt_level, lto);
310 } else if (lto) {
316 module_pm = pass_builder.buildLTOPreLinkDefaultPipeline(opt_level);311 module_pm = pass_builder.buildLTOPreLinkDefaultPipeline(opt_level);
317 module_pm.addPass(CanonicalizeAliasesPass());
318 module_pm.addPass(NameAnonGlobalPass());
319 } else {312 } else {
320 module_pm = pass_builder.buildPerModuleDefaultPipeline(opt_level);313 module_pm = pass_builder.buildPerModuleDefaultPipeline(opt_level);
321 }314 }