On 12/01/2016 09:49 AM, Martin Sebor wrote:

Okay, thanks for the clarification. One other question though. Why would the probability be near zero? In the absence of any hints the expression 2 != sprintf(d, "%i", 12) should have a very high probability of being true, near 100% in fact.## Advertising

I ask because the test I referenced tries to verify the absence of the sprintf return value optimization. Without it the likelihood of each of the calls to abort should in the EQL kind of test cases like the one above should be nearly 100% (but not quite). When it's the opposite it suggests that the sprintf optimization is providing some hint (in the form of a range of return values) that changes the odds. I have verified that the optimization is not performed so something else must be setting the probability or the value isn't correct.I think I see what's going on. It's the call to abort that GCC uses for the probability (more precisely its attribute noreturn).

`Right. An edge which leads to a noreturn call is predicated as`

`esentially "never taken". It's a good strong predictor.`

When I replace the abort with a function of my own that GCC knows nothing about the probability goes up to just over 52%. Still it seems very low given that 2 is just one of UINT_MAX values the function can possibly return.

`Jan would be the one to know the predictors work. It's reasonably`

`complex stuff.`

Jeff