[FFmpeg-devel] gcc: Remove auto-vectorization limitation.

Michael Niedermayer michael at niedermayer.cc
Mon May 26 00:37:08 EEST 2025


Hi Rémi

On Sat, May 24, 2025 at 07:10:57PM +0300, Rémi Denis-Courmont wrote:
> Le torstaina 22. toukokuuta 2025, 9.32.18 Itä-Euroopan kesäaika Jiawei a écrit 
> :
> > > The RISC-V autovectorised output looks like it has a warning "Odd
> > > rotation angle" which is not present in the non-autovectorised output.
> > 
> > I found this occured when using '-ffast-math' in RISC-V, also occur in
> > -O3 -ffast-math -fno-tree-vectorize case(much slower due to the
> > -ffast-math),supplementary more comparison results here:
> 

> Unfortunately, the FFmpeg code is written with x87 semantics in mind.

I dont remember ever writing code intentionally with x87 semantics. And i
have doubts other people did.

What i did in soem rare places do, was depend on IEEE 754 semantics
(that is when doing so lead to simpler and cleaner code)


> For
> instance, the FFmpeg math macros work nicely on x86, but they would work much 
> better with fabs/fmax/fmin/fabsf/fmaxf/fminf on other platforms. I tried to fix 
> that with copious amount of _Generic(), but that lead to ICE...

ICE as the name says, is a internal compiler error and not the fault of
the code passed to the compiler


> 
> So we are stuck between a rock and a hard place where we need fast math for 
> good perfs, but we need to turn it off for correct results.

--ffast-math is not one option, its many

on the gcc here, it does this:
+  -fassociative-math          		[enabled]
+  -fcx-limited-range          		[enabled]
+  -ffinite-math-only          		[enabled]
+  -fmath-errno                		[disabled]
+  -freciprocal-math           		[enabled]
+  -fsigned-zeros              		[disabled]
+  -ftrapping-math             		[disabled]
+  -funsafe-math-optimizations 		[enabled]

So maybe some of this can be globally enabled.

But some things like fassociative-math are simply not "safe"
on general nummeric code. It also violates ISO C according to
the official gcc documentation

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Complexity theory is the science of finding the exact solution to an
approximation. Benchmarking OTOH is finding an approximation of the exact
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20250525/cfcb20e6/attachment.sig>


More information about the ffmpeg-devel mailing list