[Bug rtl-optimization/56181] [4.8 Regression] ICE in verify_loop_structure, at cfgloop.c:1581 with -ftracer

mpolacek at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Feb 5 12:16:00 GMT 2013


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

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> 2013-02-05 12:16:08 UTC ---
So, what happens here is that tracer performs tail-duplication.  That is per se
of course fine, but when we're re-scanning bodies in fix_loop_structure, we
correctly mark BBs in the loop 1, then the loop 3, but then when processing the
loop 2, in flow_loop_nodes_find, we mark tail-duplicated BB as belonging into
the loop 2, because
  FOR_EACH_EDGE (latch, latch_ei, loop->header->preds)
    {    
      if (latch->src->loop_father == loop 
          || !dominated_by_p (CDI_DOMINATORS, latch->src, loop->header))
        continue;
doesn't notice that the BB is in fact outside of the loop.  Which is bad - we
then process predecessors of that BB and mark the BBs in loop 3 as belonging
into loop 2.  Oops.



More information about the Gcc-bugs mailing list