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. Committed to the trunk. Jeff
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 89cd793277a..31f7805f057 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -1205,6 +1205,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;