https://github.com/boomanaiden154 updated https://github.com/llvm/llvm-project/pull/166276
>From 7a3dec43ec2e3153bcaee800f628682e1ecce9ab Mon Sep 17 00:00:00 2001 From: Aiden Grossman <[email protected]> Date: Mon, 3 Nov 2025 22:45:04 +0000 Subject: [PATCH] [Clang] Mark this pointer in destructors dead_on_return This helps to clean up any dead stores that come up at the end of the destructor. The motivating example was a refactoring in libc++'s basic_string implementation in 8dae17be2991cd7f0d7fd9aa5aecd064520a14f6 that added a zeroing store into the destructor, causing a large performance regression on an internal workload. --- clang/lib/CodeGen/CGCall.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index efacb3cc04c01..ee6e13fd1c1a5 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -2767,7 +2767,8 @@ void CodeGenModule::ConstructAttributeList(StringRef Name, } // Apply `nonnull`, `dereferenceable(N)` and `align N` to the `this` argument, - // unless this is a thunk function. + // unless this is a thunk function. Add dead_on_return to the `this` argument + // in base class destructors to aid in DSE. // FIXME: fix this properly, https://reviews.llvm.org/D100388 if (FI.isInstanceMethod() && !IRFunctionArgs.hasInallocaArg() && !FI.arg_begin()->type->isVoidPointerType() && !IsThunk) { @@ -2800,6 +2801,15 @@ void CodeGenModule::ConstructAttributeList(StringRef Name, .getAsAlign(); Attrs.addAlignmentAttr(Alignment); + if (isa_and_nonnull<CXXDestructorDecl>( + CalleeInfo.getCalleeDecl().getDecl())) { + auto *ClassDecl = dyn_cast<CXXRecordDecl>( + CalleeInfo.getCalleeDecl().getDecl()->getDeclContext()); + if (ClassDecl->getNumBases() == 0 && ClassDecl->getNumVBases() == 0) { + Attrs.addAttribute(llvm::Attribute::DeadOnReturn); + } + } + ArgAttrs[IRArgs.first] = llvm::AttributeSet::get(getLLVMContext(), Attrs); } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
