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

Uros Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |i686-pc-linux-gnu
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2011.04.26 08:13:21
                 CC|                            |ubizjak at gmail dot com
     Ever Confirmed|0                           |1
      Known to fail|                            |4.5.3, 4.6.1, 4.7.0

--- Comment #1 from Uros Bizjak <ubizjak at gmail dot com> 2011-04-26 08:13:21 
UTC ---
Confirmed with current mainline (-O2 -m32), we ICE in reg-stack.c,
compensate_edge:

  /* We don't support abnormal edges.  Global takes care to
     avoid any live register across them, so we should never
     have to insert instructions on such edges.  */
  gcc_assert (! (e->flags & EDGE_ABNORMAL));

Where _.f.210r.stack shows that we want to compensate abnormal edges from bb 8:

Edge 8->13: no changes needed
Edge 8->9: correcting stack to empty
Edge 8->12: correcting stack to empty
Edge 8->11: correcting stack to empty

...

;; End of basic block 8 -> ( 13 9 12 11)
;; lr  out      7 [sp] 10 [st(2)] 11 [st(3)]
;; live  out      7 [sp] 10 [st(2)] 11 [st(3)]


;; Succ edge  13 [25.0%]  (ab,loop_exit)
;; Succ edge  9 [25.0%]  (ab,loop_exit)
;; Succ edge  12 [25.0%]  (ab,loop_exit)
;; Succ edge  11 [25.0%]  (ab)

Apparently, global does not work as expected.

Reply via email to