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.