Add fast paths for Math(f).pow #1053
Merged
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.
I saw some people prefer use
Math.pow(x, 2)
insteadx * x
orx ** -0.5
instead1 / Math.sqrt(x)
.Optimally this cases should replaces during std calls simplify transform in compile time. For example LLVM have
SimplifyLibCalls
transform for that but our Mid-end IR still in progress. So I introduce temporary solution for that with fast paths inside Math.pow / Mathf.pow which will be removed in future.Binaryen could sometimes reduce this functions with const second argument via DAE pass (dead argument elimination).
Fast and safe cases: