-
Notifications
You must be signed in to change notification settings - Fork 17.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cmd/compile: inliner does not inline binary.*Endian.Uint*
after many inlines in a big function
#68081
Comments
This comment was marked as outdated.
This comment was marked as outdated.
cc @golang/compiler |
binary.*Endian.Uint*
in some conditions which create very significant performance regressionbinary.*Endian.Uint*
in some conditions
binary.*Endian.Uint*
in some conditionsbinary.*Endian.Uint*
after many inlines in a big function
Well actually, I tried |
It's fixed by changing |
Hmm, we do treat |
I was about to say, if we have a list of hardcoded "cheap" functions we should also inline theses. |
Go version
go version devel go1.23-4f77a83589 Tue Jun 18 22:25:08 2024 +0000 linux/amd64
go version 1.22.4
go version 1.21.11
Output of
go env
in your module/workspace:What did you do?
Sorry for the huge reproducer, I couldn't minize well, I guess this has something to do with the caller aware inliner making poor decisions due to the function being huge.
What did you see happen?
What did you expect to see?
I expect to see raw
MOVQ
andMOVL
foru64
andu32
functions.Note: the bounds check would be proven at compile time, making a call strictly inferior as there are no panic index branch from
binary.*
.The text was updated successfully, but these errors were encountered: