aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIra Rosen <ira.rosen@linaro.org>2011-10-09 15:09:00 +0000
committerIra Rosen <irar@gcc.gnu.org>2011-10-09 15:09:00 +0000
commit3a0a3578217e5b5d36589d7f6a68bc68bbcc53de (patch)
treed20015fff4fe516413cda16224d927d9f47cbdbb /gcc
parent4e5d3db2c4ceca99cbeaeca30080c3825ddcceef (diff)
downloadgcc-3a0a3578217e5b5d36589d7f6a68bc68bbcc53de.zip
gcc-3a0a3578217e5b5d36589d7f6a68bc68bbcc53de.tar.gz
gcc-3a0a3578217e5b5d36589d7f6a68bc68bbcc53de.tar.bz2
re PR tree-optimization/50635 (ICE on valid: segfault in vectorize_loops)
PR tree-optimization/50635 * tree-vect-patterns.c (vect_handle_widen_mult_by_const): Add DEF_STMT to the list of statements to be replaced by the pattern statements. (vect_handle_widen_mult_by_const): Don't check TYPE_OUT. From-SVN: r179724
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr50635.c21
-rw-r--r--gcc/tree-vect-patterns.c3
4 files changed, 35 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5fb1c9f..925b625 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2011-10-09 Ira Rosen <ira.rosen@linaro.org>
+
+ PR tree-optimization/50635
+ * tree-vect-patterns.c (vect_handle_widen_mult_by_const): Add
+ DEF_STMT to the list of statements to be replaced by the
+ pattern statements.
+ (vect_handle_widen_mult_by_const): Don't check TYPE_OUT.
+
2011-10-09 Anatoly Sokolov <aesok@post.ru>
* system.h: Commit forgotten hunk in previous patch.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c310ab2..67bd040 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-10-09 Ira Rosen <ira.rosen@linaro.org>
+
+ PR tree-optimization/50635
+ * gcc.dg/vect/pr50635.c: New test.
+
2011-10-09 Janus Weil <janus@gcc.gnu.org>
PR fortran/50659
diff --git a/gcc/testsuite/gcc.dg/vect/pr50635.c b/gcc/testsuite/gcc.dg/vect/pr50635.c
new file mode 100644
index 0000000..6a7ac52
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr50635.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+
+typedef signed long int32_t;
+typedef char int8_t;
+
+void f0a(int32_t * result, int32_t * arg1, int8_t * arg2, int32_t temp_3)
+{
+ int idx;
+ for (idx=0;idx<10;idx += 1)
+ {
+ int32_t temp_4;
+ int32_t temp_12;
+
+ temp_4 = (-2 & arg2[idx]) + temp_3;
+ temp_12 = -2 * arg2[idx] + temp_4;
+ result[idx] = temp_12;
+ }
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index a47b87b..44a37b9 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -388,6 +388,7 @@ vect_handle_widen_mult_by_const (gimple stmt, tree const_oprnd, tree *oprnd,
|| TREE_TYPE (gimple_assign_lhs (new_stmt)) != new_type)
return false;
+ VEC_safe_push (gimple, heap, *stmts, def_stmt);
*oprnd = gimple_assign_lhs (new_stmt);
}
else
@@ -1424,8 +1425,6 @@ vect_pattern_recog_1 (vect_recog_func_ptr vect_recog_func,
{
/* No need to check target support (already checked by the pattern
recognition function). */
- if (type_out)
- gcc_assert (VECTOR_MODE_P (TYPE_MODE (type_out)));
pattern_vectype = type_out ? type_out : type_in;
}
else