diff options
| author | Erik Desjardins <erikdesjardins@users.noreply.github.com> | 2021-12-29 23:19:55 -0500 |
|---|---|---|
| committer | Erik Desjardins <erikdesjardins@users.noreply.github.com> | 2021-12-30 00:15:51 -0500 |
| commit | e4463b2453f3b2665076e5daec23040976b8792e (patch) | |
| tree | 91d81db07258a14eb542f635705737c4f268dd2a /compiler/rustc_codegen_llvm/src/builder.rs | |
| parent | 2b662217e745d88d93dcc6f5f5169bf7a0d9720e (diff) | |
| download | rust-e4463b2453f3b2665076e5daec23040976b8792e.tar.gz rust-e4463b2453f3b2665076e5daec23040976b8792e.zip | |
keep noinline for system llvm < 14
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/builder.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/builder.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_llvm/src/builder.rs b/compiler/rustc_codegen_llvm/src/builder.rs index 107300ed304..5217fa2758f 100644 --- a/compiler/rustc_codegen_llvm/src/builder.rs +++ b/compiler/rustc_codegen_llvm/src/builder.rs @@ -1201,8 +1201,15 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { unsafe { llvm::LLVMBuildZExt(self.llbuilder, val, dest_ty, UNNAMED) } } - fn mark_callsite_cold(&mut self, llret: &'ll Value) { + fn apply_attrs_to_cleanup_callsite(&mut self, llret: &'ll Value) { + // Cleanup is always the cold path. llvm::Attribute::Cold.apply_callsite(llvm::AttributePlace::Function, llret); + + // In LLVM versions with deferred inlining (currently, system LLVM < 14), + // inlining drop glue can lead to exponential size blowup, see #41696 and #92110. + if !llvm_util::is_rust_llvm() && llvm_util::get_version() < (14, 0, 0) { + llvm::Attribute::NoInline.apply_callsite(llvm::AttributePlace::Function, llret); + } } } |
