[mypyc] Add lowered primitive for unsafe list get item op#18136
Merged
[mypyc] Add lowered primitive for unsafe list get item op#18136
Conversation
This inlines the list get item op in loops like `for x in <list>`. I estimated the impact using two microbenchmarks that iterate over `list[int]` objects. One of them was 1.3x faster, while the other was 1.09x faster. Since we now generate detailed IR for the op, instead of using a C primitive function, this also opens up further IR optimization opportunities in the future.
Collaborator
Author
|
This seems broken on 32-bit platforms. I may need to tweak some integer sizes. |
svalentin
approved these changes
Dec 9, 2024
mypyc/lower/list_ops.py
Outdated
| def list_item_ptr(builder: LowLevelIRBuilder, obj: Value, index: Value, line: int) -> Value: | ||
| """Get a pointer to a list item (index must be valid and non-negative). | ||
|
|
||
| Type of index must be c_pyssize_t_rprimitive. |
Collaborator
There was a problem hiding this comment.
Might be useful to add a doc/comment about the internal representation of lists.
I assume it's a just a list of pointers, and that's why we assume it's pyssize_t per element. And we translate &list[index] to list + size_t*index. (or something similar to this)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This inlines the list get item op in loops like
for x in <list>.I estimated the impact using two microbenchmarks that iterate over
list[int]objects. One of them was 1.3x faster, while the other was 1.09x faster.Since we now generate detailed IR for the op, instead of using a C primitive function, this also opens up further IR optimization opportunities in the future.