[Bug target/127055] Missing vectorizations of round math functions
liuhongt at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Aug 27 09:05:04 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127055
--- Comment #21 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
(In reply to Matthias Kretz (Vir) from comment #19)
> Spurious FE_INEXACT is a problem with the current ROUND implementation. But
> a conforming implementation is possible:
>
> abs_x = fabs(x);
> t_abs = trunc(abs_x);
> r_abs = t_abs + (abs_x - t_abs >= .5 ? 1 : 0);
> return or(xor(abs_x, x), r_abs);
>
> Alternatively, it can be implemented using bit-manipulation. I have an
> untested implementation of that and it seems to have slightly lower latency
> (but much higher IPC) according to llvm-mca.
1) we need to fix the current vector expander with !flag_rounding_math there's
different rounding mode used in the existed implementation --- roundps
$3(ROUND_TRUNC) is used.
2) The bit-manipulation solution seem correct and can drop !flag_rounding_math,
but not sure about performance(the existed solution takes only 4 uops with
-frounding-math).
More information about the Gcc-bugs
mailing list