[Patch ifcvt 1/3] Factor out cost calculations from noce cases
Fri Sep 25 15:06:00 GMT 2015
In this patch we try to pull out the cost calculations used by the
no-conditional-execution if-convert functions. We want to replicate the
logic of the current cost decisions, but to phrase it in a way which
can be pulled out as common. To preserve the current behaviour as best
as we can, this means asking the common question, "is a magic_number
less than or equal to branch_cost". Clearly this is not the question
we want to be asking longer term, but this preserves existing target
This is imperfect for a few reasons.
First, some of the more ambitious noce if-convert functions have a
(slightly) more complicated cost-model. This means that we have to jump
through hoops to present the cost calculation in the common form. These
hoops are not very big, but it does make the logic seem a bit... weird.
Second, because our long term goal is to hand the cost calculation off
to the target and make it better reflect a meaningful question, we must
first build the candidate ifcvt sequence for comparison. This will cause
a slight compile time regression as we now generate more sequences before
bailing out (each of which needs a cost calculation).
On the other hand, it should be clear from this point what we have to do
to lift this out to a target hook which can do a smart job, and I think
this fits with the overall direction we intend to take.
Bootstrapped and checked on x86_64-none-linux-gnu, aarch64-none-linux-gnu
and arm-none-linux-gnueabihf without issue. Comparison of Spec2000/Spec2006
code generation for these three targets showed no changes.
2015-09-26 James Greenhalgh <email@example.com>
* ifcvt.c (noce_if_info): Add a magic_number field :-(.
(noce_try_store_flag_constants): Move cost calculation
to after sequence generation, factor it out to noce_is_profitable_p.
(noce_try_sign_mask): Add comment regarding cost calculations.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 10550 bytes
Desc: not available
More information about the Gcc-patches