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