diff options
| author | George Burgess IV <george.burgess.iv@gmail.com> | 2016-06-23 18:55:23 +0000 |
|---|---|---|
| committer | George Burgess IV <george.burgess.iv@gmail.com> | 2016-06-23 18:55:23 +0000 |
| commit | 1f99da54c2aea0a6a3f44a9a08ba6f76bbbb1d26 (patch) | |
| tree | 8feaca85ec9aee7ada64b0b5e6eccbfc434a8943 /llvm/test/Analysis | |
| parent | 53fd425e0660d3778f9005d3591689aad5e4940e (diff) | |
| download | bcm5719-llvm-1f99da54c2aea0a6a3f44a9a08ba6f76bbbb1d26.tar.gz bcm5719-llvm-1f99da54c2aea0a6a3f44a9a08ba6f76bbbb1d26.zip | |
[CFLAA] Use better interprocedural function summaries.
Previously, we just unified any arguments that seemed to be related to
each other. With this patch, we now respect dereference levels, etc.
which should make us substantially more accurate. Proper handling of
StratifiedAttrs will be done in a later patch.
Patch by Jia Chen.
Differential Revision: http://reviews.llvm.org/D21536
llvm-svn: 273596
Diffstat (limited to 'llvm/test/Analysis')
7 files changed, 17 insertions, 28 deletions
diff --git a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-arg.ll b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-arg.ll index 9d29f927e35..46d213b0e99 100644 --- a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-arg.ll +++ b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-arg.ll @@ -18,4 +18,4 @@ define void @test_return_arg() { %c = call i32* @return_arg_callee(i32* %a, i32* %b) ret void -} +}
\ No newline at end of file diff --git a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg-multilevel.ll b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg-multilevel.ll index fce74642889..fe249cf63b6 100644 --- a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg-multilevel.ll +++ b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg-multilevel.ll @@ -4,9 +4,6 @@ ; RUN: opt < %s -disable-basicaa -cfl-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s ; RUN: opt < %s -aa-pipeline=cfl-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s -; xfail for now due to buggy interproc analysis -; XFAIL: * - define i32* @return_deref_arg_multilevel_callee(i32*** %arg1) { %deref = load i32**, i32*** %arg1 %deref2 = load i32*, i32** %deref @@ -23,7 +20,6 @@ define i32* @return_deref_arg_multilevel_callee(i32*** %arg1) { ; CHECK: NoAlias: i32* %c, i32** %lpp ; CHECK: MayAlias: i32* %a, i32* %lpp_deref ; CHECK: NoAlias: i32* %b, i32* %lpp_deref -; CHECK: MayAlias: i32* %lpp_deref, i32** %p ; CHECK: NoAlias: i32* %lpp_deref, i32*** %pp ; CHECK: MayAlias: i32* %a, i32* %lp ; CHECK: NoAlias: i32* %b, i32* %lp diff --git a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg.ll b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg.ll index 3996c9bb0e6..e2c5c6079da 100644 --- a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg.ll +++ b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg.ll @@ -4,9 +4,6 @@ ; RUN: opt < %s -disable-basicaa -cfl-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s ; RUN: opt < %s -aa-pipeline=cfl-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s -; xfail for now due to buggy interproc analysis -; XFAIL: * - define i32* @return_deref_arg_callee(i32** %arg1) { %deref = load i32*, i32** %arg1 ret i32* %deref diff --git a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg-multilevel.ll b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg-multilevel.ll index 10be23dd982..007be801895 100644 --- a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg-multilevel.ll +++ b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg-multilevel.ll @@ -4,9 +4,6 @@ ; RUN: opt < %s -disable-basicaa -cfl-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s ; RUN: opt < %s -aa-pipeline=cfl-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s -; xfail for now due to buggy interproc analysis -; XFAIL: * - declare noalias i8* @malloc(i64) define i32*** @return_ref_arg_multilevel_callee(i32* %arg1) { @@ -21,9 +18,7 @@ define i32*** @return_ref_arg_multilevel_callee(i32* %arg1) { ; CHECK-LABEL: Function: test_return_ref_arg_multilevel ; CHECK: NoAlias: i32* %a, i32*** %b ; CHECK: NoAlias: i32** %p, i32*** %b -; CHECK: NoAlias: i32*** %b, i32*** %pp ; CHECK: NoAlias: i32* %a, i32** %lb -; CHECK: NoAlias: i32** %lb, i32** %p ; CHECK: NoAlias: i32** %lb, i32*** %pp ; CHECK: NoAlias: i32** %lb, i32*** %b ; CHECK: MayAlias: i32* %a, i32* %lb_deref @@ -33,6 +28,10 @@ define i32*** @return_ref_arg_multilevel_callee(i32* %arg1) { ; CHECK: MayAlias: i32* %lb_deref, i32* %lp ; CHECK: NoAlias: i32* %lp, i32** %lpp ; CHECK: MayAlias: i32* %lp, i32* %lpp_deref + +; We could've proven the following facts if the analysis were inclusion-based: +; NoAlias: i32*** %b, i32*** %pp +; NoAlias: i32** %lb, i32** %p define void @test_return_ref_arg_multilevel() { %a = alloca i32, align 4 %p = alloca i32*, align 8 diff --git a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg.ll b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg.ll index 6016cc17f9e..f0879cf3320 100644 --- a/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg.ll +++ b/llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg.ll @@ -4,9 +4,6 @@ ; RUN: opt < %s -disable-basicaa -cfl-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s ; RUN: opt < %s -aa-pipeline=cfl-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s -; xfail for now due to buggy interproc analysis -; XFAIL: * - declare noalias i8* @malloc(i64) define i32** @return_ref_arg_callee(i32* %arg1) { @@ -16,13 +13,15 @@ define i32** @return_ref_arg_callee(i32* %arg1) { ret i32** %ptr_cast } ; CHECK-LABEL: Function: test_return_ref_arg -; CHECK: NoAlias: i32** %b, i32** %p ; CHECK: MayAlias: i32* %a, i32* %lb ; CHECK: NoAlias: i32* %lb, i32** %p ; CHECK: NoAlias: i32* %lb, i32** %b ; CHECK: NoAlias: i32* %lp, i32** %p ; CHECK: NoAlias: i32* %lp, i32** %b ; CHECK: MayAlias: i32* %lb, i32* %lp + +; We could've proven the following facts if the analysis were inclusion-based: +; NoAlias: i32** %b, i32** %p define void @test_return_ref_arg() { %a = alloca i32, align 4 %p = alloca i32*, align 8 diff --git a/llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg-multilevel.ll b/llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg-multilevel.ll index cc30c5250a1..c21869645dc 100644 --- a/llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg-multilevel.ll +++ b/llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg-multilevel.ll @@ -4,9 +4,6 @@ ; RUN: opt < %s -disable-basicaa -cfl-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s ; RUN: opt < %s -aa-pipeline=cfl-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s -; xfail for now due to buggy interproc analysis -; XFAIL: * - declare noalias i8* @malloc(i64) define void @store_arg_multilevel_callee(i32*** %arg1, i32* %arg2) { @@ -17,7 +14,6 @@ define void @store_arg_multilevel_callee(i32*** %arg1, i32* %arg2) { ret void } ; CHECK-LABEL: Function: test_store_arg_multilevel -; CHECK: NoAlias: i32* %a, i32* %b ; CHECK: NoAlias: i32* %a, i32** %lpp ; CHECK: NoAlias: i32* %b, i32** %lpp ; CHECK: MayAlias: i32** %lpp, i32** %p @@ -27,10 +23,13 @@ define void @store_arg_multilevel_callee(i32*** %arg1, i32* %arg2) { ; CHECK: NoAlias: i32* %lpp_deref, i32*** %pp ; CHECK: NoAlias: i32* %lpp_deref, i32** %lpp ; CHECK: MayAlias: i32* %a, i32* %lp -; CHECK: NoAlias: i32* %b, i32* %lp ; CHECK: NoAlias: i32* %lp, i32*** %pp ; CHECK: NoAlias: i32* %lp, i32** %lpp ; CHECK: MayAlias: i32* %lp, i32* %lpp_deref + +; We could've proven the following facts if the analysis were inclusion-based: +; NoAlias: i32* %a, i32* %b +; NoAlias: i32* %b, i32* %lp define void @test_store_arg_multilevel() { %a = alloca i32, align 4 %b = alloca i32, align 4 diff --git a/llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg.ll b/llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg.ll index 05da844a96d..e17cab75487 100644 --- a/llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg.ll +++ b/llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg.ll @@ -4,22 +4,21 @@ ; RUN: opt < %s -disable-basicaa -cfl-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s ; RUN: opt < %s -aa-pipeline=cfl-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s -; xfail for now due to buggy interproc analysis -; XFAIL: * - define void @store_arg_callee(i32** %arg1, i32* %arg2) { store i32* %arg2, i32** %arg1 ret void } ; CHECK-LABEL: Function: test_store_arg -; CHECK: NoAlias: i32* %a, i32* %b ; CHECK: NoAlias: i32* %a, i32** %p ; CHECK: NoAlias: i32* %b, i32** %p ; CHECK: MayAlias: i32* %a, i32* %lp ; CHECK: MayAlias: i32* %b, i32* %lp -; CHECK: NoAlias: i32* %a, i32* %lq ; CHECK: MayAlias: i32* %b, i32* %lq -; CHECK: NoAlias: i32* %lp, i32* %lq +; CHECK: MayAlias: i32* %lp, i32* %lq + +; We could've proven the following facts if the analysis were inclusion-based: +; NoAlias: i32* %a, i32* %b +; NoAlias: i32* %a, i32* %lq define void @test_store_arg() { %a = alloca i32, align 4 %b = alloca i32, align 4 |

