]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
m68k.c (notice_update_cc): Handle register conflict with PRE_DEC.
authorAndreas Schwab <schwab@suse.de>
Tue, 22 Oct 2013 12:36:08 +0000 (12:36 +0000)
committerAndreas Schwab <schwab@gcc.gnu.org>
Tue, 22 Oct 2013 12:36:08 +0000 (12:36 +0000)
* config/m68k/m68k.c (notice_update_cc): Handle register conflict
with PRE_DEC.

From-SVN: r203922

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

index d5f3e0fb7ec02b8ffce90535ad82183fffa311d2..5b53484e4f76ef52123441cdff5e0c5efb1d40c1 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 5e3236fa8deb6a4fb4d9031bc9b9627a9b90438f..7035504bfe3c03112f7c9b82f83ac3a05ac899f2 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;