re PR tree-optimization/58497 (SLP vectorizes identical operations)

2015-11-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/58497
	* tree-vect-generic.c: Include gimplify.h.
	(tree_vec_extract): Lookup constant/constructor DEFs.
	(do_cond): Unshare cond.

From-SVN: r230216
This commit is contained in:
Richard Biener 2015-11-12 09:00:37 +00:00 committed by Richard Biener
parent c471289ac8
commit 3826795b8c
2 changed files with 18 additions and 1 deletions

View file

@ -1,3 +1,10 @@
2015-11-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/58497
* tree-vect-generic.c: Include gimplify.h.
(tree_vec_extract): Lookup constant/constructor DEFs.
(do_cond): Unshare cond.
2015-11-12 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.c (ix86_legitimate_combined_insn): Reject

View file

@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-eh.h"
#include "gimple-iterator.h"
#include "gimplify-me.h"
#include "gimplify.h"
#include "tree-cfg.h"
@ -105,6 +106,15 @@ static inline tree
tree_vec_extract (gimple_stmt_iterator *gsi, tree type,
tree t, tree bitsize, tree bitpos)
{
if (TREE_CODE (t) == SSA_NAME)
{
gimple *def_stmt = SSA_NAME_DEF_STMT (t);
if (is_gimple_assign (def_stmt)
&& (gimple_assign_rhs_code (def_stmt) == VECTOR_CST
|| (bitpos
&& gimple_assign_rhs_code (def_stmt) == CONSTRUCTOR)))
t = gimple_assign_rhs1 (def_stmt);
}
if (bitpos)
{
if (TREE_CODE (type) == BOOLEAN_TYPE)
@ -1419,7 +1429,7 @@ do_cond (gimple_stmt_iterator *gsi, tree inner_type, tree a, tree b,
if (TREE_CODE (TREE_TYPE (b)) == VECTOR_TYPE)
b = tree_vec_extract (gsi, inner_type, b, bitsize, bitpos);
tree cond = gimple_assign_rhs1 (gsi_stmt (*gsi));
return gimplify_build3 (gsi, code, inner_type, cond, a, b);
return gimplify_build3 (gsi, code, inner_type, unshare_expr (cond), a, b);
}
/* Expand a vector COND_EXPR to scalars, piecewise. */