public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "fkrogh#gcc at mathalacarte dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug fortran/56637] Bad result on max(1,shiftr(j,1))
Date: Sat, 16 Mar 2013 18:03:00 -0000	[thread overview]
Message-ID: <bug-56637-4-YRLZaFpZ8X@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-56637-4@http.gcc.gnu.org/bugzilla/>


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

--- Comment #1 from Fred Krogh <fkrogh#gcc at mathalacarte dot com> 2013-03-16 18:02:49 UTC ---
I realize this is not much help for a bug report.  I can't get a small test
case to fail, and if I change the optimization level it works.  Also, I can't
be sure whether the problem is in the compiler or the library, but I suspect
the former.  Here is a small snippet of code

    k = max(1, shiftr(j,1)) ! The increment during the sort
    do ! Sort constraints to make active (Shell sort)
      do i = k + 1, j

In my small test case j is 13.  And k gets the value 1.  If I precede the first
statement with a garbage statement "i2=17" then after the first statement
above, k has the correct value of 6, even though the added statement should not
have changed the result.

Here are my flags


-ggdb -march=native -mpc80 -funroll-loops -pipe \
 -ftree-vectorize -floop-strip-mine \
 -floop-block -fimplicit-none -finit-real=NAN -fopenmp\
 -fcheck=bounds -Wall -Wextra

If I follow -ggdb with either -O1 or -O2 it gets the correct result.
This is running on a Gentoo Linux system, with Intel I7 CPU's.
Finally, here is a dump of the assembler code from the start of the first
statement.

Dump of assembler code from 0x40e5f1 to 0x40e6f1:
=> 0x000000000040e5f1 <find_unequals+5571>:     mov    0x1204(%rbx),%edx
   0x000000000040e5f7 <find_unequals+5577>:     mov    $0x1,%eax
   0x000000000040e5fc <find_unequals+5582>:     shr    %edx
   0x000000000040e5fe <find_unequals+5584>:     cmp    %eax,%edx
   0x000000000040e600 <find_unequals+5586>:     jle    0x40e604
<find_unequals+5590>
   0x000000000040e602 <find_unequals+5588>:     mov    %edx,%eax
   0x000000000040e604 <find_unequals+5590>:     mov    %eax,0x1330(%rbx)
   0x000000000040e60a <find_unequals+5596>:     mov    0x1330(%rbx),%eax
   0x000000000040e610 <find_unequals+5602>:     add    $0x1,%eax
   0x000000000040e613 <find_unequals+5605>:     mov    0x1204(%rbx),%esi
   0x000000000040e619 <find_unequals+5611>:     mov    %eax,0x133c(%rbx)
   0x000000000040e61f <find_unequals+5617>:     mov    0x133c(%rbx),%eax
   0x000000000040e625 <find_unequals+5623>:     cmp    %esi,%eax
   0x000000000040e627 <find_unequals+5625>:     jg     0x40ea50
<find_unequals+6690>
   0x000000000040e62d <find_unequals+5631>:     jmp    0x40e630
<find_unequals+5634>
   0x000000000040e62f <find_unequals+5633>:     nop
   0x000000000040e630 <find_unequals+5634>:     mov    0x133c(%rbx),%eax
   0x000000000040e636 <find_unequals+5640>:     cltq   
   0x000000000040e638 <find_unequals+5642>:     test   %rax,%rax
   0x000000000040e63b <find_unequals+5645>:     setle  %dl
   0x000000000040e63e <find_unequals+5648>:     movzbl %dl,%edx
   0x000000000040e641 <find_unequals+5651>:     mov    %edx,%edx
   0x000000000040e643 <find_unequals+5653>:     and    $0x1,%edx
   0x000000000040e646 <find_unequals+5656>:     test   %edx,%edx
   0x000000000040e648 <find_unequals+5658>:     je     0x40e666
<find_unequals+5688>
   0x000000000040e64a <find_unequals+5660>:     mov    $0x1,%ecx
   0x000000000040e64f <find_unequals+5665>:     mov    %rax,%rdx
   0x000000000040e652 <find_unequals+5668>:     mov    $0x4820d8,%esi
   0x000000000040e657 <find_unequals+5673>:     mov    $0x4827f0,%edi
   0x000000000040e65c <find_unequals+5678>:     mov    $0x0,%eax
   0x000000000040e661 <find_unequals+5683>:     callq  0x401d70
<_gfortran_runtime_error_at@plt>
   0x000000000040e666 <find_unequals+5688>:     cmp    $0x12,%rax
   0x000000000040e66a <find_unequals+5692>:     setg   %dl
   0x000000000040e66d <find_unequals+5695>:     movzbl %dl,%edx
   0x000000000040e670 <find_unequals+5698>:     mov    %edx,%edx
   0x000000000040e672 <find_unequals+5700>:     and    $0x1,%edx
   0x000000000040e675 <find_unequals+5703>:     test   %edx,%edx
   0x000000000040e677 <find_unequals+5705>:     je     0x40e695
<find_unequals+5735>
   0x000000000040e679 <find_unequals+5707>:     mov    $0x12,%ecx
   0x000000000040e67e <find_unequals+5712>:     mov    %rax,%rdx
   0x000000000040e681 <find_unequals+5715>:     mov    $0x482148,%esi
   0x000000000040e686 <find_unequals+5720>:     mov    $0x4827f0,%edi
   0x000000000040e68b <find_unequals+5725>:     mov    $0x0,%eax
   0x000000000040e690 <find_unequals+5730>:     callq  0x401d70
<_gfortran_runtime_error_at@plt>
   0x000000000040e695 <find_unequals+5735>:     sub    $0x1,%rax
   0x000000000040e699 <find_unequals+5739>:     add    $0x4b8,%rax
   0x000000000040e69f <find_unequals+5745>:     mov    0x4(%rbx,%rax,4),%eax
   0x000000000040e6a3 <find_unequals+5749>:     mov    %eax,0x1200(%rbx)
   0x000000000040e6a9 <find_unequals+5755>:     mov    0x1200(%rbx),%eax
   0x000000000040e6af <find_unequals+5761>:     add    $0x1,%eax
   0x000000000040e6b2 <find_unequals+5764>:     movslq %eax,%rdx
   0x000000000040e6b5 <find_unequals+5767>:     test   %rdx,%rdx
   0x000000000040e6b8 <find_unequals+5770>:     setle  %al
   0x000000000040e6bb <find_unequals+5773>:     movzbl %al,%eax
   0x000000000040e6be <find_unequals+5776>:     mov    %eax,%eax
   0x000000000040e6c0 <find_unequals+5778>:     and    $0x1,%eax
   0x000000000040e6c3 <find_unequals+5781>:     test   %eax,%eax
   0x000000000040e6c5 <find_unequals+5783>:     je     0x40e6e0
<find_unequals+5810>
   0x000000000040e6c7 <find_unequals+5785>:     mov    $0x1,%ecx
   0x000000000040e6cc <find_unequals+5790>:     mov    $0x481190,%esi
   0x000000000040e6d1 <find_unequals+5795>:     mov    $0x482818,%edi
   0x000000000040e6d6 <find_unequals+5800>:     mov    $0x0,%eax
   0x000000000040e6db <find_unequals+5805>:     callq  0x401d70
<_gfortran_runtime_error_at@plt>
   0x000000000040e6e0 <find_unequals+5810>:     cmp    $0x21,%rdx
   0x000000000040e6e4 <find_unequals+5814>:     setg   %al
   0x000000000040e6e7 <find_unequals+5817>:     movzbl %al,%eax
   0x000000000040e6ea <find_unequals+5820>:     mov    %eax,%eax
   0x000000000040e6ec <find_unequals+5822>:     and    $0x1,%eax
   0x000000000040e6ef <find_unequals+5825>:     test   %eax,%eax
End of assembler dump.


  reply	other threads:[~2013-03-16 18:03 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-16 17:03 [Bug fortran/56637] New: " fkrogh#gcc at mathalacarte dot com
2013-03-16 18:03 ` fkrogh#gcc at mathalacarte dot com [this message]
2013-03-16 18:16 ` [Bug fortran/56637] " dominiq at lps dot ens.fr
2013-03-16 18:46 ` fkrogh#gcc at mathalacarte dot com
2013-03-16 21:23 ` tkoenig at gcc dot gnu.org
2013-03-16 21:27 ` fkrogh#gcc at mathalacarte dot com
2013-03-16 21:37 ` dominiq at lps dot ens.fr
2013-03-16 21:45 ` fkrogh#gcc at mathalacarte dot com
2013-03-16 23:03 ` tkoenig at gcc dot gnu.org
2013-03-17  4:42 ` fkrogh#gcc at mathalacarte dot com
2013-03-17 10:47 ` tkoenig at gcc dot gnu.org
2013-03-17 15:21 ` mikael at gcc dot gnu.org
2013-03-17 15:35 ` fkrogh#gcc at mathalacarte dot com
2013-03-17 16:40 ` fkrogh#gcc at mathalacarte dot com
2013-03-17 17:05 ` tkoenig at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-56637-4-YRLZaFpZ8X@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).