public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/57131] New: Wong register assignment?
@ 2013-05-01  6:02 ishiura-compiler at ml dot kwansei.ac.jp
  2013-05-01  6:44 ` [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong " jakub at gcc dot gnu.org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: ishiura-compiler at ml dot kwansei.ac.jp @ 2013-05-01  6:02 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57131

             Bug #: 57131
           Summary: Wong register assignment?
    Classification: Unclassified
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: ishiura-compiler@ml.kwansei.ac.jp


This miscompile occurs only on 32bit x86 (i686) target of GCC 4.8.1
(prerelease).  
(There is no problem with x86_64 target or GCC 4.7.3.) 
A dubious option is "-foptimize-register-move."

  $ cat error.c

  int main (void)
  {
    volatile int x1 = 0;
    volatile long long x2 = 0;
    volatile int x3 = 0;
    volatile int x4 = 1;
    volatile int x5 = 1;
    volatile long long x6 = 1;

    long long t = ( ( x1 * ( x2 << x3 ) ) / (x4 * x5) ) + x6 ;

    return (t == 1); 
  }

  $ i686-pc-linux-gnu-gcc-4.8.1 error.c -O1 -fexpensive-optimizations
-foptimize-register-move
  $ ./a.out
  Floating point exception (core dumped)

-----

$ i686-pc-linux-gnu-gcc-4.8.1 -v
Using built-in specs.
COLLECT_GCC=i686-pc-linux-gnu-gcc-4.8.1
COLLECT_LTO_WRAPPER=/usr/local/i686-tools/gcc-4.8.1/libexec/gcc/i686-pc-linux-gnu/4.8.1/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: /home/hassy-i686-linux/gcc/configure
--prefix=/usr/local/i686-tools/gcc-4.8.1/
--with-gmp=/usr/local/gmp-5.1.1/ --with-mpfr=/usr/local/mpfr-3.1.2/
--with-mpc=/usr/local/mpc-1.0.1/ --disable-multilib --disable-nls
--enable-languages=c
Thread model: posix
gcc version 4.8.1 20130428 (prerelease) (GCC)


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong register assignment?
  2013-05-01  6:02 [Bug rtl-optimization/57131] New: Wong register assignment? ishiura-compiler at ml dot kwansei.ac.jp
@ 2013-05-01  6:44 ` jakub at gcc dot gnu.org
  2013-05-01  7:39 ` jakub at gcc dot gnu.org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-05-01  6:44 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57131

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-05-01
                 CC|                            |jakub at gcc dot gnu.org
   Target Milestone|---                         |4.8.1
            Summary|Wong register assignment?   |[4.8/4.9 Regression] Wrong
                   |                            |register assignment?
     Ever Confirmed|0                           |1

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-05-01 06:44:04 UTC ---
Started with http://gcc.gnu.org/PR196090


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong register assignment?
  2013-05-01  6:02 [Bug rtl-optimization/57131] New: Wong register assignment? ishiura-compiler at ml dot kwansei.ac.jp
  2013-05-01  6:44 ` [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong " jakub at gcc dot gnu.org
@ 2013-05-01  7:39 ` jakub at gcc dot gnu.org
  2013-05-02  3:03 ` vmakarov at redhat dot com
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-05-01  7:39 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57131

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vmakarov at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-05-01 07:39:41 UTC ---
Apparently went away with the http://gcc.gnu.org/r198432 fix, but it isn't
clear whether that change was meant to fix this or just made the bug latent.
Anyway, still reproduceable on the 4.8 branch.
What I'm seeing before that change is that extendsidi2_1 pattern with MEM
destination LRA chooses %ebx as (clobber (scratch:SI)) register, eventhough
%ebx
is live across that instruction (there is
(insn 14 74 68 2 (set (reg:SI 3 bx [orig:83 D.1395 ] [83])
        (mem/v/c:SI (plus:SI (reg/f:SI 7 sp)
                (const_int 72 [0x48])) [0 x4+0 S4 A64])) pr57131.c:11 85
{*movsi_internal}
     (nil))
(insn 68 14 73 2 (set (reg:SI 3 bx [orig:83 D.1395 ] [83])
        (reg:SI 3 bx [orig:83 D.1395 ] [83])) pr57131.c:11 85 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 3 bx [orig:83 D.1395 ] [83])
        (nil)))
some insns before it and:
(insn 65 24 26 2 (set (reg:SI 5 di [orig:83 D.1395 ] [83])
        (reg:SI 3 bx [orig:83 D.1395 ] [83])) pr57131.c:11 85 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 3 bx [orig:83 D.1395 ] [83])
        (nil)))
some insns after it.  Not sure if the noop move with REG_DEAD has anything to
do with that.  Vlad, can you please have a look?


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong register assignment?
  2013-05-01  6:02 [Bug rtl-optimization/57131] New: Wong register assignment? ishiura-compiler at ml dot kwansei.ac.jp
  2013-05-01  6:44 ` [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong " jakub at gcc dot gnu.org
  2013-05-01  7:39 ` jakub at gcc dot gnu.org
@ 2013-05-02  3:03 ` vmakarov at redhat dot com
  2013-05-02  3:16 ` pinskia at gcc dot gnu.org
  2013-05-02 19:26 ` jakub at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: vmakarov at redhat dot com @ 2013-05-02  3:03 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57131

Vladimir Makarov <vmakarov at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vmakarov at redhat dot com

--- Comment #3 from Vladimir Makarov <vmakarov at redhat dot com> 2013-05-02 03:03:34 UTC ---
(In reply to comment #2)
> Apparently went away with the http://gcc.gnu.org/r198432 fix, but it isn't
> clear whether that change was meant to fix this or just made the bug latent.
> Anyway, still reproduceable on the 4.8 branch.
> What I'm seeing before that change is that extendsidi2_1 pattern with MEM
> destination LRA chooses %ebx as (clobber (scratch:SI)) register, eventhough
> %ebx
> is live across that instruction (there is
> (insn 14 74 68 2 (set (reg:SI 3 bx [orig:83 D.1395 ] [83])
>         (mem/v/c:SI (plus:SI (reg/f:SI 7 sp)
>                 (const_int 72 [0x48])) [0 x4+0 S4 A64])) pr57131.c:11 85
> {*movsi_internal}
>      (nil))
> (insn 68 14 73 2 (set (reg:SI 3 bx [orig:83 D.1395 ] [83])
>         (reg:SI 3 bx [orig:83 D.1395 ] [83])) pr57131.c:11 85 {*movsi_internal}
>      (expr_list:REG_DEAD (reg:SI 3 bx [orig:83 D.1395 ] [83])
>         (nil)))
> some insns before it and:
> (insn 65 24 26 2 (set (reg:SI 5 di [orig:83 D.1395 ] [83])
>         (reg:SI 3 bx [orig:83 D.1395 ] [83])) pr57131.c:11 85 {*movsi_internal}
>      (expr_list:REG_DEAD (reg:SI 3 bx [orig:83 D.1395 ] [83])
>         (nil)))
> some insns after it.  Not sure if the noop move with REG_DEAD has anything to
> do with that.  Vlad, can you please have a look?

http://gcc.gnu.org/r198432 was a right solution for this bug.  LRA don't pay
attention to NO_REGS pseudos during assignment although ebx was assigned to
NO_REGS r95 (which is reflected in reg_renumber).

At some points of LRA work reg notes can be invalid.  LRA makes them up to date
after live subpass (lra-lives.c).  It needs only correct live info on bb
borders.

So I'd close this PR.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong register assignment?
  2013-05-01  6:02 [Bug rtl-optimization/57131] New: Wong register assignment? ishiura-compiler at ml dot kwansei.ac.jp
                   ` (2 preceding siblings ...)
  2013-05-02  3:03 ` vmakarov at redhat dot com
@ 2013-05-02  3:16 ` pinskia at gcc dot gnu.org
  2013-05-02 19:26 ` jakub at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2013-05-02  3:16 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57131

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |DUPLICATE

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> 2013-05-02 03:16:35 UTC ---
(In reply to comment #3)
> So I'd close this PR.

Done as a dup of bug 57097.

*** This bug has been marked as a duplicate of bug 57097 ***


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong register assignment?
  2013-05-01  6:02 [Bug rtl-optimization/57131] New: Wong register assignment? ishiura-compiler at ml dot kwansei.ac.jp
                   ` (3 preceding siblings ...)
  2013-05-02  3:16 ` pinskia at gcc dot gnu.org
@ 2013-05-02 19:26 ` jakub at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-05-02 19:26 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57131

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-05-02 19:26:38 UTC ---
Author: jakub
Date: Thu May  2 06:00:46 2013
New Revision: 198511

URL: http://gcc.gnu.org/viewcvs?rev=198511&root=gcc&view=rev
Log:
    PR rtl-optimization/57131
    * gcc.c-torture/execute/pr57131.c: New test.

Added:
    trunk/gcc/testsuite/gcc.c-torture/execute/pr57131.c
Modified:
    trunk/gcc/testsuite/ChangeLog

Author: jakub
Date: Thu May  2 19:25:34 2013
New Revision: 198560

URL: http://gcc.gnu.org/viewcvs?rev=198560&root=gcc&view=rev
Log:
    PR rtl-optimization/57131
    * gcc.c-torture/execute/pr57131.c: New test.

Added:
    branches/gcc-4_8-branch/gcc/testsuite/gcc.c-torture/execute/pr57131.c
Modified:
    branches/gcc-4_8-branch/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-05-02 19:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-01  6:02 [Bug rtl-optimization/57131] New: Wong register assignment? ishiura-compiler at ml dot kwansei.ac.jp
2013-05-01  6:44 ` [Bug rtl-optimization/57131] [4.8/4.9 Regression] Wrong " jakub at gcc dot gnu.org
2013-05-01  7:39 ` jakub at gcc dot gnu.org
2013-05-02  3:03 ` vmakarov at redhat dot com
2013-05-02  3:16 ` pinskia at gcc dot gnu.org
2013-05-02 19:26 ` jakub at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).