On 07/09/2011 02:36 PM, H.J. Lu wrote:
> 
> Hi,
> 
> Thunk is in ptr_mode, not Pmode.  OK for trunk?
> 
> Thanks.
> 
> H.J.
> ---
> 2011-07-09  H.J. Lu  <hongjiu...@intel.com>
> 
>       * config/i386/i386.c (x86_output_mi_thunk): Use ptr_mode instead
>       of Pmode for vtable adjustment.
> 
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index 04cb07d..c852719 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -29338,7 +29681,7 @@ x86_output_mi_thunk (FILE *file,
>    if (vcall_offset)
>      {
>        if (TARGET_64BIT)
> -     tmp = gen_rtx_REG (DImode, R10_REG);
> +     tmp = gen_rtx_REG (ptr_mode, R10_REG);
>        else
>       {
>         int tmp_regno = CX_REG;
> @@ -29348,7 +29691,7 @@ x86_output_mi_thunk (FILE *file,
>         tmp = gen_rtx_REG (SImode, tmp_regno);
>       }
>  
> -      xops[0] = gen_rtx_MEM (Pmode, this_reg);
> +      xops[0] = gen_rtx_MEM (ptr_mode, this_reg);
>        xops[1] = tmp;
>        output_asm_insn ("mov%z1\t{%0, %1|%1, %0}", xops);
>  
> @@ -29360,9 +29703,10 @@ x86_output_mi_thunk (FILE *file,
>         xops[0] = GEN_INT (vcall_offset);
>         xops[1] = tmp2;
>         output_asm_insn ("mov{q}\t{%0, %1|%1, %0}", xops);
> -       xops[0] = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, tmp, tmp2));
> +       xops[0] = gen_rtx_MEM (ptr_mode,
> +                              gen_rtx_PLUS (Pmode, tmp, tmp2));
>       }
> -      xops[1] = this_reg;
> +      xops[1] = gen_rtx_REG (ptr_mode, REGNO (this_reg));

Not ok.  This is incoherent in its treatment of Pmode vs ptr_mode.
You're creating an addition

        (plus:P (reg:ptr tmp) (reg:P tmp2))

I have a queued patch that replaces all of this with rtl.  I will
post it later today.


r~

Reply via email to