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;
}