Commit e412ece4 by Richard Biener Committed by Richard Biener

re PR tree-optimization/71264 (ICE in convert_move)

2016-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71264
	* tree-vect-stmts.c (vect_init_vector): Properly deal with
	vector type val.

	* gcc.dg/vect/pr71264.c: New testcase.

From-SVN: r236699
parent b9e551ad
2016-05-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/71264
* tree-vect-stmts.c (vect_init_vector): Properly deal with
vector type val.
2016-05-25 Martin Liska <mliska@suse.cz>
PR tree-optimization/71239
......
2016-05-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/71264
* gcc.dg/vect/pr71264.c: New testcase.
2016-05-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/55992
......
/* { dg-do compile } */
/* { dg-require-effective-target vect_int } */
typedef unsigned char uint8_t;
typedef uint8_t footype __attribute__((vector_size(4)));
void test(uint8_t *ptr, uint8_t *mask)
{
footype mv;
__builtin_memcpy(&mv, mask, sizeof(mv));
for (unsigned i = 0; i < 16; i += 4)
{
footype temp;
__builtin_memcpy(&temp, &ptr[i], sizeof(temp));
temp ^= mv;
__builtin_memcpy(&ptr[i], &temp, sizeof(temp));
}
}
/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */
......@@ -1256,10 +1256,11 @@ vect_init_vector (gimple *stmt, tree val, tree type, gimple_stmt_iterator *gsi)
gimple *init_stmt;
tree new_temp;
if (TREE_CODE (type) == VECTOR_TYPE
&& TREE_CODE (TREE_TYPE (val)) != VECTOR_TYPE)
/* We abuse this function to push sth to a SSA name with initial 'val'. */
if (! useless_type_conversion_p (type, TREE_TYPE (val)))
{
if (!types_compatible_p (TREE_TYPE (type), TREE_TYPE (val)))
gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
if (! types_compatible_p (TREE_TYPE (type), TREE_TYPE (val)))
{
/* Scalar boolean value should be transformed into
all zeros or all ones value before building a vector. */
......@@ -1284,7 +1285,13 @@ vect_init_vector (gimple *stmt, tree val, tree type, gimple_stmt_iterator *gsi)
else
{
new_temp = make_ssa_name (TREE_TYPE (type));
init_stmt = gimple_build_assign (new_temp, NOP_EXPR, val);
if (! INTEGRAL_TYPE_P (TREE_TYPE (val)))
init_stmt = gimple_build_assign (new_temp,
fold_build1 (VIEW_CONVERT_EXPR,
TREE_TYPE (type),
val));
else
init_stmt = gimple_build_assign (new_temp, NOP_EXPR, val);
vect_init_vector_1 (stmt, init_stmt, gsi);
val = new_temp;
}
......
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