[RFC PATCH] Fix 15187

Roger Sayle roger@eyesopen.com
Thu Sep 16 22:01:00 GMT 2004


On Thu, 16 Sep 2004, Uros Bizjak wrote:
> 2004-09-16  Uros Bizjak  <uros@kss-loka.si>
>
>     * ifcvt.c (noce_try_cmove_arith): Exit early if total
>     insn_rtx_cost of both branches > BRANCH_COST

This is Ok for mainline.  Thanks.


> The patch was bootstrapped on i686 for c,c++, no regressions.

But in future, could you try to also build/test objc, java and g95?



> BTW: I think that cond_exec_process_if_block() function in ifcvt.c
> should be changed from using count_bb_insns() to use total_bb_rtx_cost()
> for the same reason that find_if_case_1() and find_if_case_2() were
> changed. Unfortunatelly, ix86 is !HAVE_conditional_execution, so I
> can't fix it.

This is intentional.  The cost of conditionally executing a sequence
of instructions is proportional to the number of instructions, not
their actual rtx_costs.  The cost of not executing a conditional
multiplication is approximately COSTS_N_INSNS(1), and not the cost
of the multiplication (hopefully :).

However, Richard Earnshaw has pointed out that recent ARM cores break
this assumption and have varying costs for conditionally not executing
instructions.  Hence, we may eventually need a "unexecuted_rtx_cost"
target hook, and a total_bb_unexecuted_rtx_cost function in ifcvt.c.

Roger
--



More information about the Gcc-patches mailing list