Skip to content

JIT: remaining abort_permanent opcode ports (post-#373 tail: CALL_KW, comprehension/dict void residuals, larger arms) #395

Description

@youknowone

Context

#373 (unported opcode in a hot loop body declines the whole loop via abort_permanent) was closed after landing the demonstrable ports (CALL_INTRINSIC_1 UnaryPositive, POP_JUMP_IF_NONE/NOT_NONE, LOAD_COMMON_CONSTANT, LOAD_FAST_AND_CLEAR) and documenting the genuine Group-A boundaries. Its final comment recorded a remaining portable tail that otherwise has no tracking home now that #373 is closed. This issue is that home (filed from the 2026-07-06 open-issue audit).

Remaining portable opcodes

Demonstrable now (appear in while-loops that reach a JIT token; porting flips loops_abortedloops_compiled):

  • CALL_KW — kwargs residual ABI, non-trivial.

Latent — correct-but-masked until the no-token cliff (#389) is fixed (these appear in FOR_ITER/comprehension loops that never receive a token, so a port cannot demonstrate a win yet):

  • SET_ADD, MAP_ADD, SET_UPDATE, DICT_UPDATE, DICT_MERGE (need void residuals)
  • empty-{} BUILD_MAP edge

Larger / rarely-hot:

Non-goals

Group A stays abort_permanent — flowspace unsupported_rpython boundaries (async, generators, match, f-strings, closure-cell/LOAD_LOCALS/LOAD_BUILD_CLASS, EXIT_INIT_CHECK, del-family) are parity-correct declines, already justified with per-arm comments.

Dependencies

filed by Claude (from the #373 close-out comment, so the tail is not lost)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions