diff options
author | irar <irar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-06 08:41:01 +0000 |
---|---|---|
committer | irar <irar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-06 08:41:01 +0000 |
commit | f031fa031697b65f36bd3d9d3ad4c609577a27be (patch) | |
tree | 11b8037cf34db717be3b5b79cd94c172813054ad /gcc | |
parent | 6da8bb4f936061ba84ed53f363fd9c3c00a1e04a (diff) | |
download | gcc-f031fa031697b65f36bd3d9d3ad4c609577a27be.tar.gz |
* tree-vect-patterns.c (vect_recog_widen_mult_pattern): Check that
vectype is not NULL.
(vect_pattern_recog_1): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121640 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/fast-math-vect-pow-2.c | 33 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.c | 6 |
4 files changed, 48 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 947df6f73c3..9207c8ebe5e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-02-06 Ira Rosen <irar@il.ibm.com> + + * tree-vect-patterns.c (vect_recog_widen_mult_pattern): Check that + vectype is not NULL. + (vect_pattern_recog_1): Likewise. + 2007-02-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * fold-const.c (negate_expr_p): Handle CONJ_EXPR. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f22064aaf6e..3f676a85871 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-02-06 Ira Rosen <irar@il.ibm.com> + + * gcc.dg/vect/fast-math-vect-pow-2.c: New test. + 2007-02-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * gcc.dg/builtins-20.c: Add more cases. diff --git a/gcc/testsuite/gcc.dg/vect/fast-math-vect-pow-2.c b/gcc/testsuite/gcc.dg/vect/fast-math-vect-pow-2.c new file mode 100644 index 00000000000..a9d927b3f60 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/fast-math-vect-pow-2.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ + +typedef double d_type; +struct +{ + d_type x; + d_type y; +} S[100]; + +#define N 16 +d_type foo (d_type t); + +d_type +main1 () +{ + int i; + d_type t; + + for (i = 0; i < N; i++) + { + t = (d_type) i / (d_type) 10; + S[5].x = t * t; + } + return S[5].x; +} + +int +main (void) +{ + d_type tmp = main1 (); +} +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index c9e34e3e419..9fac417d0d0 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -386,7 +386,8 @@ vect_recog_widen_mult_pattern (tree last_stmt, /* Check target support */ vectype = get_vectype_for_scalar_type (half_type0); - if (!supportable_widening_operation (WIDEN_MULT_EXPR, last_stmt, vectype, + if (!vectype + || !supportable_widening_operation (WIDEN_MULT_EXPR, last_stmt, vectype, &dummy, &dummy, &dummy_code, &dummy_code)) return NULL; @@ -647,6 +648,9 @@ vect_pattern_recog_1 ( /* Check target support */ pattern_vectype = get_vectype_for_scalar_type (type_in); + if (!pattern_vectype) + return; + optab = optab_for_tree_code (TREE_CODE (pattern_expr), pattern_vectype); vec_mode = TYPE_MODE (pattern_vectype); if (!optab |