diff options
author | Richard Guenther <rguenther@suse.de> | 2009-06-16 12:31:49 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-06-16 12:31:49 +0000 |
commit | de70bb20ba3864deca9c9cba9edf646ae1d8a226 (patch) | |
tree | 5a544b381b9b4cb81b15ed5e414068721bdaae3c /gcc/testsuite/gcc.dg/tree-ssa | |
parent | daa0eeb8ab04b67053944c8990643e1efe8c913b (diff) | |
download | gcc-de70bb20ba3864deca9c9cba9edf646ae1d8a226.zip gcc-de70bb20ba3864deca9c9cba9edf646ae1d8a226.tar.gz gcc-de70bb20ba3864deca9c9cba9edf646ae1d8a226.tar.bz2 |
tree-ssa-structalias.c (do_ds_constraint): Stores in global variables add them to ESCAPED.
2009-06-16 Richard Guenther <rguenther@suse.de>
* tree-ssa-structalias.c (do_ds_constraint): Stores in global
variables add them to ESCAPED.
(find_func_aliases): Do not make all indirectly stored values
escaped.
* gcc.dg/tree-ssa/pta-escape-1.c: New testcase.
* gcc.dg/tree-ssa/pta-escape-2.c: Likewise.
* gcc.dg/tree-ssa/pta-escape-3.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-27.c: Likewise.
From-SVN: r148525
Diffstat (limited to 'gcc/testsuite/gcc.dg/tree-ssa')
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c | 37 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c | 38 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c | 42 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c | 25 |
4 files changed, 142 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c new file mode 100644 index 0000000..ee8a84b --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c @@ -0,0 +1,37 @@ +/* { dg-do run } */ +/* { dg-options "-O -fdump-tree-alias-details" } */ + +int *i; +void __attribute__((noinline)) +foo (void) +{ + *i = 1; +} +int __attribute__((noinline)) +bar(int local_p) +{ + int x = 0; + int *j; + int **p; + if (local_p) + p = &j; + else + p = &i; + *p = &x; /* This makes x escape. */ + foo (); + return x; +} +extern void abort (void); +int main() +{ + int k = 2; + i = &k; + if (bar (1) != 0 || k != 1) + abort (); + if (bar (0) != 1) + abort (); + return 0; +} + +/* { dg-final { scan-tree-dump "ESCAPED, points-to vars: { x }" "alias" } } */ +/* { dg-final { cleanup-tree-dump "alias" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c new file mode 100644 index 0000000..ad5ed2e --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c @@ -0,0 +1,38 @@ +/* { dg-do run } */ +/* { dg-options "-O -fdump-tree-alias-details" } */ + +int *i; +void __attribute__((noinline)) +foo (void) +{ + *i = 1; +} +int __attribute__((noinline)) +bar(int local_p, int **q) +{ + int x = 0; + int *j; + int **p; + if (local_p) + p = &j; + else + p = q; + *p = &x; /* This makes x escape. */ + foo (); + return x; +} +extern void abort (void); +int main() +{ + int k = 2; + int **q = &i; + i = &k; + if (bar (1, q) != 0 || k != 1) + abort (); + if (bar (0, q) != 1) + abort (); + return 0; +} + +/* { dg-final { scan-tree-dump "ESCAPED, points-to vars: { x }" "alias" } } */ +/* { dg-final { cleanup-tree-dump "alias" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c b/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c new file mode 100644 index 0000000..ea11c8a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c @@ -0,0 +1,42 @@ +/* { dg-do run } */ +/* { dg-options "-O -fdump-tree-alias-details" } */ + +int *i; +void __attribute__((noinline)) +foo (void) +{ + *i = 1; +} +int **__attribute__((noinline,const)) +foobar (void) +{ + return &i; +} +int __attribute__((noinline)) +bar(int local_p) +{ + int x = 0; + int *j; + int **p; + if (local_p) + p = &j; + else + p = foobar(); + *p = &x; /* This makes x escape. */ + foo (); + return x; +} +extern void abort (void); +int main() +{ + int k = 2; + i = &k; + if (bar (1) != 0 || k != 1) + abort (); + if (bar (0) != 1) + abort (); + return 0; +} + +/* { dg-final { scan-tree-dump "ESCAPED, points-to vars: { x }" "alias" } } */ +/* { dg-final { cleanup-tree-dump "alias" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c new file mode 100644 index 0000000..3936870 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-fre-details" } */ + +int *q; +void __attribute__((noinline)) +bar (void) +{ + *q = 1; +} +int foo(int which_p) +{ + int x = 0; + int *i,*j; + int **p; + if (which_p) + p = &i; + else + p = &j; + *p = &x; + bar (); + return x; +} + +/* { dg-final { scan-tree-dump "Replaced x with 0" "fre" } } */ +/* { dg-final { cleanup-tree-dump "fre" } } */ |