https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124180
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rdapp at gcc dot gnu.org,
| |rsandifo at gcc dot gnu.org,
| |tnfchris at gcc dot gnu.org
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #8)
...
> To fully recover from the correctness fix on capable hardware implementing
> a masked float to int conversion is necessary (and possible).
There is currently no conditional conversion optab case, so the general
support would need to be amended. Similarly if-conversion limits itself
because of that, not even trying. And then there's the question how to
deal with the fact that currently the vectorizer dispatches between
fix[uns]_trunc
and
vec_pack_[us]fix_trunc
vec_unpack_[us]fix_trunc_{hi,lo}
where the latter are explicitly dealing only with half/double size integers,
thus are not conversion optabs. And the complications from
vectorizable_conversion would need to be put into vectorizable_call in some
way.
RVV supports same size, double size and half size conversions. I expect
SVE to do the same, so arbitrary conversion optabs might be unneeded but
then if-conversion might need to put inbetween conversions in and
possibly pre-select between cond_{unpack,pack,}_fix{uns,} given it performs
a (premature) vectorization check on the chosen IFN.