diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-10 12:31:01 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-10 12:31:01 +0000 |
commit | 5720a9d5beacb558c1ddccbbfef9f9e4f91b14cf (patch) | |
tree | 3f728ad5f83db3e244ed18b3efb52e90f059de6b /gcc/config.gcc | |
parent | 772d76acb5aead98eb3c47a78363d867287d5e77 (diff) | |
download | gcc-5720a9d5beacb558c1ddccbbfef9f9e4f91b14cf.zip gcc-5720a9d5beacb558c1ddccbbfef9f9e4f91b14cf.tar.gz gcc-5720a9d5beacb558c1ddccbbfef9f9e4f91b14cf.tar.bz2 |
vect: Hookize better_loop_vinfo_p
One of the things we want to do on AArch64 is compare vector loops
side-by-side and pick the best one. For some targets, we want this
to be based on issue rates as well as the usual latency-based costs
(at least for loops with relatively high iteration counts).
The current approach to doing this is: when costing vectorisation
candidate A, try to guess what the other main candidate B will look
like and adjust A's latency-based cost up or down based on the likely
difference between A and B's issue rates. This effectively means
that we try to cost parts of B at the same time as A, without actually
being able to see B.
This is needlessly indirect and complex. It was a compromise due
to the code being added (too) late in the GCC 11 cycle, so that
target-independent changes weren't possible.
The target-independent code already compares two candidate loop_vec_infos
side-by-side, so that information about A and B above are available
directly. This patch creates a way for targets to hook into this
comparison.
The AArch64 code can therefore hook into better_main_loop_than_p to
compare issue rates. If the issue rate comparison isn't decisive,
the code can fall back to the normal latency-based comparison instead.
gcc/
* tree-vectorizer.h (vector_costs::better_main_loop_than_p)
(vector_costs::better_epilogue_loop_than_p)
(vector_costs::compare_inside_loop_cost)
(vector_costs::compare_outside_loop_cost): Likewise.
* tree-vectorizer.c (vector_costs::better_main_loop_than_p)
(vector_costs::better_epilogue_loop_than_p)
(vector_costs::compare_inside_loop_cost)
(vector_costs::compare_outside_loop_cost): New functions,
containing code moved from...
* tree-vect-loop.c (vect_better_loop_vinfo_p): ...here.
Diffstat (limited to 'gcc/config.gcc')
0 files changed, 0 insertions, 0 deletions