Commit 7b76867b by Richard Biener Committed by Richard Biener

tree-vect-patterns.c (vect_recog_vector_vector_shift_pattern): Properly set…

tree-vect-patterns.c (vect_recog_vector_vector_shift_pattern): Properly set vector type of the intermediate stmt.

2018-06-13  Richard Biener  <rguenther@suse.de>

	* tree-vect-patterns.c (vect_recog_vector_vector_shift_pattern):
	Properly set vector type of the intermediate stmt.
	* tree-vect-stmts.c (vectorizable_operation): The destination
	var always has vectype_out type.

From-SVN: r261553
parent 92877928
2018-06-13 Richard Biener <rguenther@suse.de>
* tree-vect-patterns.c (vect_recog_vector_vector_shift_pattern):
Properly set vector type of the intermediate stmt.
* tree-vect-stmts.c (vectorizable_operation): The destination
var always has vectype_out type.
2018-06-13 Jeff Law <law@redhat.com> 2018-06-13 Jeff Law <law@redhat.com>
* config/rl78/rl78.c (move_elim_pass): Use TDF_NONE rather than * config/rl78/rl78.c (move_elim_pass): Use TDF_NONE rather than
......
...@@ -2185,6 +2185,11 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts, ...@@ -2185,6 +2185,11 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts,
TYPE_PRECISION (TREE_TYPE (oprnd1))); TYPE_PRECISION (TREE_TYPE (oprnd1)));
def = vect_recog_temp_ssa_var (TREE_TYPE (rhs1), NULL); def = vect_recog_temp_ssa_var (TREE_TYPE (rhs1), NULL);
def_stmt = gimple_build_assign (def, BIT_AND_EXPR, rhs1, mask); def_stmt = gimple_build_assign (def, BIT_AND_EXPR, rhs1, mask);
stmt_vec_info new_stmt_info
= new_stmt_vec_info (def_stmt, vinfo);
set_vinfo_for_stmt (def_stmt, new_stmt_info);
STMT_VINFO_VECTYPE (new_stmt_info)
= get_vectype_for_scalar_type (TREE_TYPE (rhs1));
new_pattern_def_seq (stmt_vinfo, def_stmt); new_pattern_def_seq (stmt_vinfo, def_stmt);
} }
} }
......
...@@ -5981,16 +5981,19 @@ vectorizable_operation (gimple *stmt, gimple_stmt_iterator *gsi, ...@@ -5981,16 +5981,19 @@ vectorizable_operation (gimple *stmt, gimple_stmt_iterator *gsi,
dump_printf_loc (MSG_NOTE, vect_location, dump_printf_loc (MSG_NOTE, vect_location,
"transform binary/unary operation.\n"); "transform binary/unary operation.\n");
/* Handle def. */
vec_dest = vect_create_destination_var (scalar_dest, vectype);
/* POINTER_DIFF_EXPR has pointer arguments which are vectorized as /* POINTER_DIFF_EXPR has pointer arguments which are vectorized as
vectors with unsigned elements, but the result is signed. So, we vectors with unsigned elements, but the result is signed. So, we
need to compute the MINUS_EXPR into vectype temporary and need to compute the MINUS_EXPR into vectype temporary and
VIEW_CONVERT_EXPR it into the final vectype_out result. */ VIEW_CONVERT_EXPR it into the final vectype_out result. */
tree vec_cvt_dest = NULL_TREE; tree vec_cvt_dest = NULL_TREE;
if (orig_code == POINTER_DIFF_EXPR) if (orig_code == POINTER_DIFF_EXPR)
vec_cvt_dest = vect_create_destination_var (scalar_dest, vectype_out); {
vec_dest = vect_create_destination_var (scalar_dest, vectype);
vec_cvt_dest = vect_create_destination_var (scalar_dest, vectype_out);
}
/* Handle def. */
else
vec_dest = vect_create_destination_var (scalar_dest, vectype_out);
/* In case the vectorization factor (VF) is bigger than the number /* In case the vectorization factor (VF) is bigger than the number
of elements that we can fit in a vectype (nunits), we have to generate of elements that we can fit in a vectype (nunits), we have to generate
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment