[PATCH] D91010: [BasicAA] Remove checks for GEP decomposition limit reached
Nikita Popov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 9 12:01:47 PST 2020
nikic updated this revision to Diff 303951.
nikic added a comment.
Add test for behavior at decomposition limit.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91010/new/
https://reviews.llvm.org/D91010
Files:
llvm/lib/Analysis/BasicAliasAnalysis.cpp
llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll
Index: llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll
===================================================================
--- llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll
+++ llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll
@@ -6,13 +6,13 @@
; CHECK-DAG: NoAlias: i8* %gep.inc3, i8* %gep.inc5
; CHECK-DAG: NoAlias: i8* %gep.inc4, i8* %gep.inc5
;; At limit:
-; CHECK-DAG: MayAlias: i8* %gep.add6, i8* %gep.inc6
-; CHECK-DAG: MayAlias: i8* %gep.inc4, i8* %gep.inc6
-; CHECK-DAG: MayAlias: i8* %gep.inc5, i8* %gep.inc6
+; CHECK-DAG: MustAlias: i8* %gep.add6, i8* %gep.inc6
+; CHECK-DAG: NoAlias: i8* %gep.inc4, i8* %gep.inc6
+; CHECK-DAG: NoAlias: i8* %gep.inc5, i8* %gep.inc6
;; After limit:
; CHECK-DAG: MayAlias: i8* %gep.add7, i8* %gep.inc7
; CHECK-DAG: MayAlias: i8* %gep.inc5, i8* %gep.inc7
-; CHECK-DAG: MayAlias: i8* %gep.inc6, i8* %gep.inc7
+; CHECK-DAG: NoAlias: i8* %gep.inc6, i8* %gep.inc7
define void @test(i8* %base) {
%gep.add5 = getelementptr i8, i8* %base, i64 5
Index: llvm/lib/Analysis/BasicAliasAnalysis.cpp
===================================================================
--- llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -1259,10 +1259,8 @@
DecompGEP1.HasCompileTimeConstantScale =
DecompGEP2.HasCompileTimeConstantScale = true;
- bool GEP1MaxLookupReached =
- DecomposeGEPExpression(GEP1, DecompGEP1, DL, &AC, DT);
- bool GEP2MaxLookupReached =
- DecomposeGEPExpression(V2, DecompGEP2, DL, &AC, DT);
+ DecomposeGEPExpression(GEP1, DecompGEP1, DL, &AC, DT);
+ DecomposeGEPExpression(V2, DecompGEP2, DL, &AC, DT);
// Don't attempt to analyze the decomposed GEP if index scale is not a
// compile-time constant.
@@ -1280,8 +1278,7 @@
// If the GEP's offset relative to its base is such that the base would
// fall below the start of the object underlying V2, then the GEP and V2
// cannot alias.
- if (!GEP1MaxLookupReached && !GEP2MaxLookupReached &&
- isGEPBaseAtNegativeOffset(GEP1, DecompGEP1, DecompGEP2, V2Size))
+ if (isGEPBaseAtNegativeOffset(GEP1, DecompGEP1, DecompGEP2, V2Size))
return NoAlias;
// If we have two gep instructions with must-alias or not-alias'ing base
// pointers, figure out if the indexes to the GEP tell us anything about the
@@ -1289,8 +1286,7 @@
if (const GEPOperator *GEP2 = dyn_cast<GEPOperator>(V2)) {
// Check for the GEP base being at a negative offset, this time in the other
// direction.
- if (!GEP1MaxLookupReached && !GEP2MaxLookupReached &&
- isGEPBaseAtNegativeOffset(GEP2, DecompGEP2, DecompGEP1, V1Size))
+ if (isGEPBaseAtNegativeOffset(GEP2, DecompGEP2, DecompGEP1, V1Size))
return NoAlias;
// Do the base pointers alias?
AliasResult BaseAlias =
@@ -1301,8 +1297,7 @@
// and AAInfo when performing the alias check on the underlying objects.
if (BaseAlias == MayAlias && V1Size == V2Size &&
GEP1BaseOffset == GEP2BaseOffset &&
- DecompGEP1.VarIndices == DecompGEP2.VarIndices &&
- !GEP1MaxLookupReached && !GEP2MaxLookupReached) {
+ DecompGEP1.VarIndices == DecompGEP2.VarIndices) {
AliasResult PreciseBaseAlias = aliasCheck(
UnderlyingV1, V1Size, V1AAInfo, UnderlyingV2, V2Size, V2AAInfo, AAQI);
if (PreciseBaseAlias == NoAlias)
@@ -1331,10 +1326,6 @@
return R;
}
- // If the max search depth is reached, the result is undefined
- if (GEP2MaxLookupReached || GEP1MaxLookupReached)
- return MayAlias;
-
// Subtract the GEP2 pointer from the GEP1 pointer to find out their
// symbolic difference.
GEP1BaseOffset -= GEP2BaseOffset;
@@ -1361,10 +1352,6 @@
assert(R == NoAlias || R == MayAlias);
return R;
}
-
- // If the max search depth is reached the result is undefined
- if (GEP1MaxLookupReached)
- return MayAlias;
}
// In the two GEP Case, if there is no difference in the offsets of the
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91010.303951.patch
Type: text/x-patch
Size: 3978 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201109/1d1ba97f/attachment.bin>
More information about the llvm-commits
mailing list