summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorirar <irar@138bc75d-0d04-0410-961f-82ee72b054a4>2007-02-06 08:41:01 +0000
committerirar <irar@138bc75d-0d04-0410-961f-82ee72b054a4>2007-02-06 08:41:01 +0000
commitf031fa031697b65f36bd3d9d3ad4c609577a27be (patch)
tree11b8037cf34db717be3b5b79cd94c172813054ad /gcc
parent6da8bb4f936061ba84ed53f363fd9c3c00a1e04a (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/vect/fast-math-vect-pow-2.c33
-rw-r--r--gcc/tree-vect-patterns.c6
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