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

--- Comment #7 from Steven Bosscher <steven at gcc dot gnu.org> ---
find_many_sub_basic_blocks calls make_edges. Things go bad from there.
A block ending in an indirect_jump is marked for find_many_sub_bbs (but
actually the basic block boundaries are not changed) and gets passed
to make_edges (with min==max==bb). The bb looks like this:

basic block 33, loop depth 0, count 0, freq 0, probably never executed
Invalid sum of outgoing probabilities 0.0%
Invalid sum of incoming frequencies 199, should be 0
 prev block 32, next block 1, flags: (NEW, REACHABLE, COLD_PARTITION, RTL,
MODIFIED)
 pred:       26 [25.0%]
;; bb 33 artificial_defs: { }
;; bb 33 artificial_uses: { u-1(30){ }}
;; lr  in        1 [$1] 2 [$2] 3 [$3] 5 [$5] 26 [$26] 29 [$29] 30 [$30]
;; lr  use       30 [$30]
;; lr  def       4 [$4]
;; live  in      1 [$1] 2 [$2] 3 [$3] 5 [$5] 26 [$26] 30 [$30]
;; live  gen     4 [$4]
;; live  kill

  395: L395:
  397: NOTE_INSN_BASIC_BLOCK 33
  478: $4:DI=$29:DI+high(L54)
      REG_EQUAL high(L54)
  436: $4:DI=$4:DI+low(L54)
      REG_EQUIV L54
      REG_LABEL_OPERAND code_label
  437: pc=$4:DI
      REG_CROSSING_JUMP (nil)
;; lr  out       1 [$1] 2 [$2] 3 [$3] 5 [$5] 26 [$26] 29 [$29] 30 [$30]
;; live  out     1 [$1] 2 [$2] 3 [$3] 5 [$5] 26 [$26] 30 [$30]

 succ:       11 (CROSSING)
             22 (ABNORMAL)

With this we go to make_edges, which does:

          /* If this is a computed jump, then mark it as reaching
             everything on the forced_labels list.  */
          else if (computed_jump_p (insn))
            {
              for (x = forced_labels; x; x = XEXP (x, 1))
                make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL);
            }

The first forced_label in the list is the head of basic block 12.
There is no edge 33->12 so we create one.  Without the right flags...

(Why that edge is not there to begin with, I don't know, but I suspect that
the block's outgoing edges were simply carried over from GIMPLE and never
needed updating...)

Reply via email to