Commit b355f222 by Uros Bizjak Committed by Uros Bizjak

re PR rtl-optimization/15187 (Inefficient if optimization with -O2 -ffast-math)

	PR rtl-optimization/15187
	* ifcvt.c (noce_try_cmove_arith): Exit early if total
	insn_rtx_cost of both branches > BRANCH_COST

From-SVN: r87631
parent 7a116211
2004-09-17 Uros Bizjak <uros@kss-loka.si>
PR rtl-optimization/15187
* ifcvt.c (noce_try_cmove_arith): Exit early if total
insn_rtx_cost of both branches > BRANCH_COST
2004-09-16 Diego Novillo <dnovillo@redhat.com>
PR tree-optimization/17528
......
......@@ -1214,6 +1214,7 @@ noce_try_cmove_arith (struct noce_if_info *if_info)
rtx insn_a, insn_b;
rtx tmp, target;
int is_mem = 0;
int insn_cost;
enum rtx_code code;
/* A conditional move from two memory sources is equivalent to a
......@@ -1247,6 +1248,25 @@ noce_try_cmove_arith (struct noce_if_info *if_info)
insn_a = if_info->insn_a;
insn_b = if_info->insn_b;
/* Total insn_rtx_cost should be smaller than branch cost. Exit
if insn_rtx_cost can't be estimated. */
if (insn_a)
{
insn_cost = insn_rtx_cost (PATTERN (insn_a));
if (insn_cost == 0 || insn_cost > COSTS_N_INSNS (BRANCH_COST))
return FALSE;
}
else
{
insn_cost = 0;
}
if (insn_b) {
insn_cost += insn_rtx_cost (PATTERN (insn_b));
if (insn_cost == 0 || insn_cost > COSTS_N_INSNS (BRANCH_COST))
return FALSE;
}
/* Possibly rearrange operands to make things come out more natural. */
if (reversed_comparison_code (if_info->cond, if_info->jump) != UNKNOWN)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment