diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2021-09-13 18:18:59 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-09-25 11:24:23 +0200 |
| commit | 074bbc6b878f6afc5d6cfd1b5cce1e03588d8184 (patch) | |
| tree | a1ed3159c1b16707da66d66d510aeaac707e5b7d /compiler/rustc_llvm/llvm-wrapper | |
| parent | be01f42f73137129f5998e626e0639270066f5c9 (diff) | |
| download | rust-074bbc6b878f6afc5d6cfd1b5cce1e03588d8184.tar.gz rust-074bbc6b878f6afc5d6cfd1b5cce1e03588d8184.zip | |
Use correct pipeline for LTO at O0
Unlike the pre-link piplines, the LTO pipelines do support O0, and using them is required to avoid leaving behind undefined references for the linker.
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper')
| -rw-r--r-- | compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp index 1a0cfd58885..48eb50953a9 100644 --- a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp +++ b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp @@ -1004,7 +1004,10 @@ LLVMRustOptimizeWithNewPassManager( #endif bool NeedThinLTOBufferPasses = UseThinLTOBuffers; if (!NoPrepopulatePasses) { - if (OptLevel == OptimizationLevel::O0) { + // The pre-link pipelines don't support O0 and require using budilO0DefaultPipeline() instead. + // At the same time, the LTO pipelines do support O0 and using them is required. + bool IsLTO = OptStage == LLVMRustOptStage::ThinLTO || OptStage == LLVMRustOptStage::FatLTO; + if (OptLevel == OptimizationLevel::O0 && !IsLTO) { #if LLVM_VERSION_GE(12, 0) for (const auto &C : PipelineStartEPCallbacks) PB.registerPipelineStartEPCallback(C); |
