How this dashboard works
Every cell is generated from automated tests. No manual annotation.
The CI pipeline runs
verify_llvm_ops.py which measures each of 44 ops
against reference implementations, then emits Prolog facts. The SVG is regenerated
from those facts. The page polls every 30 seconds and highlights changed cells with
a gold aura.
Bookspine progress bars. Each cell shows one thin vertical stripe per op
in that pattern, sorted by status. The bar fills from left to right as ops are verified.
A cell shows "IR-match" only when
every op in that pattern is blue.
Color meanings:
🔵
Blue = IR-match: 0 ULP AND our LLVM IR structurally matches the reference's
instruction sequence. Verified by automated IR-diff.
🟢
Green = 0 ULP: numerically bit-identical, but LLVM IR structure not yet
confirmed to match. The numbers are right; the code may differ.
🟡
Yellow = 1–100 ULP: close but not bit-identical. Known root cause documented.
🔴
Red = >100 ULP: significant divergence. Needs investigation.
⚫
Grey = untested.
Source of truth: bpd/lib/llvm_op_match.pl (per-op facts) +
bpd/llvm_match_status.pl (SVG generator). Regenerate via
swipl -g main llvm_match_status.pl. Pure deduction from facts.
CI pipeline:
verify_llvm_ops.py →
llvm_op_match_ci.pl →
swipl llvm_match_status.pl → SVG → publish.
The 9 emission patterns (from
kernel_patterns.pl):
unary_elementwise (12 ops), binary_elementwise (1), reduction (7),
reduction_then_elementwise (6), scan (2), conv_im2col (6), pool_reduce (3),
loss_reduce (6), flash_attention (1). 44 ops total → 44 bookspines across 9 rows.
Canonical addressing:
Table(10001).LLVM_IR_Match_Status. Each cell carries a
watermarkup
coordinate:
data-dim="cell(table(10001),column(<ref>),row(<pattern>))".