HiPE: Add optimisation that eliminates redundant maps:is_key/2 calls #1069
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.
HiPE uses the built-in functions from the
maps
module to implement the map syntax. With the addition of more sophisticated map types in theerl_types
type system, HiPE can sometimes conclude at compile time what the result of calls tomaps:is_key/2
will be, but is unable to eliminate the call since the type system does not express freedom from side effects. This patch adds an optimisation pass that hard-codes BIFs that are side-effect free under certain conditions and eliminates calls to them when their results are known.The optimisation is written to be easily extensible to eliminate more BIFs.