Repository navigation
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.