Commit 29764870 by Richard Biener Committed by Richard Biener

re PR tree-optimization/66280 (ICE: in vect_get_vec_def_for_operand, at tree-vect-stmts.c:1472)

2015-06-01  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/66280
	* tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Fix pattern
	def-use walking.

	* g++.dg/torture/pr66280.C: New testcase.
	* g++.dg/torture/pr66280-2.C: Likewise.

From-SVN: r223927
parent b4900b37
2015-06-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/66280
* tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Fix pattern
def-use walking.
2015-06-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/aarch64/aarch64.md
......
2015-06-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/66280
* g++.dg/torture/pr66280.C: New testcase.
* g++.dg/torture/pr66280-2.C: Likewise.
2015-06-01 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/addr9_1.adb: New test.
......
// { dg-do compile }
typedef struct
{
short re;
short im;
} cint16_T;
typedef struct
{
int re;
int im;
} cint32_T;
int a;
short b;
cint16_T *c;
cint32_T *d, *e;
void
fn1 ()
{
for (; a; a++)
{
d[a].re = d[a].im = e[a].im = c[a].im * b;
e[a].re = c[a].re * b;
}
}
// { dg-do compile }
typedef struct
{
short re;
short im;
} cint16_T;
typedef struct
{
int re;
int im;
} cint32_T;
int a;
short b;
cint16_T *c;
cint32_T *d, *e;
void
fn1 ()
{
for (; a; a++)
{
d[a].re = d[a].im = e[a].re = c[a].re * b;
e[a].im = c[a].im * b;
}
}
......@@ -2031,21 +2031,27 @@ vect_detect_hybrid_slp_stmts (slp_tree node, unsigned i, slp_vect_type stype)
{
/* Check if a pure SLP stmt has uses in non-SLP stmts. */
gcc_checking_assert (PURE_SLP_STMT (stmt_vinfo));
/* We always get the pattern stmt here, but for immediate
uses we have to use the LHS of the original stmt. */
gcc_checking_assert (!STMT_VINFO_IN_PATTERN_P (stmt_vinfo));
if (STMT_VINFO_RELATED_STMT (stmt_vinfo))
stmt = STMT_VINFO_RELATED_STMT (stmt_vinfo);
if (TREE_CODE (gimple_op (stmt, 0)) == SSA_NAME)
FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, gimple_op (stmt, 0))
if (gimple_bb (use_stmt)
&& flow_bb_inside_loop_p (loop, gimple_bb (use_stmt))
&& (use_vinfo = vinfo_for_stmt (use_stmt))
&& !STMT_SLP_TYPE (use_vinfo)
&& (STMT_VINFO_RELEVANT (use_vinfo)
|| VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (use_vinfo))
|| (STMT_VINFO_IN_PATTERN_P (use_vinfo)
&& STMT_VINFO_RELATED_STMT (use_vinfo)
&& !STMT_SLP_TYPE (vinfo_for_stmt
(STMT_VINFO_RELATED_STMT (use_vinfo)))))
&& !(gimple_code (use_stmt) == GIMPLE_PHI
&& STMT_VINFO_DEF_TYPE (use_vinfo) == vect_reduction_def))
stype = hybrid;
{
if (!flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
continue;
use_vinfo = vinfo_for_stmt (use_stmt);
if (STMT_VINFO_IN_PATTERN_P (use_vinfo)
&& STMT_VINFO_RELATED_STMT (use_vinfo))
use_vinfo = vinfo_for_stmt (STMT_VINFO_RELATED_STMT (use_vinfo));
if (!STMT_SLP_TYPE (use_vinfo)
&& (STMT_VINFO_RELEVANT (use_vinfo)
|| VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (use_vinfo)))
&& !(gimple_code (use_stmt) == GIMPLE_PHI
&& STMT_VINFO_DEF_TYPE (use_vinfo) == vect_reduction_def))
stype = hybrid;
}
}
if (stype == hybrid)
......
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