2011/10/11 Michael Matz <m...@suse.de>: > Hi, > > On Tue, 11 Oct 2011, Kai Tietz wrote: > >> > Better make it a separate function the first tests your new >> > conditions, and then calls simple_operand_p. >> >> Well, either I make it a new function and call it instead of >> simple_operand_p, > > That's what I meant, yes. > >> >> @@ -5149,13 +5176,6 @@ fold_truthop (location_t loc, enum tree_ >> >> build2 (BIT_IOR_EXPR, TREE_TYPE (ll_arg), >> >> ll_arg, rl_arg), >> >> build_int_cst (TREE_TYPE (ll_arg), 0)); >> >> - >> >> - if (LOGICAL_OP_NON_SHORT_CIRCUIT) >> >> - { >> >> - if (code != orig_code || lhs != orig_lhs || rhs != orig_rhs) >> >> - return build2_loc (loc, code, truth_type, lhs, rhs); >> >> - return NULL_TREE; >> >> - } >> > >> > Why do you remove this hunk? Shouldn't you instead move the hunk you >> > added to fold_truth_andor() here. I realize this needs some TLC to >> > fold_truth_andor_1, because right now it early-outs for non-comparisons, >> > but it seems the better place. I.e. somehow move the below code into the >> > above branch, with the associated diddling on fold_truth_andor_1 that it >> > gets called. >> >> This hunk is removed, as it is vain to do here. > > There is a fallthrough now, that wasn't there before. I don't know if > it's harmless, I just wanted to mention it.
It is. Before we changed expression here and recurse here with the non-IF AND/OR expression later. So there is no need to do this recursion. >> Btw richi asked for it, and I agree that new TRUTH-AND/OR packing is >> better done at a single place in fold_truth_andor only. > > As fold_truthop is called twice by fold_truth_andor, the latter might > indeed be the better place. > > > Ciao, > Michael. Kai