Repository navigation
r2il-mask-abi-probe: DAV candidate filter through quack and R2IL on one evaluator (Round 4) - #1352
Conversation
…ne evaluator Round 4. FoldDialect gains four lowering arms, each onto an existing mask-risc op: LOAD space 3 (a resident plane as an address), IntNot -> MaskOp::Not, RANGE -> Pred::Range, KEEP -> Terminal::Keep. The DAV candidate filter is_null(valid) AND lo <= row < hi then runs as quack::lower and as R2IL bytes in two orders, and every kept mask and count matches a row oracle at six row counts. Measured at n=1000: quack 3 passes, R2IL NOT-first 2, R2IL RANGE-first 3; all Tiled. Positive polarity (plane AND range) folds to Lowering::Range with zero derived words on both frontends, so the complement of the plane is what blocks the zero-write path. The KEEP path allocates the same bytes at 16K and 1M rows. Seven disable runs; six go red. A scan over all ops leaves the pin green (the peephole matches the right operand's slot); a commutative peephole is refused by mask-risc with ScratchReadBeforeWrite. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MHMvKHLhM6xwRswKY4s6vY
|
Warning Review limit reachedYour organization has reached its usage spending cap. Adjust your spending cap in the billing tab. Next included review available in 19 minutes. View limit detailsLimit details: You’ve used the included review currently available. Your 66 included PR review attempts over the past 7 days set your current allowance at 1 review per hour. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (3)
Warning Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption. Comment |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: a216ad17-95d0-4e08-9f6b-a02520f62593) |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Round 4 of the arc whose Rounds 1–3 merged in #1347 and #1349. It asks whether quack and R2IL can run one shared program on one evaluator.
Change
FoldDialectintests/row_bridge.rsgets four new lowering arms:LOADspace 3 (a resident mask plane as an address)Operand::PlaneIntNotMaskOp::NotRANGE(bounds come from immediates)Pred::RangeKEEP(writes into a sink the caller lends)Terminal::KeepEach one lowers to a
Pred/MaskOp/Terminalthat mask-risc already has; no kernel or evaluator is added. The push-exactly-one census test now covers all four.Evidence
The program is the DAV candidate filter from
crates/jc/examples/dav_active_observation_probe.rs:is_null(valid) AND lo <= row < hi. The probe spells it three ways:quack::lower, R2IL bytes withNOTfirst, and R2IL bytes withRANGEfirst.Results agree. The kept mask and the count match a row oracle bit-for-bit at n ∈ {21, 64, 65, 130, 256, 1000}. All three paths execute through
mask_risc::execute_into.Physical work, measured at n = 1000:
NOTfirstRANGEfirstThe COUNT forms of all three are
Tiledas well.Positive-polarity control. For
plane AND range, both frontends emit oneRangegated under the plane, which mask-risc folds straight to a count (Lowering::Range). That path writes no derived words, and both match the oracle. So what blocks the zero-write path for the DAV filter is the complement on the validity plane, not the frontends.Allocation. The dialect's
KEEPpath allocates 16,648 B at both 16,384 and 1,048,576 rows.Disable runs. I broke each guard in turn, ran the tests, and restored it.
AndIntNotwithout the complementRANGEdropping its upper boundKEEPwriting nowhereKEEPpushing a status scalarScratchReadBeforeWrite. So folding theRANGE-first order would need theNotmoved ahead of theRange.Gates. The full probe suite (60 tests), clippy
-D warningsand fmt are clean. CI runs this crate atrust-test.yml:176.Board entry:
2026-10-06-quack-r2il-one-evaluator-round4.md🤖 Generated with Claude Code
https://claude.ai/code/session_01MHMvKHLhM6xwRswKY4s6vY
Generated by Claude Code