[llvm] 6157028 - [BasicAA][ValueTracking] Increase depth for underlying object search (#143714)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 12 00:19:53 PDT 2025
Author: Nikita Popov
Date: 2025-06-12T09:19:50+02:00
New Revision: 6157028fea93ff14af18b173dd01eb431cfb6aef
URL: https://github.com/llvm/llvm-project/commit/6157028fea93ff14af18b173dd01eb431cfb6aef
DIFF: https://github.com/llvm/llvm-project/commit/6157028fea93ff14af18b173dd01eb431cfb6aef.diff
LOG: [BasicAA][ValueTracking] Increase depth for underlying object search (#143714)
This depth limits a linear search (rather than the usual potentially
exponential one) and is not particularly important for compile-time in
practice.
The change in #137297 is going to increase the length of GEP chains, so
I'd like to increase this limit a bit to reduce the chance of
regressions (https://github.com/dtcxzyw/llvm-opt-benchmark/pull/2419
showed a 13% increase in SearchLimitReached). There is no particular
significance to the new value of 10.
Compile-time is neutral.
Added:
Modified:
llvm/include/llvm/Analysis/ValueTracking.h
llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll
llvm/test/Analysis/LoopAccessAnalysis/underlying-objects-2.ll
llvm/test/Transforms/Inline/inline-noalias-unidentify-object.ll
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/ValueTracking.h b/llvm/include/llvm/Analysis/ValueTracking.h
index 32ab9733d13c9..e215c90b5a72a 100644
--- a/llvm/include/llvm/Analysis/ValueTracking.h
+++ b/llvm/include/llvm/Analysis/ValueTracking.h
@@ -47,7 +47,7 @@ constexpr unsigned MaxAnalysisRecursionDepth = 6;
/// The max limit of the search depth in DecomposeGEPExpression() and
/// getUnderlyingObject().
-constexpr unsigned MaxLookupSearchDepth = 6;
+constexpr unsigned MaxLookupSearchDepth = 10;
/// Determine which bits of V are known to be either zero or one and return
/// them in the KnownZero/KnownOne bit sets.
diff --git a/llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll b/llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll
index 23a96ebca8485..a256ececbe565 100644
--- a/llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll
+++ b/llvm/test/Analysis/BasicAA/gep-decomposition-limit.ll
@@ -2,22 +2,22 @@
; CHECK-LABEL: Function: test
;; Before limit:
-; CHECK-DAG: MustAlias: i8* %gep.add5, i8* %gep.inc5
-; CHECK-DAG: NoAlias: i8* %gep.inc3, i8* %gep.inc5
-; CHECK-DAG: NoAlias: i8* %gep.inc4, i8* %gep.inc5
+; CHECK-DAG: MustAlias: i8* %gep.add9, i8* %gep.inc9
+; CHECK-DAG: NoAlias: i8* %gep.inc7, i8* %gep.inc9
+; CHECK-DAG: NoAlias: i8* %gep.inc8, i8* %gep.inc9
;; At limit:
-; 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
+; CHECK-DAG: MustAlias: i8* %gep.add10, i8* %gep.inc10
+; CHECK-DAG: NoAlias: i8* %gep.inc10, i8* %gep.inc8
+; CHECK-DAG: NoAlias: i8* %gep.inc10, i8* %gep.inc9
;; After limit:
-; CHECK-DAG: MayAlias: i8* %gep.add7, i8* %gep.inc7
-; CHECK-DAG: MayAlias: i8* %gep.inc5, i8* %gep.inc7
-; CHECK-DAG: NoAlias: i8* %gep.inc6, i8* %gep.inc7
+; CHECK-DAG: MayAlias: i8* %gep.add11, i8* %gep.inc11
+; CHECK-DAG: MayAlias: i8* %gep.inc11, i8* %gep.inc9
+; CHECK-DAG: NoAlias: i8* %gep.inc10, i8* %gep.inc11
define void @test(ptr %base) {
- %gep.add5 = getelementptr i8, ptr %base, i64 5
- %gep.add6 = getelementptr i8, ptr %base, i64 6
- %gep.add7 = getelementptr i8, ptr %base, i64 7
+ %gep.add9 = getelementptr i8, ptr %base, i64 9
+ %gep.add10 = getelementptr i8, ptr %base, i64 10
+ %gep.add11 = getelementptr i8, ptr %base, i64 11
%gep.inc1 = getelementptr i8, ptr %base, i64 1
%gep.inc2 = getelementptr i8, ptr %gep.inc1, i64 1
@@ -26,15 +26,23 @@ define void @test(ptr %base) {
%gep.inc5 = getelementptr i8, ptr %gep.inc4, i64 1
%gep.inc6 = getelementptr i8, ptr %gep.inc5, i64 1
%gep.inc7 = getelementptr i8, ptr %gep.inc6, i64 1
+ %gep.inc8 = getelementptr i8, ptr %gep.inc7, i64 1
+ %gep.inc9 = getelementptr i8, ptr %gep.inc8, i64 1
+ %gep.inc10 = getelementptr i8, ptr %gep.inc9, i64 1
+ %gep.inc11 = getelementptr i8, ptr %gep.inc10, i64 1
- load i8, ptr %gep.add5
- load i8, ptr %gep.add6
- load i8, ptr %gep.add7
+ load i8, ptr %gep.add9
+ load i8, ptr %gep.add10
+ load i8, ptr %gep.add11
load i8, ptr %gep.inc3
load i8, ptr %gep.inc4
load i8, ptr %gep.inc5
load i8, ptr %gep.inc6
load i8, ptr %gep.inc7
+ load i8, ptr %gep.inc8
+ load i8, ptr %gep.inc9
+ load i8, ptr %gep.inc10
+ load i8, ptr %gep.inc11
ret void
}
diff --git a/llvm/test/Analysis/LoopAccessAnalysis/underlying-objects-2.ll b/llvm/test/Analysis/LoopAccessAnalysis/underlying-objects-2.ll
index abfdff79dc113..1d3512128678e 100644
--- a/llvm/test/Analysis/LoopAccessAnalysis/underlying-objects-2.ll
+++ b/llvm/test/Analysis/LoopAccessAnalysis/underlying-objects-2.ll
@@ -127,9 +127,12 @@ for_j.body:
%gepB7 = getelementptr inbounds i8, ptr %gepB6, i64 0
%gepB8 = getelementptr inbounds i8, ptr %gepB7, i64 0
%gepB9 = getelementptr inbounds i8, ptr %gepB8, i64 0
+ %gepB10 = getelementptr inbounds i8, ptr %gepB9, i64 0
+ %gepB11 = getelementptr inbounds i8, ptr %gepB10, i64 0
+ %gepB12 = getelementptr inbounds i8, ptr %gepB11, i64 0
%loadPrev = load i8, ptr %gepPrev, align 1
- %loadB = load i8, ptr %gepB9, align 1
+ %loadB = load i8, ptr %gepB12, align 1
%mul = mul i8 %loadPrev, %loadB
diff --git a/llvm/test/Transforms/Inline/inline-noalias-unidentify-object.ll b/llvm/test/Transforms/Inline/inline-noalias-unidentify-object.ll
index 54e9ee0918ae8..b7ba1b32238a7 100644
--- a/llvm/test/Transforms/Inline/inline-noalias-unidentify-object.ll
+++ b/llvm/test/Transforms/Inline/inline-noalias-unidentify-object.ll
@@ -3,15 +3,18 @@
define i32 @caller(ptr %p) {
; CHECK-LABEL: define i32 @caller(ptr %p) {
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META0:![0-9]+]])
-; CHECK-NEXT: [[P_8_I:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 8
-; CHECK-NEXT: [[V_I:%.*]] = load i32, ptr [[P_8_I]], align 4, !alias.scope !0
-; CHECK-NEXT: [[P_1_I:%.*]] = getelementptr i8, ptr [[P]], i64 1
+; CHECK-NEXT: [[P_11_I:%.*]] = getelementptr i8, ptr %p, i64 11
+; CHECK-NEXT: [[V_I:%.*]] = load i32, ptr [[P_11_I]], align 4, !alias.scope !0
+; CHECK-NEXT: [[P_1_I:%.*]] = getelementptr i8, ptr %p, i64 1
; CHECK-NEXT: [[P_2_I:%.*]] = getelementptr i8, ptr [[P_1_I]], i64 1
; CHECK-NEXT: [[P_3_I:%.*]] = getelementptr i8, ptr [[P_2_I]], i64 1
; CHECK-NEXT: [[P_4_I:%.*]] = getelementptr i8, ptr [[P_3_I]], i64 1
; CHECK-NEXT: [[P_5_I:%.*]] = getelementptr i8, ptr [[P_4_I]], i64 1
; CHECK-NEXT: [[P_6_I:%.*]] = getelementptr i8, ptr [[P_5_I]], i64 1
-; CHECK-NEXT: [[P_7_I:%.*]] = getelementptr i8, ptr [[P_6_I]], i64 1
+; CHECK-NEXT: [[P_7_I1:%.*]] = getelementptr i8, ptr [[P_6_I]], i64 1
+; CHECK-NEXT: [[P_8_I:%.*]] = getelementptr i8, ptr [[P_7_I1]], i64 1
+; CHECK-NEXT: [[P_9_I:%.*]] = getelementptr i8, ptr [[P_8_I]], i64 1
+; CHECK-NEXT: [[P_7_I:%.*]] = getelementptr i8, ptr [[P_9_I]], i64 1
; CHECK-NEXT: [[P_8_ALIAS_I:%.*]] = getelementptr i8, ptr [[P_7_I]], i64 1
; CHECK-NEXT: store i32 42, ptr [[P_8_ALIAS_I]], align 4
; CHECK-NEXT: ret i32 [[V_I]]
@@ -21,8 +24,8 @@ define i32 @caller(ptr %p) {
}
define internal i32 @callee(ptr noalias %p) {
- %p.8 = getelementptr i8, ptr %p, i64 8
- %v = load i32, ptr %p.8
+ %p.11 = getelementptr i8, ptr %p, i64 11
+ %v = load i32, ptr %p.11
%p.1 = getelementptr i8, ptr %p, i64 1
%p.2 = getelementptr i8, ptr %p.1, i64 1
%p.3 = getelementptr i8, ptr %p.2, i64 1
@@ -30,7 +33,10 @@ define internal i32 @callee(ptr noalias %p) {
%p.5 = getelementptr i8, ptr %p.4, i64 1
%p.6 = getelementptr i8, ptr %p.5, i64 1
%p.7 = getelementptr i8, ptr %p.6, i64 1
- %p.8.alias = getelementptr i8, ptr %p.7, i64 1
- store i32 42, ptr %p.8.alias
+ %p.8 = getelementptr i8, ptr %p.7, i64 1
+ %p.9 = getelementptr i8, ptr %p.8, i64 1
+ %p.10 = getelementptr i8, ptr %p.9, i64 1
+ %p.11.alias = getelementptr i8, ptr %p.10, i64 1
+ store i32 42, ptr %p.11.alias
ret i32 %v
}
More information about the llvm-commits
mailing list