[Bug middle-end/47033] New: loop distribution has problems on sane testcases

hubicka at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Dec 21 19:19:00 GMT 2010


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47033

           Summary: loop distribution has problems on sane testcases
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: hubicka@gcc.gnu.org


The following patch:
Index: predict.c
===================================================================
--- predict.c   (revision 168047)
+++ predict.c   (working copy)
@@ -126,7 +126,7 @@ maybe_hot_frequency_p (int freq)
   if (node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
       && freq <= (ENTRY_BLOCK_PTR->frequency * 2 / 3))
     return false;
-  if (freq < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
+  if (freq < ENTRY_BLOCK_PTR->frequency / PARAM_VALUE
(HOT_BB_FREQUENCY_FRACTION))
     return false;
   return true;
 }
makes the testcase gcc.dg/tree-ssa/ldist-pr45948.c  to fail.

The testcase seems to test if the loop is converted to memsets. The problem is
that with the patch above the code is considered hot and loop gets header
copied as a result the code in loop distribution seems confused.
Profile info is wrong and one copy of loop stays in the code.



More information about the Gcc-bugs mailing list