[PATCH] D90066: [BasicAA] Fix caching in the presence of phi cycles
Nikita Popov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 24 01:10:48 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd09c5921421c: [BasicAA] Fix caching in the presence of phi cycles (authored by nikic).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90066/new/
https://reviews.llvm.org/D90066
Files:
llvm/lib/Analysis/BasicAliasAnalysis.cpp
llvm/unittests/Analysis/AliasAnalysisTest.cpp
Index: llvm/unittests/Analysis/AliasAnalysisTest.cpp
===================================================================
--- llvm/unittests/Analysis/AliasAnalysisTest.cpp
+++ llvm/unittests/Analysis/AliasAnalysisTest.cpp
@@ -249,12 +249,17 @@
auto &AA = getAAResults(*F);
EXPECT_EQ(NoAlias, AA.alias(A1Loc, A2Loc));
EXPECT_EQ(MayAlias, AA.alias(PhiLoc, A1Loc));
- EXPECT_EQ(NoAlias, AA.alias(S1Loc, S2Loc)); // TODO: This is wrong
+ EXPECT_EQ(MayAlias, AA.alias(S1Loc, S2Loc));
BatchAAResults BatchAA(AA);
EXPECT_EQ(NoAlias, BatchAA.alias(A1Loc, A2Loc));
- EXPECT_EQ(NoAlias, BatchAA.alias(PhiLoc, A1Loc)); // TODO: This is wrong.
- EXPECT_EQ(NoAlias, BatchAA.alias(S1Loc, S2Loc)); // TODO: This is wrong
+ EXPECT_EQ(MayAlias, BatchAA.alias(PhiLoc, A1Loc));
+ EXPECT_EQ(MayAlias, BatchAA.alias(S1Loc, S2Loc));
+
+ BatchAAResults BatchAA2(AA);
+ EXPECT_EQ(NoAlias, BatchAA2.alias(A1Loc, A2Loc));
+ EXPECT_EQ(MayAlias, BatchAA2.alias(S1Loc, S2Loc));
+ EXPECT_EQ(MayAlias, BatchAA2.alias(PhiLoc, A1Loc));
}
class AAPassInfraTest : public testing::Test {
Index: llvm/lib/Analysis/BasicAliasAnalysis.cpp
===================================================================
--- llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -1655,14 +1655,20 @@
// In the recursive alias queries below, we may compare values from two
// different loop iterations. Keep track of visited phi blocks, which will
// be used when determining value equivalence.
- auto Pair = VisitedPhiBBs.insert(PN->getParent());
+ bool BlockInserted = VisitedPhiBBs.insert(PN->getParent()).second;
auto _ = make_scope_exit([&]() {
- if (Pair.second)
+ if (BlockInserted)
VisitedPhiBBs.erase(PN->getParent());
});
+ // If we inserted a block into VisitedPhiBBs, alias analysis results that
+ // have been cached earlier may no longer be valid. Perform recursive queries
+ // with a new AAQueryInfo.
+ AAQueryInfo NewAAQI;
+ AAQueryInfo *UseAAQI = BlockInserted ? &NewAAQI : &AAQI;
+
AliasResult Alias = aliasCheck(V2, V2Size, V2AAInfo, V1Srcs[0], PNSize,
- PNAAInfo, AAQI, UnderV2);
+ PNAAInfo, *UseAAQI, UnderV2);
// Early exit if the check of the first PHI source against V2 is MayAlias.
// Other results are not possible.
@@ -1678,8 +1684,8 @@
for (unsigned i = 1, e = V1Srcs.size(); i != e; ++i) {
Value *V = V1Srcs[i];
- AliasResult ThisAlias =
- aliasCheck(V2, V2Size, V2AAInfo, V, PNSize, PNAAInfo, AAQI, UnderV2);
+ AliasResult ThisAlias = aliasCheck(V2, V2Size, V2AAInfo, V, PNSize,
+ PNAAInfo, *UseAAQI, UnderV2);
Alias = MergeAliasResults(ThisAlias, Alias);
if (Alias == MayAlias)
break;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90066.300465.patch
Type: text/x-patch
Size: 2818 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201024/4470fe4b/attachment.bin>
More information about the llvm-commits
mailing list