summaryrefslogtreecommitdiffstats
path: root/llvm/test/Analysis/CFLAliasAnalysis
diff options
context:
space:
mode:
authorGeorge Burgess IV <george.burgess.iv@gmail.com>2016-06-23 18:55:23 +0000
committerGeorge Burgess IV <george.burgess.iv@gmail.com>2016-06-23 18:55:23 +0000
commit1f99da54c2aea0a6a3f44a9a08ba6f76bbbb1d26 (patch)
tree8feaca85ec9aee7ada64b0b5e6eccbfc434a8943 /llvm/test/Analysis/CFLAliasAnalysis
parent53fd425e0660d3778f9005d3591689aad5e4940e (diff)
downloadbcm5719-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/CFLAliasAnalysis')
-rw-r--r--llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-arg.ll2
-rw-r--r--llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg-multilevel.ll4
-rw-r--r--llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg.ll3
-rw-r--r--llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg-multilevel.ll9
-rw-r--r--llvm/test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg.ll7
-rw-r--r--llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg-multilevel.ll9
-rw-r--r--llvm/test/Analysis/CFLAliasAnalysis/interproc-store-arg.ll11
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
OpenPOWER on IntegriCloud