------- 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