diff --git a/llvm/include/llvm/Analysis/MemorySSA.h b/llvm/include/llvm/Analysis/MemorySSA.h --- a/llvm/include/llvm/Analysis/MemorySSA.h +++ b/llvm/include/llvm/Analysis/MemorySSA.h @@ -1255,24 +1255,21 @@ if (!IsGuaranteedLoopInvariant(const_cast(Location.Ptr))) CurrentPair.second = Location.getWithNewSize(LocationSize::beforeOrAfterPointer()); - PHITransAddr Translator( - const_cast(Location.Ptr), - OriginalAccess->getBlock()->getModule()->getDataLayout(), nullptr); - - if (!Translator.PHITranslateValue(OriginalAccess->getBlock(), - DefIterator.getPhiArgBlock(), DT, - true)) { - Value *TransAddr = Translator.getAddr(); - if (TransAddr != Location.Ptr) { - CurrentPair.second = CurrentPair.second.getWithNewPtr(TransAddr); - - if (TransAddr && - !IsGuaranteedLoopInvariant(const_cast(TransAddr))) - CurrentPair.second = CurrentPair.second.getWithNewSize( - LocationSize::beforeOrAfterPointer()); - - if (PerformedPhiTranslation) - *PerformedPhiTranslation = true; + else if (Location.Size != LocationSize::beforeOrAfterPointer()){ + PHITransAddr Translator( + const_cast(Location.Ptr), + OriginalAccess->getBlock()->getModule()->getDataLayout(), nullptr); + + if (!Translator.PHITranslateValue(OriginalAccess->getBlock(), + DefIterator.getPhiArgBlock(), DT, + true)) { + Value *TransAddr = Translator.getAddr(); + if (TransAddr != Location.Ptr) { + CurrentPair.second = CurrentPair.second.getWithNewPtr(TransAddr); + + if (PerformedPhiTranslation) + *PerformedPhiTranslation = true; + } } } }