On 07/05/2011 04:27 PM, H.J. Lu wrote:
 diff --git a/gcc/explow.c b/gcc/explow.c
 index 7387dad..b343bf8 100644
 --- a/gcc/explow.c
 +++ b/gcc/explow.c
 @@ -383,18 +383,13 @@ convert_memory_address_addr_space (enum machine_mode 
to_mode ATTRIBUTE_UNUSED,

      case PLUS:
      case MULT:
 -      /* For addition we can safely permute the conversion and addition
 -        operation if one operand is a constant and converting the constant
 -        does not change it or if one operand is a constant and we are
 -        using a ptr_extend instruction  (POINTERS_EXTEND_UNSIGNED<  0).
 -        We can always safely permute them if we are making the address
 -        narrower.  */
 +      /* For addition we safely permute the conversion and addition
 +        operation if one operand is a constant since we can't generate
 +        new instructions.  We can always safely permute them if we are
 +        making the address narrower.  */
        if (GET_MODE_SIZE (to_mode)<  GET_MODE_SIZE (from_mode)
           || (GET_CODE (x) == PLUS
 -&&  CONST_INT_P (XEXP (x, 1))
 -&&  (XEXP (x, 1) == convert_memory_address_addr_space
 -                                  (to_mode, XEXP (x, 1), as)
 -                 || POINTERS_EXTEND_UNSIGNED<  0)))
 +&&  CONST_INT_P (XEXP (x, 1))))
         return gen_rtx_fmt_ee (GET_CODE (x), to_mode,
                                convert_memory_address_addr_space
                                  (to_mode, XEXP (x, 0), as),

This does not seem safe to me.

Paolo

Reply via email to