diff options
author | Andrew Pinski <Andrew.Pinski@playstation.sony.com> | 2008-05-05 09:10:43 -0700 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2008-05-05 09:10:43 -0700 |
commit | e06f0ff9f8df758cfd03e9995311f2d6a540d1d4 (patch) | |
tree | 1e8cf7783e4d709556387f45a18b0e829df63986 /gcc/testsuite | |
parent | 8c32cbc9216667838c44092195f782b9e2ccd2ee (diff) | |
download | gcc-e06f0ff9f8df758cfd03e9995311f2d6a540d1d4.zip gcc-e06f0ff9f8df758cfd03e9995311f2d6a540d1d4.tar.gz gcc-e06f0ff9f8df758cfd03e9995311f2d6a540d1d4.tar.bz2 |
tree-ssa-forwprop.c (forward_propagate_addr_expr_1): If we have the same size types for...
2008-05-05 Andrew Pinski <Andrew.Pinski@playstation.sony.com>
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): If we have the
same size types for the indirect reference on the rhs, then create a VCE.
2008-05-05 Andrew Pinski <andrew.pinski@playstation.sony.com>
* gcc.dg/tree-ssa/forwprop-5.c: New testcase.
* gcc.dg/tree-ssa/forwprop-6.c: New testcase.
* gcc.dg/tree-ssa/forwprop-7.c: New testcase.
* gcc.dg/tree-ssa/forwprop-8.c: New testcase.
* gcc.dg/tree-ssa/forwprop-9.c: New testcase.
From-SVN: r134947
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c | 21 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/forwprop-7.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c | 18 |
6 files changed, 93 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c65deaf..06f68c5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2008-05-05 Andrew Pinski <andrew.pinski@playstation.sony.com> + + * gcc.dg/tree-ssa/forwprop-5.c: New testcase. + * gcc.dg/tree-ssa/forwprop-6.c: New testcase. + * gcc.dg/tree-ssa/forwprop-7.c: New testcase. + * gcc.dg/tree-ssa/forwprop-8.c: New testcase. + * gcc.dg/tree-ssa/forwprop-9.c: New testcase. + 2008-05-05 Ira Rosen <irar@il.ibm.com> PR tree-optimization/36119 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c new file mode 100644 index 0000000..710bc5d --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-forwprop1 -w" } */ + +#define vector __attribute__((vector_size(16) )) +struct VecClass +{ + vector float v; +}; + +vector float foo( vector float v ) +{ + vector float x = v; + x = x + x; + struct VecClass y = *(struct VecClass*)&x; + return y.v; +} + +/* We should be able to convert the cast to a VCE in forwprop1. */ +/* { dg-final { scan-tree-dump-times "VIEW_CONVERT_EXPR" 1 "forwprop1"} } */ +/* { dg-final { cleanup-tree-dump "forwprop1" } } */ + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c new file mode 100644 index 0000000..7df9f45 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-forwprop1 -W -Wall" } */ + + +int b; +void f(void) +{ + float a; + a = 1; + b = *(int*)&a; /* { dg-warning "aliasing" } */ +} + +/* We should be able to convert the cast to a VCE in forwprop1, + even if there is an aliasing violation. */ +/* { dg-final { scan-tree-dump-times "VIEW_CONVERT_EXPR" 1 "forwprop1"} } */ +/* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-7.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-7.c new file mode 100644 index 0000000..6b894b5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-7.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-forwprop1 -W -Wall" } */ + +int i; +int foo(void) +{ + volatile int *p = (volatile int *)&i; + return *p + *p; +} + +/* We should not convert the cast to a VCE in forwprop1 as we have a volatile reference. */ +/* { dg-final { scan-tree-dump-times "VIEW_CONVERT_EXPR" 0 "forwprop1"} } */ +/* { dg-final { scan-tree-dump-times "volatile int" 2 "forwprop1"} } */ +/* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c new file mode 100644 index 0000000..4e0751f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-forwprop1 -W -Wall" } */ + + +struct X { int a[5]; }; +int foo(struct X *q) +{ + int (*pointer)[5] = &q->a; + return (*pointer)[0]; +} + + +/* We should have propragated &q->a into (*pointer). */ +/* { dg-final { scan-tree-dump-times "pointer" 0 "forwprop1"} } */ +/* { dg-final { scan-tree-dump "->a\\\[0\\\]" "forwprop1" } } */ +/* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c new file mode 100644 index 0000000..70630d0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-final_cleanup -W -Wall -fno-early-inlining" } */ + + +int b; +unsigned a; +static inline int *g(void) +{ + a = 1; + return (int*)&a; +} +void f(void) +{ + b = *g(); +} +/* We should have converted the assignments to two = 1. */ +/* { dg-final { scan-tree-dump-times " = 1" 2 "final_cleanup"} } */ +/* { dg-final { cleanup-tree-dump "final_cleanup" } } */ |