diff options
| author | Augie Fackler <augie@google.com> | 2021-09-27 17:03:08 -0400 |
|---|---|---|
| committer | Augie Fackler <augie@google.com> | 2021-09-27 18:11:21 -0400 |
| commit | 12c3f50a90b96fff93399f3039155da3ef96abb0 (patch) | |
| tree | c7a310ae4277aacb5f96a9e70cfd7a53f6ec6613 /compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp | |
| parent | 2b6ed3b675475abc01ce7e68bb75b457f0c85684 (diff) | |
| download | rust-12c3f50a90b96fff93399f3039155da3ef96abb0.tar.gz rust-12c3f50a90b96fff93399f3039155da3ef96abb0.zip | |
PassWrapper: handle function rename from upstream D36850
thinLTOResolvePrevailingInModule became thinLTOFinalizeInModule and gained the ability to propagate noRecurse and noUnwind function attributes. I ran codegen tests with it both on and off, as the upstream patch uses it in both modes, and the tests pass both ways. Given that, it seemed reasonable to go ahead and let the propagation be enabled in rustc, and see what happens. See https://reviews.llvm.org/D36850 for more examples of how the new version of the function gets used.
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp')
| -rw-r--r-- | compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp index 48eb50953a9..ddb5f7dcebf 100644 --- a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp +++ b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp @@ -1572,7 +1572,11 @@ extern "C" bool LLVMRustPrepareThinLTOResolveWeak(const LLVMRustThinLTOData *Data, LLVMModuleRef M) { Module &Mod = *unwrap(M); const auto &DefinedGlobals = Data->ModuleToDefinedGVSummaries.lookup(Mod.getModuleIdentifier()); +#if LLVM_VERSION_GE(14, 0) + thinLTOFinalizeInModule(Mod, DefinedGlobals, /*PropagateAttrs=*/true); +#else thinLTOResolvePrevailingInModule(Mod, DefinedGlobals); +#endif return true; } |
