On Thu, Sep 24, 2015 at 12:06 AM, Segher Boessenkool wrote: > + /* First, collect all edges that can be optimized by reordering blocks: > + simple jumps and conditional jumps, as well as the function entry edge. > */ > + > + int n = 0; > + edges[n++] = EDGE_SUCC (ENTRY_BLOCK_PTR_FOR_FN (cfun), 0); > + > + basic_block bb; > + FOR_EACH_BB_FN (bb, cfun) > + { > + rtx_insn *end = BB_END (bb); > + > + if (computed_jump_p (end) || tablejump_p (end, NULL, NULL)) > + continue;
Should handle ASM jumps. > + FOR_ALL_BB_FN (bb, cfun) > + bb->aux = bb; Bit tricky for the ENTRY and EXIT blocks, that are not really basic blocks. After the pass, EXIT should not end up pointing to itself. Maybe use FOR_EACH_BB_FN and set ENTRY separately? Other than that, looks good to me. Ciao! Steven