Commits

Doug Gregor committed 8cd63c9b8d3
Use the constraint graph to isolate and solve the smallest connected component. At each solution phase, construct a constraint graph and identify the smallest connected component. Only solve for the variables in that connected component, and restrict simplification to the constraints within that connected component. This reduces the number of visited-but-not-simplified constraints by ~2x when type-checking the standard library. Performance-wise, this is actually a regression (0.25s/8% when parsing the standard library), because the time spent building the constraint graph exceeds the time saved by the optimization above. The hackaround in the standard library is due to <rdar://problem/15168483>. Essentially, this commit changes the order in which we visit type variables, causing the type checker to make some very poor deduction choices. The point of actually committing this is that it validates the constraint graph construction and sets the stage for an actual optimization based on isolating the solving work for the different components. Swift SVN r10672