We currently explicitly store the last reaching def at the end of a basic block. However, this information is already available as the last element in the reaching definitions vector -- they only differ in whether the reaching def is relative to the start or the end of the basic block.
This patch removes the separate MBBOutRegsInfos and instead computes the incoming reaching defs on the fly. For that purpose it does cache the number of (non-debug) instructions in each block.
Assuming D77513 as baseline, this drops the memory requirement per basic block per reg unit from 12 to 8 bytes, which makes for an extra 1% saving on sqlite compilation. It's not completely free (with about 0.05% increase in instructions retired), but that seems like a good tradeoff.
Maybe now would be a good time to encapsulate these MBB details in their own class, instead of several separate vectors and a vector of vectors?