spv/lift: use loop body entry (instead of exit), as the "continue" target. #10
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.
As we have no
break
edges out of SPIR-T loop bodies, any point in the loop body (not nested in another selection/loop) is a valid "continue" target, and we can spare a block by making the whole body that.In WGSL loops, this corresponds to moving the rest of the loop body (not using
break
/continue
) into thecontinuing {...}
block. (but examples are hard becausebreak if
isn't implemented yet in Naga, and ourdo
-while
-style loops use SPIR-V "conditional back-edges" which in WGSL requirebreak if
- see gfx-rs/naga#1977 (comment) for more details/context)For
tests/data/for-loop.wgsl.spvasm
(afterspirv-as
->spv-lower-link-lift
->spirv-dis
), the change is:(on the "after" side I had to use
sed 's/%27/%28/g'
on to make the diff more readable wrt renumbering)