rs6000: Improve comparison rtx_cost (PR81288)
authorSegher Boessenkool <segher@kernel.crashing.org>
Tue, 28 Nov 2017 01:28:57 +0000 (02:28 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Tue, 28 Nov 2017 01:28:57 +0000 (02:28 +0100)
The current rs6000 rtx_cost for comparisons against 0 is very high if
TARGET_ISEL && !TARGET_MFCRF, much higher than for reg-reg comparisons,
much higher than a load of 0 and such a reg-reg-comparison.  This leads
to infinite recursion in CSE (see PR81288).

This patch removes the too-high cost, also simplifying this code.

PR 81288/target
* config/rs6000/rs6000.c (rs6000_rtx_costs): Do not handle
TARGET_ISEL && !TARGET_MFCRF differently.  Simplify code.

From-SVN: r255188

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index d3b2f5b363b5acb5f005afbdf26c3c708e879c36..fe6b562427e7a7d74b5db508387b4fe53d7b9ea6 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-28  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR 81288/target
+       * config/rs6000/rs6000.c (rs6000_rtx_costs): Do not handle
+       TARGET_ISEL && !TARGET_MFCRF differently.  Simplify code.
+
 2017-11-27  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * config/rs6000/rs6000.md (<code><GPR:mode><GPR2:mode>2_isel): Change
index 4df87ea755659244db66f8dc1059701ab46c29f5..551d9c4df79710c33dddf99af8a5f750d97ce8fe 100644 (file)
@@ -34889,14 +34889,16 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code,
          *total = COSTS_N_INSNS (1);
          return true;
        }
+      /* FALLTHRU */
+
+    case GT:
+    case LT:
+    case UNORDERED:
       if (outer_code == SET)
        {
          if (XEXP (x, 1) == const0_rtx)
            {
-             if (TARGET_ISEL && !TARGET_MFCRF)
-               *total = COSTS_N_INSNS (8);
-             else
-               *total = COSTS_N_INSNS (2);
+             *total = COSTS_N_INSNS (2);
              return true;
            }
          else
@@ -34905,19 +34907,6 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code,
              return false;
            }
        }
-      /* FALLTHRU */
-
-    case GT:
-    case LT:
-    case UNORDERED:
-      if (outer_code == SET && (XEXP (x, 1) == const0_rtx))
-       {
-         if (TARGET_ISEL && !TARGET_MFCRF)
-           *total = COSTS_N_INSNS (8);
-         else
-           *total = COSTS_N_INSNS (2);
-         return true;
-       }
       /* CC COMPARE.  */
       if (outer_code == COMPARE)
        {