[FFmpeg-devel] [PATCH 2/2] lavc/vorbisdec: use intermediate variables

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Sat Sep 17 13:44:36 EEST 2022


remi at remlab.net:
> From: Rémi Denis-Courmont <remi at remlab.net>
> 
> The compiler cannot infer that the two float vectors do not alias,
> causing unnecessary extra loads and serialisation. This patch caches
> the two input values in local variables so that compiler can optimise
> individual loop iterations.
> ---

We have av_restrict. (No opinion on this patch, it's just a remark.)

>  libavcodec/vorbisdec.c | 22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c
> index 9728997370..74e71936ab 100644
> --- a/libavcodec/vorbisdec.c
> +++ b/libavcodec/vorbisdec.c
> @@ -1583,21 +1583,21 @@ void ff_vorbis_inverse_coupling(float *mag, float *ang, intptr_t blocksize)
>  {
>      ptrdiff_t i;
>      for (i = 0;  i < blocksize;  i++) {
> -        if (mag[i] > 0.0) {
> -            if (ang[i] > 0.0) {
> -                ang[i] = mag[i] - ang[i];
> +        float angi = ang[i], magi = mag[i];
> +
> +        if (magi > 0.f) {
> +            if (angi > 0.f) {
> +                ang[i] = magi - angi;
>              } else {
> -                float temp = ang[i];
> -                ang[i]     = mag[i];
> -                mag[i]    += temp;
> +                ang[i] = magi;
> +                mag[i] = magi + angi;
>              }
>          } else {
> -            if (ang[i] > 0.0) {
> -                ang[i] += mag[i];
> +            if (angi > 0.f) {
> +                ang[i] = magi + angi;
>              } else {
> -                float temp = ang[i];
> -                ang[i]     = mag[i];
> -                mag[i]    -= temp;
> +                ang[i] = magi;
> +                mag[i] = magi - angi;
>              }
>          }
>      }



More information about the ffmpeg-devel mailing list