diff --git a/gcc/combine.cc b/gcc/combine.cc index 053879500b7..5453ce85156 100644 --- a/gcc/combine.cc +++ b/gcc/combine.cc @@ -13321,14 +13321,12 @@ record_dead_and_set_regs_1 (rtx dest, const_rtx setter, void *data) && SUBREG_REG (SET_DEST (setter)) == dest && known_le (GET_MODE_PRECISION (GET_MODE (dest)), BITS_PER_WORD) - && subreg_lowpart_p (SET_DEST (setter))) + && subreg_lowpart_p (SET_DEST (setter)) + && !(WORD_REGISTER_OPERATIONS + && paradoxical_subreg_p (SET_DEST (setter)) + && contains_mem_rtx_p (SET_SRC (setter)))) record_value_for_reg (dest, record_dead_insn, - WORD_REGISTER_OPERATIONS - && word_register_operation_p (SET_SRC (setter)) - && paradoxical_subreg_p (SET_DEST (setter)) - ? SET_SRC (setter) - : gen_lowpart (GET_MODE (dest), - SET_SRC (setter))); + gen_lowpart (GET_MODE (dest), SET_SRC (setter))); else record_value_for_reg (dest, record_dead_insn, NULL_RTX); }