[all-commits] [llvm/llvm-project] 487a34: [MemCpyOpt] Make capture check during call slot op...

Nikita Popov via All-commits all-commits at lists.llvm.org
Wed Jan 5 00:42:40 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 487a34ed9d7d24a7b1fb388c8856c784a459b22b
      https://github.com/llvm/llvm-project/commit/487a34ed9d7d24a7b1fb388c8856c784a459b22b
  Author: Nikita Popov <npopov at redhat.com>
  Date:   2022-01-05 (Wed, 05 Jan 2022)

  Changed paths:
    M llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp
    M llvm/test/Transforms/MemCpyOpt/capturing-func.ll

  Log Message:
  -----------
  [MemCpyOpt] Make capture check during call slot optimization more precise

Call slot optimization is currently supposed to be prevented if
the call can capture the source pointer. Due to an implementation
bug, this check currently doesn't trigger if a bitcast of the source
pointer is passed instead. I'm somewhat afraid of the fallout of
fixing this bug (due to heavy reliance on call slot optimization
in rust), so I'd like to strengthen the capture reasoning a bit first.

In particular, I believe that the capture is fine as long as a)
the call itself cannot depend on the pointer identity, because
neither dest has been captured before/at nor src before the
call and b) there is no potential use of the captured pointer
before the lifetime of the source alloca ends, either due to
lifetime.end or a return from a function. At that point the
potentially captured pointer becomes dangling.

Differential Revision: https://reviews.llvm.org/D115615




More information about the All-commits mailing list