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 ?
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)
2015-05-20 Prathamesh Kulkarni <prathamesh.kulka...@linaro.org> * genmatch.c (parser::parse_operation): Reject expanding operator-list inside 'for'.
Index: genmatch.c =================================================================== --- genmatch.c (revision 223437) +++ genmatch.c (working copy) @@ -2913,7 +2913,10 @@ 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; }