2011/10/11 Michael Matz <m...@suse.de>: > Hi, > > On Tue, 11 Oct 2011, Kai Tietz wrote: > >> So updated version for patch. It creates new simple_operand_p_2 >> function instead of modifying simple_operand_p function. > > FWIW: I also can't think of a nice short name for that predicate function > :) One thing: move the test for TREE_SIDE_EFFECTS to that new function, > then the if()s in fold_truth_andor become nicer. I think the code then is > okay, but I can't approve. Just one remark about the comment: > >> + /* We don't want to pack more then two leafs to an non-IF AND/OR > > s/then/than/ s/an/a/
Ok, thanks >> + expression. >> + If tree-code of left-hand operand isn't an AND/OR-IF code and not >> + equal to CODE, then we don't want to add right-hand operand. >> + If the inner right-hand side of left-hand operand has side-effects, >> + or isn't simple, then we can't add to it, as otherwise we might >> + destroy if-sequence. */ > > And I think it could use some overview of the transformation done like in > the initial patch, ala: > > "Transform ((A && B) && C) into (A && (B & C))." > > and > > "Or (A && B) into (A & B)." for this part: > > + /* Needed for sequence points to handle trappings, and side-effects. */ > + else if (simple_operand_p_2 (arg0)) > + return fold_build2_loc (loc, ncode, type, arg0, arg1); > > > Ciao, > Michael. Well to use here binary form of operation seems to me misleading. It is right that the non-IF AND/OR has finally the same behavior as the binary form in gimple. Nevertheless it isn't the same on AST level. But sure I can Add comments for operations like (A OR/AND-IF B) OR/AND-IF C -> (A OR/AND-IF (B OR/AND C and A OR/AND-IF C -> (A OR/AND C) Is the patch with those changes ok for apply? Regards, Kai