http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56486
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-03-01 CC| |jakub at gcc dot gnu.org Target Milestone|--- |4.6.4 Summary|infinite loop in cc1 at -O1 |[4.6/4.7 Regression] |and above |infinite loop in cc1 at -O1 | |and above Ever Confirmed|0 |1 --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-03-01 10:10:09 UTC --- Fixed on trunk by http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187053 which made gsi_for_stmt O(1). Random interruption in gdb shows that most time is spent in #0 0x00000000008bddd5 in gsi_next (i=0x7fffffffdb90) at ../../gcc/gimple.h:4945 #1 0x00000000008bf07a in gsi_for_stmt (stmt=0x7ffff1393b00) at ../../gcc/gimple-iterator.c:560 #2 0x0000000000cfe4dc in remove_visited_stmt_chain (var=0x7ffff1394e10) at ../../gcc/tree-ssa-reassoc.c:2228 #3 0x0000000000cfeb5b in rewrite_expr_tree (stmt=0x7ffff1393c60, opindex=0, ops=0x3505a80, moved=0 '\000') at ../../gcc/tree-ssa-reassoc.c:2383 #4 0x0000000000d02614 in reassociate_bb (bb=0x7ffff1580750) at ../../gcc/tree-ssa-reassoc.c:3607 #5 0x0000000000d02691 in reassociate_bb (bb=0x7ffff15806e8) at ../../gcc/tree-ssa-reassoc.c:3617 #6 0x0000000000d0277f in do_reassoc () at ../../gcc/tree-ssa-reassoc.c:3650 #7 0x0000000000d02b57 in execute_reassoc () at ../../gcc/tree-ssa-reassoc.c:3742 or similar. Guess for 4.7 and 4.6 perhaps remove_visited_stmt_chain should before trying gsi_for_stmt test whether gsi from previous iteration isn't in the same bb as the stmt we'd call gsi_for_stmt on, and if yes, walk from that gsi backwards manually instead of calling gsi_for_stmt (because, the definitions generally should be before the uses). That would make remove_visited_stmt_chain linear complexity instead of quadratic.