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. 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)