Commit 17594687 by Martin Liska Committed by Martin Liska

Fix profile_quality sanity check.

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
parent d55d1e4f
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> 2018-01-23 Nathan Sidwell <nathan@acm.org>
* doc/invoke.texi (ffor-scope): Deprecate. * doc/invoke.texi (ffor-scope): Deprecate.
......
...@@ -26,34 +26,36 @@ struct function; ...@@ -26,34 +26,36 @@ struct function;
/* Quality of the profile count. Because gengtype does not support enums /* Quality of the profile count. Because gengtype does not support enums
inside of classes, this is in global namespace. */ inside of classes, this is in global namespace. */
enum profile_quality { enum profile_quality {
/* Uninitialized value. */
profile_uninitialized,
/* Profile is based on static branch prediction heuristics and may /* 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 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). 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 /* 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. better. This is the case of functions not run in profile fedback.
Never used by probabilities. */ Never used by probabilities. */
profile_guessed_global0 = 2, profile_guessed_global0,
/* Same as profile_guessed_global0 but global count is adjusted 0. */ /* 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 /* Profile is based on static branch prediction heuristics. It may or may
not reflect the reality but it can be compared interprocedurally not reflect the reality but it can be compared interprocedurally
(for example, we inlined function w/o profile feedback into function (for example, we inlined function w/o profile feedback into function
with feedback and propagated from that). with feedback and propagated from that).
Never used by probablities. */ Never used by probablities. */
profile_guessed = 4, profile_guessed,
/* Profile was determined by autofdo. */ /* Profile was determined by autofdo. */
profile_afdo = 5, profile_afdo,
/* Profile was originally based on feedback but it was adjusted /* Profile was originally based on feedback but it was adjusted
by code duplicating optimization. It may not precisely reflect the by code duplicating optimization. It may not precisely reflect the
particular code path. */ particular code path. */
profile_adjusted = 6, profile_adjusted,
/* Profile was read from profile feedback or determined by accurate static /* Profile was read from profile feedback or determined by accurate static
method. */ method. */
profile_precise = 7 profile_precise
}; };
/* The base value for branch probability notes and edge probabilities. */ /* The base value for branch probability notes and edge probabilities. */
...@@ -529,8 +531,7 @@ public: ...@@ -529,8 +531,7 @@ public:
/* Return false if profile_probability is bogus. */ /* Return false if profile_probability is bogus. */
bool verify () const bool verify () const
{ {
gcc_checking_assert (profile_guessed_local <= m_quality gcc_checking_assert (m_quality != profile_uninitialized);
&& m_quality <= profile_precise);
if (m_val == uninitialized_probability) if (m_val == uninitialized_probability)
return m_quality == profile_guessed; return m_quality == profile_guessed;
else if (m_quality < profile_guessed) else if (m_quality < profile_guessed)
...@@ -815,8 +816,7 @@ public: ...@@ -815,8 +816,7 @@ public:
/* Return false if profile_count is bogus. */ /* Return false if profile_count is bogus. */
bool verify () const bool verify () const
{ {
gcc_checking_assert (profile_guessed_local <= m_quality gcc_checking_assert (m_quality != profile_uninitialized);
&& m_quality <= profile_precise);
return m_val != uninitialized_count || m_quality == profile_guessed_local; return m_val != uninitialized_count || m_quality == profile_guessed_local;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment