"H.J. Lu" <hongjiu...@intel.com> writes: > diff --git a/gcc/explow.c b/gcc/explow.c > index 460af1f..9b3c082 100644 > --- a/gcc/explow.c > +++ b/gcc/explow.c > @@ -611,6 +611,8 @@ copy_to_reg (rtx x) > rtx > copy_addr_to_reg (rtx x) > { > + if (GET_MODE (x) != VOIDmode && GET_MODE (x) != Pmode) > + x = convert_to_mode (Pmode, x, 1); > return copy_to_mode_reg (Pmode, x); > }
I think you need to say why the conversion should be done here rather than in the caller. Regardless of that, though: I think this should be convert_memory_address rather than convert_to_mode. Paasing 1 is wrong, because pointers are signed on some targets. Richard