Fix deserialization to avoid invoking a pass N times per function #69250
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Deserialization is calling AccessMarkerElimination repeatedly on the same function.
The bug was introduced here:
commit 872bf40
Date: Mon Aug 13 10:24:20 2018
Where the code that uniques the deserialization callbacks was simply removed!
As a result, this pass was being invoked a number of times equal to the number of functions in the module multiplied by the number of functions being deserialized.
Fixes rdar://117141871 (Building spends most of its time in AccessMarkerElimination)