On Wed, May 11, 2011 at 11:00 AM, Kai Tietz <ktiet...@googlemail.com> wrote: > Hi, > > By investigating the conditional expression handling I found some > causes, why TRUTH operations AND, ANDIF, OR, XOR, and ORIF are > appearing withing conditional folding during gimplification. > The reason for this can be that the truth expression is simply used as > result of an assignment or return statement, which then leads to the > issue that expression has lhs type. By this reason it is still > necessary to have in TRUTH operations type-cast after boolifying it > for later operation, if type isn't of kind boolean. Therefore it is > necessary for conditional to check if their arms might be TRUTH > results and therefore doing boolification of the arms, too.
You are not making much sense - gimple_boolify already boolifies both arms. It assumes that if the expr is bool already the arms are as well - I'm not sure that always holds, so defering that check as your patch did probably makes sense. Richard. > 2011-05-11 Kai Tietz > > * gimplify.c (gimple_boolify): Handle COND_EXPR > and make sure that even if type is BOOLEAN for > TRUTH-opcodes the operands getting boolified. > (gimple_has_cond_boolean_arms): Helper function to > detect if condition is a TRUTH operation in arms. > (gimple_is_truth_op): Checks if operand is of BOOLEAN > kind. > (gimplify_expr): Boolify operand condition for > COND_EXPR and try to see if condition might be an TRUTH operation. > Boolify truth opcodes AND, ANDIF, OR, ORIF, and XOR. Additional > take care that we keep expression's type. > > Tested on x86_64-w64-mingw32 and x86_64-pc-linux-gnu. Ok for apply? > > Regards, > Kai >