[GOOGLE] tune loop scale factor for AutoFDO

Dehao Chen dehao@google.com
Fri Nov 8 14:33:00 GMT 2013


AutoFDO sometimes has 0 profile in the loop's entry block because the
debug info are lost and unrecoverable.

E.g.

if (a)
  if (b)
    for () {}

This patch checks if the scale factor is 0, then use the normal scale.

Bootstrapped and passed regression test and performance test.

OK for google-4_8?

Thanks,
Dehao

Index: gcc/cfgloopmanip.c
===================================================================
--- gcc/cfgloopmanip.c (revision 204568)
+++ gcc/cfgloopmanip.c (working copy)
@@ -1262,6 +1262,8 @@ duplicate_loop_to_header_edge (struct loop *loop,
  }
       for (i = 0; i < ndupl; i++)
  gcc_assert (scale_step[i] >= 0 && scale_step[i] <= REG_BR_PROB_BASE);
+      if (flag_auto_profile && scale_main == 0)
+ scale_main = REG_BR_PROB_BASE;
       gcc_assert (scale_main >= 0 && scale_main <= REG_BR_PROB_BASE
    && scale_act >= 0  && scale_act <= REG_BR_PROB_BASE);
     }



More information about the Gcc-patches mailing list