Commit b76f4e6c by Richard Biener Committed by Richard Biener

re PR bootstrap/92301 (Wrong vectorizer code since r277566)

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

	PR tree-optimization/92301
	* tree-vect-stmts.c (process_use): Force reduction PHI defs live
	as required by epilogue generation

	* gcc.dg/pr92301.c: New testcase.

From-SVN: r277771
parent 12fd2ec5
2019-11-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/92301
* tree-vect-stmts.c (process_use): Force reduction PHI defs live
as required by epilogue generation
2019-11-04 Martin Liska <mliska@suse.cz>
PR ipa/92304
2019-11-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/92301
* gcc.dg/pr92301.c: New testcase.
2019-11-03 Martin Sebor <msebor@redhat.com>
PR c++/88565
......
/* { dg-do run } */
/* { dg-options "-O3" } */
unsigned int m;
#define N 128
unsigned int a[N];
unsigned int
__attribute__((noipa))
df_count_refs (_Bool include_defs)
{
int size = 0;
for (unsigned int regno = 0; regno < m; regno++)
if (include_defs)
size += a[regno];
return size;
}
int main(int argc, char **argv)
{
for (unsigned i = 0; i < N; i++)
a[i] = i;
if (argc == 1)
m = 17;
unsigned int r = df_count_refs(1);
__builtin_printf ("r: %d\n", r);
if (r != 136)
__builtin_abort ();
return 0;
}
......@@ -475,6 +475,22 @@ process_use (stmt_vec_info stmt_vinfo, tree use, loop_vec_info loop_vinfo,
basic_block def_bb = gimple_bb (dstmt_vinfo->stmt);
basic_block bb = gimple_bb (stmt_vinfo->stmt);
/* case 2: A reduction phi (STMT) defined by a reduction stmt (DSTMT_VINFO).
We have to force the stmt live since the epilogue loop needs it to
continue computing the reduction. */
if (gimple_code (stmt_vinfo->stmt) == GIMPLE_PHI
&& STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_reduction_def
&& gimple_code (dstmt_vinfo->stmt) != GIMPLE_PHI
&& STMT_VINFO_DEF_TYPE (dstmt_vinfo) == vect_reduction_def
&& bb->loop_father == def_bb->loop_father)
{
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
"reduc-stmt defining reduc-phi in the same nest.\n");
vect_mark_relevant (worklist, dstmt_vinfo, relevant, true);
return opt_result::success ();
}
/* case 3a: outer-loop stmt defining an inner-loop stmt:
outer-loop-header-bb:
d = dstmt_vinfo
......
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