[llvm] [MemCpyOpt] Extend call slot optimization for non-dereferenceable destinations. (PR #217436)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 26 00:49:35 PDT 2026
================
@@ -924,8 +924,17 @@ bool MemCpyOptPass::performCallSlotOptzn(Instruction *cpyLoad,
ExplicitlyDereferenceableOnly) ||
!isDereferenceablePointer(cpyDest, APInt(64, cpySize),
SimplifyQuery(DL, DT, AC, C))) {
- LLVM_DEBUG(dbgs() << "Call Slot: Dest pointer not dereferenceable\n");
- return false;
+ // If the call is guaranteed to return normally (willreturn + nounwind),
+ // and there are no instructions between the call and the store that might
+ // trap or throw, execution will reach the store. Since the store would
+ // trap anyway if the pointer was not dereferenceable, we can forward the
+ // pointer to the call. Perform optimization only for non-memcpy/memset
+ // calls, as those are special cased later.
----------------
nikic wrote:
```suggestion
// pointer to the call.
```
https://github.com/llvm/llvm-project/pull/217436
More information about the llvm-commits
mailing list