+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
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
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)
{