[PATCH] D45535: [DSE] Teach the pass that atomic memory intrinsics are stores.
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 23 12:00:52 PDT 2018
efriedma added inline comments.
================
Comment at: lib/Transforms/Scalar/DeadStoreElimination.cpp:868
LoadedLoc = MemoryLocation::get(V);
} else if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(BBI)) {
LoadedLoc = MemoryLocation::getForSource(MTI);
----------------
dneilson wrote:
> dneilson wrote:
> > dmgreen wrote:
> > > This one? This function does it's own special version of DSE. It's about removing stores to dead stack objects iirc.
> > Good catch. Thanks!
> >
> > Looks like there might not be a test for this case at all. I'll try to add one of those as well.
> Made the change, but I'm having difficulty creating a test that gets to here. Calls to the memtransfer intrinsics end up getting into the conditional at line 838, above:
>
> ```
> // If the call might load from any of our allocas, then any store above
> // the call is live.
> DeadStackObjects.remove_if([&](Value *I) {
> // See if the call site touches the value.
> return isRefSet(AA->getModRefInfo(CS, I, getPointerSize(I, DL, *TLI)));
> });
> ```
>
> The source argument for the intrinsic aliases the stack object(s), and this bit of code at 868 ends up having no effect.
Yes, I agree it's impossible to get here because of the condition on line 825; an AnyMemTransferInst is also a CallSite. Please just delete this line, then.
Repository:
rL LLVM
https://reviews.llvm.org/D45535
More information about the llvm-commits
mailing list