aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2017-11-28 02:28:57 +0100
committerSegher Boessenkool <segher@gcc.gnu.org>2017-11-28 02:28:57 +0100
commitb8adcbd9236598e066fba8e8e31a2e2d40521698 (patch)
treee4a556655ee698d12a0b865909e8cbb89dcd522b /gcc
parentfd8bf76c908297f96f240954c43732579bb95105 (diff)
downloadgcc-b8adcbd9236598e066fba8e8e31a2e2d40521698.zip
gcc-b8adcbd9236598e066fba8e8e31a2e2d40521698.tar.gz
gcc-b8adcbd9236598e066fba8e8e31a2e2d40521698.tar.bz2
rs6000: Improve comparison rtx_cost (PR81288)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c23
2 files changed, 12 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d3b2f5b..fe6b562 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 4df87ea..551d9c4 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -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)
{