Rewrite dynamic access solving
Summary:
Switches to a set representation for dynamic accesses within the solver.
The diff also moves away from using the transitive closure of the subset relation to propagate the constraint and does so in a semi-naïve manner by only considering each new generation at each iteration.
This diff is behaviour changing, we previously propagated the constraint backwards in the subset relation or forwards, but didn't allow for a combination of both. For example, if we had a dynamic access to a CoW array, we'd propagate to the other arrays based off of it, but not to any birfurcations from the previous array. See the test case.
Differential Revision:
D38501367
fbshipit-source-id:
0797f6ab96d78190969ca64d472277d89ff38e45