diff options
author | Ira Rosen <ira.rosen@linaro.org> | 2011-10-09 15:09:00 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2011-10-09 15:09:00 +0000 |
commit | 3a0a3578217e5b5d36589d7f6a68bc68bbcc53de (patch) | |
tree | d20015fff4fe516413cda16224d927d9f47cbdbb /gcc | |
parent | 4e5d3db2c4ceca99cbeaeca30080c3825ddcceef (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr50635.c | 21 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.c | 3 |
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 |