const debugBlockOpt … // markReachable sets Index=-1 for all blocks reachable from b. func markReachable(b *BasicBlock) { … } // deleteUnreachableBlocks marks all reachable blocks of f and // eliminates (nils) all others, including possibly cyclic subgraphs. func deleteUnreachableBlocks(f *Function) { … } // jumpThreading attempts to apply simple jump-threading to block b, // in which a->b->c become a->c if b is just a Jump. // The result is true if the optimization was applied. func jumpThreading(f *Function, b *BasicBlock) bool { … } // fuseBlocks attempts to apply the block fusion optimization to block // a, in which a->b becomes ab if len(a.Succs)==len(b.Preds)==1. // The result is true if the optimization was applied. func fuseBlocks(f *Function, a *BasicBlock) bool { … } // optimizeBlocks() performs some simple block optimizations on a // completed function: dead block elimination, block fusion, jump // threading. func optimizeBlocks(f *Function) { … }