diff options
Diffstat (limited to 'llvm/lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/BasicAliasAnalysis.cpp | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index 461c774..16d5f39 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -766,7 +766,7 @@ FunctionModRefBehavior BasicAAResult::getModRefBehavior(const CallBase *Call, getModRefBehaviorFromAttrs(Call->getAttributes().getFnAttrs()); if (const Function *F = dyn_cast<Function>(Call->getCalledOperand())) { - FunctionModRefBehavior FMRB = getBestAAResults().getModRefBehavior(F); + FunctionModRefBehavior FMRB = AAQI.AAR.getModRefBehavior(F); // Operand bundles on the call may also read or write memory, in addition // to the behavior of the called function. if (Call->hasReadingOperandBundles()) @@ -925,9 +925,9 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call, // If this is a no-capture pointer argument, see if we can tell that it // is impossible to alias the pointer we're checking. - AliasResult AR = getBestAAResults().alias( - MemoryLocation::getBeforeOrAfter(*CI), - MemoryLocation::getBeforeOrAfter(Object), AAQI); + AliasResult AR = + AAQI.AAR.alias(MemoryLocation::getBeforeOrAfter(*CI), + MemoryLocation::getBeforeOrAfter(Object), AAQI); // Operand doesn't alias 'Object', continue looking for other aliases if (AR == AliasResult::NoAlias) continue; @@ -963,8 +963,8 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call, if (isMallocOrCallocLikeFn(Call, &TLI)) { // Be conservative if the accessed pointer may alias the allocation - // fallback to the generic handling below. - if (getBestAAResults().alias(MemoryLocation::getBeforeOrAfter(Call), Loc, - AAQI) == AliasResult::NoAlias) + if (AAQI.AAR.alias(MemoryLocation::getBeforeOrAfter(Call), Loc, AAQI) == + AliasResult::NoAlias) return ModRefInfo::NoModRef; } @@ -1057,9 +1057,9 @@ AliasResult BasicAAResult::aliasGEP( // If both accesses have unknown size, we can only check whether the base // objects don't alias. - AliasResult BaseAlias = getBestAAResults().alias( - MemoryLocation::getBeforeOrAfter(UnderlyingV1), - MemoryLocation::getBeforeOrAfter(UnderlyingV2), AAQI); + AliasResult BaseAlias = + AAQI.AAR.alias(MemoryLocation::getBeforeOrAfter(UnderlyingV1), + MemoryLocation::getBeforeOrAfter(UnderlyingV2), AAQI); return BaseAlias == AliasResult::NoAlias ? AliasResult::NoAlias : AliasResult::MayAlias; } @@ -1093,14 +1093,13 @@ AliasResult BasicAAResult::aliasGEP( // For GEPs with identical offsets, we can preserve the size and AAInfo // when performing the alias check on the underlying objects. if (DecompGEP1.Offset == 0 && DecompGEP1.VarIndices.empty()) - return getBestAAResults().alias(MemoryLocation(DecompGEP1.Base, V1Size), - MemoryLocation(DecompGEP2.Base, V2Size), - AAQI); + return AAQI.AAR.alias(MemoryLocation(DecompGEP1.Base, V1Size), + MemoryLocation(DecompGEP2.Base, V2Size), AAQI); // Do the base pointers alias? - AliasResult BaseAlias = getBestAAResults().alias( - MemoryLocation::getBeforeOrAfter(DecompGEP1.Base), - MemoryLocation::getBeforeOrAfter(DecompGEP2.Base), AAQI); + AliasResult BaseAlias = + AAQI.AAR.alias(MemoryLocation::getBeforeOrAfter(DecompGEP1.Base), + MemoryLocation::getBeforeOrAfter(DecompGEP2.Base), AAQI); // If we get a No or May, then return it immediately, no amount of analysis // will improve this situation. @@ -1305,28 +1304,27 @@ BasicAAResult::aliasSelect(const SelectInst *SI, LocationSize SISize, // check: just check for aliases between the values on corresponding arms. if (const SelectInst *SI2 = dyn_cast<SelectInst>(V2)) if (SI->getCondition() == SI2->getCondition()) { - AliasResult Alias = getBestAAResults().alias( - MemoryLocation(SI->getTrueValue(), SISize), - MemoryLocation(SI2->getTrueValue(), V2Size), AAQI); + AliasResult Alias = + AAQI.AAR.alias(MemoryLocation(SI->getTrueValue(), SISize), + MemoryLocation(SI2->getTrueValue(), V2Size), AAQI); if (Alias == AliasResult::MayAlias) return AliasResult::MayAlias; - AliasResult ThisAlias = getBestAAResults().alias( - MemoryLocation(SI->getFalseValue(), SISize), - MemoryLocation(SI2->getFalseValue(), V2Size), AAQI); + AliasResult ThisAlias = + AAQI.AAR.alias(MemoryLocation(SI->getFalseValue(), SISize), + MemoryLocation(SI2->getFalseValue(), V2Size), AAQI); return MergeAliasResults(ThisAlias, Alias); } // If both arms of the Select node NoAlias or MustAlias V2, then returns // NoAlias / MustAlias. Otherwise, returns MayAlias. - AliasResult Alias = - getBestAAResults().alias(MemoryLocation(SI->getTrueValue(), SISize), - MemoryLocation(V2, V2Size), AAQI); + AliasResult Alias = AAQI.AAR.alias(MemoryLocation(SI->getTrueValue(), SISize), + MemoryLocation(V2, V2Size), AAQI); if (Alias == AliasResult::MayAlias) return AliasResult::MayAlias; AliasResult ThisAlias = - getBestAAResults().alias(MemoryLocation(SI->getFalseValue(), SISize), - MemoryLocation(V2, V2Size), AAQI); + AAQI.AAR.alias(MemoryLocation(SI->getFalseValue(), SISize), + MemoryLocation(V2, V2Size), AAQI); return MergeAliasResults(ThisAlias, Alias); } @@ -1344,7 +1342,7 @@ AliasResult BasicAAResult::aliasPHI(const PHINode *PN, LocationSize PNSize, if (PN2->getParent() == PN->getParent()) { Optional<AliasResult> Alias; for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { - AliasResult ThisAlias = getBestAAResults().alias( + AliasResult ThisAlias = AAQI.AAR.alias( MemoryLocation(PN->getIncomingValue(i), PNSize), MemoryLocation( PN2->getIncomingValueForBlock(PN->getIncomingBlock(i)), V2Size), @@ -1447,8 +1445,8 @@ AliasResult BasicAAResult::aliasPHI(const PHINode *PN, LocationSize PNSize, AAQueryInfo NewAAQI = AAQI.withEmptyCache(); AAQueryInfo *UseAAQI = BlockInserted ? &NewAAQI : &AAQI; - AliasResult Alias = getBestAAResults().alias( - MemoryLocation(V1Srcs[0], PNSize), MemoryLocation(V2, V2Size), *UseAAQI); + AliasResult Alias = AAQI.AAR.alias(MemoryLocation(V1Srcs[0], PNSize), + MemoryLocation(V2, V2Size), *UseAAQI); // Early exit if the check of the first PHI source against V2 is MayAlias. // Other results are not possible. @@ -1464,7 +1462,7 @@ AliasResult BasicAAResult::aliasPHI(const PHINode *PN, LocationSize PNSize, for (unsigned i = 1, e = V1Srcs.size(); i != e; ++i) { Value *V = V1Srcs[i]; - AliasResult ThisAlias = getBestAAResults().alias( + AliasResult ThisAlias = AAQI.AAR.alias( MemoryLocation(V, PNSize), MemoryLocation(V2, V2Size), *UseAAQI); Alias = MergeAliasResults(ThisAlias, Alias); if (Alias == AliasResult::MayAlias) |