diff options
author | Devang Patel <dpatel@apple.com> | 2004-09-03 20:27:01 -0700 |
---|---|---|
committer | Devang Patel <dpatel@gcc.gnu.org> | 2004-09-03 20:27:01 -0700 |
commit | 40923b202de784a0554d6a084464da3c1be4d976 (patch) | |
tree | 1634fa84e47784b37bfc8b13390fa4532f7860b8 /gcc/testsuite | |
parent | 48d0dd75204e91efaba289e40b5eee703b07ccd8 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c | 36 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-2.c | 37 |
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" } } */ + |