Remove 'raw' default construct insts for SPIRV emit #5556
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.
Our auto-diff step currently emits a few 'raw'
OpDefaultConstruct
insts for intermediate data types, mostly to silence HLSL errors about uninitialized variables. This is a redundant inst, because our auto-diff pass will always make sure all generated fields are individually set.Usually, these intermediate types are made up of zero-initializable types so they get lowered to
OpMakeStruct
, so targets like SPIRV whereOpDefaultConstruct
does not exist don't run into issues.For some special types, it is not easy (or safe) to emit such zero initializers, so we will instead run a pass to remove
OpDefaultConstruct
for backends where it is not available (thankfully, these backends do not complain about uninitialized variables, so the code correctness is unaffected)