------- Comment #1 from rguenth at gcc dot gnu dot org 2008-12-04 15:14 -------
It works with -O3 (with partial-partial PRE enabled). At least phi-translation
figures out that *res is zero on the incoming edge.
Un-leashing partial-PRE like with
Index: tree-ssa-pre.c
===================================================================
--- tree-ssa-pre.c (revision 142431)
+++ tree-ssa-pre.c (working copy)
@@ -3356,7 +3358,7 @@ do_partial_partial_insertion (basic_bloc
{
pre_expr *avail;
unsigned int val;
- bool by_all = true;
+ bool by_some = false;
bool cant_insert = false;
edge pred;
basic_block bprime;
@@ -3404,11 +3406,13 @@ do_partial_partial_insertion (basic_bloc
vprime, NULL);
if (edoubleprime == NULL)
{
- by_all = false;
- break;
+ avail[bprime->index] = eprime;
}
else
- avail[bprime->index] = edoubleprime;
+ {
+ avail[bprime->index] = edoubleprime;
+ by_some = true;
+ }
}
@@ -3416,7 +3420,7 @@ do_partial_partial_insertion (basic_bloc
already existing along every predecessor, and
it's defined by some predecessor, it is
partially redundant. */
- if (!cant_insert && by_all && dbg_cnt (treepre_insert))
+ if (!cant_insert && by_some && dbg_cnt (treepre_insert))
{
pre_stats.pa_insert++;
if (insert_into_preds_of_block (block, get_expression_id (expr),
fixes this. But this may cause a lot of partial-PRE to happen.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dberlin at gcc dot gnu dot
| |org, rguenth at gcc dot gnu
| |dot org
Severity|minor |enhancement
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Keywords| |missed-optimization, TREE
Last reconfirmed|0000-00-00 00:00:00 |2008-12-04 15:14:42
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38401