Hoist wrapper-invariant scalar computations to the host - #2977
Open
wsmoses wants to merge 1 commit into
Open
Conversation
A kernel often computes the guard flag of an optional buffer itself, as a null check of a captured pointer, and pointer comparisons have no tensor form. Any pure scalar op whose operands are all defined outside the wrapper is the host's to compute: hoist it (and transitively its scalar consumers) out of the region, so the kernel captures the resulting scalar instead. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016zErYp7upmqr4NHfhod9UD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Several MFEM TUs (hybridization_ext, bilinearform_ext, trace_jump_ea, ...) compute the guard flag of an optional buffer inside the kernel, as
llvm.icmp ne %captured, %null— and pointer comparisons have no tensor form, so the wrapper-operand classifier rejects the captured pointers.Any pure scalar op whose operands are all defined outside the
gpu_wrapperis the host's to compute: hoist it (iterating to a fixpoint so scalar chains follow) out of the region before raising. The kernel then captures the resulting scalar, which the existing buffered-scalar path ships in as atensor<f64>/tensor<i1>operand. In the lit test the null check plus itsuitofphoist to the host and the kernel raises fully.🤖 Generated with Claude Code
https://claude.ai/code/session_016zErYp7upmqr4NHfhod9UD