Skip to content

Hoist wrapper-invariant scalar computations to the host - #2977

Open
wsmoses wants to merge 1 commit into
mainfrom
pb/hoist-invariant-scalars
Open

Hoist wrapper-invariant scalar computations to the host#2977
wsmoses wants to merge 1 commit into
mainfrom
pb/hoist-invariant-scalars

Conversation

@wsmoses

@wsmoses wsmoses commented Aug 26, 2026

Copy link
Copy Markdown
Member

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_wrapper is 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 a tensor<f64>/tensor<i1> operand. In the lit test the null check plus its uitofp hoist to the host and the kernel raises fully.

🤖 Generated with Claude Code

https://claude.ai/code/session_016zErYp7upmqr4NHfhod9UD

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant