aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorAndrew Pinski <Andrew.Pinski@playstation.sony.com>2008-05-05 09:10:43 -0700
committerAndrew Pinski <pinskia@gcc.gnu.org>2008-05-05 09:10:43 -0700
commite06f0ff9f8df758cfd03e9995311f2d6a540d1d4 (patch)
tree1e8cf7783e4d709556387f45a18b0e829df63986 /gcc/testsuite
parent8c32cbc9216667838c44092195f782b9e2ccd2ee (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c21
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c16
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-7.c14
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c16
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-9.c18
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" } } */