arm.c (arm_no_early_mul_dep): Handle multiply-subtract.
authorPaul Brook <paul@codesourcery.com>
Mon, 1 Sep 2008 12:28:06 +0000 (12:28 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Mon, 1 Sep 2008 12:28:06 +0000 (12:28 +0000)
2008-09-01  Paul Brook  <paul@codesourcery.com>

gcc/
* config/arm/arm.c (arm_no_early_mul_dep): Handle multiply-subtract.

From-SVN: r139860

gcc/ChangeLog
gcc/config/arm/arm.c

index fb9b352f61db0e4e473d4df82df2a39fbe938097..45fea8a0bfb516003f3bd2b4cc6f3d040a8be5a0 100644 (file)
@@ -1,3 +1,7 @@
+2008-09-01  Paul Brook  <paul@codesourcery.com>
+
+       * config/arm/arm.c (arm_no_early_mul_dep): Handle multiply-subtract.
+
 2008-00-01  Jan Hubicka  <jh@suse.cz>
 
        * config/spu/spu.c (spu_expand_block_move) Update call of MOVE_RATIO.
index 6a4b3ef11cde0195dc306b25c32df66570a56afc..d22b4fe237bbcb7e49cb2eb9784d6c902c990ef9 100644 (file)
@@ -18235,8 +18235,15 @@ arm_no_early_mul_dep (rtx producer, rtx consumer)
     op = XVECEXP (op, 0, 0);
   op = XEXP (op, 1);
 
-  return (GET_CODE (op) == PLUS
-         && !reg_overlap_mentioned_p (value, XEXP (op, 0)));
+  if (GET_CODE (op) == PLUS || GET_CODE (op) == MINUS)
+    {
+      if (GET_CODE (XEXP (op, 0)) == MULT)
+       return !reg_overlap_mentioned_p (value, XEXP (op, 0));
+      else
+       return !reg_overlap_mentioned_p (value, XEXP (op, 1));
+    }
+
+  return 0;
 }
 
 /* We can't rely on the caller doing the proper promotion when