--- Comment #14 from Jakub Jelinek <jakub at gcc dot> ---
If glibc implements a faster exp10/exp10f, we could do what I've done for
PR84309 and expand pow (10, x) as exp10 (x) and pow (C, x) where C is pow (10,
N) for integral N as exp10 (log10 (C) * x).
Even if it doesn't, there is some chance that perhaps 628.pop2_s propagates a
constant into that x of pow (10, x), so in theory even just deferring the
folding to after vectorization like we do for C which is pow (2, N) for
integral N might help.

Looking at
I think that actually is the case here.
>From that source (haven't looked at SPEC2k17) it seems it is essentially:
! PR middle-end/82004
! { dg-do run }
! { dg-options "-Ofast" }

  integer, parameter :: r8 = selected_real_kind(13), i4 = kind(1)
  integer (i4), parameter :: a = 400, b = 2
  real (r8), parameter, dimension(b) :: c = (/ .001_r8, 10.00_r8 /)
  real (r8) :: d, e, f, g, h, j

  d = c(1)
  e = c(b)
  f = (log10(e)-log10(d))/real(a)
  g = log10(d) - f
  h = 10**(g)
  j = 10
  j = j**(g)
  if ( stop 1

(with the j and j = 10; j = j**(g); if ( stop 1 added by me to make it
fail when miscompiled).

Reply via email to