From 6b23fb764ecc6d355408c4974019a8b43efc220e Mon Sep 17 00:00:00 2001 From: Daniel Neilson Date: Wed, 30 May 2018 14:43:39 +0000 Subject: [AliasSet] Teach the alias set how to handle atomic memcpy/memmove/memset Summary: The atomic variants of the memcpy/memmove/memset intrinsics can be treated the same was as the regular forms, with respect to aliasing. Update the AliasSetTracker to treat the atomic forms the same was as the regular forms. llvm-svn: 333551 --- llvm/lib/Analysis/AliasSetTracker.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'llvm/lib/Analysis/AliasSetTracker.cpp') diff --git a/llvm/lib/Analysis/AliasSetTracker.cpp b/llvm/lib/Analysis/AliasSetTracker.cpp index e4b805aca91..7ed23af5589 100644 --- a/llvm/lib/Analysis/AliasSetTracker.cpp +++ b/llvm/lib/Analysis/AliasSetTracker.cpp @@ -389,7 +389,7 @@ void AliasSetTracker::add(VAArgInst *VAAI) { AliasSet::ModRefAccess); } -void AliasSetTracker::add(MemSetInst *MSI) { +void AliasSetTracker::add(AnyMemSetInst *MSI) { AAMDNodes AAInfo; MSI->getAAMetadata(AAInfo); @@ -402,11 +402,12 @@ void AliasSetTracker::add(MemSetInst *MSI) { AliasSet &AS = addPointer(MSI->getRawDest(), Len, AAInfo, AliasSet::ModAccess); - if (MSI->isVolatile()) + auto *MS = dyn_cast(MSI); + if (MS && MS->isVolatile()) AS.setVolatile(); } -void AliasSetTracker::add(MemTransferInst *MTI) { +void AliasSetTracker::add(AnyMemTransferInst *MTI) { AAMDNodes AAInfo; MTI->getAAMetadata(AAInfo); @@ -418,13 +419,15 @@ void AliasSetTracker::add(MemTransferInst *MTI) { AliasSet &ASSrc = addPointer(MTI->getRawSource(), Len, AAInfo, AliasSet::RefAccess); - if (MTI->isVolatile()) - ASSrc.setVolatile(); AliasSet &ASDst = addPointer(MTI->getRawDest(), Len, AAInfo, AliasSet::ModAccess); - if (MTI->isVolatile()) + + auto* MT = dyn_cast(MTI); + if (MT && MT->isVolatile()) { + ASSrc.setVolatile(); ASDst.setVolatile(); + } } void AliasSetTracker::addUnknown(Instruction *Inst) { @@ -464,9 +467,9 @@ void AliasSetTracker::add(Instruction *I) { return add(SI); if (VAArgInst *VAAI = dyn_cast(I)) return add(VAAI); - if (MemSetInst *MSI = dyn_cast(I)) + if (AnyMemSetInst *MSI = dyn_cast(I)) return add(MSI); - if (MemTransferInst *MTI = dyn_cast(I)) + if (AnyMemTransferInst *MTI = dyn_cast(I)) return add(MTI); return addUnknown(I); } -- cgit v1.2.3