+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
#include "tree-eh.h"
#include "gimple-iterator.h"
#include "gimplify-me.h"
+#include "gimplify.h"
#include "tree-cfg.h"
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)
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. */