[memcpyopt] Restructure store(load src, dest) form of callslotopt for compile time
authorPhilip Reames <listmail@philipreames.com>
Tue, 29 Mar 2022 03:29:41 +0000 (20:29 -0700)
committerPhilip Reames <listmail@philipreames.com>
Mon, 4 Apr 2022 03:16:20 +0000 (20:16 -0700)
commit7c51669c21f1b28ad865fb8b9556144d544dce1b
treed164cc0f99e66907b5465aa68530d8c0d51e6a9b
parentc0f90c84b1a824ef58573c6f48a2ad5f2b6e8742
[memcpyopt] Restructure store(load src, dest) form of callslotopt for compile time

The search for the clobbering call is fairly expensive if uses are not optimized at construction.  Defer the clobber walk to the point in the implementation we need it; there are a bunch of bailouts before that point.  (e.g. If the source pointer is not an alloca, we can't do callslotopt.)

On a test case which involves a bunch of copies from argument pointers, this switches memcpyopt from > 1/2 second to < 10ms.
llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h
llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp