type-contract: merge vector and hash types earlier #1282
Merged
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.
Context:
(Vector T) is implemented as the union of two types. Enforcing the
type with two contracts is inefficient; we want one merged contract.
Same for (HashTable K V), which is implemented as three types.
This commit replaces the old static-contract merging with a type merging.
The problem with static contract merging is that it happens after the "typed-side" optimization kicks in --- which meant that two types with equal components could end up as static contracts with unequal components. This was a huge practical problem in the GTP benchmark
dungeon
... the fix lowers the runtime for one loop in the worst case down from 30 seconds to 1/2 second.