The experimental code OutlineOptionalBranches of machine block placement requires updated UnavoidableBlocks if tail merging is called during the placement.
OutlineOptionalBranches partitions blocks into two groups, unavoidable blocks which dominates all the return blocks and the rest. During the layout, blocks in each group are placed consecutively. Unavoidable blocks are placed at the top and the rest blocks are at the bottom.
This patch caches and maintains the set of UnavoidableBlocks during tail merging so that we don't need to recalculate it when the layout is called again.