This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] Fix gimple type checking errors on ppc
- From: "Richard Guenther" <richard dot guenther at gmail dot com>
- To: "Zdenek Dvorak" <rakdver at kam dot mff dot cuni dot cz>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Fri, 27 Jul 2007 13:29:52 +0200
- Subject: Re: [patch] Fix gimple type checking errors on ppc
- References: <20070727103731.GA14249@kam.mff.cuni.cz>
On 7/27/07, Zdenek Dvorak <rakdver@kam.mff.cuni.cz> wrote:
> Hello,
>
> build of gcc on ppc and ppc64 is failing for me with gimple type
> checking messages. The problem is in the code generated by
> rs6000_gimplify_va_arg, when TREE_TYPE (reg) is not compatible with
> sizetype.
>
> Bootstrapped & regtested on {ppc, ppc64}-linux.
Ok, thanks.
Richard.
> Zdenek
>
> * config/rs6000/rs6000.c (rs6000_gimplify_va_arg): Generate the
> operands with compatible type.
>
> Index: config/rs6000/rs6000.c
> ===================================================================
> *** config/rs6000/rs6000.c (revision 126959)
> --- config/rs6000/rs6000.c (working copy)
> *************** rs6000_gimplify_va_arg (tree valist, tre
> *** 6465,6471 ****
> {
> regalign = 1;
> u = build2 (BIT_AND_EXPR, TREE_TYPE (reg), reg,
> ! size_int (n_reg - 1));
> u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg, u);
> }
> /* _Decimal128 is passed in even/odd fpr pairs; the stored
> --- 6465,6471 ----
> {
> regalign = 1;
> u = build2 (BIT_AND_EXPR, TREE_TYPE (reg), reg,
> ! build_int_cst (TREE_TYPE (reg), n_reg - 1));
> u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg, u);
> }
> /* _Decimal128 is passed in even/odd fpr pairs; the stored
> *************** rs6000_gimplify_va_arg (tree valist, tre
> *** 6487,6493 ****
> if (sav_ofs)
> t = build2 (POINTER_PLUS_EXPR, ptr_type_node, sav, size_int (sav_ofs));
>
> ! u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg, size_int (n_reg));
> u = fold_convert (sizetype, u);
> u = build2 (MULT_EXPR, sizetype, u, size_int (sav_scale));
> t = build2 (POINTER_PLUS_EXPR, ptr_type_node, t, u);
> --- 6487,6494 ----
> if (sav_ofs)
> t = build2 (POINTER_PLUS_EXPR, ptr_type_node, sav, size_int (sav_ofs));
>
> ! u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg,
> ! build_int_cst (TREE_TYPE (reg), n_reg));
> u = fold_convert (sizetype, u);
> u = build2 (MULT_EXPR, sizetype, u, size_int (sav_scale));
> t = build2 (POINTER_PLUS_EXPR, ptr_type_node, t, u);
>