On 01/19/2018 01:11 PM, Martin Liška wrote:
On 01/18/2018 04:57 PM, Tom de Vries wrote:
On 01/18/2018 03:59 PM, Martin Liška wrote:
Hi.

Following patch adds a new enum value so that we don't see following warning:
https://gcc.gnu.org/ml/gcc-patches/2018-01/msg01211.html


Hi,

with the patch, I still see the same warning.

And not surprisingly, given that profile_precise is still 7 and m_quality is 
still a 3 bits wide bitfield.

Hi.

Sorry I was too eager and I haven't realized that 2^4 - 1 can't fit 8 values ;)
Thus I'm suggesting to simply removal of the sanity checking as it does not make
sense to enlarge the bit enum. And I'm also suggesting to not to number values 
of the
enum.


How about keeping profile_uninitialized at the zero value location and asserting m_quality != profile_uninitialized ?

Thanks,
- Tom


0001-Remove-profile_quality-sanity-check.patch


 From 0656d0dce5c26cf206ad4fcb21809a4aeb02ec42 Mon Sep 17 00:00:00 2001
From: marxin <mli...@suse.cz>
Date: Thu, 18 Jan 2018 13:26:27 +0100
Subject: [PATCH] Remove profile_quality sanity check.

gcc/ChangeLog:

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

        * profile-count.h (enum profile_quality): Do not number values
        as they are zero based.
        (profile_count::verify): Remove sanity check.
        (profile_probability::verify): Remove sanity check.
---
  gcc/profile-count.h | 18 +++++++-----------
  1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/gcc/profile-count.h b/gcc/profile-count.h
index 7a43917ebbc..74ec9b465d3 100644
--- a/gcc/profile-count.h
+++ b/gcc/profile-count.h
@@ -30,30 +30,30 @@ enum profile_quality {
       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 +505,6 @@ public:
    /* Return false if profile_probability is bogus.  */
    bool verify () const
      {
-      gcc_checking_assert (profile_guessed_local <= m_quality
-                          && m_quality <= profile_precise);
        if (m_val == uninitialized_probability)
        return m_quality == profile_guessed;
        else if (m_quality < profile_guessed)
@@ -786,8 +784,6 @@ public:
    /* Return false if profile_count is bogus.  */
    bool verify () const
      {
-      gcc_checking_assert (profile_guessed_local <= m_quality
-                          && m_quality <= profile_precise);
        return m_val != uninitialized_count || m_quality == 
profile_guessed_local;
      }

Reply via email to