profile_count::apply_probability misses check for uninitialized probability which leads
to completely random results on applying uninitialized probability to initialized scale.
This can make difference when i.e. inlining -fno-guess-branch-probability function
to -fguess-branch-probability one.
gcc/ChangeLog:
* profile-count.h (profile_count::apply_probability): Fix
handling of uninitialized probabilities, optimize scaling
by probability 1.
/* Scale counter according to PROB. */
profile_count apply_probability (profile_probability prob) const
{
- if (*this == zero ())
+ if (*this == zero () || prob == profile_probability::always ())
return *this;
if (prob == profile_probability::never ())
return zero ();
- if (!initialized_p ())
+ if (!initialized_p () || !prob.initialized_p ())
return uninitialized ();
profile_count ret;
uint64_t tmp;