PATCH: Improve debuggability at -O0 and fix PR 29609

Tristan Gingold gingold@adacore.com
Tue Sep 4 09:48:00 GMT 2007


On Sep 4, 2007, at 11:35 AM, Richard Guenther wrote:

> On 9/4/07, Tristan Gingold <gingold@adacore.com> wrote:
>>
>> On Sep 3, 2007, at 11:39 AM, Richard Guenther wrote:
>>
>>> I don't like this approach.  From a quick check I see that gimple
>>> lowering retains
>>> location information for both the if and the then branch  
>>> correctly in
>>> lower_cond_expr
>>> and the CFG created has the correct locus set on the edge already.
>> Right.
>>
>>>   So where
>>> is this information lost?
>> Even if this location information were not lost, it couldn't be
>> inserted without splitting the
>> conditional jump (ie inverting the condition and add an unconditional
>> jump for the other branch).
>
> Well, your example just had one goto - in this case we can improve the
> situation without pessimizing the general case by setting the proper
> line on the jump.  That is, the case where we have a single  
> conditional
> jump with one fallthrough edge.
>
> So I ask you to improve this case first, set the correct location  
> separately
> on the condition and the jump.  Like you did for  
> expand_gimple_basic_block
Ok, will do.

> (do you have a testcase for this fix?  that looks like an issue  
> that can be
> fixed separately from the others).
Yes, my original patch contains two testcases.  The second one should  
cover this case.

>>>   I suppose it may be during expand where we call
>>> do_jump via jumpif but the complete jump sequence has one
>>> location.  So the
>>> proper fix would probably to teach do_jump to take an alternate
>>> location for the
>>> jump.
>> I can try to modify expand_gimple_cond_expr so that it splits the
>> jump.  Note that every conditional jumps
>> will be split (bad IMHO).
>
> I don't think so.  You only need to split jumps if none of the edges
> is fallthrough
> and both edges have a goto_locus set.  For example for
>
> void foobar(int p)
> {
>   if (p)
>         foo();
> }
>
> none of the edges have.
Right.

Tristan.



More information about the Gcc-patches mailing list