ipa-profile.c (ipa_propagate_frequency_1): Fix logic skipping calls with zero counts.
authorJan Hubicka <hubicka@ucw.cz>
Wed, 24 Jan 2018 16:18:18 +0000 (17:18 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 24 Jan 2018 16:18:18 +0000 (16:18 +0000)
* ipa-profile.c (ipa_propagate_frequency_1): Fix logic skipping calls
with zero counts.

From-SVN: r257020

gcc/ChangeLog
gcc/ipa-profile.c

index 5920d361f9253e0bc528962179989ecf0c9fd898..1b64db3eb371b06eabdf8f778215ba07863a12f1 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-24  Jan Hubicka  <hubicka@ucw.cz>
+
+       * ipa-profile.c (ipa_propagate_frequency_1): Fix logic skipping calls
+       with zero counts.
+
 2018-01-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * config/rs6000/rs6000.md (*call_indirect_nonlocal_sysv<mode>):
index 0c972ddb80c884fa1e2b70569445882b8fa2782a..1ab838aca2ae9677cec2037c4875c2335bba1e7c 100644 (file)
@@ -331,16 +331,14 @@ ipa_propagate_frequency_1 (struct cgraph_node *node, void *data)
         it is executed by the train run.  Transfer the function only if all
         callers are unlikely executed.  */
       if (profile_info
-         && edge->callee->count.initialized_p ()
-         /* Thunks are not profiled.  This is more or less implementation
-            bug.  */
-         && !d->function_symbol->thunk.thunk_p
+         && !(edge->callee->count.ipa () == profile_count::zero ())
          && (edge->caller->frequency != NODE_FREQUENCY_UNLIKELY_EXECUTED
              || (edge->caller->global.inlined_to
                  && edge->caller->global.inlined_to->frequency
                     != NODE_FREQUENCY_UNLIKELY_EXECUTED)))
          d->maybe_unlikely_executed = false;
-      if (edge->count.initialized_p () && !edge->count.nonzero_p ())
+      if (edge->count.ipa ().initialized_p ()
+         && !edge->count.ipa ().nonzero_p ())
        continue;
       switch (edge->caller->frequency)
         {