This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH]Partially fix PR61529, bound basic block frequency


On 11/03/14 08:29, Renlin Li wrote:
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.
Can you add a testcase please? With a testcase, this patch is OK for the trunk.

jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]