aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-transform.c
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2007-06-08 11:06:46 +0200
committerUros Bizjak <uros@gcc.gnu.org>2007-06-08 11:06:46 +0200
commit459e691ae80c78606b28f802bd438e66146dbd39 (patch)
treeb476fa13619c40beae0788a7abcf4c0b6bfa9d7c /gcc/tree-vect-transform.c
parent0d2665809fd15fe7c5ee73a7adee1ae64a002ffd (diff)
downloadgcc-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.c9
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))