You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I think the root cause of this issue is that we generate DXIL op expansion log2+mul+exp (since we had no constant evaluation of the HL operation during CodeGen), and when it comes time to constant-evaluate the DXIL intrinsics, we bail if any FP exceptions occur (log2(0) = -INF), so the operations are not eliminated. In fact, I'm a bit surprised it succeeds for some of the cases here.
First, I think the general issue needs to be solved to produce the well-defined results for the DXIL ops instead of bailing in FP special cases.
Second, we should have evaluation of more HL operations on literals before lowering to DXIL expansions in the first place.
Third, for ops with reasonable special cases like this, we can detect these and replace them with the expected result during CodeGen.
Description
When using
float pow(float x, float y)
intrinsic, supplying0.0f
forx
should return0.0f
. This fails in some cases.Steps to Reproduce
See repro in Compiler Explorer.
Actual Behavior
When TEST = 0,3 - fails to optimize away log+mul+exp.
When TEST = 1,2,4 - optimizes to return 0.0f (expected behavior for all cases).
Environment
The text was updated successfully, but these errors were encountered: