aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2004-09-03 20:27:01 -0700
committerDevang Patel <dpatel@gcc.gnu.org>2004-09-03 20:27:01 -0700
commit40923b202de784a0554d6a084464da3c1be4d976 (patch)
tree1634fa84e47784b37bfc8b13390fa4532f7860b8 /gcc/testsuite
parent48d0dd75204e91efaba289e40b5eee703b07ccd8 (diff)
downloadgcc-40923b202de784a0554d6a084464da3c1be4d976.zip
gcc-40923b202de784a0554d6a084464da3c1be4d976.tar.gz
gcc-40923b202de784a0554d6a084464da3c1be4d976.tar.bz2
Tree level if-conversion for vectorizer.
* Makefile.in (OBJS-common): Add tree-if-conv.o (tree-if-conv.o): New rule. * cfgloop.c (flow_loop_exit_edges_find): Set EDGE_LOOP_EXIT flag. (get_loop_body_in_bfs_order): New. * cfgloop.h (get_loop_body_in_bfs_order): New. * tree-flow.h (enum move_pos): Move here from .. * tree-ssa-loop-im.c (enum move_pos): here. (movement_possibility): Make externally visible. * tree-optimize.c (init_tree_optimization_passes): New entry for if conversion pass. * tree-pass.h (pass_if_conversion): New. * tree-ssa-operands.c (get_expr_operands): Handle COND_EXPR. * tree-if-conv.c: New file. * doc/passes.texi: Document tree if-conversion pass. * doc/tree-ssa.texi: Same. testsuite: * gcc.dg/tree-ssa/ifc-20040816-1.c: New test. * gcc.dg/tree-ssa/ifc-20040816-2.c: New test. From-SVN: r87073
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c36
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-2.c37
3 files changed, 78 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8cae9a8..276c31d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-09-03 Devang Patel <dpatel@apple.com>
+
+ * gcc.dg/tree-ssa/ifc-20040816-1.c: New test.
+ * gcc.dg/tree-ssa/ifc-20040816-2.c: New test.
+
2004-09-03 Jan Beulich <jbeulich@novell.com>
* g++.dg/abi/bitfield5.C: Use -mno-ms-bitfields.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c
new file mode 100644
index 0000000..2290563
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-options "-c -O2 -fdump-tree-ifcvt-stats" { target *-*-* } } */
+
+#include <stdarg.h>
+#include <signal.h>
+
+#define N 16
+#define MAX 42
+
+extern void abort(void);
+
+int main1 ()
+{
+ int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+
+ int i, j;
+
+ for (i = 0; i < N; i++)
+ {
+ j = A[i];
+ A[i] = ( j >= MAX ? MAX : 0);
+ }
+
+ /* check results: */
+ for (i = 0; i < N; i++)
+ {
+ if (A[i] > MAX)
+ abort ();
+ }
+
+ return 0;
+}
+
+
+
+/* { dg-final { scan-tree-dump-times "Applying if-conversion" 1 "ifcvt" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-2.c
new file mode 100644
index 0000000..47ac652
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-2.c
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/* { dg-options "-c -O2 -fdump-tree-ifcvt-stats" { target *-*-* } } */
+
+typedef float afloat __attribute__ ((__aligned__(16)));
+void foo(const afloat * __restrict__ zr_in,
+ const afloat * __restrict__ zi_in,
+ const afloat * __restrict__ zk_in,
+ afloat * __restrict__ zr_out,
+ afloat * __restrict__ zi_out,
+ afloat * __restrict__ zk_out,
+ float cr, float ci)
+{
+ unsigned int pi;
+ float tmp_r, tmp_i, tmp_k;
+ for (pi = 0; pi < (512)*(512); pi++) {
+ float zr = zr_in[pi];
+ float zi = zi_in[pi];
+ float zk = zk_in[pi];
+
+ if (zr*zr + zi*zi >= 4.0f) {
+ tmp_r = zr;
+ tmp_i = zi;
+ tmp_k = zk;
+ } else {
+ tmp_r = (zr*zr - zi*zi + cr);
+ tmp_i = (2 * zr * zi + ci);
+ tmp_k = zk + 1.0f;
+ }
+ zr_out[pi] = tmp_r;
+ zi_out[pi] = tmp_i;
+ zk_out[pi] = tmp_k;
+ }
+}
+
+
+/* { dg-final { scan-tree-dump-times "Applying if-conversion" 1 "ifcvt" } } */
+