Vectorizer size preferences (-mprefer-* on x86)

Richard Earnshaw (lists)
Fri Jun 15 15:26:00 GMT 2018

On 15/06/18 12:48, Richard Biener wrote:
> Hi,
> I'm in the process of changing the vectorizer to consider all
> vector sizes as advertised by targetm.autovectorize_vector_sizes
> and to decide which one to use based on its cost model.
> I expect that to make sense for example when choosing between
> AVX128 and AVX256 since the latter may have penalties for
> cross-lane operations which the former lacks.
> Now while the option -mprefer-* and the documentation (to
> some extent) suggests that the user communicates a preference
> the actual implementation in the x86 backend uses -mprefer-*
> to disable the use of larger vector sizes.  That also makes
> targetm.preferred_simd_mode somewhat redundant.
> In the light of using the cost model to decide on the vector
> width used how should we go forward here?
> I would suggest to more clearly document that -mprefer-*
> will disable the use of larger vector sizes and that smaller
> vector sizes might be used if costs tell us to do so (or loops
> do not roll enough).  Implementation-wise the size chosen
> by targetm.preferred_simd_mode could be used as tie-breaker
> in case equal costs are computed.
> In the (distant?) future we might want to support mixed-size
> vectorization which makes all this even more complicated.
> Still having -mprefer-* disabling vector sizes makes sense
> here?
> Thanks,
> Richard.

Could you approximate here what we've done for Arm -mfpu= - add an
'auto' option and make it the default.  Over time you then deprecate
other settings and eventually drop them, leaving only the default.


More information about the Gcc mailing list