================
@@ -3283,10 +3285,15 @@ static bool isAllocSiteRemovable(Instruction *AI,
case Intrinsic::memcpy:
case Intrinsic::memset: {
MemIntrinsic *MI = cast<MemIntrinsic>(II);
- if (MI->isVolatile() || MI->getRawDest() != PI)
+ if (MI->isVolatile())
return false;
+ // Note: this could also be ModRef, but we can still interpret
that as just Mod in that case.
+ ModRefInfo NewAccess = MI->getRawDest() == PI ? ModRefInfo::Mod :
ModRefInfo::Ref;
+ if ((Access & ~NewAccess) != ModRefInfo::NoModRef)
+ return false;
----------------
nikic wrote:
> I originally was going to have it use AA to compute ModRef at the top, but
> that seemed potentially slower (since we already know PI aliases).
Yeah, we shouldn't use AA here.
> I wasn't sure how else to centralize the test and also preserve exit early
> unless I just duplicate it at the top and after the loop (`if (Access ==
> ModRefInfo::ModRef) return false`)?
Yeah, that's what I had in mind, but no strong opinion. We should probably at
least assert that it's not ModRef after the loop though, to make sure no case
was missed.
https://github.com/llvm/llvm-project/pull/143958
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits