[7/9] math: Remove powerpc e_hypot

Message ID 20211006180557.933826-8-adhemerval.zanella@linaro.org
State Superseded
Headers
Series Improve hypot() |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Adhemerval Zanella Oct. 6, 2021, 6:05 p.m. UTC
  power9 master:

  "hypot": {
   "workload-random": {
    "duration": 5.20744e+08,
    "iterations": 5.6e+07,
    "reciprocal-throughput": 9.27604,
    "latency": 9.32194,
    "max-throughput": 1.07805e+08,
    "min-throughput": 1.07274e+08
   }
  }

power9 patched:

  "hypot": {
   "workload-random": {
    "duration": 5.23124e+08,
    "iterations": 5.4e+07,
    "reciprocal-throughput": 9.51892,
    "latency": 9.85606,
    "max-throughput": 1.05054e+08,
    "min-throughput": 1.0146e+08
   }
  }

power8 master:

  "hypot": {
   "workload-random": {
    "duration": 5.21128e+08,
    "iterations": 4.6e+07,
    "reciprocal-throughput": 11.3589,
    "latency": 11.2988,
    "max-throughput": 8.80368e+07,
    "min-throughput": 8.85047e+07
   }
  }

power8 patched:

  "hypot": {
   "workload-random": {
    "duration": 5.22651e+08,
    "iterations": 4.6e+07,
    "reciprocal-throughput": 11.3764,
    "latency": 11.3475,
    "max-throughput": 8.79009e+07,
    "min-throughput": 8.81252e+07
   }
  }

Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
(power9).
---
 sysdeps/powerpc/fpu/e_hypot.c                 | 87 -------------------
 sysdeps/powerpc/fpu/e_hypotf.c                | 78 -----------------
 .../powerpc32/power4/fpu/multiarch/Makefile   |  5 +-
 .../power4/fpu/multiarch/e_hypot-power7.c     | 23 -----
 .../power4/fpu/multiarch/e_hypot-ppc32.c      | 23 -----
 .../powerpc32/power4/fpu/multiarch/e_hypot.c  | 33 -------
 .../power4/fpu/multiarch/e_hypotf-power7.c    | 23 -----
 .../power4/fpu/multiarch/e_hypotf-ppc32.c     | 23 -----
 .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 33 -------
 9 files changed, 1 insertion(+), 327 deletions(-)
 delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
 delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
  

Comments

Paul E Murphy Oct. 6, 2021, 7:43 p.m. UTC | #1
On 10/6/21 1:05 PM, Adhemerval Zanella via Libc-alpha wrote:
> power9 master:
> 
>    "hypot": {
>     "workload-random": {
>      "duration": 5.20744e+08,
>      "iterations": 5.6e+07,
>      "reciprocal-throughput": 9.27604,
>      "latency": 9.32194,
>      "max-throughput": 1.07805e+08,
>      "min-throughput": 1.07274e+08
>     }
>    }
> 
> power9 patched:
> 
>    "hypot": {
>     "workload-random": {
>      "duration": 5.23124e+08,
>      "iterations": 5.4e+07,
>      "reciprocal-throughput": 9.51892,
>      "latency": 9.85606,
>      "max-throughput": 1.05054e+08,
>      "min-throughput": 1.0146e+08
>     }
>    }
> 
> power8 master:
> 
>    "hypot": {
>     "workload-random": {
>      "duration": 5.21128e+08,
>      "iterations": 4.6e+07,
>      "reciprocal-throughput": 11.3589,
>      "latency": 11.2988,
>      "max-throughput": 8.80368e+07,
>      "min-throughput": 8.85047e+07
>     }
>    }
> 
> power8 patched:
> 
>    "hypot": {
>     "workload-random": {
>      "duration": 5.22651e+08,
>      "iterations": 4.6e+07,
>      "reciprocal-throughput": 11.3764,
>      "latency": 11.3475,
>      "max-throughput": 8.79009e+07,
>      "min-throughput": 8.81252e+07
>     }
>    }
> 
> Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
> (power9).
> ---
>   sysdeps/powerpc/fpu/e_hypot.c                 | 87 -------------------
>   sysdeps/powerpc/fpu/e_hypotf.c                | 78 -----------------
>   .../powerpc32/power4/fpu/multiarch/Makefile   |  5 +-
>   .../power4/fpu/multiarch/e_hypot-power7.c     | 23 -----
>   .../power4/fpu/multiarch/e_hypot-ppc32.c      | 23 -----
>   .../powerpc32/power4/fpu/multiarch/e_hypot.c  | 33 -------
>   .../power4/fpu/multiarch/e_hypotf-power7.c    | 23 -----
>   .../power4/fpu/multiarch/e_hypotf-ppc32.c     | 23 -----
>   .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 33 -------
>   9 files changed, 1 insertion(+), 327 deletions(-)
>   delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
>   delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c

This also removes the ppc specific hypotf too. Have you had a chance to 
measure the difference?

I think it is OK if the performance difference is negligible. Though, I 
don't speak for the other ppc contributors in that regard. They may want 
to double-check the results.
  
Adhemerval Zanella Oct. 6, 2021, 7:46 p.m. UTC | #2
On 06/10/2021 16:43, Paul E Murphy wrote:
> 
> 
> On 10/6/21 1:05 PM, Adhemerval Zanella via Libc-alpha wrote:
>> power9 master:
>>
>>    "hypot": {
>>     "workload-random": {
>>      "duration": 5.20744e+08,
>>      "iterations": 5.6e+07,
>>      "reciprocal-throughput": 9.27604,
>>      "latency": 9.32194,
>>      "max-throughput": 1.07805e+08,
>>      "min-throughput": 1.07274e+08
>>     }
>>    }
>>
>> power9 patched:
>>
>>    "hypot": {
>>     "workload-random": {
>>      "duration": 5.23124e+08,
>>      "iterations": 5.4e+07,
>>      "reciprocal-throughput": 9.51892,
>>      "latency": 9.85606,
>>      "max-throughput": 1.05054e+08,
>>      "min-throughput": 1.0146e+08
>>     }
>>    }
>>
>> power8 master:
>>
>>    "hypot": {
>>     "workload-random": {
>>      "duration": 5.21128e+08,
>>      "iterations": 4.6e+07,
>>      "reciprocal-throughput": 11.3589,
>>      "latency": 11.2988,
>>      "max-throughput": 8.80368e+07,
>>      "min-throughput": 8.85047e+07
>>     }
>>    }
>>
>> power8 patched:
>>
>>    "hypot": {
>>     "workload-random": {
>>      "duration": 5.22651e+08,
>>      "iterations": 4.6e+07,
>>      "reciprocal-throughput": 11.3764,
>>      "latency": 11.3475,
>>      "max-throughput": 8.79009e+07,
>>      "min-throughput": 8.81252e+07
>>     }
>>    }
>>
>> Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
>> (power9).
>> ---
>>   sysdeps/powerpc/fpu/e_hypot.c                 | 87 -------------------
>>   sysdeps/powerpc/fpu/e_hypotf.c                | 78 -----------------
>>   .../powerpc32/power4/fpu/multiarch/Makefile   |  5 +-
>>   .../power4/fpu/multiarch/e_hypot-power7.c     | 23 -----
>>   .../power4/fpu/multiarch/e_hypot-ppc32.c      | 23 -----
>>   .../powerpc32/power4/fpu/multiarch/e_hypot.c  | 33 -------
>>   .../power4/fpu/multiarch/e_hypotf-power7.c    | 23 -----
>>   .../power4/fpu/multiarch/e_hypotf-ppc32.c     | 23 -----
>>   .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 33 -------
>>   9 files changed, 1 insertion(+), 327 deletions(-)
>>   delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
>>   delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
> 
> This also removes the ppc specific hypotf too. Have you had a chance to measure the difference?
> 
> I think it is OK if the performance difference is negligible. Though, I don't speak for the other ppc contributors in that regard. They may want to double-check the results.

I would expect the performance difference to be similar to 64-bit,
at least on the hardware I checked (since most of the time would
be spent in FPU calculations).

In any case, I don't see much gain in keeping a 32-bit powerpc
implementation that deviates from generic implementation.
  
Paul E Murphy Oct. 6, 2021, 7:51 p.m. UTC | #3
On 10/6/21 2:46 PM, Adhemerval Zanella wrote:
> 
> 
> On 06/10/2021 16:43, Paul E Murphy wrote:
>>
>>
>> On 10/6/21 1:05 PM, Adhemerval Zanella via Libc-alpha wrote:
>>> power9 master:
>>>
>>>     "hypot": {
>>>      "workload-random": {
>>>       "duration": 5.20744e+08,
>>>       "iterations": 5.6e+07,
>>>       "reciprocal-throughput": 9.27604,
>>>       "latency": 9.32194,
>>>       "max-throughput": 1.07805e+08,
>>>       "min-throughput": 1.07274e+08
>>>      }
>>>     }
>>>
>>> power9 patched:
>>>
>>>     "hypot": {
>>>      "workload-random": {
>>>       "duration": 5.23124e+08,
>>>       "iterations": 5.4e+07,
>>>       "reciprocal-throughput": 9.51892,
>>>       "latency": 9.85606,
>>>       "max-throughput": 1.05054e+08,
>>>       "min-throughput": 1.0146e+08
>>>      }
>>>     }
>>>
>>> power8 master:
>>>
>>>     "hypot": {
>>>      "workload-random": {
>>>       "duration": 5.21128e+08,
>>>       "iterations": 4.6e+07,
>>>       "reciprocal-throughput": 11.3589,
>>>       "latency": 11.2988,
>>>       "max-throughput": 8.80368e+07,
>>>       "min-throughput": 8.85047e+07
>>>      }
>>>     }
>>>
>>> power8 patched:
>>>
>>>     "hypot": {
>>>      "workload-random": {
>>>       "duration": 5.22651e+08,
>>>       "iterations": 4.6e+07,
>>>       "reciprocal-throughput": 11.3764,
>>>       "latency": 11.3475,
>>>       "max-throughput": 8.79009e+07,
>>>       "min-throughput": 8.81252e+07
>>>      }
>>>     }
>>>
>>> Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
>>> (power9).
>>> ---
>>>    sysdeps/powerpc/fpu/e_hypot.c                 | 87 -------------------
>>>    sysdeps/powerpc/fpu/e_hypotf.c                | 78 -----------------
>>>    .../powerpc32/power4/fpu/multiarch/Makefile   |  5 +-
>>>    .../power4/fpu/multiarch/e_hypot-power7.c     | 23 -----
>>>    .../power4/fpu/multiarch/e_hypot-ppc32.c      | 23 -----
>>>    .../powerpc32/power4/fpu/multiarch/e_hypot.c  | 33 -------
>>>    .../power4/fpu/multiarch/e_hypotf-power7.c    | 23 -----
>>>    .../power4/fpu/multiarch/e_hypotf-ppc32.c     | 23 -----
>>>    .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 33 -------
>>>    9 files changed, 1 insertion(+), 327 deletions(-)
>>>    delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
>>>    delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
>>
>> This also removes the ppc specific hypotf too. Have you had a chance to measure the difference?
>>
>> I think it is OK if the performance difference is negligible. Though, I don't speak for the other ppc contributors in that regard. They may want to double-check the results.
> 
> I would expect the performance difference to be similar to 64-bit,
> at least on the hardware I checked (since most of the time would
> be spent in FPU calculations).
> 
> In any case, I don't see much gain in keeping a 32-bit powerpc
> implementation that deviates from generic implementation.
> 

Oops, I read this patch in isolation to the series. There probably isn't 
any difference. Sorry for the noise.

Anyhow, in the context of the series, this looks OK to me.
  
Paul A. Clarke Oct. 12, 2021, 12:17 p.m. UTC | #4
On Wed, Oct 06, 2021 at 02:51:50PM -0500, Paul E Murphy via Libc-alpha wrote:
> On 10/6/21 2:46 PM, Adhemerval Zanella wrote:
> > On 06/10/2021 16:43, Paul E Murphy wrote:
> > > On 10/6/21 1:05 PM, Adhemerval Zanella via Libc-alpha wrote:
> > > > power9 master:
> > > > 
> > > >     "hypot": {
> > > >      "workload-random": {
> > > >       "duration": 5.20744e+08,
> > > >       "iterations": 5.6e+07,
> > > >       "reciprocal-throughput": 9.27604,
> > > >       "latency": 9.32194,
> > > >       "max-throughput": 1.07805e+08,
> > > >       "min-throughput": 1.07274e+08
> > > >      }
> > > >     }
> > > > 
> > > > power9 patched:
> > > > 
> > > >     "hypot": {
> > > >      "workload-random": {
> > > >       "duration": 5.23124e+08,
> > > >       "iterations": 5.4e+07,
> > > >       "reciprocal-throughput": 9.51892,
> > > >       "latency": 9.85606,
> > > >       "max-throughput": 1.05054e+08,
> > > >       "min-throughput": 1.0146e+08
> > > >      }
> > > >     }
> > > > 
> > > > Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
> > > > (power9).
> > > > ---
> > > 
> > > This also removes the ppc specific hypotf too. Have you had a chance to measure the difference?
> > > 
> > > I think it is OK if the performance difference is negligible. Though, I don't speak for the other ppc contributors in that regard. They may want to double-check the results.
> > 
> > I would expect the performance difference to be similar to 64-bit,
> > at least on the hardware I checked (since most of the time would
> > be spent in FPU calculations).
> > 
> > In any case, I don't see much gain in keeping a 32-bit powerpc
> > implementation that deviates from generic implementation.
> > 
> 
> Oops, I read this patch in isolation to the series. There probably isn't any
> difference. Sorry for the noise.
> 
> Anyhow, in the context of the series, this looks OK to me.

[Accidentally dropped the mailing list from this post. Resending...]

The results above showed over 5% performance degradation.
I'm not sure how rigorous those results are, and while arguably "close",
they were a bit concerning.

I ran the results on a local Power9 system, and see much better performance
with the new code. I thought I should share in case anyone else had similar
concerns.

glibc-master on Power9 with patch 1/9 (to get "workload-random"):
  "hypot": {
   "workload-random": {
    "duration": 5.1525e+08,
    "iterations": 8e+07,
    "reciprocal-throughput": 6.2956,
    "latency": 6.58564,
    "max-throughput": 1.58841e+08,
    "min-throughput": 1.51846e+08
   }
  }

glibc-master on Power9 with patches 1-9/9:
  "hypot": {
   "workload-random": {
    "duration": 5.20747e+08,
    "iterations": 9.8e+07,
    "reciprocal-throughput": 5.10696,
    "latency": 5.52053,
    "max-throughput": 1.95811e+08,
    "min-throughput": 1.81142e+08
   }
  }

Tested-by: Paul A. Clarke <pc@us.ibm.com>

PC
  

Patch

diff --git a/sysdeps/powerpc/fpu/e_hypot.c b/sysdeps/powerpc/fpu/e_hypot.c
deleted file mode 100644
index f96c589bbd..0000000000
--- a/sysdeps/powerpc/fpu/e_hypot.c
+++ /dev/null
@@ -1,87 +0,0 @@ 
-/* Pythagorean addition using doubles
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If
-   not, see <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_private.h>
-#include <math-underflow.h>
-#include <stdint.h>
-#include <libm-alias-finite.h>
-
-/* __ieee754_hypot(x,y)
- *
- * This a FP only version without any FP->INT conversion.
- * It is similar to default C version, making appropriates
- * overflow and underflows checks as well scaling when it
- * is needed.
- */
-
-double
-__ieee754_hypot (double x, double y)
-{
-  if ((isinf (x) || isinf (y))
-      && !issignaling (x) && !issignaling (y))
-    return INFINITY;
-  if (isnan (x) || isnan (y))
-    return x + y;
-
-  x = fabs (x);
-  y = fabs (y);
-
-  if (y > x)
-    {
-      double t = x;
-      x = y;
-      y = t;
-    }
-  if (y == 0.0)
-    return x;
-
-  /* if y is higher enough, y * 2^60 might overflow. The tests if
-     y >= 1.7976931348623157e+308/2^60 (two60factor) and uses the
-     appropriate check to avoid the overflow exception generation.  */
-  if (y <= 0x1.fffffffffffffp+963 && x > (y * 0x1p+60))
-    return x + y;
-
-  if (x > 0x1p+500)
-    {
-      x *= 0x1p-600;
-      y *= 0x1p-600;
-      return sqrt (x * x + y * y) / 0x1p-600;
-    }
-  if (y < 0x1p-500)
-    {
-      if (y <= 0x0.fffffffffffffp-1022)
-	{
-	  x *= 0x1p+1022;
-	  y *= 0x1p+1022;
-	  double ret = sqrt (x * x + y * y) / 0x1p+1022;
-	  math_check_force_underflow_nonneg (ret);
-	  return ret;
-	}
-      else
-	{
-	  x *= 0x1p+600;
-	  y *= 0x1p+600;
-	  return sqrt (x * x + y * y) / 0x1p+600;
-	}
-    }
-  return sqrt (x * x + y * y);
-}
-#ifndef __ieee754_hypot
-libm_alias_finite (__ieee754_hypot, __hypot)
-#endif
diff --git a/sysdeps/powerpc/fpu/e_hypotf.c b/sysdeps/powerpc/fpu/e_hypotf.c
deleted file mode 100644
index fa201dda51..0000000000
--- a/sysdeps/powerpc/fpu/e_hypotf.c
+++ /dev/null
@@ -1,78 +0,0 @@ 
-/* Pythagorean addition using floats
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If
-   not, see <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_private.h>
-#include <stdint.h>
-#include <libm-alias-finite.h>
-
-/* __ieee754_hypotf(x,y)
-
-   This a FP only version without any FP->INT conversion.
-   It is similar to default C version, making appropriates
-   overflow and underflows checks as using double precision
-   instead of scaling.  */
-
-#ifdef _ARCH_PWR7
-/* POWER7 isinf and isnan optimizations are fast. */
-# define TEST_INF_NAN(x, y)                                      \
-   if ((isinff(x) || isinff(y))					 \
-       && !issignaling (x) && !issignaling (y))			 \
-     return INFINITY;                                            \
-   if (isnanf(x) || isnanf(y))                                   \
-     return x + y;
-# else
-/* For POWER6 and below isinf/isnan triggers LHS and PLT calls are
- * costly (especially for POWER6). */
-# define GET_TWO_FLOAT_WORD(f1,f2,i1,i2)                         \
- do {                                                            \
-   ieee_float_shape_type gf_u1;                                  \
-   ieee_float_shape_type gf_u2;                                  \
-   gf_u1.value = (f1);                                           \
-   gf_u2.value = (f2);                                           \
-   (i1) = gf_u1.word & 0x7fffffff;                               \
-   (i2) = gf_u2.word & 0x7fffffff;                               \
- } while (0)
-
-# define TEST_INF_NAN(x, y)                                      \
- do {                                                            \
-   uint32_t hx, hy;                                              \
-   GET_TWO_FLOAT_WORD(x, y, hx, hy);                             \
-   if (hy > hx) {                                                \
-     uint32_t ht = hx; hx = hy; hy = ht;                         \
-   }                                                             \
-   if (hx >= 0x7f800000) {                                       \
-     if ((hx == 0x7f800000 || hy == 0x7f800000)			 \
-	 && !issignaling (x) && !issignaling (y))		 \
-       return INFINITY;                                          \
-     return x + y;						 \
-   }                                                             \
- } while (0)
-#endif
-
-
-float
-__ieee754_hypotf (float x, float y)
-{
-  TEST_INF_NAN (x, y);
-
-  return sqrt ((double) x * x + (double) y * y);
-}
-#ifndef __ieee754_hypotf
-libm_alias_finite (__ieee754_hypotf, __hypotf)
-#endif
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
index 60f2c95532..1de0f9b350 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
@@ -15,8 +15,7 @@  libm-sysdep_routines += s_llrintf-power6 s_llrintf-ppc32 s_llrint-power6 \
 			s_lrint-ppc32 s_modf-power5+ s_modf-ppc32 \
 			s_modff-power5+ s_modff-ppc32 s_logbl-power7 \
 			s_logbl-ppc32 s_logb-power7 s_logb-ppc32 \
-			s_logbf-power7 s_logbf-ppc32 e_hypot-power7 \
-			e_hypot-ppc32 e_hypotf-power7 e_hypotf-ppc32
+			s_logbf-power7 s_logbf-ppc32
 
 CFLAGS-s_llrintf-power6.c += -mcpu=power6
 CFLAGS-s_llrintf-ppc32.c += -mcpu=power4
@@ -35,8 +34,6 @@  CFLAGS-s_modff-power5+.c = -mcpu=power5+
 CFLAGS-s_logbl-power7.c = -mcpu=power7
 CFLAGS-s_logb-power7.c = -mcpu=power7
 CFLAGS-s_logbf-power7.c = -mcpu=power7
-CFLAGS-e_hypot-power7.c = -mcpu=power7
-CFLAGS-e_hypotf-power7.c = -mcpu=power7
 
 # These files quiet sNaNs in a way that is optimized away without
 # -fsignaling-nans.
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
deleted file mode 100644
index 382b4a0b27..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
+++ /dev/null
@@ -1,23 +0,0 @@ 
-/* __ieee_hypot() POWER7 version.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-
-#define __ieee754_hypot __ieee754_hypot_power7
-
-#include <sysdeps/powerpc/fpu/e_hypot.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
deleted file mode 100644
index abb14d5469..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
+++ /dev/null
@@ -1,23 +0,0 @@ 
-/* __ieee_hypot() PowerPC32 version.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-
-#define __ieee754_hypot __ieee754_hypot_ppc32
-
-#include <sysdeps/powerpc/fpu/e_hypot.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
deleted file mode 100644
index a16efa350c..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
+++ /dev/null
@@ -1,33 +0,0 @@ 
-/* Multiple versions of ieee754_hypot.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_private.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-finite.h>
-#include "init-arch.h"
-
-extern __typeof (__ieee754_hypot) __ieee754_hypot_ppc32 attribute_hidden;
-extern __typeof (__ieee754_hypot) __ieee754_hypot_power7 attribute_hidden;
-
-libc_ifunc (__ieee754_hypot,
-	    (hwcap & PPC_FEATURE_ARCH_2_06)
-	    ? __ieee754_hypot_power7
-            : __ieee754_hypot_ppc32);
-
-libm_alias_finite (__ieee754_hypot, __hypot)
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
deleted file mode 100644
index f8a26ff22f..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
+++ /dev/null
@@ -1,23 +0,0 @@ 
-/* __ieee754_hypot POWER7 version.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-
-#define __ieee754_hypotf __ieee754_hypotf_power7
-
-#include <sysdeps/powerpc/fpu/e_hypotf.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
deleted file mode 100644
index b13f8c9db2..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
+++ /dev/null
@@ -1,23 +0,0 @@ 
-/* __ieee_hypot() PowerPC32 version.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-
-#define __ieee754_hypotf __ieee754_hypotf_ppc32
-
-#include <sysdeps/ieee754/flt-32/e_hypotf.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
deleted file mode 100644
index 1e72605db8..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
+++ /dev/null
@@ -1,33 +0,0 @@ 
-/* Multiple versions of ieee754_hypotf.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_private.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-finite.h>
-#include "init-arch.h"
-
-extern __typeof (__ieee754_hypotf) __ieee754_hypotf_ppc32 attribute_hidden;
-extern __typeof (__ieee754_hypotf) __ieee754_hypotf_power7 attribute_hidden;
-
-libc_ifunc (__ieee754_hypotf,
-	    (hwcap & PPC_FEATURE_ARCH_2_06)
-	    ? __ieee754_hypotf_power7
-            : __ieee754_hypotf_ppc32);
-
-libm_alias_finite (__ieee754_hypotf, __hypotf)