Message ID | 20220917095936.39330-2-remi@remlab.net |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,1/2] lavc/vorbisdec: use ptrdiff_t to iterate over intptr_t | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
remi@remlab.net: > From: Rémi Denis-Courmont <remi@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; > } > } > }
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; } } }
From: Rémi Denis-Courmont <remi@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. --- libavcodec/vorbisdec.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)