public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra
@ 2012-10-06 18:19 zsojka at seznam dot cz
  2012-10-07 12:42 ` [Bug middle-end/54838] " mpolacek at gcc dot gnu.org
                   ` (20 more replies)
  0 siblings, 21 replies; 22+ messages in thread
From: zsojka at seznam dot cz @ 2012-10-06 18:19 UTC (permalink / raw)
  To: gcc-bugs


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

             Bug #: 54838
           Summary: [4.8 Regression] ICE: in merge_latch_edges, at
                    cfgloop.c:678 with -O2 -ftracer -fno-tree-dce
                    -fno-tree-sra
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: zsojka@seznam.cz


Created attachment 28376
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28376
reduced testcase

Compiler output:
$ gcc -O2 -ftracer -fno-tree-dce -fno-tree-sra testcase.C
testcase.C: In function '_ForwardIterator1 search(_ForwardIterator1,
_ForwardIterator1)':
testcase.C:113:3: internal compiler error: in merge_latch_edges, at
cfgloop.c:678
   }
   ^
0x840a29 merge_latch_edges
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:678
0x840a29 disambiguate_multiple_latches
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:741
0x840a29 disambiguate_loops_with_multiple_latches()
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:755
0xa49ed4 loop_optimizer_init(unsigned int)
        /mnt/svn/gcc-trunk/gcc/loop-init.c:78
0x12084de fwprop_init
        /mnt/svn/gcc-trunk/gcc/fwprop.c:1412
0x120869a fwprop
        /mnt/svn/gcc-trunk/gcc/fwprop.c:1459
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

Tested revisions:
r192080 - crash
r191586 - crash
4.7 r191640 - OK


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
@ 2012-10-07 12:42 ` mpolacek at gcc dot gnu.org
  2012-10-07 12:45 ` mpolacek at gcc dot gnu.org
                   ` (19 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-10-07 12:42 UTC (permalink / raw)
  To: gcc-bugs


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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-10-07
                 CC|                            |mpolacek at gcc dot gnu.org
     Ever Confirmed|0                           |1

--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-10-07 12:41:57 UTC ---
Confirmed.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
  2012-10-07 12:42 ` [Bug middle-end/54838] " mpolacek at gcc dot gnu.org
@ 2012-10-07 12:45 ` mpolacek at gcc dot gnu.org
  2012-10-08 12:05 ` rguenth at gcc dot gnu.org
                   ` (18 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-10-07 12:45 UTC (permalink / raw)
  To: gcc-bugs


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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

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

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-10-07 12:44:53 UTC ---
Started with http://gcc.gnu.org/viewcvs?view=revision&revision=185913


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
  2012-10-07 12:42 ` [Bug middle-end/54838] " mpolacek at gcc dot gnu.org
  2012-10-07 12:45 ` mpolacek at gcc dot gnu.org
@ 2012-10-08 12:05 ` rguenth at gcc dot gnu.org
  2012-10-18 18:25 ` zsojka at seznam dot cz
                   ` (17 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-10-08 12:05 UTC (permalink / raw)
  To: gcc-bugs


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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |4.8.0


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (2 preceding siblings ...)
  2012-10-08 12:05 ` rguenth at gcc dot gnu.org
@ 2012-10-18 18:25 ` zsojka at seznam dot cz
  2012-11-04  2:33 ` [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer mpolacek at gcc dot gnu.org
                   ` (16 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: zsojka at seznam dot cz @ 2012-10-18 18:25 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #3 from Zdenek Sojka <zsojka at seznam dot cz> 2012-10-18 18:24:42 UTC ---
Created attachment 28486
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28486
another testcase

This ICE seems to happen quite often when testing with 'random' flags...
-ftracer seems to be the common denominator.

$ gcc -O2 -fno-forward-propagate -ftracer testcase.c
testcase.c: In function 'foo':
testcase.c:20:1: internal compiler error: in merge_latch_edges, at
cfgloop.c:678
 }
 ^
linux-vdso.so.1: No such file or directory
0x6a7028 merge_latch_edges
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:678
0x6a7028 disambiguate_multiple_latches
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:741
0x6a7028 disambiguate_loops_with_multiple_latches()
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:755
0x8b2794 loop_optimizer_init(unsigned int)
        /mnt/svn/gcc-trunk/gcc/loop-init.c:78
0x8b285a rtl_loop_initgcc -O2 -fno-forward-propagate -ftracer testcase.c
testcase.c: In function 'foo':
testcase.c:20:1: internal compiler error: in merge_latch_edges, at
cfgloop.c:678
 }
 ^
linux-vdso.so.1: No such file or directory
0x6a7028 merge_latch_edges
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:678
0x6a7028 disambiguate_multiple_latches
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:741
0x6a7028 disambiguate_loops_with_multiple_latches()
        /mnt/svn/gcc-trunk/gcc/cfgloop.c:755
0x8b2794 loop_optimizer_init(unsigned int)
        /mnt/svn/gcc-trunk/gcc/loop-init.c:78
0x8b285a rtl_loop_init
        /mnt/svn/gcc-trunk/gcc/loop-init.c:219
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

        /mnt/svn/gcc-trunk/gcc/loop-init.c:219
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (3 preceding siblings ...)
  2012-10-18 18:25 ` zsojka at seznam dot cz
@ 2012-11-04  2:33 ` mpolacek at gcc dot gnu.org
  2012-11-04 12:49 ` mpolacek at gcc dot gnu.org
                   ` (15 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-11-04  2:33 UTC (permalink / raw)
  To: gcc-bugs


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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
         AssignedTo|unassigned at gcc dot       |mpolacek at gcc dot gnu.org
                   |gnu.org                     |

--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-11-04 02:33:36 UTC ---
Looking into it.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (4 preceding siblings ...)
  2012-11-04  2:33 ` [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer mpolacek at gcc dot gnu.org
@ 2012-11-04 12:49 ` mpolacek at gcc dot gnu.org
  2012-11-08  9:12 ` mpolacek at gcc dot gnu.org
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-11-04 12:49 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-11-04 12:49:27 UTC ---
I think the problem is that we somehow arrive at this:
  loop_1 (header = 2, multiple latches, niter = )
  {
    bb_2 (preds = {bb_0 }, succs = {bb_4 bb_3 })
    {
(note 5 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 2 5 3 2 (set (reg/v/f:DI 60 [ b ])
        (reg:DI 5 di [ b ])) ./pr54838.c:5 63 {*movdi_internal_rex64}
     (nil))
(insn 3 2 4 2 (set (reg/v/f:DI 61 [ c ])
        (reg:DI 4 si [ c ])) ./pr54838.c:5 63 {*movdi_internal_rex64}
     (nil))
(note 4 3 7 2 NOTE_INSN_FUNCTION_BEG)
(insn 7 4 14 2 (set (reg:SI 59 [ D.1735 ])
        (mem:SI (reg/v/f:DI 61 [ c ]) [2 *c_3(D)+0 S4 A32])) 65
{*movsi_internal}
     (nil))
(insn 14 7 15 2 (set (reg:CCZ 17 flags)
        (compare:CCZ (reg:SI 59 [ D.1735 ])
            (const_int 1 [0x1]))) ./pr54838.c:7 7 {*cmpsi_1}
     (nil))
(jump_insn 15 14 38 2 (set (pc)
        (if_then_else (eq (reg:CCZ 17 flags)
                (const_int 0 [0]))
            (label_ref:DI 20)
            (pc))) ./pr54838.c:7 595 {*jcc_1}
     (expr_list:REG_BR_PROB (const_int 3333 [0xd05])
        (nil))
 -> 20)

    }
  }
, i.e. we have a loop which contains only the header.  The rest of BBs are
there, but in loop_0.  When we call disambiguate_loops_with_multiple_latches,
loop->latch is NULL on that loop, so we end up calling merge_latch_edges, but
that ICEs because VEC_length (edge, latches) is of course 0.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (5 preceding siblings ...)
  2012-11-04 12:49 ` mpolacek at gcc dot gnu.org
@ 2012-11-08  9:12 ` mpolacek at gcc dot gnu.org
  2012-11-24 11:53 ` mpolacek at gcc dot gnu.org
                   ` (13 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-11-08  9:12 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-11-08 09:12:01 UTC ---
And I'd say that something in bypass_block from cprop.c is the culprit.  Not
calling bypass_block -> no ICE, and compilation proceeds fine.  Working on a
patch.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (6 preceding siblings ...)
  2012-11-08  9:12 ` mpolacek at gcc dot gnu.org
@ 2012-11-24 11:53 ` mpolacek at gcc dot gnu.org
  2012-11-26 14:30 ` mpolacek at gcc dot gnu.org
                   ` (12 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-11-24 11:53 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #7 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-11-24 11:53:19 UTC ---
So, in .cse1 we have:

            ENTRY    
             |   
             |   
             2   
             |   
             |   
   +-------- 4 ----------+
   |        / \          |   
   |       /   \         |   
   |      6     5        |   
   |     /\     |\       |   
   |    /  \    | \      |   
   |   7    3   |  8     |   
   |   |    |   |  /\    /   
   +---|----|   | /  \  /
       |      --10    9/  
       |    -/  
      EXIT-/

(3->4 and 9->4 are back edges).  Now, in bypass_block, when we're trying to
bypass BB 4, we iterate over BB 4's incoming edges.  We skip certain edges
(e.g. complex), then we're iterating over reg_use_table (registers used in
insn).  Here we call
set = find_bypass_set (regno, e->src->index);
If set == NULL, we skip to another iteration.  But in this case the set is not
NULL, and we end up with this:
Redirecting fallthru edge 3->4 to 6
JUMP-BYPASS: Proved reg 59 in jump_insn 15 equals constant (const_int 1 [0x1])
Bypass edge from 3->4 to 6
Redirecting fallthru edge 9->4 to 5
JUMP-BYPASS: Proved reg 59 in jump_insn 15 equals constant (const_int 3 [0x3])
Bypass edge from 9->4 to 5
but how can be two different constants in one reg?  The hash table is:
SET hash table (11 buckets, 3 entries)
Index 0 (hash value 4)
  (reg:SI 59 [ D.1735 ]) := (const_int 1 [0x1])
Index 1 (hash value 5)
  (reg/v/f:DI 60 [ b ]) := (const_int 0 [0])
Index 2 (hash value 4)
  (reg:SI 59 [ D.1735 ]) := (const_int 3 [0x3])

redirect_edge_and_branch_force then redirect edges and BB 4 is gone.

I'd say we cannot redirect edges of BBs which have 2 and more incoming back
edges if in the hash table there are more entries with the same hash values,
but the SRC rtx's differ.  I'll post something to ML.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (7 preceding siblings ...)
  2012-11-24 11:53 ` mpolacek at gcc dot gnu.org
@ 2012-11-26 14:30 ` mpolacek at gcc dot gnu.org
  2012-12-02 20:17 ` mpolacek at gcc dot gnu.org
                   ` (11 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-11-26 14:30 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #8 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-11-26 14:29:59 UTC ---
Patch posted: http://gcc.gnu.org/ml/gcc-patches/2012-11/msg02095.html


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (8 preceding siblings ...)
  2012-11-26 14:30 ` mpolacek at gcc dot gnu.org
@ 2012-12-02 20:17 ` mpolacek at gcc dot gnu.org
  2012-12-02 20:18 ` mpolacek at gcc dot gnu.org
                   ` (10 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-12-02 20:17 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #9 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-12-02 20:17:16 UTC ---
Author: mpolacek
Date: Sun Dec  2 20:16:09 2012
New Revision: 194060

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=194060
Log:
PR54838

Added:
    trunk/gcc/testsuite/gcc.dg/pr54838.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/cprop.c
    trunk/gcc/testsuite/ChangeLog


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (9 preceding siblings ...)
  2012-12-02 20:17 ` mpolacek at gcc dot gnu.org
@ 2012-12-02 20:18 ` mpolacek at gcc dot gnu.org
  2012-12-03  9:28 ` mpolacek at gcc dot gnu.org
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-12-02 20:18 UTC (permalink / raw)
  To: gcc-bugs


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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

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

--- Comment #10 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-12-02 20:17:54 UTC ---
Fixed.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (10 preceding siblings ...)
  2012-12-02 20:18 ` mpolacek at gcc dot gnu.org
@ 2012-12-03  9:28 ` mpolacek at gcc dot gnu.org
  2012-12-07 11:47 ` rguenth at gcc dot gnu.org
                   ` (8 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-12-03  9:28 UTC (permalink / raw)
  To: gcc-bugs


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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

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

--- Comment #11 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-12-03 09:28:38 UTC ---
Oh, but the C++ testcase still ICEs...


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (11 preceding siblings ...)
  2012-12-03  9:28 ` mpolacek at gcc dot gnu.org
@ 2012-12-07 11:47 ` rguenth at gcc dot gnu.org
  2012-12-14 14:59 ` jakub at gcc dot gnu.org
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-12-07 11:47 UTC (permalink / raw)
  To: gcc-bugs


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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P1


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (12 preceding siblings ...)
  2012-12-07 11:47 ` rguenth at gcc dot gnu.org
@ 2012-12-14 14:59 ` jakub at gcc dot gnu.org
  2012-12-14 15:23 ` jakub at gcc dot gnu.org
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-12-14 14:59 UTC (permalink / raw)
  To: gcc-bugs


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

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

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

--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-14 14:58:41 UTC ---
I see the same ICE also during bootstrap if ada/targparm.adb is built with
-fstack-protector (I have -fstack-protector in CFLAGS/CXXFLAGS/XCFLAGS/TCFLAGS
during configure among other things):

/home/jakub/rpmbuild/BUILD/gcc-4.8.0-20121213/obj-x86_64-redhat-linux/./prev-gcc/xgcc
-B/home/jakub/rpmbuild/BUILD/gcc-4.8.0-20121213/obj-x86_64-redhat-linux/./prev-gcc/
-isystem /usr/x86_64-redhat-linux/include -isystem
/usr/x86_64-redhat-linux/sys-include -c -O2 -fstack-protector  -gnatpg -gnata
-gnatwns -W -Wall -nostdinc -I- -I. -Iada -I../../gcc/ada
-I../../gcc/ada/gcc-interface ../../gcc/ada/targparm.adb -o ada/targparm.o
+===========================GNAT BUG DETECTED==============================+
| 4.8.0 20121213 (Red Hat 4.8.0-0.1) (x86_64-redhat-linux) GCC error:      |
| in merge_latch_edges, at cfgloop.c:678                                   |
| Error detected around ../../gcc/ada/targparm.adb:649:8                   |
| Please submit a bug report; see http://gcc.gnu.org/bugs.html.            |
...


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (13 preceding siblings ...)
  2012-12-14 14:59 ` jakub at gcc dot gnu.org
@ 2012-12-14 15:23 ` jakub at gcc dot gnu.org
  2012-12-14 15:53 ` jakub at gcc dot gnu.org
                   ` (5 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-12-14 15:23 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-14 15:22:37 UTC ---
Actually it is either -fstack-protector or -fprofile-generate or both that
trigger it.  Haven't tried vanilla trunk profiledbootstrap though yet.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (14 preceding siblings ...)
  2012-12-14 15:23 ` jakub at gcc dot gnu.org
@ 2012-12-14 15:53 ` jakub at gcc dot gnu.org
  2012-12-14 16:13 ` mpolacek at gcc dot gnu.org
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-12-14 15:53 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-14 15:53:30 UTC ---
Ok, reproduced with vanilla trunk, starting from gcc 4.7.2:
../configure --enable-languages=all,obj-c++,ada,go --enable-checking=release
make -j48 profiledbootstrap


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (15 preceding siblings ...)
  2012-12-14 15:53 ` jakub at gcc dot gnu.org
@ 2012-12-14 16:13 ` mpolacek at gcc dot gnu.org
  2012-12-14 16:15 ` mpolacek at gcc dot gnu.org
                   ` (3 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-12-14 16:13 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #15 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-12-14 16:12:48 UTC ---
The issue here is that we have a loop with header and two latches, and via
delete_basic_block we delete both latches (and all edges of those two latches).
 So, we don't have a loop anymore, but the header has still loop_depth > 0,
merge_latch_edges of course ICEs on it, because there's an assert:
gcc_assert (latches.length () > 0);
but the latches are already gone.  I think that in this case we want to just
set the loop->header to NULL (or cancel_loop_tree, or unloop, or...).  What I
have in mind is basically something like:
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -552,6 +552,23 @@ delete_basic_block (basic_block bb)
          loops_state_set (LOOPS_NEED_FIXUP);
        }

+      if (loop->header
+         && bb->loop_father != current_loops->tree_root)
+       {
+         edge_iterator ei;
+         edge e;
+         unsigned n_back_edges = 0;
+
+         FOR_EACH_EDGE (e, ei, loop->header->preds)
+           if (e->flags & EDGE_DFS_BACK)
+             n_back_edges++;
+
+         if (n_back_edges == 0)
+           {
+             loop->header = NULL;
+             loops_state_set (LOOPS_NEED_FIXUP);
+           }
+       }
       remove_bb_from_loops (bb);
     }
this fixes this ICE, but causes other ICEs.

I'd be really really grateful for any hints.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (16 preceding siblings ...)
  2012-12-14 16:13 ` mpolacek at gcc dot gnu.org
@ 2012-12-14 16:15 ` mpolacek at gcc dot gnu.org
  2012-12-14 16:38 ` mpolacek at gcc dot gnu.org
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-12-14 16:15 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #16 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-12-14 16:14:58 UTC ---
(The reason why we don't have a loop anymore is simply that the header doesn't
have any incoming back edges after removing the latches.  There of course may
be other loops in the CFG.)


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (17 preceding siblings ...)
  2012-12-14 16:15 ` mpolacek at gcc dot gnu.org
@ 2012-12-14 16:38 ` mpolacek at gcc dot gnu.org
  2012-12-18 14:40 ` rguenth at gcc dot gnu.org
  2012-12-18 14:41 ` rguenth at gcc dot gnu.org
  20 siblings, 0 replies; 22+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2012-12-14 16:38 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #17 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-12-14 16:37:39 UTC ---
Now I don't know why we'd need that hunk, the code for handling latch/header is
just above it, only loop->latch is NULL, because there are more of them.  Sorry
for the noise, I'll be looking into it over the weekend.


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (18 preceding siblings ...)
  2012-12-14 16:38 ` mpolacek at gcc dot gnu.org
@ 2012-12-18 14:40 ` rguenth at gcc dot gnu.org
  2012-12-18 14:41 ` rguenth at gcc dot gnu.org
  20 siblings, 0 replies; 22+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-12-18 14:40 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #18 from Richard Biener <rguenth at gcc dot gnu.org> 2012-12-18 14:39:55 UTC ---
Author: rguenth
Date: Tue Dec 18 14:39:49 2012
New Revision: 194582

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

    PR middle-end/54838
    * cfgloopmanip.c (fix_loop_structure): Re-discover latch
    edges first and mark loops for removal if no latch edges remain.
    Properly re-create LOOPS_HAVE_FALLTHRU_PREHEADERS.
    * loop-init.c (loop_optimizer_finalize): Set
    LOOPS_MAY_HAVE_MULTIPLE_LATCHES.

    * g++.dg/torture/pr54838.C: New testcase.

Added:
    trunk/gcc/testsuite/g++.dg/torture/pr54838.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/cfgloopmanip.c
    trunk/gcc/loop-init.c
    trunk/gcc/testsuite/ChangeLog


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

* [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer
  2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
                   ` (19 preceding siblings ...)
  2012-12-18 14:40 ` rguenth at gcc dot gnu.org
@ 2012-12-18 14:41 ` rguenth at gcc dot gnu.org
  20 siblings, 0 replies; 22+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-12-18 14:41 UTC (permalink / raw)
  To: gcc-bugs


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

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

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

--- Comment #19 from Richard Biener <rguenth at gcc dot gnu.org> 2012-12-18 14:40:28 UTC ---
Fixed.


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

end of thread, other threads:[~2012-12-18 14:41 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-06 18:19 [Bug middle-end/54838] New: [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -O2 -ftracer -fno-tree-dce -fno-tree-sra zsojka at seznam dot cz
2012-10-07 12:42 ` [Bug middle-end/54838] " mpolacek at gcc dot gnu.org
2012-10-07 12:45 ` mpolacek at gcc dot gnu.org
2012-10-08 12:05 ` rguenth at gcc dot gnu.org
2012-10-18 18:25 ` zsojka at seznam dot cz
2012-11-04  2:33 ` [Bug middle-end/54838] [4.8 Regression] ICE: in merge_latch_edges, at cfgloop.c:678 with -ftracer mpolacek at gcc dot gnu.org
2012-11-04 12:49 ` mpolacek at gcc dot gnu.org
2012-11-08  9:12 ` mpolacek at gcc dot gnu.org
2012-11-24 11:53 ` mpolacek at gcc dot gnu.org
2012-11-26 14:30 ` mpolacek at gcc dot gnu.org
2012-12-02 20:17 ` mpolacek at gcc dot gnu.org
2012-12-02 20:18 ` mpolacek at gcc dot gnu.org
2012-12-03  9:28 ` mpolacek at gcc dot gnu.org
2012-12-07 11:47 ` rguenth at gcc dot gnu.org
2012-12-14 14:59 ` jakub at gcc dot gnu.org
2012-12-14 15:23 ` jakub at gcc dot gnu.org
2012-12-14 15:53 ` jakub at gcc dot gnu.org
2012-12-14 16:13 ` mpolacek at gcc dot gnu.org
2012-12-14 16:15 ` mpolacek at gcc dot gnu.org
2012-12-14 16:38 ` mpolacek at gcc dot gnu.org
2012-12-18 14:40 ` rguenth at gcc dot gnu.org
2012-12-18 14:41 ` 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).