Durring compilation process, (subreg (mem ...) ...) can occur. Hence,
we need to check if the address of mem is a valid one. This patch is
fixing this check by directly calling the address_operand, instead of
calling move_double_src_operand, as the latter is always checking
against the original mode, thus, returning false when the inner and
outer modes are different.
gcc/
2017-03-27 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/predicates.md (move_double_src_operand): Replace the
call to move_double_src_operand with a call to address_operand.
From-SVN: r246499
+2017-03-27 Claudiu Zissulescu <claziss@synopsys.com>
+
+ * config/arc/predicates.md (move_double_src_operand): Replace the
+ call to move_double_src_operand with a call to address_operand.
+
2017-03-27 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/elf.h (ARGET_ARC_TP_REGNO_DEFAULT): Define.
/* (subreg (mem ...) ...) can occur here if the inner part was once a
pseudo-reg and is now a stack slot. */
if (GET_CODE (SUBREG_REG (op)) == MEM)
- return move_double_src_operand (SUBREG_REG (op), mode);
+ return address_operand (XEXP (SUBREG_REG (op), 0), mode);
else
return register_operand (op, mode);
case MEM :