Currently, cond_move_process_if_block() does the conversion without
balancing the cost of the converted sequence with the original one, but
this should be checked by calling targetm.noce_conversion_profitable_p().
Doing so allows us to provide a way based on the target-specific cost
estimate, to prevent unwanted size growth due to excessive conditional
moves on optimizing for size.
On optimizing for speed, default_noce_conversion_profitable_p() allows
plenty of headroom, so this patch has little impact.
Also, if the target-specific cost estimate is accurate or allows for
margins, the impact should be similarly small.
gcc/ChangeLog:
* ifcvt.cc (cond_move_process_if_block):
Consider the result of targetm.noce_conversion_profitable_p()
when replacing the original sequence with the converted one.
---
gcc/ifcvt.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc
index 008796838f7..a896e14bb3c 100644
--- a/gcc/ifcvt.cc
+++ b/gcc/ifcvt.cc
@@ -4350,7 +4350,7 @@ cond_move_process_if_block (struct noce_if_info *if_info)
goto done;
}
seq = end_ifcvt_sequence (if_info);
- if (!seq)
+ if (!seq || !targetm.noce_conversion_profitable_p (seq, if_info))
goto done;
loc_insn = first_active_insn (then_bb);
--
2.30.2