> I think you're right. I suppose the new condition should be:
> 
> #ifdef LOAD_EXTEND_OP
>         /* If this is a typical RISC machine, we only have to worry
>            about the way loads are extended.  */
>         if (!WORD_REGISTER_OPERATIONS
> 
>             || ((LOAD_EXTEND_OP (inner_mode) == SIGN_EXTEND
> 
>                    ? val_signbit_known_set_p (inner_mode, nonzero)
> 
>                    : LOAD_EXTEND_OP (inner_mode) != ZERO_EXTEND)
>                  || 
>                  || !MEM_P (SUBREG_REG (x))))
> 
> #endif

Agreed.

> Would you prefer me to make this change or just revert the patch?

Go ahead and make the change, but please do a bit of comment massaging in the 
process, for example:

#ifdef LOAD_EXTEND_OP
          /* On many CISC machines, accessing an object in a wider mode
             causes the high-order bits to become undefined.  So they are
             not known to be zero.  */
          if (!WORD_REGISTER_OPERATIONS
             /* If this is a typical RISC machine, we only have to worry
                about the way loads are extended.  */
              || ((LOAD_EXTEND_OP (inner_mode) == SIGN_EXTEND
                     ? val_signbit_known_set_p (inner_mode, nonzero)
                     : LOAD_EXTEND_OP (inner_mode) != ZERO_EXTEND)
                   || !MEM_P (SUBREG_REG (x))))
#endif
            {
              if (GET_MODE_PRECISION (GET_MODE (x))
                  > GET_MODE_PRECISION (inner_mode))
                nonzero |= (GET_MODE_MASK (GET_MODE (x))
                            & ~GET_MODE_MASK (inner_mode));
            }

-- 
Eric Botcazou

Reply via email to