[Bugfix] Fixed bug where shifting by out-of-bounds value results in no compute code being emitted. #5115
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.
Bug
For operations
<<
and>>
when the RHS is an IntImm with values that are negative or greater than or equal to the number of bits in the integer being shifted results in LLVM emitting no code for thetvm.compute
.Example
Fix
Limit the RHS immediate values of
<<
and>>
to be within a valid range. For example the new behaviour would be:Explanation
LLVM constant folding silently replaces an out-of-bounds shift to an
undef
as seen here. Then any other parts of the expression are composed with the undef ((4 * a) + undef -> undef
in above example) and become undef as well. Therefore thetvm.compute
is producing anundef
which is optimized away by LLVM resulting in no compute code being generated at all.A review would be much appreciated!
@tqchen