Commit a6ba6237 by Richard Biener Committed by Richard Biener

re PR tree-optimization/92345 (ICE in vec<_stmt_vec_info*, va_heap,…

re PR tree-optimization/92345 (ICE in vec<_stmt_vec_info*, va_heap, vl_embed>::space (vect_get_and_check_slp_defs))

2019-11-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/92345
	* tree-vect-loop.c (vect_is_simple_reduction): Return whether
	we produced a reduction chain.
	(vect_analyze_scalar_cycles_1): Do not add reduction chains to
	LOOP_VINFO_REDUCTIONS.

	* gcc.dg/torture/pr92345.c: New testcase.

From-SVN: r277782
parent 7237f93e
2019-11-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/92345
* tree-vect-loop.c (vect_is_simple_reduction): Return whether
we produced a reduction chain.
(vect_analyze_scalar_cycles_1): Do not add reduction chains to
LOOP_VINFO_REDUCTIONS.
2019-11-04 Jan Hubicka <jh@suse.cz> 2019-11-04 Jan Hubicka <jh@suse.cz>
* cgraphclones.c (cgraph_node::create_version_clone): Do not * cgraphclones.c (cgraph_node::create_version_clone): Do not
2019-11-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/92345
* gcc.dg/torture/pr92345.c: New testcase.
2019-11-04 Jozef Lawrynowicz <jozef.l@mittosystems.com> 2019-11-04 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* gcc.target/msp430/tiny-printf.c: New test. * gcc.target/msp430/tiny-printf.c: New test.
......
/* { dg-do compile } */
/* { dg-additional-options "-ftree-vectorize" } */
long int x1;
int fr;
int
us (int sk, int jx)
{
while (sk < 1)
{
jx *= 2;
fr += x1 + 1;
++sk;
}
return jx;
}
...@@ -155,7 +155,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -155,7 +155,7 @@ along with GCC; see the file COPYING3. If not see
static void vect_estimate_min_profitable_iters (loop_vec_info, int *, int *); static void vect_estimate_min_profitable_iters (loop_vec_info, int *, int *);
static stmt_vec_info vect_is_simple_reduction (loop_vec_info, stmt_vec_info, static stmt_vec_info vect_is_simple_reduction (loop_vec_info, stmt_vec_info,
bool *); bool *, bool *);
/* Subroutine of vect_determine_vf_for_stmt that handles only one /* Subroutine of vect_determine_vf_for_stmt that handles only one
statement. VECTYPE_MAYBE_SET_P is true if STMT_VINFO_VECTYPE statement. VECTYPE_MAYBE_SET_P is true if STMT_VINFO_VECTYPE
...@@ -489,7 +489,7 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop) ...@@ -489,7 +489,7 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop)
tree init, step; tree init, step;
auto_vec<stmt_vec_info, 64> worklist; auto_vec<stmt_vec_info, 64> worklist;
gphi_iterator gsi; gphi_iterator gsi;
bool double_reduc; bool double_reduc, reduc_chain;
DUMP_VECT_SCOPE ("vect_analyze_scalar_cycles"); DUMP_VECT_SCOPE ("vect_analyze_scalar_cycles");
...@@ -561,7 +561,8 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop) ...@@ -561,7 +561,8 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop)
&& STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_unknown_def_type); && STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_unknown_def_type);
stmt_vec_info reduc_stmt_info stmt_vec_info reduc_stmt_info
= vect_is_simple_reduction (loop_vinfo, stmt_vinfo, &double_reduc); = vect_is_simple_reduction (loop_vinfo, stmt_vinfo, &double_reduc,
&reduc_chain);
if (reduc_stmt_info) if (reduc_stmt_info)
{ {
STMT_VINFO_REDUC_DEF (stmt_vinfo) = reduc_stmt_info; STMT_VINFO_REDUC_DEF (stmt_vinfo) = reduc_stmt_info;
...@@ -596,7 +597,7 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop) ...@@ -596,7 +597,7 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop)
/* Store the reduction cycles for possible vectorization in /* Store the reduction cycles for possible vectorization in
loop-aware SLP if it was not detected as reduction loop-aware SLP if it was not detected as reduction
chain. */ chain. */
if (! REDUC_GROUP_FIRST_ELEMENT (reduc_stmt_info)) if (! reduc_chain)
LOOP_VINFO_REDUCTIONS (loop_vinfo).safe_push LOOP_VINFO_REDUCTIONS (loop_vinfo).safe_push
(reduc_stmt_info); (reduc_stmt_info);
} }
...@@ -2854,7 +2855,7 @@ check_reduction_path (dump_user_location_t loc, loop_p loop, gphi *phi, ...@@ -2854,7 +2855,7 @@ check_reduction_path (dump_user_location_t loc, loop_p loop, gphi *phi,
static stmt_vec_info static stmt_vec_info
vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info, vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
bool *double_reduc) bool *double_reduc, bool *reduc_chain_p)
{ {
gphi *phi = as_a <gphi *> (phi_info->stmt); gphi *phi = as_a <gphi *> (phi_info->stmt);
gimple *phi_use_stmt = NULL; gimple *phi_use_stmt = NULL;
...@@ -2862,6 +2863,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info, ...@@ -2862,6 +2863,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
use_operand_p use_p; use_operand_p use_p;
*double_reduc = false; *double_reduc = false;
*reduc_chain_p = false;
STMT_VINFO_REDUC_TYPE (phi_info) = TREE_CODE_REDUCTION; STMT_VINFO_REDUC_TYPE (phi_info) = TREE_CODE_REDUCTION;
tree phi_name = PHI_RESULT (phi); tree phi_name = PHI_RESULT (phi);
...@@ -3036,6 +3038,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info, ...@@ -3036,6 +3038,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
LOOP_VINFO_REDUCTION_CHAINS (loop_info).safe_push (reduc_chain[0]); LOOP_VINFO_REDUCTION_CHAINS (loop_info).safe_push (reduc_chain[0]);
REDUC_GROUP_SIZE (reduc_chain[0]) = reduc_chain.length (); REDUC_GROUP_SIZE (reduc_chain[0]) = reduc_chain.length ();
*reduc_chain_p = true;
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location, dump_printf_loc (MSG_NOTE, vect_location,
"reduction: detected reduction chain\n"); "reduction: detected reduction chain\n");
......
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