On 01/19/2018 04:08 PM, Martin Liška wrote:
On 01/19/2018 02:21 PM, Tom de Vries wrote:
How about keeping profile_uninitialized at the zero value location and 
asserting m_quality != profile_uninitialized ?

Thanks,
- Tom

Yes, that would be possible.

Can you please test that the patch does not generate warnings?


Confirmed, the warnings are gone.

Thanks,
- Tom

I'm running regression tests.

Martin


0001-Fix-profile_quality-sanity-check.patch


 From e1159c2404947f675200efc4476e7e0994b81101 Mon Sep 17 00:00:00 2001
From: marxin <mli...@suse.cz>
Date: Fri, 19 Jan 2018 15:27:40 +0100
Subject: [PATCH] Fix profile_quality sanity check.

gcc/ChangeLog:

2018-01-18  Martin Liska  <mli...@suse.cz>

        * profile-count.h (enum profile_quality): Add
        profile_uninitialized as the first value. Do not number values
        as they are zero based.
        (profile_count::verify): Update sanity check.
        (profile_probability::verify): Likewise.
---
  gcc/profile-count.h | 22 +++++++++++-----------
  1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/gcc/profile-count.h b/gcc/profile-count.h
index 7a43917ebbc..828d6d0ee4b 100644
--- a/gcc/profile-count.h
+++ b/gcc/profile-count.h
@@ -26,34 +26,36 @@ struct function;
  /* Quality of the profile count.  Because gengtype does not support enums
     inside of classes, this is in global namespace.  */
  enum profile_quality {
+  /* Uninitialized value.  */
+  profile_uninitialized,
    /* Profile is based on static branch prediction heuristics and may
       or may not match reality.  It is local to function and can not be 
compared
       inter-procedurally.  Never used by probabilities (they are always local).
     */
-  profile_guessed_local = 1,
+  profile_guessed_local,
    /* Profile was read by feedback and was 0, we used local heuristics to guess
       better.  This is the case of functions not run in profile fedback.
       Never used by probabilities.  */
-  profile_guessed_global0 = 2,
+  profile_guessed_global0,
/* Same as profile_guessed_global0 but global count is adjusted 0. */
-  profile_guessed_global0adjusted = 3,
+  profile_guessed_global0adjusted,
/* Profile is based on static branch prediction heuristics. It may or may
       not reflect the reality but it can be compared interprocedurally
       (for example, we inlined function w/o profile feedback into function
        with feedback and propagated from that).
       Never used by probablities.  */
-  profile_guessed = 4,
+  profile_guessed,
    /* Profile was determined by autofdo.  */
-  profile_afdo = 5,
+  profile_afdo,
    /* Profile was originally based on feedback but it was adjusted
       by code duplicating optimization.  It may not precisely reflect the
       particular code path.  */
-  profile_adjusted = 6,
+  profile_adjusted,
    /* Profile was read from profile feedback or determined by accurate static
       method.  */
-  profile_precise = 7
+  profile_precise
  };
/* The base value for branch probability notes and edge probabilities. */
@@ -505,8 +507,7 @@ public:
    /* Return false if profile_probability is bogus.  */
    bool verify () const
      {
-      gcc_checking_assert (profile_guessed_local <= m_quality
-                          && m_quality <= profile_precise);
+      gcc_checking_assert (m_quality != profile_uninitialized);
        if (m_val == uninitialized_probability)
        return m_quality == profile_guessed;
        else if (m_quality < profile_guessed)
@@ -786,8 +787,7 @@ public:
    /* Return false if profile_count is bogus.  */
    bool verify () const
      {
-      gcc_checking_assert (profile_guessed_local <= m_quality
-                          && m_quality <= profile_precise);
+      gcc_checking_assert (m_quality != profile_uninitialized);
        return m_val != uninitialized_count || m_quality == 
profile_guessed_local;
      }

Reply via email to