-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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
Unnecessary add emitted for repeated multiplication #75413
Comments
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsDescriptionNoted during work with #74020 , that a series of multiplications generates unnecessary operations. Here is the example Reproduction StepsUse snipets like this: public int T(int u1) {
return u1*2*2*2*2;
} Expected behaviorpublic int T(int u1) {
return u1*2*2*2*2;
} Generates:
Actual behaviorpublic int T(int u1) {
return u1*2*2*2*2;
} Generates:
Regression?No response Known WorkaroundsNo response ConfigurationNo response Other informationNo response
|
Hm, I might have posted my annotation to the wrong place (I'm not too familiar with the GitHub code review system). Repeating it here: SkiFoD@e248d75#diff-5b83397bbbdd17bb9457998b520fdaaa474d165390985b66f32371561b6d0bacR12766
Is it possible that this computation would overflow? It could overflow like 30+30 > 32. But could this also cause undefined behavior in the C code of the JIT when computing int.MaxValue + int.MaxValue? Is such a large shift amount possible? |
Your concerns are correct. I'm not sure if such a situation possible so the op tree would have int.max shifts. I think we need an opinion of someone from the team. |
@EgorBo I think there is a question above. |
Description
Noted during work with #74020 , that a series of multiplications generates unnecessary operations. Here is the example
I played with the code for a little bit and figured out that GT_MUL nodes were being optimized, but if GT_MUL op had the right child as a value of power of 2, then the operation converted into GT_LSH (here is the code).
So if we have a series of multiplications by 2 (for simplicity) as an example above, then we end up with a series of GT_LSH operations.
I asume that we can fold the series into one GT_LSH operation with a proper right hand value.
Reproduction Steps
Use snipets like this:
Expected behavior
Generates:
Actual behavior
Generates:
category:cq
theme:basic-cq
skill-level:beginner
cost:small
impact:small
The text was updated successfully, but these errors were encountered: