* config/m68k/m68k.c (notice_update_cc): Handle register conflict
authorschwab <schwab@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 22 Oct 2013 12:36:08 +0000 (12:36 +0000)
committerschwab <schwab@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 22 Oct 2013 12:36:08 +0000 (12:36 +0000)
with PRE_DEC.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203922 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/m68k/m68k.c

index d5f3e0f..5b53484 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-22  Andreas Schwab  <schwab@suse.de>
+
+       * config/m68k/m68k.c (notice_update_cc): Handle register conflict
+       with PRE_DEC.
+
 2013-10-22  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * doc/contrib.texi ([Fran@,{c}ois Dumont], [Tim Shen],
index 5e3236f..7035504 100644 (file)
@@ -4209,6 +4209,13 @@ notice_update_cc (rtx exp, rtx insn)
       && cc_status.value2
       && reg_overlap_mentioned_p (cc_status.value1, cc_status.value2))
     cc_status.value2 = 0;
+  /* Check for PRE_DEC in dest modifying a register used in src.  */
+  if (cc_status.value1 && GET_CODE (cc_status.value1) == MEM
+      && GET_CODE (XEXP (cc_status.value1, 0)) == PRE_DEC
+      && cc_status.value2
+      && reg_overlap_mentioned_p (XEXP (XEXP (cc_status.value1, 0), 0),
+                                 cc_status.value2))
+    cc_status.value2 = 0;
   if (((cc_status.value1 && FP_REG_P (cc_status.value1))
        || (cc_status.value2 && FP_REG_P (cc_status.value2))))
     cc_status.flags = CC_IN_68881;