diff options
| author | bors <bors@rust-lang.org> | 2021-03-31 03:20:33 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-03-31 03:20:33 +0000 |
| commit | 6ff482bde5d22a3a0171edb3245327f43cf9b593 (patch) | |
| tree | e785cd9af3f92d4bd0ebc38bc7f0f33ba3d3a009 /compiler/rustc_codegen_llvm/src | |
| parent | 65b44b0320e88f5a0608126c36b02be1b840700f (diff) | |
| parent | cad9b6b695e86c7c23482876d2f6fefd64451ab3 (diff) | |
| download | rust-6ff482bde5d22a3a0171edb3245327f43cf9b593.tar.gz rust-6ff482bde5d22a3a0171edb3245327f43cf9b593.zip | |
Auto merge of #83666 - Amanieu:instrprof-order, r=tmandry
Run LLVM coverage instrumentation passes before optimization passes This matches the behavior of Clang and allows us to remove several hacks which were needed to ensure functions weren't optimized away before reaching the instrumentation pass. Fixes #83429 cc `@richkadel` r? `@tmandry`
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/back/write.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_llvm/src/back/write.rs b/compiler/rustc_codegen_llvm/src/back/write.rs index 388dd7ce81b..085935b94df 100644 --- a/compiler/rustc_codegen_llvm/src/back/write.rs +++ b/compiler/rustc_codegen_llvm/src/back/write.rs @@ -548,6 +548,15 @@ pub(crate) unsafe fn optimize( llvm::LLVMRustAddPass(fpm, find_pass("lint").unwrap()); continue; } + if pass_name == "insert-gcov-profiling" || pass_name == "instrprof" { + // Instrumentation must be inserted before optimization, + // otherwise LLVM may optimize some functions away which + // breaks llvm-cov. + // + // This mirrors what Clang does in lib/CodeGen/BackendUtil.cpp. + llvm::LLVMRustAddPass(mpm, find_pass(pass_name).unwrap()); + continue; + } if let Some(pass) = find_pass(pass_name) { extra_passes.push(pass); |
