Two things I just noticed:
I think you need to maintain cfg->bblocks.
Also,
> + for (bb = cfg->bb_entry; bb; bb = bb->next_bb) {
> + if (bb->out_count > 1) {
> [...]
> + }
> + }
It would be much, much cleaner to have:
if (bb->out_count <= 1)
continue;
This saves an entire level of indentation.
-- Ben