[mypyc] Add faster primitive for string equality#19402
Merged
Conversation
This speeds up self check by ~1.4%. String equality is one of the top five most common primitive function calls in self check. We previously used a string comparison primitive that calculated the relative order of two strings. Usually we only care about equality, which we can do quicker since we can fast path using a length check, for example. I checked the CPython implementation of string equality in 3.9 (lowest supported Python version) and 3.13, and both of them had a fast path based on string object kind, and equality checks overall have the same semantics.
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 speeds up self check by ~1.4%. String equality is one of the top
five most common primitive function calls in self check.
We previously used a string comparison primitive that calculated the
relative order of two strings. Usually we only care about equality,
which we can do quicker since we can fast path using a length check,
for example.
I checked the CPython implementation of string equality in 3.9 (lowest
supported Python version) and 3.13, and both of them had a fast path
based on string object kind, and equality checks overall had the same
semantics.
Current CPython implementation:
https://github.com/python/cpython/blob/main/Objects/stringlib/eq.h
Tests for this were added in #19401.