On 29/10/14 12:42, Teresa Johnson wrote:
Hi Renlin,
Are the incoming edge counts or probabilities insane in this case? I
guess the patch is ok if we need to do this to handle those incoming
insanitiles. But I can't approve patches myself.
Not really, it's just a little bigger than the limit.
For this particular test case, ABC is a threaded path.
B is the fallthrough basic block of A, D is a basic block split from B
(used to be a self loop). A, B and D have roughly the same frequency (
8281, 9100, 8281).
When calculating the path_in_freq, frequencies from AB and DB edges are
accumulated, and the final result is large than BB_FREQ_MAX.
A
100% |
| 9%
------>B---------->C
| |
|100%| 91%
| |
--------D
There are 2 suspicious points:
1, The BD edge is not correctly guessed at the profile stage. However,
anyway it's heuristic, so I don't think, it's here the problem starts.
2, The BD edge is not eliminated before jump threading. But the jump
threading pass will analysis the condition jump statement in B block (In
this particular case, the BD probability should be zero), and makes the
decision to thread it.
Later in the dom pass, the BD edge is indeed removed.