Commit 8eac49b1 by Richard Biener Committed by Richard Biener

re PR target/69053 (ICE in build_vector_from_val)

2016-01-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/69053
	* tree-vect-loop.c (get_initial_def_for_reduction): Properly
	convert initial value for cond reductions.

	* g++.dg/torture/pr69053.C: New testcase.

From-SVN: r232263
parent 5b723b68
2016-01-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/69053
* tree-vect-loop.c (get_initial_def_for_reduction): Properly
convert initial value for cond reductions.
2016-01-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/69007
* tree-vect-patterns.c (vect_vect_recog_func_ptrs): Move
widen_sum after dot_prod and sad.
......
2016-01-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/69053
* g++.dg/torture/pr69053.C: New testcase.
2016-01-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/69168
* gcc.dg/torture/pr69168.c: New testcase.
......
// { dg-do compile }
// { dg-additional-options "-march=core-avx2" { target x86_64-*-* i?86-*-* } }
struct A {
int *elem[1];
};
int a, d, e;
A *b;
int *c;
int main()
{
int *f = 0;
for (; e; e++)
if (b->elem[e])
f = c;
if (f)
a = d;
}
......@@ -4075,10 +4075,10 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val,
tree *elts;
int i;
bool nested_in_vect_loop = false;
tree init_value;
REAL_VALUE_TYPE real_init_val = dconst0;
int int_init_val = 0;
gimple *def_stmt = NULL;
gimple_seq stmts = NULL;
gcc_assert (vectype);
nunits = TYPE_VECTOR_SUBPARTS (vectype);
......@@ -4107,16 +4107,6 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val,
return vect_create_destination_var (init_val, vectype);
}
if (TREE_CONSTANT (init_val))
{
if (SCALAR_FLOAT_TYPE_P (scalar_type))
init_value = build_real (scalar_type, TREE_REAL_CST (init_val));
else
init_value = build_int_cst (scalar_type, TREE_INT_CST_LOW (init_val));
}
else
init_value = init_val;
switch (code)
{
case WIDEN_SUM_EXPR:
......@@ -4193,7 +4183,10 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val,
break;
}
}
init_def = build_vector_from_val (vectype, init_value);
init_val = gimple_convert (&stmts, TREE_TYPE (vectype), init_val);
if (! gimple_seq_empty_p (stmts))
gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
init_def = build_vector_from_val (vectype, init_val);
break;
default:
......
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