* [PATCH] Fix PR52721
@ 2012-03-26 14:12 Richard Guenther
0 siblings, 0 replies; only message in thread
From: Richard Guenther @ 2012-03-26 14:12 UTC (permalink / raw)
To: gcc-patches
This fixes PR52721, vect_init_vector is appearantly also used to
init scalars ... the following patch fixes the ICE and adjusts
the comments/implementation to not suggest we are dealing with
vectors only.
Bootstrapped and tested on x86_64-unknown-linux-gnu, appplied to trunk.
Richard.
2012-03-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52721
* tree-vect-stmts.c (vect_init_vector): Handle scalars.
Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c (revision 185792)
+++ gcc/tree-vect-stmts.c (working copy)
@@ -1142,7 +1142,6 @@ vect_get_load_cost (struct data_referenc
static void
vect_init_vector_1 (gimple stmt, gimple new_stmt, gimple_stmt_iterator *gsi)
{
-
if (gsi)
vect_finish_stmt_generation (stmt, new_stmt, gsi);
else
@@ -1185,48 +1184,48 @@ vect_init_vector_1 (gimple stmt, gimple
/* Function vect_init_vector.
- Insert a new stmt (INIT_STMT) that initializes a new vector variable with
- the vector elements of VECTOR_VAR. Place the initialization at BSI if it
- is not NULL. Otherwise, place the initialization at the loop preheader.
+ Insert a new stmt (INIT_STMT) that initializes a new variable of type
+ TYPE with the value VAL. If TYPE is a vector type and VAL does not have
+ vector type a vector with all elements equal to VAL is created first.
+ Place the initialization at BSI if it is not NULL. Otherwise, place the
+ initialization at the loop preheader.
Return the DEF of INIT_STMT.
It will be used in the vectorization of STMT. */
tree
-vect_init_vector (gimple stmt, tree vector_var, tree vector_type,
- gimple_stmt_iterator *gsi)
+vect_init_vector (gimple stmt, tree val, tree type, gimple_stmt_iterator *gsi)
{
tree new_var;
gimple init_stmt;
tree vec_oprnd;
tree new_temp;
- if (TREE_CODE (TREE_TYPE (vector_var)) != VECTOR_TYPE)
+ if (TREE_CODE (type) == VECTOR_TYPE
+ && TREE_CODE (TREE_TYPE (val)) != VECTOR_TYPE)
{
- if (!types_compatible_p (TREE_TYPE (vector_type),
- TREE_TYPE (vector_var)))
+ if (!types_compatible_p (TREE_TYPE (type), TREE_TYPE (val)))
{
- if (CONSTANT_CLASS_P (vector_var))
- vector_var = fold_unary (VIEW_CONVERT_EXPR, TREE_TYPE (vector_type),
- vector_var);
+ if (CONSTANT_CLASS_P (val))
+ val = fold_unary (VIEW_CONVERT_EXPR, TREE_TYPE (type), val);
else
{
- new_var = create_tmp_reg (TREE_TYPE (vector_type), NULL);
+ new_var = create_tmp_reg (TREE_TYPE (type), NULL);
add_referenced_var (new_var);
init_stmt = gimple_build_assign_with_ops (NOP_EXPR,
- new_var, vector_var,
+ new_var, val,
NULL_TREE);
new_temp = make_ssa_name (new_var, init_stmt);
gimple_assign_set_lhs (init_stmt, new_temp);
vect_init_vector_1 (stmt, init_stmt, gsi);
- vector_var = new_temp;
+ val = new_temp;
}
}
- vector_var = build_vector_from_val (vector_type, vector_var);
+ val = build_vector_from_val (type, val);
}
- new_var = vect_get_new_vect_var (vector_type, vect_simple_var, "cst_");
+ new_var = vect_get_new_vect_var (type, vect_simple_var, "cst_");
add_referenced_var (new_var);
- init_stmt = gimple_build_assign (new_var, vector_var);
+ init_stmt = gimple_build_assign (new_var, val);
new_temp = make_ssa_name (new_var, init_stmt);
gimple_assign_set_lhs (init_stmt, new_temp);
vect_init_vector_1 (stmt, init_stmt, gsi);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-03-26 14:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-26 14:12 [PATCH] Fix PR52721 Richard Guenther
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).