On Fri, 27 Apr 2018, Kyrill Tkachov wrote:

> 
> On 26/04/18 15:04, Christophe Lyon wrote:
> > On 26 April 2018 at 15:41, Richard Biener <rguent...@suse.de> wrote:
> > > On Thu, 26 Apr 2018, Christophe Lyon wrote:
> > >
> > >> On 26 April 2018 at 14:09, Richard Biener <rguent...@suse.de> wrote:
> > >> >
> > >> > Seen by  Christophe Lyon, verified with a cross that this fixes the
> > >> > issue.
> > >> >
> > >> > aarch64 people, can you please test & commit this?
> > >> >
> > >>
> > >> As I have just written in bugzilla, this patch avoids an ICE when
> > >> compiling newlib's sysopen.i,
> > >> but I still see a similar crash when compiling vfprintf.i.
> > >
> > > There's a similar case still left.  Complete patch:
> > >
> > With this version, the toolchain build completes, but I didn't run
> > make check, nor tried aarch64-linux-gnu.
> > 
> 
> A bootstrap and test on aarch64-none-linux-gnu shows no problems.
> I don't know if there was a rationale for having the conversion to
> intDI_type_node.

If that is somehow a required detail for SImode pointers then
there needs to be a conversion from the pointer to uintSI_type_node
before then extending to intDI_type_node.  uintSI to match the
setting of POINTERS_EXTEND_UNSIGNED for aarch64.

Richard.

> Thanks,
> Kyrill
> 
> > > Index: gcc/config/aarch64/aarch64.c
> > > ===================================================================
> > > --- gcc/config/aarch64/aarch64.c        (revision 259669)
> > > +++ gcc/config/aarch64/aarch64.c        (working copy)
> > > @@ -12267,23 +12267,17 @@ aarch64_gimplify_va_arg_expr (tree valis
> > >    if (align > 8)
> > >      {
> > >        /* if (alignof(type) > 8) (arg = arg + 15) & -16;  */
> > > -      t = fold_convert (intDI_type_node, arg);
> > > -      t = build2 (PLUS_EXPR, TREE_TYPE (t), t,
> > > -                 build_int_cst (TREE_TYPE (t), 15));
> > > +      t = fold_build_pointer_plus_hwi (arg, 15);
> > >        t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t,
> > >                   build_int_cst (TREE_TYPE (t), -16));
> > > -      t = fold_convert (TREE_TYPE (arg), t);
> > >        roundup = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, t);
> > >      }
> > >    else
> > >      roundup = NULL;
> > >    /* Advance ap.__stack  */
> > > -  t = fold_convert (intDI_type_node, arg);
> > > -  t = build2 (PLUS_EXPR, TREE_TYPE (t), t,
> > > -             build_int_cst (TREE_TYPE (t), size + 7));
> > > +  t = fold_build_pointer_plus_hwi (arg, size + 7);
> > >    t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t,
> > >               build_int_cst (TREE_TYPE (t), -8));
> > > -  t = fold_convert (TREE_TYPE (arg), t);
> > >    t = build2 (MODIFY_EXPR, TREE_TYPE (stack), unshare_expr (stack), t);
> > >    /* String up roundup and advance.  */
> > >    if (roundup)
> > >
> > >
> > >> Thanks,
> > >>
> > >> Christophe
> > >>
> > >> > Thanks,
> > >> > Richard.
> > >> >
> > >> > 2018-04-26  Richard Biener <rguent...@suse.de>
> > >> >
> > >> >         * config/aarch64/aarch64.c: Simplify ap.__stack advance and
> > >> >         fix for ILP32.
> > >> >
> > >> > Index: gcc/config/aarch64/aarch64.c
> > >> > ===================================================================
> > >> > --- gcc/config/aarch64/aarch64.c (revision 259669)
> > >> > +++ gcc/config/aarch64/aarch64.c (working copy)
> > >> > @@ -12278,12 +12278,9 @@ aarch64_gimplify_va_arg_expr (tree valis
> > >> >    else
> > >> >      roundup = NULL;
> > >> >    /* Advance ap.__stack  */
> > >> > -  t = fold_convert (intDI_type_node, arg);
> > >> > -  t = build2 (PLUS_EXPR, TREE_TYPE (t), t,
> > >> > -             build_int_cst (TREE_TYPE (t), size + 7));
> > >> > +  t = fold_build_pointer_plus_hwi (arg, size + 7);
> > >> >    t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t,
> > >> >               build_int_cst (TREE_TYPE (t), -8));
> > >> > -  t = fold_convert (TREE_TYPE (arg), t);
> > >> >    t = build2 (MODIFY_EXPR, TREE_TYPE (stack), unshare_expr (stack),
> > t);
> > >> >    /* String up roundup and advance.  */
> > >> >    if (roundup)
> > >>
> > >>
> > >
> > > --
> > > Richard Biener <rguent...@suse.de>
> > > SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB
> > 21284 (AG Nuernberg)
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to