Make more use of gimple-fold.h in tree-vect-loop.c
This patch makes the vectoriser use the gimple-fold.h routines in more cases, instead of vect_init_vector. Later patches want to use the same interface to handle variable-length vectors. 2017-09-14 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * tree-vect-loop.c (vectorizable_induction): Use gimple_build instead of vect_init_vector. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r252763
This commit is contained in:
parent
e7c45b6600
commit
dccf43aed3
@ -1,3 +1,10 @@
|
||||
2017-09-14 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
Alan Hayward <alan.hayward@arm.com>
|
||||
David Sherwood <david.sherwood@arm.com>
|
||||
|
||||
* tree-vect-loop.c (vectorizable_induction): Use gimple_build instead
|
||||
of vect_init_vector.
|
||||
|
||||
2017-09-14 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
Alan Hayward <alan.hayward@arm.com>
|
||||
David Sherwood <david.sherwood@arm.com>
|
||||
|
@ -6839,18 +6839,21 @@ vectorizable_induction (gimple *phi,
|
||||
{
|
||||
/* iv_loop is the loop to be vectorized. Generate:
|
||||
vec_step = [VF*S, VF*S, VF*S, VF*S] */
|
||||
gimple_seq seq = NULL;
|
||||
if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (step_expr)))
|
||||
{
|
||||
expr = build_int_cst (integer_type_node, vf);
|
||||
expr = fold_convert (TREE_TYPE (step_expr), expr);
|
||||
expr = gimple_build (&seq, FLOAT_EXPR, TREE_TYPE (step_expr), expr);
|
||||
}
|
||||
else
|
||||
expr = build_int_cst (TREE_TYPE (step_expr), vf);
|
||||
new_name = fold_build2 (MULT_EXPR, TREE_TYPE (step_expr),
|
||||
expr, step_expr);
|
||||
if (TREE_CODE (step_expr) == SSA_NAME)
|
||||
new_name = vect_init_vector (phi, new_name,
|
||||
TREE_TYPE (step_expr), NULL);
|
||||
new_name = gimple_build (&seq, MULT_EXPR, TREE_TYPE (step_expr),
|
||||
expr, step_expr);
|
||||
if (seq)
|
||||
{
|
||||
new_bb = gsi_insert_seq_on_edge_immediate (pe, seq);
|
||||
gcc_assert (!new_bb);
|
||||
}
|
||||
}
|
||||
|
||||
t = unshare_expr (new_name);
|
||||
@ -6899,6 +6902,7 @@ vectorizable_induction (gimple *phi,
|
||||
|
||||
if (ncopies > 1)
|
||||
{
|
||||
gimple_seq seq = NULL;
|
||||
stmt_vec_info prev_stmt_vinfo;
|
||||
/* FORNOW. This restriction should be relaxed. */
|
||||
gcc_assert (!nested_in_vect_loop);
|
||||
@ -6907,15 +6911,18 @@ vectorizable_induction (gimple *phi,
|
||||
if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (step_expr)))
|
||||
{
|
||||
expr = build_int_cst (integer_type_node, nunits);
|
||||
expr = fold_convert (TREE_TYPE (step_expr), expr);
|
||||
expr = gimple_build (&seq, FLOAT_EXPR, TREE_TYPE (step_expr), expr);
|
||||
}
|
||||
else
|
||||
expr = build_int_cst (TREE_TYPE (step_expr), nunits);
|
||||
new_name = fold_build2 (MULT_EXPR, TREE_TYPE (step_expr),
|
||||
expr, step_expr);
|
||||
if (TREE_CODE (step_expr) == SSA_NAME)
|
||||
new_name = vect_init_vector (phi, new_name,
|
||||
TREE_TYPE (step_expr), NULL);
|
||||
new_name = gimple_build (&seq, MULT_EXPR, TREE_TYPE (step_expr),
|
||||
expr, step_expr);
|
||||
if (seq)
|
||||
{
|
||||
new_bb = gsi_insert_seq_on_edge_immediate (pe, seq);
|
||||
gcc_assert (!new_bb);
|
||||
}
|
||||
|
||||
t = unshare_expr (new_name);
|
||||
gcc_assert (CONSTANT_CLASS_P (new_name)
|
||||
|| TREE_CODE (new_name) == SSA_NAME);
|
||||
|
Loading…
Reference in New Issue
Block a user