On Wed, Mar 16, 2011 at 03:38:25PM -0700, H.J. Lu wrote:

IMNSHO you really should reconsider using Pmode != ptr_mode for your port.

That said, the patch looks good to me, though I can't approve it.

> diff --git a/gcc/ChangeLog.x32 b/gcc/ChangeLog.x32
> index 764e3de..45db256 100644
> --- a/gcc/ChangeLog.x32
> +++ b/gcc/ChangeLog.x32
> @@ -1,5 +1,9 @@
>  2011-03-16  H.J. Lu  <hongjiu...@intel.com>
>  
> +     * var-tracking.c (prepare_call_arguments): Check SUBREG.

Just mention PR debug/48160 in the ChangeLog entry...

> +
> +2011-03-16  H.J. Lu  <hongjiu...@intel.com>
> +
>       PR rtl-optimization/48155
>       * reload1.c (gen_reload): Check if XEXP (in, 0/1) is SUBREG of
>       REG in PLUS.
> diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
> index 266f11f..cfa74a6 100644
> --- a/gcc/var-tracking.c
> +++ b/gcc/var-tracking.c
> @@ -5763,7 +5763,11 @@ prepare_call_arguments (basic_block bb, rtx insn)
>  
>                   /* Try harder, when passing address of a constant
>                      pool integer it can be easily read back.  */
> -                 val = CSELIB_VAL_PTR (XEXP (item, 1));
> +                 item = XEXP (item, 1);
> +                 if (GET_CODE (item) == SUBREG)
> +                   item = SUBREG_REG (item);
> +                 gcc_assert (GET_CODE (item) == VALUE);
> +                 val = CSELIB_VAL_PTR (item);
>                   for (l = val->locs; l; l = l->next)
>                     if (GET_CODE (l->loc) == SYMBOL_REF
>                         && TREE_CONSTANT_POOL_ADDRESS_P (l->loc)


        Jakub

Reply via email to