[Bug 1811798]

Jakub-gcc 1811798 at bugs.launchpad.net
Wed Feb 6 16:33:40 UTC 2019


What we could do there is remove the first of those two splitters, remove the
&& !dead_or_set_p (insn, operands[1])
test from the second, and add peephole2 that would transform
   (set (access part 1) (subreg:SI (match_dup 1) low))
   (set (match_dup 1) (rotate:DI (match_dup 1) (const_int 32)))
   (set (access part 2) (subreg:SI (match_dup 1) low))
with a lshiftrt instead of rotate if reg 1 is dead after the third insn (assuming rotate is more expensive as right shift, if it is the same expensive/same size, then having the two splitters makes no sense).  The last rotate should have been removed by DCE already if it was truly dead (though, of course, if it for some reason isn't yet, you could have another peephole2 for that too).

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-8 in Ubuntu.
https://bugs.launchpad.net/bugs/1811798

Title:
  gcc 8 miscompiles scipy/optimize/minpack/qrsolv.f

Status in gcc:
  Fix Released
Status in gcc-8 package in Ubuntu:
  New
Status in imexam package in Ubuntu:
  New
Status in python-scipy package in Ubuntu:
  New
Status in python-scipy package in Debian:
  New

Bug description:
  Originally reported in https://bugs.debian.org/906198

  The following simple test fails on s390x:

  ---------------------------8<------------------------------
  import numpy as np
  from scipy.optimize import leastsq

  y = np.array([0., 1., 1., 2., 1., 1., 0.])
  x = np.arange(len(y))

  def func(par):
      return par[2] * np.exp(-(x - par[0])**2/par[1]) - y

  print(leastsq(func, [0,1,0]))
  ---------------------------8<------------------------------

  The expected result is

  (array([3.        , 4.42280548, 1.67210345]), 1)

  while on S390x, one gets

  (array([0.        , 1.        , 0.34027645]), 3)

  
  Further information from https://bugs.debian.org/915738

  The bug seems to be a miscompilation of scipy/optimize/minpack/qrsolv.f
  with -funroll-loops. Removing -funroll-loops is enough to get the
  leastsq testcase to pass.

To manage notifications about this bug go to:
https://bugs.launchpad.net/gcc/+bug/1811798/+subscriptions



More information about the foundations-bugs mailing list