Fix ix86 rtx costs for the pr30315 testcase (PR target/30315)
authorBernd Schmidt <bernds_cb1@t-online.de>
Sun, 24 Nov 2019 13:08:27 +0000 (13:08 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Sun, 24 Nov 2019 13:08:27 +0000 (13:08 +0000)
* config/i386/i386.c (ix86_rtx_costs): Handle care of a PLUS in a
COMPARE, representing an overflow detection.

From-SVN: r278654

gcc/ChangeLog
gcc/config/i386/i386.c

index f26529c12e48ef049dce5991a3405d079ea4d8a5..cd4b96d7697d3ed2e0b9f35eb0d8b5e0c4bb2cd8 100644 (file)
@@ -1,3 +1,8 @@
+2019-11-24  Bernd Schmidt  <bernds_cb1@t-online.de>
+
+       * config/i386/i386.c (ix86_rtx_costs): Handle care of a PLUS in a
+       COMPARE, representing an overflow detection.
+
 2019-11-23  Jan Hubicka  <hubicka@ucw.cz>
 
        * cif-code.def (MAX_INLINE_INSNS_SINGLE_O2_LIMIT): Remove.
index 780ebb85ef805f49c604e0a2bef9eadc8c126f4a..04cbbd532c0d7df8288e87555696bc32477beeca 100644 (file)
@@ -19501,6 +19501,15 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno,
          return true;
        }
 
+      if (GET_CODE (XEXP (x, 0)) == PLUS
+         && rtx_equal_p (XEXP (XEXP (x, 0), 0), XEXP (x, 1)))
+       {
+         /* This is an overflow detection, count it as a normal compare.  */
+         *total = rtx_cost (XEXP (x, 0), GET_MODE (XEXP (x, 0)),
+                            COMPARE, 0, speed);
+         return true;
+       }
+
       /* The embedded comparison operand is completely free.  */
       if (!general_operand (XEXP (x, 0), GET_MODE (XEXP (x, 0)))
          && XEXP (x, 1) == const0_rtx)