Skip to content

Krell v2.2

Latest

Choose a tag to compare

@nightwarelabz nightwarelabz released this 04 Nov 01:51
· 22 commits to main since this release
Immutable release. Only release title and notes can be modified.

Krell v2.2: correctness and performance release from the v2.0
development line.

Correctness

Nine bug classes present in the v2.0 and v2.1 releases are fixed:

  • the x86_64 early-return specialization skipped materializing
    entry constants and compared narrow parameters at full ABI
    width (a recursive i32 fib driven from C crashed on negative
    inputs)
  • the vector unsigned-divide path fell through to multiply when
    its operands were register-resident
  • the scalarized vector path read slot offsets of
    register-resident operands
  • extracting an f32 vector lane above 0 read the extraction
    scratch register instead of the source
  • AArch64 and RISC-V addressed single-unit vectors through
    slot offset 0 (the shared allocator register-allocates them;
    those backends treat them as memory-resident), their emitters
    lacked the dead-value filter, and an AArch64 lane load used
    the value register as the address base
  • the shared allocator's liveness recorded folded instructions'
    operand uses at the folded instruction instead of the
    consuming instruction, so a value defined in between could
    take the operand's register (the root cause of the
    long-standing fuzz seed 1 crash and seed 2 memory
    mismatches); liveness now expands folded uses recursively

With these fixes the AArch64 and RISC-V differential
batteries execute under emulation and pass 4,546 cases with
0 failures (previous releases verified code generation for
those targets but the batteries did not run to completion),
and the fuzzer is clean on all four backends.

Performance

KRELLPROOF record of 2026-11-03 (twelve kernels, timings
recorded only on checksum agreement, C is gcc 13.3 -O2):
x86_64 native geomean S 4.21x across all twelve kernels,
1.66x excluding fib; LLVM lane 4.59x / 1.58x.

Compiler work since v2.1: a Belady register allocator with
wrap-aware next-use distances and a rematerializable-victim
preference, back-edge coalescing for values whose uses are a
terminator's argument lists, loop rotation for the canonical
counted loop, an i64 gate for the two-stream reduction class,
and folded-consumption liveness in the shared allocator.

The full record -- kernels, C references, methodology,
per-run results and charts -- lives in the krellproof
repository.