------- Comment #26 from rguenther at suse dot de  2009-12-01 09:42 -------
Subject: Re:  Weird translation of DO loops

On Mon, 30 Nov 2009, tkoenig at gcc dot gnu dot org wrote:

> 
> 
> ------- Comment #22 from tkoenig at gcc dot gnu dot org  2009-11-30 19:15 
> -------
> (In reply to comment #21)
> 
> > the "sign" for unsigned steps is always 1, you don't seem to account
> > for unsignedness?
> 
> (Un)fortunately, there are no unsigned varaibles in Fortran.
> 
> > Note that I believe generating
> > 
> >   step_sign = fold_build3 (fold_build2 (LT_EXPR, boolean_type_node,
> >                                   step, build_int_cst (TREE_TYPE (step), 
> > 0)),
> >                      build_int_cst (type, -1), build_int_cst (type, 1));
> > 
> > is better as that allows more freedom for fold and efficient expansion
> > for the target.  Just double-check that it also works for the
> > unrolling ;)
> 
> That doesn't work (something about fold_build3 needing five arguments
> instead of three), so think I'll submit my patch "as is".

Ah, of course ... more like

step_sign = fold_build3 (COND_EXPR, type,
                         fold_build2 (LT_EXPR, boolean_type_node,
                                   step, build_int_cst (TREE_TYPE (step), 0)),
                      build_int_cst (type, -1), build_int_cst (type, 1));

Which still would be prefered IMHO.

Richard.

> Thanks for your comments! 
> > Thanks,
> > Richard.
> > 
> 
> 
> 


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42131

Reply via email to