llvm-project/llvm/test/Transforms/MemCpyOpt
Nikita Popov a5c3b5748c [MemCpyOpt] Work around PR54682
As discussed on https://github.com/llvm/llvm-project/issues/54682,
MemorySSA currently has a bug when computing the clobber of calls
that access loop-varying locations. I think a "proper" fix for this
on the MemorySSA side might be non-trivial, but we can easily work
around this in MemCpyOpt:

Currently, MemCpyOpt uses a location-less getClobberingMemoryAccess()
call to find a clobber on either the src or dest location, and then
refines it for the src and dest clobber. This was intended as an
optimization, as the location-less API is cached, while the
location-affected APIs are not.

However, I don't think this really makes a difference in practice,
because I don't think anything will use the cached clobbers on
those calls later anyway. On CTMark, this patch seems to be very
mildly positive actually.

So I think this is a reasonable way to avoid the problem for now,
though MemorySSA should also get a fix.

Differential Revision: https://reviews.llvm.org/D122911
2022-04-04 10:19:51 +02:00
..
2008-02-24-MultipleUseofSRet.ll
2008-03-13-ReturnSlotBitcast.ll
2011-06-02-CallSlotOverwritten.ll
aa-recursion-assertion-failure.ll
aggregate-type-crash.ll
align.ll
atomic.ll
byval-readnone.ll
callslot.ll Reapply [MemCpyOpt] Look through pointer casts when checking capture 2022-01-20 09:30:21 +01:00
callslot_aa.ll
callslot_badaa.ll
callslot_deref.ll
callslot_noalias.ll [MemCpyOpt] Fix metadata merging during call slot optimization 2022-01-20 09:25:13 +01:00
callslot_throw.ll [MemCpyOpt] Use helper for unwind check 2022-01-26 12:43:31 +01:00
capturing-func.ll Reapply [MemCpyOpt] Look through pointer casts when checking capture 2022-01-20 09:30:21 +01:00
crash.ll
fca2memcpy.ll
form-memset.ll
invariant.start.ll
lifetime.ll
load-store-to-memcpy.ll
loadstore-sret.ll
memcpy-byval-forwarding-clobbers.ll [MemCpyOpt] Check all access for MemoryUses in writtenBetween. 2022-02-21 16:54:30 +00:00
memcpy-in-loop.ll
memcpy-invoke-memcpy.ll
memcpy-to-memset-with-lifetimes.ll
memcpy-to-memset.ll
memcpy-undef.ll
memcpy.ll [MemCpyOpt] Fix broken check lines (NFC) 2022-02-16 14:39:43 +01:00
memmove.ll
memset-memcpy-oversized.ll
memset-memcpy-redundant-memset.ll
memset-memcpy-to-2x-memset.ll
merge-into-memset.ll
mixed-sizes.ll
no-libcalls.ll
non-integral.ll
nonlocal-memcpy-memcpy.ll [MemCpyOpt] Add non-local memcpy test with memory phi. 2022-02-18 11:59:24 +00:00
nontemporal.ll
opaque-ptr.ll [ValueTracking] Simplify llvm::isPointerOffset() 2022-03-14 09:32:36 -07:00
pr29105.ll
pr37967.ll
pr54682.ll [MemCpyOpt] Work around PR54682 2022-04-04 10:19:51 +02:00
preserve-memssa.ll
process_store.ll
profitable-memset.ll
smaller.ll
sret.ll
stackrestore.ll [MemCpyOpt] Fix broken check lines (NFC) 2022-02-16 14:39:43 +01:00
store-to-memset-is-nonzero-type.ll
store-to-memset.ll
variable-sized-memcpy-memcpy.ll
variable-sized-memcpy-uninit.ll
variable-sized-memset-memcpy.ll
vscale-crashes.ll
vscale-memset.ll