https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91769

            Bug ID: 91769
           Summary: [9 regression] wrong code with -O2 on MIPS
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: aurelien at aurel32 dot net
  Target Milestone: ---
              Host: mipsel-unknown-linux-gnu
            Target: mipsel-unknown-linux-gnu
             Build: mipsel-unknown-linux-gnu

Created attachment 46881
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46881&action=edit
Testcase

GCC 9.2 generates wrong code for the attached testcase file (extracted from
gnuplot and simplified) when compiled with -O2 -march=mips32r2. This doesn't
happen at -O1 level. This also doesn't happen with GCC 8.3. This is however
reproducible with a snapshot of trunk from 2019-08-28.

Here is the relevant part of the generated assembly code:
   0x00400780 <+80>:    lw      v0,8(v1)
   0x00400784 <+84>:    lw      v1,12(v1)

Here v1 is clobbered

   0x00400788 <+88>:    ldc1    $f2,64(sp)
=> 0x0040078c <+92>:    ldc1    $f0,8(v1)

So it crashes when the double value is loaded from the array.

Reply via email to