Commits

Michael Gottesman committed e152746277b
[arc] Split GlobalARCPairingAnalysis into the matching set builder part and the top level driver . Move the top level driver of the pairing analysis into ARCSequenceOpts and have ARCSequenceOpts use ARCMatchingSetBuilder directly. This patch is the first in a series of patches that improve ARC compile time performance by ensuring that ARC only visits the full CFG at most one time. Previously when ARC was split into an analysis and a pass, the split in the codebase occurred at the boundary in between ARCSequenceOpts and ARCPairingAnalysis. I used a callback to allow ARCSequenceOpts to inject code into ARCPairingAnalysis. Now that the analysis has been moved together with the pass this unnecessarily complicates the code. More importantly though it creates obstacles towards reducing compile time by visiting the CFG only once. Specifically, we need to visit the full cfg once to gather interesting instructions. Then when performing the actual dataflow analysis, we only visit the interesting instructions. This causes an interesting problem since retains/releases can have dependencies on each other implying that I need to be able to update where various "interesting instructions" are located after ARC moves it. The "interesting instruction" information is stored at the pairing analysis level, but the moving/removal of instructions is injected in via the callback. By moving the top level driver part of ARCPairingAnalysis into ARCSequenceOpts, we simplify the code by eliminating the dependency injection callback and also make it easier to manage the cached CFG state in the face of the ARC optimizer moving/removing retains/releases.