forked from OSchip/llvm-project
a5c3b5748c
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 |
||
---|---|---|
.. | ||
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 | ||
callslot_aa.ll | ||
callslot_badaa.ll | ||
callslot_deref.ll | ||
callslot_noalias.ll | ||
callslot_throw.ll | ||
capturing-func.ll | ||
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 | ||
memcpy-in-loop.ll | ||
memcpy-invoke-memcpy.ll | ||
memcpy-to-memset-with-lifetimes.ll | ||
memcpy-to-memset.ll | ||
memcpy-undef.ll | ||
memcpy.ll | ||
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 | ||
nontemporal.ll | ||
opaque-ptr.ll | ||
pr29105.ll | ||
pr37967.ll | ||
pr54682.ll | ||
preserve-memssa.ll | ||
process_store.ll | ||
profitable-memset.ll | ||
smaller.ll | ||
sret.ll | ||
stackrestore.ll | ||
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 |