When running IPSCCP on a module with many small functions, memory usage is currently dominated by PredicateInfo, which is a huge structure (partially due to some unfortunate nested SmallVector use). However, most of it is actually only temporary analysis state, and does not need to be retained after initial construction.
This patch factors the temporary state out into a separate structure that is only live during the analysis.