[patch] Couple of tweaks to the gimplifier

Richard Guenther richard.guenther@gmail.com
Tue Mar 22 09:23:00 GMT 2011


On Mon, Mar 21, 2011 at 6:48 PM, Eric Botcazou <ebotcazou@adacore.com> wrote:
>> >  1) Set TREE_THIS_NOTRAP on the INDIRECT_REF built for VLA decls.  This
>> > is correct since stack memory isn't considered as trapping in the IL.
>>
>> This is ok.
>
> Thanks.
>
>> >  2) Improve gimplification of complex conditions in COND_EXPR.  They are
>> >     naturally generated by the Ada compiler and the patch avoids emitting
>> >     redundant branches in GIMPLE, visible at -O0 for the testcase:
>>
>> Shouldn't
>>
>> +  /* Remove any COMPOUND_EXPR so the following cases will be caught.  */
>> +  STRIP_TYPE_NOPS (TREE_OPERAND (expr, 0));
>> +  if (TREE_CODE (TREE_OPERAND (expr, 0)) == COMPOUND_EXPR)
>> +    gimplify_compound_expr (&TREE_OPERAND (expr, 0), pre_p, true);
>>
>> happen in gimple_boolify instead so that other callers also benefit?
>> That is, add a COMPOUND_EXPR case there?
>
> Not clear to me.  gimple_boolify doesn't gimplify, it boolifies, i.e. only does
> type conversions to boolean.  This looks orthogonal.
>
>> So, what does the GENERIC look like here?
>
> Attached.  Barely readable, like pretty much all GENERIC for Ada, but you can
> see the big IF statement with the COMPOUND_EXPR on the RHS of the &&.

So looking at the GENERIC I fail to see how the patch would handle
the COMPOUND_EXPR which is in operand 1 of the &&.  That's also
one reason I suggested gimple_boolify instead, as that works recursively
on the predicate.  Of course you are right, gimple_boolify doesn't seem to
be prepared to do gimplification.

Ok, debugging.

Ah, I see - we recursively gimplify the pieces of the predicate.  So yes,
I think your patch makes sense.

Thus, ok.

Thanks,
Richard.

> --
> Eric Botcazou
>



More information about the Gcc-patches mailing list