diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2018-05-30 22:48:20 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2018-06-12 20:50:21 +0200 |
| commit | 78a16443a3f9b617b83c1dda15b94b3636c2895d (patch) | |
| tree | af88d61150eeb0b090b0e60dc638839354f0b50e | |
| parent | ef8cb40c9c03fe60aac47c8736045231633dbdac (diff) | |
| download | rust-78a16443a3f9b617b83c1dda15b94b3636c2895d.tar.gz rust-78a16443a3f9b617b83c1dda15b94b3636c2895d.zip | |
Respect -Z no-verify during LTO
Currently -Z no-verify only controls IR verification prior to LLVM codegen, while verification is performed unconditionally both before and after linking with (Thin)LTO.
| -rw-r--r-- | src/librustc_codegen_llvm/back/lto.rs | 17 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/back/write.rs | 2 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/librustc_codegen_llvm/back/lto.rs b/src/librustc_codegen_llvm/back/lto.rs index 96eda50d788..415dd605220 100644 --- a/src/librustc_codegen_llvm/back/lto.rs +++ b/src/librustc_codegen_llvm/back/lto.rs @@ -461,9 +461,12 @@ fn run_pass_manager(cgcx: &CodegenContext, unsafe { let pm = llvm::LLVMCreatePassManager(); llvm::LLVMRustAddAnalysisPasses(tm, pm, llmod); - let pass = llvm::LLVMRustFindAndCreatePass("verify\0".as_ptr() as *const _); - assert!(!pass.is_null()); - llvm::LLVMRustAddPass(pm, pass); + + if !config.no_verify { + let pass = llvm::LLVMRustFindAndCreatePass("verify\0".as_ptr() as *const _); + assert!(!pass.is_null()); + llvm::LLVMRustAddPass(pm, pass); + } // When optimizing for LTO we don't actually pass in `-O0`, but we force // it to always happen at least with `-O1`. @@ -494,9 +497,11 @@ fn run_pass_manager(cgcx: &CodegenContext, } }); - let pass = llvm::LLVMRustFindAndCreatePass("verify\0".as_ptr() as *const _); - assert!(!pass.is_null()); - llvm::LLVMRustAddPass(pm, pass); + if !config.no_verify { + let pass = llvm::LLVMRustFindAndCreatePass("verify\0".as_ptr() as *const _); + assert!(!pass.is_null()); + llvm::LLVMRustAddPass(pm, pass); + } time_ext(cgcx.time_passes, None, "LTO passes", || llvm::LLVMRunPassManager(pm, llmod)); diff --git a/src/librustc_codegen_llvm/back/write.rs b/src/librustc_codegen_llvm/back/write.rs index baab3c618be..b34dae98d7a 100644 --- a/src/librustc_codegen_llvm/back/write.rs +++ b/src/librustc_codegen_llvm/back/write.rs @@ -232,7 +232,7 @@ pub struct ModuleConfig { emit_obj: bool, // Miscellaneous flags. These are mostly copied from command-line // options. - no_verify: bool, + pub no_verify: bool, no_prepopulate_passes: bool, no_builtins: bool, time_passes: bool, |
