diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2017-07-11 02:31:51 +0000 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2017-07-11 02:31:51 +0000 |
commit | 76bab1f20b8422ec93853dac09c0510baeac1c09 (patch) | |
tree | 11a7f890d208990c764af550cfcde1a038df5fe6 | |
parent | 6ad8f190c8f19e119aebbc239ba600da5659db57 (diff) | |
download | bcm5719-llvm-76bab1f20b8422ec93853dac09c0510baeac1c09.tar.gz bcm5719-llvm-76bab1f20b8422ec93853dac09c0510baeac1c09.zip |
Revert r307581, "Avoid doing conservative phi checks in aliasSameBasePointerGEPs() if no phis have been visited yet."
It broke stage2 tests in selfhosting.
llvm-svn: 307613
-rw-r--r-- | llvm/include/llvm/Analysis/BasicAliasAnalysis.h | 6 | ||||
-rw-r--r-- | llvm/lib/Analysis/BasicAliasAnalysis.cpp | 18 | ||||
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 2 |
3 files changed, 8 insertions, 18 deletions
diff --git a/llvm/include/llvm/Analysis/BasicAliasAnalysis.h b/llvm/include/llvm/Analysis/BasicAliasAnalysis.h index ddc0a1aac53..14e4bded264 100644 --- a/llvm/include/llvm/Analysis/BasicAliasAnalysis.h +++ b/llvm/include/llvm/Analysis/BasicAliasAnalysis.h @@ -183,12 +183,6 @@ private: uint64_t V2Size, const AAMDNodes &V2AAInfo, const Value *UnderlyingV1, const Value *UnderlyingV2); - AliasResult aliasSameBasePointerGEPs(const GEPOperator *GEP1, - uint64_t V1Size, - const GEPOperator *GEP2, - uint64_t V2Size, - const DataLayout &DL); - AliasResult aliasPHI(const PHINode *PN, uint64_t PNSize, const AAMDNodes &PNAAInfo, const Value *V2, uint64_t V2Size, const AAMDNodes &V2AAInfo, diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index 758a907dde3..b52a1d7b24d 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -922,11 +922,11 @@ ModRefInfo BasicAAResult::getModRefInfo(ImmutableCallSite CS1, /// Provide ad-hoc rules to disambiguate accesses through two GEP operators, /// both having the exact same pointer operand. -AliasResult BasicAAResult::aliasSameBasePointerGEPs(const GEPOperator *GEP1, - uint64_t V1Size, - const GEPOperator *GEP2, - uint64_t V2Size, - const DataLayout &DL) { +static AliasResult aliasSameBasePointerGEPs(const GEPOperator *GEP1, + uint64_t V1Size, + const GEPOperator *GEP2, + uint64_t V2Size, + const DataLayout &DL) { assert(GEP1->getPointerOperand()->stripPointerCastsAndBarriers() == GEP2->getPointerOperand()->stripPointerCastsAndBarriers() && @@ -1006,7 +1006,7 @@ AliasResult BasicAAResult::aliasSameBasePointerGEPs(const GEPOperator *GEP1, // Because they cannot partially overlap and because fields in an array // cannot overlap, if we can prove the final indices are different between // GEP1 and GEP2, we can conclude GEP1 and GEP2 don't alias. - + // If the last indices are constants, we've already checked they don't // equal each other so we can exit early. if (C1 && C2) @@ -1014,15 +1014,11 @@ AliasResult BasicAAResult::aliasSameBasePointerGEPs(const GEPOperator *GEP1, { Value *GEP1LastIdx = GEP1->getOperand(GEP1->getNumOperands() - 1); Value *GEP2LastIdx = GEP2->getOperand(GEP2->getNumOperands() - 1); - if ((isa<PHINode>(GEP1LastIdx) || isa<PHINode>(GEP2LastIdx)) && - !VisitedPhiBBs.empty()) { + if (isa<PHINode>(GEP1LastIdx) || isa<PHINode>(GEP2LastIdx)) { // If one of the indices is a PHI node, be safe and only use // computeKnownBits so we don't make any assumptions about the // relationships between the two indices. This is important if we're // asking about values from different loop iterations. See PR32314. - // But, with empty visitedPhiBBs we can guarantee that the values are - // from the same iteration. Therefore, we can avoid doing this - // conservative check. // TODO: We may be able to change the check so we only do this when // we definitely looked through a PHINode. if (GEP1LastIdx != GEP2LastIdx && diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 704b5ebfa68..9e042da8801 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -1873,7 +1873,7 @@ bool isKnownNonZero(const Value *V, unsigned Depth, const Query &Q) { if (Known.countMaxLeadingZeros() < BitWidth - ShiftVal) return true; // Are all the bits to be shifted out known zero? - if (Known.isUnknown() || Known.countMinTrailingZeros() >= ShiftVal) + if (Known.countMinTrailingZeros() >= ShiftVal) return isKnownNonZero(X, Depth, Q); } } |