diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2007-06-08 11:06:46 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2007-06-08 11:06:46 +0200 |
commit | 459e691ae80c78606b28f802bd438e66146dbd39 (patch) | |
tree | b476fa13619c40beae0788a7abcf4c0b6bfa9d7c /gcc/tree-vect-transform.c | |
parent | 0d2665809fd15fe7c5ee73a7adee1ae64a002ffd (diff) | |
download | gcc-459e691ae80c78606b28f802bd438e66146dbd39.zip gcc-459e691ae80c78606b28f802bd438e66146dbd39.tar.gz gcc-459e691ae80c78606b28f802bd438e66146dbd39.tar.bz2 |
re PR tree-optimization/32243 (ICE in vectorizable_type_promotion, at tree-vect-transform.c:2890)
PR tree-optimization/32243
* tree-vect-transform.c (vectorizable_type_promotion): Move check
for ncopies after ratio check between nunits_out and nunits_in.
(vectorizable_type_demotion): Remove single-use variable "scalar_type".
testsuite/ChangeLog:
PR tree-optimization/32243
* gcc.dg/vect/vect.exp: Add support for -O3 tests. Reset default
flags for -Os tests.
* gcc.dg/vect/03-vect-pr32243.c: New test.
From-SVN: r125567
Diffstat (limited to 'gcc/tree-vect-transform.c')
-rw-r--r-- | gcc/tree-vect-transform.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c index eff1ed7..e49fba1 100644 --- a/gcc/tree-vect-transform.c +++ b/gcc/tree-vect-transform.c @@ -2708,7 +2708,6 @@ vectorizable_type_demotion (tree stmt, block_stmt_iterator *bsi, int j; tree expr; tree vectype_in; - tree scalar_type; if (!STMT_VINFO_RELEVANT_P (stmt_info)) return false; @@ -2741,8 +2740,7 @@ vectorizable_type_demotion (tree stmt, block_stmt_iterator *bsi, nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in); scalar_dest = GIMPLE_STMT_OPERAND (stmt, 0); - scalar_type = TREE_TYPE (scalar_dest); - vectype_out = get_vectype_for_scalar_type (scalar_type); + vectype_out = get_vectype_for_scalar_type (TREE_TYPE (scalar_dest)); nunits_out = TYPE_VECTOR_SUBPARTS (vectype_out); if (nunits_in != nunits_out / 2) /* FORNOW */ return false; @@ -2887,8 +2885,6 @@ vectorizable_type_promotion (tree stmt, block_stmt_iterator *bsi, op0 = TREE_OPERAND (operation, 0); vectype_in = get_vectype_for_scalar_type (TREE_TYPE (op0)); nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in); - ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits_in; - gcc_assert (ncopies >= 1); scalar_dest = GIMPLE_STMT_OPERAND (stmt, 0); vectype_out = get_vectype_for_scalar_type (TREE_TYPE (scalar_dest)); @@ -2896,6 +2892,9 @@ vectorizable_type_promotion (tree stmt, block_stmt_iterator *bsi, if (nunits_out != nunits_in / 2) /* FORNOW */ return false; + ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits_in; + gcc_assert (ncopies >= 1); + if (! ((INTEGRAL_TYPE_P (TREE_TYPE (scalar_dest)) && INTEGRAL_TYPE_P (TREE_TYPE (op0))) || (SCALAR_FLOAT_TYPE_P (TREE_TYPE (scalar_dest)) |