On 20 May 2015 at 17:39, Prathamesh Kulkarni <prathamesh.kulka...@linaro.org> wrote: > On 20 May 2015 at 17:01, Richard Biener <rguent...@suse.de> wrote: >> On Wed, 20 May 2015, Prathamesh Kulkarni wrote: >> >>> On 20 May 2015 at 16:17, Prathamesh Kulkarni >>> <prathamesh.kulka...@linaro.org> wrote: >>> > Hi, >>> > This patch rejects expanding operator-list to implicit 'for'. >>> On second thoughts, should we reject expansion of operator-list _only_ >>> if it's mixed with 'for' ? >> >> At least that, yes. >> >>> We could define multiple operator-lists in simplify to be the same as >>> enclosing the simplify in 'for' with number of iterators >>> equal to number of operator-lists. >>> So we could allow >>> (define_operator_list op1 ...) >>> (define_operator_list op2 ...) >>> >>> (simplify >>> (op1 (op2 ... ))) >>> >>> is equivalent to: >>> (for temp1 (op1) >>> temp2 (op2) >>> (simplify >>> (temp1 (temp2 ...)))) >>> >>> I think we have patterns like these in match-builtin.pd in the >>> match-and-simplify branch >>> And reject mixing of 'for' and operator-lists. >>> Admittedly the implicit 'for' behavior is not obvious from the syntax -;( >> >> Hmm, indeed we have for example >> >> /* Optimize pow(1.0,y) = 1.0. */ >> (simplify >> (POW real_onep@0 @1) >> @0) >> >> and I remember wanting that implicit for to make those less ugly. >> >> So can you rework only rejecting it within for? > This patch rejects expanding operator-list inside 'for'. > OK for trunk after bootstrap+testing ? Bootstrap failed with -Werror=parantheses . Applied the attached patch (which just adds { } on if (p && p->is_oper_list))
Thanks, Prathamesh > > Thanks, > Prathamesh >> >> Thanks, >> Richard. >> >> >>> Thanks, >>> Prathamesh >>> > OK for trunk after bootstrap+testing ? >>> > >>> > Thanks, >>> > Prathamesh >>> >>> >> >> -- >> Richard Biener <rguent...@suse.de> >> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Dilip Upmanyu, >> Graham Norton, HRB 21284 (AG Nuernberg)
Index: genmatch.c =================================================================== --- genmatch.c (revision 223610) +++ genmatch.c (working copy) @@ -2913,7 +2913,12 @@ user_id *p = dyn_cast<user_id *> (op); if (p && p->is_oper_list) - record_operlist (id_tok->src_loc, p); + { + if (active_fors.length() == 0) + record_operlist (id_tok->src_loc, p); + else + fatal_at (id_tok, "operator-list %s cannot be exapnded inside 'for'", id); + } return op; }