powerpc: Remove optimized finite
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 11 Mar 2019 03:29:37 +0000 (03:29 +0000)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 12 Jun 2019 17:32:39 +0000 (14:32 -0300)
commit119269606996258ee0a53ff9e5828d474ee0f698
treea8b24ad011f24ce14d08aea07f6eeab4735dcbbf
parenta72186761b2ed913fd5ea3df2de2aa446456aa98
powerpc: Remove optimized finite

The powerpc finite optimization do not show much gain:

  - GCC will call libm iff -fsignaling-nans is used. This usage pattern
    is usually not performance oriented and for such calls PLT overhead
    should dominate execution time.

  - The power7 uses ftdiv to optimize for some input patterns, but at
    cost of others.  Comparing against generic C implementation built
    for powerpc64-linux-gnu-power7 (--with-cpu=power7):

    - Generic sysdeps/ieee754 implementation:
       "isfinite": {
        "": {
         "duration": 5.0082e+09,
         "iterations": 2.45299e+09,
         "max": 43.824,
         "min": 2.008,
         "mean": 2.04167
        },
        "INF": {
         "duration": 4.66554e+09,
         "iterations": 2.28288e+09,
         "max": 35.73,
         "min": 2.008,
         "mean": 2.04371
        },
        "NAN": {
         "duration": 4.66274e+09,
         "iterations": 2.28716e+09,
         "max": 34.161,
         "min": 2.009,
         "mean": 2.03866
        }
       }

    - power7 optimized one:
       "isfinite": {
        "": {
         "duration": 4.99111e+09,
         "iterations": 2.65566e+09,
         "max": 25.015,
         "min": 1.716,
         "mean": 1.87942
        },
        "INF": {
         "duration": 4.6783e+09,
         "iterations": 2.0999e+09,
         "max": 35.264,
         "min": 1.868,
         "mean": 2.22787
        },
        "NAN": {
         "duration": 4.67915e+09,
         "iterations": 2.08678e+09,
         "max": 38.099,
         "min": 1.869,
         "mean": 2.24228
        }
       }

     So it basically optimizes marginally for normal numbers while
     increasing the latency for other kind of FP.

  - The power8 implementation is just the generic implementation using
    ISA 2.07 mfvsrd instruction (which GCC uses for generic implementation).
    So generic implementation is the best option for powerpc64le.

Checked on powerpc-linux-gnu (built without --with-cpu, with
--with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
and --disable-multi-arch).

* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
(sysdeps_routines, libm-sysdep_routines): Remove s_finite*
objects.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-power7.S:
Remove file.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-ppc32.c:
Likewise.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite.c: Likewise.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef-ppc32.c:
Likewise.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef.c: Likewise.
* sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S: Likewise.
* sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile (sysdep_call):
Remove s_finite* objects.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power7.S: Remove file.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-ppc64.c: Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c: Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef-ppc64.c: Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c: Likewise.
* sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S: Likewise.
* sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S: Likewise.
* sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S: Likewise.

Reviewed-by: Gabriel F. T. Gomes <gabrielftg@linux.ibm.com>
20 files changed:
ChangeLog
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-power7.S [deleted file]
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-ppc32.c [deleted file]
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite.c [deleted file]
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef-ppc32.c [deleted file]
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef.c [deleted file]
sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S [deleted file]
sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S [deleted file]
sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power7.S [deleted file]
sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power8.S [deleted file]
sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-ppc64.c [deleted file]
sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c [deleted file]
sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef-ppc64.c [deleted file]
sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c [deleted file]
sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S [deleted file]
sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S [deleted file]
sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S [deleted file]
sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S [deleted file]