public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3
@ 2013-06-04  0:47 dhazeghi at yahoo dot com
  2013-06-04  5:33 ` [Bug tree-optimization/57521] [4.7/4.8/4.9 Regression] " jakub at gcc dot gnu.org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: dhazeghi at yahoo dot com @ 2013-06-04  0:47 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 57521
           Summary: wrong code for expressions in loop at -O3
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dhazeghi at yahoo dot com

The following code is miscompiled with current gcc trunk at -O3 optimization on
x86_64-linux.  I've tried to reduce it somewhat from the original form.  Note
that 'e' is only touched in one place.  This also fails on 4.7 and 4.8 and is a
regression from gcc 4.6.


$ gcc-trunk -v
gcc version 4.9.0 20130603 (experimental) [trunk revision 199601] (GCC) 
$ gcc-trunk -O2 wrong.c 
$ ./a.out 
1
$ gcc-4.6 -O3 wrong.c 
$ ./a.out 
1
$ gcc-trunk -O3 wrong.c 
$ ./a.out 
0
$
--------------------------------------

int printf (const char *, ...);

int a, b, c, d, o = 1, p;
short e;

int
fn1 (int * p1)
{
    int f, g, h, j = 0, k = 0, l = 0;
    unsigned int i;
    int *m[1] = { &l };
    for (; b >= 0; b--)
    {
        if (*p1)
            if (j >= 0)
            {
                int n = 1;
                e = 1;
                h = a ? a : 1 % n;
                g = h > 0 ? 0 : h + 1;
                k = c + g;
            }
            else
                continue;
        else
        {

            f = d > 0 ? 0 : d + 1;
            i = f;
            j = 1 + i;
        }
        l++;
    }
    return k;
}

int
main ()
{
    for (;; p++)
    {
        fn1 (&o);
        break;
    }
    printf ("%d\n", e);
    return 0;
}


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

* [Bug tree-optimization/57521] [4.7/4.8/4.9 Regression] wrong code for expressions in loop at -O3
  2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
@ 2013-06-04  5:33 ` jakub at gcc dot gnu.org
  2013-06-04 12:19 ` rguenth at gcc dot gnu.org
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-06-04  5:33 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-06-04
                 CC|                            |jakub at gcc dot gnu.org
   Target Milestone|---                         |4.7.4
            Summary|wrong code for expressions  |[4.7/4.8/4.9 Regression]
                   |in loop at -O3              |wrong code for expressions
                   |                            |in loop at -O3
     Ever confirmed|0                           |1

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Started with r175704 aka PR46787.


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

* [Bug tree-optimization/57521] [4.7/4.8/4.9 Regression] wrong code for expressions in loop at -O3
  2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
  2013-06-04  5:33 ` [Bug tree-optimization/57521] [4.7/4.8/4.9 Regression] " jakub at gcc dot gnu.org
@ 2013-06-04 12:19 ` rguenth at gcc dot gnu.org
  2013-06-24 13:48 ` rguenth at gcc dot gnu.org
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-06-04 12:19 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Hmhm, mine.


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

* [Bug tree-optimization/57521] [4.7/4.8/4.9 Regression] wrong code for expressions in loop at -O3
  2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
  2013-06-04  5:33 ` [Bug tree-optimization/57521] [4.7/4.8/4.9 Regression] " jakub at gcc dot gnu.org
  2013-06-04 12:19 ` rguenth at gcc dot gnu.org
@ 2013-06-24 13:48 ` rguenth at gcc dot gnu.org
  2013-08-27 10:12 ` [Bug tree-optimization/57521] [4.7/4.8 " rguenth at gcc dot gnu.org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-06-24 13:48 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
It's if-conversion (we do not vectorize anything here).  The predicates
are inserted correctly but the wrong ones are being used for the
predication.  That is because the predecessor edge we chose in
find_phi_replacement_condition is not fallthru and thus the predicate
we chose is bogus.  It seems to assume that critical edges are split.

I have a patch.


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

* [Bug tree-optimization/57521] [4.7/4.8 Regression] wrong code for expressions in loop at -O3
  2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
                   ` (2 preceding siblings ...)
  2013-06-24 13:48 ` rguenth at gcc dot gnu.org
@ 2013-08-27 10:12 ` rguenth at gcc dot gnu.org
  2013-09-09  9:51 ` rguenth at gcc dot gnu.org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-08-27 10:12 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|                            |4.9.0
            Summary|[4.7/4.8/4.9 Regression]    |[4.7/4.8 Regression] wrong
                   |wrong code for expressions  |code for expressions in
                   |in loop at -O3              |loop at -O3
      Known to fail|                            |4.8.1

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Author: rguenth
Date: Tue Aug 27 10:10:34 2013
New Revision: 202019

URL: http://gcc.gnu.org/viewcvs?rev=202019&root=gcc&view=rev
Log:
2013-08-27  Richard Biener  <rguenther@suse.de>

    PR tree-optimization/57521
    * tree-if-conv.c (if_convertible_bb_p): Verify that at least
    one edge is non-critical.
    (find_phi_replacement_condition): Make sure to use a non-critical
    edge.  Cleanup and remove old bug workarounds.
    (bb_postdominates_preds): Remove.
    (if_convertible_loop_p_1): Do not compute post-dominators.
    (combine_blocks): Do not free post-dominators.
    (main_tree_if_conversion): Likewise.
    (pass_data_if_conversion): Add TODO_verify_ssa.

    * gcc.dg/torture/pr57521.c: New testcase.

Added:
    trunk/gcc/testsuite/gcc.dg/torture/pr57521.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-if-conv.c


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

* [Bug tree-optimization/57521] [4.7/4.8 Regression] wrong code for expressions in loop at -O3
  2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
                   ` (3 preceding siblings ...)
  2013-08-27 10:12 ` [Bug tree-optimization/57521] [4.7/4.8 " rguenth at gcc dot gnu.org
@ 2013-09-09  9:51 ` rguenth at gcc dot gnu.org
  2013-10-25 10:30 ` [Bug tree-optimization/57521] [4.7 " rguenth at gcc dot gnu.org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-09-09  9:51 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Author: rguenth
Date: Mon Sep  9 09:51:18 2013
New Revision: 202388

URL: http://gcc.gnu.org/viewcvs?rev=202388&root=gcc&view=rev
Log:
2013-09-09  Richard Biener  <rguenther@suse.de>

    Backport from mainline
    2013-08-27  Richard Biener  <rguenther@suse.de>

    PR tree-optimization/57521
    * tree-if-conv.c (if_convertible_bb_p): Verify that at least
    one edge is non-critical.
    (find_phi_replacement_condition): Make sure to use a non-critical
    edge.  Cleanup and remove old bug workarounds.
    (bb_postdominates_preds): Remove.
    (if_convertible_loop_p_1): Do not compute post-dominators.
    (combine_blocks): Do not free post-dominators.
    (main_tree_if_conversion): Likewise.

    * gcc.dg/torture/pr57521.c: New testcase.

Added:
    branches/gcc-4_8-branch/gcc/testsuite/gcc.dg/torture/pr57521.c
Modified:
    branches/gcc-4_8-branch/gcc/ChangeLog
    branches/gcc-4_8-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_8-branch/gcc/tree-if-conv.c


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

* [Bug tree-optimization/57521] [4.7 Regression] wrong code for expressions in loop at -O3
  2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
                   ` (4 preceding siblings ...)
  2013-09-09  9:51 ` rguenth at gcc dot gnu.org
@ 2013-10-25 10:30 ` rguenth at gcc dot gnu.org
  2014-03-18  8:47 ` rguenth at gcc dot gnu.org
  2014-03-18  8:47 ` rguenth at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-10-25 10:30 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
*** Bug 57608 has been marked as a duplicate of this bug. ***


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

* [Bug tree-optimization/57521] [4.7 Regression] wrong code for expressions in loop at -O3
  2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
                   ` (5 preceding siblings ...)
  2013-10-25 10:30 ` [Bug tree-optimization/57521] [4.7 " rguenth at gcc dot gnu.org
@ 2014-03-18  8:47 ` rguenth at gcc dot gnu.org
  2014-03-18  8:47 ` rguenth at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-03-18  8:47 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
Fixed.


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

* [Bug tree-optimization/57521] [4.7 Regression] wrong code for expressions in loop at -O3
  2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
                   ` (6 preceding siblings ...)
  2014-03-18  8:47 ` rguenth at gcc dot gnu.org
@ 2014-03-18  8:47 ` rguenth at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-03-18  8:47 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
Author: rguenth
Date: Tue Mar 18 08:46:21 2014
New Revision: 208632

URL: http://gcc.gnu.org/viewcvs?rev=208632&root=gcc&view=rev
Log:
2014-03-18  Richard Biener  <rguenther@suse.de>

    Backport from mainline
    2013-08-27  Richard Biener  <rguenther@suse.de>

    PR tree-optimization/57521
    * tree-if-conv.c (if_convertible_bb_p): Verify that at least
    one edge is non-critical.
    (find_phi_replacement_condition): Make sure to use a non-critical
    edge.  Cleanup and remove old bug workarounds.
    (bb_postdominates_preds): Remove.
    (if_convertible_loop_p_1): Do not compute post-dominators.
    (combine_blocks): Do not free post-dominators.
    (main_tree_if_conversion): Likewise.

    * gcc.dg/torture/pr57521.c: New testcase.

    2013-09-03  Richard Biener  <rguenther@suse.de>

    PR middle-end/57656
    * fold-const.c (negate_expr_p): Fix division case.
    (negate_expr): Likewise.

    * gcc.dg/torture/pr57656.c: New testcase.

    2013-11-19  Richard Biener  <rguenther@suse.de>

    PR tree-optimization/57517
    * tree-predcom.c (combinable_refs_p): Verify the combination
    is always executed when the refs are.

    * gfortran.fortran-torture/compile/pr57517.f90: New testcase.
    * gcc.dg/torture/pr57517.c: Likewise.

Added:
    branches/gcc-4_7-branch/gcc/testsuite/gcc.dg/torture/pr57517.c
    branches/gcc-4_7-branch/gcc/testsuite/gcc.dg/torture/pr57521.c
    branches/gcc-4_7-branch/gcc/testsuite/gcc.dg/torture/pr57656.c
   
branches/gcc-4_7-branch/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
Modified:
    branches/gcc-4_7-branch/gcc/ChangeLog
    branches/gcc-4_7-branch/gcc/fold-const.c
    branches/gcc-4_7-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_7-branch/gcc/tree-if-conv.c
    branches/gcc-4_7-branch/gcc/tree-predcom.c


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

end of thread, other threads:[~2014-03-18  8:47 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-04  0:47 [Bug tree-optimization/57521] New: wrong code for expressions in loop at -O3 dhazeghi at yahoo dot com
2013-06-04  5:33 ` [Bug tree-optimization/57521] [4.7/4.8/4.9 Regression] " jakub at gcc dot gnu.org
2013-06-04 12:19 ` rguenth at gcc dot gnu.org
2013-06-24 13:48 ` rguenth at gcc dot gnu.org
2013-08-27 10:12 ` [Bug tree-optimization/57521] [4.7/4.8 " rguenth at gcc dot gnu.org
2013-09-09  9:51 ` rguenth at gcc dot gnu.org
2013-10-25 10:30 ` [Bug tree-optimization/57521] [4.7 " rguenth at gcc dot gnu.org
2014-03-18  8:47 ` rguenth at gcc dot gnu.org
2014-03-18  8:47 ` rguenth 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).