2004-12-31 Hans-Peter Nilsson <hp@bitrange.com>
+ PR target/18701
+ * combine.c (combine_simplify_rtx): Do not allow paradoxical
+ subregs of MEM.
+
PR target/18701
* combine.c (gen_lowpart_for_combine): When stripping SUBREG of
MEM, adjust imode and isize.
}
/* Don't change the mode of the MEM if that would change the meaning
- of the address. */
+ of the address. Similarly, don't allow widening, as that may
+ access memory outside the defined object or using an address
+ that is invalid for a wider mode. */
if (MEM_P (SUBREG_REG (x))
&& (MEM_VOLATILE_P (SUBREG_REG (x))
- || mode_dependent_address_p (XEXP (SUBREG_REG (x), 0))))
+ || mode_dependent_address_p (XEXP (SUBREG_REG (x), 0))
+ || (GET_MODE_SIZE (mode)
+ > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))))
return gen_rtx_CLOBBER (mode, const0_rtx);
/* Note that we cannot do any narrowing for non-constants since