Avoid accounting for non-existent vector loop versioning
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 13 Nov 2019 09:05:59 +0000 (09:05 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 13 Nov 2019 09:05:59 +0000 (09:05 +0000)
commit6eed64b96d886da2518d86eae5bc0a5ed66cabe0
tree37497aa97fda968edca614ae83fa11d8b58c66d0
parentd4b44b834e3ac1b92ffb165e7bdaf641a211c34b
Avoid accounting for non-existent vector loop versioning

vect_analyze_loop_costing uses two profitability thresholds: a runtime
one and a static compile-time one.  The runtime one is simply the point
at which the vector loop is cheaper than the scalar loop, while the
static one also takes into account the cost of choosing between the
scalar and vector loops at runtime.  We compare this static cost against
the expected execution frequency to decide whether it's worth generating
any vector code at all.

However, we never reclaimed the cost of applying the runtime threshold
if it turned out that the vector code can always be used.  And we only
know whether that's true once we've calculated what the runtime
threshold would be.

2019-11-13  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vectorizer.h (vect_apply_runtime_profitability_check_p):
New function.
* tree-vect-loop-manip.c (vect_loop_versioning): Use it.
* tree-vect-loop.c (vect_analyze_loop_2): Likewise.
(vect_transform_loop): Likewise.
(vect_analyze_loop_costing): Don't take the cost of versioning
into account for the static profitability threshold if it turns
out that no versioning is needed.

From-SVN: r278124
gcc/ChangeLog
gcc/tree-vect-loop-manip.c
gcc/tree-vect-loop.c
gcc/tree-vectorizer.h