This patch changes rs6000_rtx_costs to be closer to reality. It is still not quite right, but at least it handles more cases, so the
(set (reg:SI) (eq:SI (reg:SI) (reg:SI))) from the PR isn't taken as costing 1 insn anymore, while setting a reg:DI was cost 3 insns. The mode of the dest doesn't matter at all here, not for any of our current scc patterns. Testing in progress; okay for trunk? Segher 2015-05-13 Segher Boessenkool <seg...@kernel.crashing.org> PR rtl-optimization/30967 * config/rs6000/rs6000.c (rs6000_rtx_costs): Don't consider destination mode for the cost of scc patterns. --- gcc/config/rs6000/rs6000.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index e5b8edd..1e32144 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -30631,7 +30631,7 @@ rs6000_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED, *total = COSTS_N_INSNS (2); return true; } - else if (mode == Pmode) + else { *total = COSTS_N_INSNS (3); return false; -- 1.8.1.4