Added new IfConditionalConversion to fold nested and-also and or-else block chains #328
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.
Currently, ILGPU cannot fold nested
&&
and||
CFG-based block jumps into logical&
and|
operations. This PR adds a new transformation calledIfConditionalConversion
, which converts such block jumps into efficient logical operations without branches.Consider the sample below:
which can be compiled using
v0.9.2
+O2
into the following sequence of PTX instructions:With the help of this PR this piece of code is then converted into (since all blocks are considered "small enough" and have no side effects):
which results in the following sequence of PTX instructions: