Repository navigation
[Feature]: StableHLO converter coverage — lower every TensorOps op #1389
Description
🧠 D: DOCUMENT — Problem & Opportunity
Exporting a model to StableHLO (StableHloConverter) fails with "No converter found" for any op none of the registered converters lists in supportedOperations. The new StableHLO column of the coverage matrix makes the gap visible: conv3d, convTranspose1d, convTranspose2d, elu, leakyRelu, logSoftmax, powScalar, log2, log10, pad2d, unfold, lt, ge, tril are ❌ today.
Each op is an independent, self-contained converter addition with a sibling to copy from, which makes most of them ideal first contributions.
Summary: one small lane per op group until the StableHLO column is green for every public op.
🔍 A: ASSESS — Feasibility & Impact
- Feasibility: high; converters are pure text emitters with tests that check the emitted MLIR.
- Out of scope:
matmulWeightTransposed/relayoutPackedWeightForKernels(packed-weight runtime helpers, not graph ops) andconvTranspose2d(covered by the TransposedConv2d feature).
📚 R: RESEARCH — What Must Be Understood First?
- None beyond the StableHLO spec: https://openxla.org/stablehlo/spec
🛠️ C: CODE — Implementation Plan
- One lane per op group below
Acceptance Criteria
- StableHLO column ✅ for every op listed above
Lane breakdown
- [Lane 2 · kotlin-core] StableHLO coverage — lower elu, leakyRelu to StableHLO #1390 — [Lane 2 · kotlin-core] lower elu, leakyRelu to StableHLO (
size:xs, good first issue) - [Lane 2 · kotlin-core] StableHLO coverage — lower log2, log10 to StableHLO #1391 — [Lane 2 · kotlin-core] lower log2, log10 to StableHLO (
size:xs, good first issue) - [Lane 2 · kotlin-core] StableHLO coverage — lower lt, ge to StableHLO #1392 — [Lane 2 · kotlin-core] lower lt, ge to StableHLO (
size:xs, good first issue) - [Lane 2 · kotlin-core] StableHLO coverage — lower powScalar to StableHLO #1393 — [Lane 2 · kotlin-core] lower powScalar to StableHLO (
size:xs, good first issue) - [Lane 2 · kotlin-core] StableHLO coverage — lower logSoftmax to StableHLO #1394 — [Lane 2 · kotlin-core] lower logSoftmax to StableHLO (
size:s, good first issue) - [Lane 2 · kotlin-core] StableHLO coverage — lower tril to StableHLO #1395 — [Lane 2 · kotlin-core] lower tril to StableHLO (
size:s) - [Lane 2 · kotlin-core] StableHLO coverage — lower pad2d to StableHLO #1396 — [Lane 2 · kotlin-core] lower pad2d to StableHLO (
size:s) - [Lane 2 · kotlin-core] StableHLO coverage — lower unfold to StableHLO #1397 — [Lane 2 · kotlin-core] lower unfold to StableHLO (
size:m) - [Lane 2 · kotlin-core] StableHLO coverage — lower conv3d to StableHLO #1398 — [Lane 2 · kotlin-core] lower conv3d to StableHLO (
size:m) - [Lane 2 · kotlin-core] StableHLO coverage — lower convTranspose1d to StableHLO #1399 — [Lane 2 · kotlin-core] lower convTranspose1d to StableHLO (
size:m)
Only Lane 2 applies; each sub-issue is one converter addition. Review happens in the PR.
New here? Read Getting started as a contributor and the Issue taxonomy. Lanes marked good first issue assume no prior SKaiNET codebase knowledge. The gap markers and the coverage matrix were introduced in #1370.
Activity