-
Notifications
You must be signed in to change notification settings - Fork 808
Open
Labels
bugBug, regression, crashBug, regression, crashcorrectnessBugs that impact shader correctnessBugs that impact shader correctness
Milestone
Description
Description
When using float pow(float x, float y) intrinsic, supplying 0.0f for x should return 0.0f. This fails in some cases.
Steps to Reproduce
// dxc -T ps_6_0 -E main
#define TEST 0
// TEST = 0,3 - fails to optimize away log+mul+exp
// TEST = 1,2,4 - optimizes to return 0.0f
float main() : SV_Target0
{
#if TEST == 0
float x = 0.0f;
return pow(x, 2.2f);
#elif TEST == 1
const float x = 0.0f;
return pow(x, 2.2f);
#elif TEST == 2
float x = 0.0f;
return pow(x, 2.0f);
#elif TEST == 3
return pow(saturate(0.0f), 2.2f);
#else
return pow(0.0f, 2.2f);
#endif
}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
- DXC version: 1.8.2403 and latest main
- Host Operating System: any
Metadata
Metadata
Assignees
Labels
bugBug, regression, crashBug, regression, crashcorrectnessBugs that impact shader correctnessBugs that impact shader correctness
Type
Projects
Status
Triaged