[ARC] Fix move_double_src_operand predicate.
authorClaudiu Zissulescu <claziss@synopsys.com>
Mon, 27 Mar 2017 10:56:46 +0000 (12:56 +0200)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Mon, 27 Mar 2017 10:56:46 +0000 (12:56 +0200)
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

gcc/ChangeLog
gcc/config/arc/predicates.md

index 2740aa6a89d96a8470f827346cb24ca8271b47dc..6296cdd33de39cbe7ee6e08e3f7955bc51cbdb8e 100644 (file)
@@ -1,3 +1,8 @@
+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.
index 8dd8d558b9e1d77f1fa82eb3838be01e197d7bc3..9e60cb773282149b18404a976a8fdf25f5897973 100644 (file)
       /* (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 :