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

Reply via email to