Fix profile_quality sanity check.
authorMartin Liska <mliska@suse.cz>
Tue, 23 Jan 2018 12:24:55 +0000 (13:24 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Tue, 23 Jan 2018 12:24:55 +0000 (12:24 +0000)
2018-01-22  Martin Liska  <mliska@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.

From-SVN: r256982

gcc/ChangeLog
gcc/profile-count.h

index 9cda2944ff7e9d113b0941aadfb638b358fc405b..19b21375512870f72240d0b82e06540421e3e420 100644 (file)
@@ -1,3 +1,11 @@
+2018-01-23  Martin Liska  <mliska@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.
+
 2018-01-23  Nathan Sidwell  <nathan@acm.org>
 
        * doc/invoke.texi (ffor-scope): Deprecate.
index 69919eeeb6dacf0ce8f94a93c1e1787913ead1b1..234e3886cb2bd32854a6736efc79ebdf1873b24e 100644 (file)
@@ -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.  */
@@ -529,8 +531,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)
@@ -815,8 +816,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;
     }