Adjust rtx_costs for h8300
authorJeff Law <law@redhat.com>
Mon, 23 Nov 2020 20:06:11 +0000 (13:06 -0700)
committerJeff Law <law@redhat.com>
Mon, 23 Nov 2020 20:06:11 +0000 (13:06 -0700)
So the primary purpose of this patch is to make it easier to write tests for
removal of useless test/compare insns on the H8.

In simplest terms the costing model in the H8 port tends to encourage changing
something like:

  x = y + 4;
  if (x == 0)

into:

  x = y + 4;
  if (y == -4)

This is a marginal de-optimization on the H8.  So fixing it makes the code
ever-so-slightly better in isolation.   Fixing this also improves redundant
test/compare elimination and makes writing tests for redundant test/compare
elimination far easier.

gcc/
* config/h8300/h8300.c (h8300_rtx_costs): Handle the various
comparison rtx codes too.

gcc/config/h8300/h8300.c

index 1982e2605bce1e81c0195409746bdd7fdc90645a..09e9cbfb838d6c3edbd5ef29c062a780288ac6e0 100644 (file)
@@ -1199,6 +1199,16 @@ h8300_rtx_costs (rtx x, machine_mode mode ATTRIBUTE_UNUSED, int outer_code,
       return true;
 
     case COMPARE:
+    case NE:
+    case EQ:
+    case GE:
+    case GT:
+    case LE:
+    case LT:
+    case GEU:
+    case GTU:
+    case LEU:
+    case LTU:
       if (XEXP (x, 1) == const0_rtx)
        *total = 0;
       return false;