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 }