mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-24 11:24:05 +08:00
re PR tree-optimization/47139 (ice in process_use, at tree-vect-stmts.c:290)
PR tree-optimization/47139 * tree-vect-loop.c (vect_is_simple_reduction_1): Check that only the last reduction value is used outside the loop. Update documentation. From-SVN: r168535
This commit is contained in:
parent
2e4bc20e51
commit
210dedfec3
@ -1,3 +1,10 @@
|
|||||||
|
2011-01-06 Ira Rosen <irar@il.ibm.com>
|
||||||
|
|
||||||
|
PR tree-optimization/47139
|
||||||
|
* tree-vect-loop.c (vect_is_simple_reduction_1): Check that
|
||||||
|
only the last reduction value is used outside the loop. Update
|
||||||
|
documentation.
|
||||||
|
|
||||||
2011-01-05 Joseph Myers <joseph@codesourcery.com>
|
2011-01-05 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* config/rtems.opt: New.
|
* config/rtems.opt: New.
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2011-01-06 Ira Rosen <irar@il.ibm.com>
|
||||||
|
|
||||||
|
PR tree-optimization/47139
|
||||||
|
* gcc.dg/vect/pr47139.c: New test.
|
||||||
|
|
||||||
2011-01-05 Janus Weil <janus@gcc.gnu.org>
|
2011-01-05 Janus Weil <janus@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/47180
|
PR fortran/47180
|
||||||
|
18
gcc/testsuite/gcc.dg/vect/pr47139.c
Normal file
18
gcc/testsuite/gcc.dg/vect/pr47139.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/* { dg-do compile } */
|
||||||
|
|
||||||
|
int d;
|
||||||
|
|
||||||
|
void
|
||||||
|
foo ()
|
||||||
|
{
|
||||||
|
int a = 0;
|
||||||
|
unsigned char b;
|
||||||
|
for (b = 1; b; b++)
|
||||||
|
{
|
||||||
|
d = a;
|
||||||
|
a |= b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||||
|
|
@ -1649,9 +1649,10 @@ report_vect_op (gimple stmt, const char *msg)
|
|||||||
1. operation is commutative and associative and it is safe to
|
1. operation is commutative and associative and it is safe to
|
||||||
change the order of the computation (if CHECK_REDUCTION is true)
|
change the order of the computation (if CHECK_REDUCTION is true)
|
||||||
2. no uses for a2 in the loop (a2 is used out of the loop)
|
2. no uses for a2 in the loop (a2 is used out of the loop)
|
||||||
3. no uses of a1 in the loop besides the reduction operation.
|
3. no uses of a1 in the loop besides the reduction operation
|
||||||
|
4. no uses of a1 outside the loop.
|
||||||
|
|
||||||
Condition 1 is tested here.
|
Conditions 1,4 are tested here.
|
||||||
Conditions 2,3 are tested in vect_mark_stmts_to_be_vectorized.
|
Conditions 2,3 are tested in vect_mark_stmts_to_be_vectorized.
|
||||||
|
|
||||||
(2) Detect a cross-iteration def-use cycle in nested loops, i.e.,
|
(2) Detect a cross-iteration def-use cycle in nested loops, i.e.,
|
||||||
@ -1702,8 +1703,16 @@ vect_is_simple_reduction_1 (loop_vec_info loop_info, gimple phi,
|
|||||||
gimple use_stmt = USE_STMT (use_p);
|
gimple use_stmt = USE_STMT (use_p);
|
||||||
if (is_gimple_debug (use_stmt))
|
if (is_gimple_debug (use_stmt))
|
||||||
continue;
|
continue;
|
||||||
if (flow_bb_inside_loop_p (loop, gimple_bb (use_stmt))
|
|
||||||
&& vinfo_for_stmt (use_stmt)
|
if (!flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
|
||||||
|
{
|
||||||
|
if (vect_print_dump_info (REPORT_DETAILS))
|
||||||
|
fprintf (vect_dump, "intermediate value used outside loop.");
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vinfo_for_stmt (use_stmt)
|
||||||
&& !is_pattern_stmt_p (vinfo_for_stmt (use_stmt)))
|
&& !is_pattern_stmt_p (vinfo_for_stmt (use_stmt)))
|
||||||
nloop_uses++;
|
nloop_uses++;
|
||||||
if (nloop_uses > 1)
|
if (nloop_uses > 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user