Always inline rb_to_integer to prevent a method call penalty for integer types #2001
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.
On going through a hardware event trace of optcarrot in Intel VTune Amplifier I noticed
rb_to_int
showing up in the Core Bound category:I looked through the source in object.c and noticed it calls
rb_to_integer
which is also invoked from only one other callsite and noticed the early return onRB_INTEGER_TYPE_P
for integer types (bignum specifically). On re-running optcarrot CPI (cycles per instruction) went down significantly and I got similar values out of various runs:Inlining for this case does not bloat code size by much as the function is small and has only 2 callsites but does seem to improve CPI rate quite a bit.
optcarrot
benchmarks
Some noise but I think they're expected for some.