Provenance Audit: SimpleMLP — Metadata Across the Compilation Pipeline
Generated: 2026-06-24 19:17 | Issue: torch-spyre#2574
Measured in-process during one cache-defeated torch.compile (compile-path objects only). This report is measurement-only; interpretation is a separate deliverable.
Quantity |
Value |
|---|---|
FX pre-grad compute nodes |
3 |
FX post-grad compute nodes |
7 |
LoopLevelIR operations |
5 |
OpSpec ops created |
5 |
SuperDSC kernels |
2 |
|
5 |
|
|
Stage × Field Matrix
✅ present & non-empty on all instances ◐ on some (n/total) ❌ reachable here but measured empty/absent ➖ not applicable here (no such slot, or carried indirectly via other fields).
Every column tests population (the field exists and carries non-empty content; 0 counts as content, None/[]/{}/"" do not). These cells are measurements only; interpreting each absence is the separate analysis deliverable (provenance_analysis.md).
The Layer column marks whether a field lives on the FX node (FX) or the IR ComputedBuffer (IR). The two IR columns are the same LoopLevelIR before and after the Spyre pre-scheduling passes: LoopLevelIR (pre-pass) is the lowered IR entering them, LoopLevelIR (post-pass) is after they mutate it in place (e.g. inserting restickify buffers). These map to issue #2574’s “Inductor passes” → “LoopLevelIR”.
Layer |
Field |
FX Graph (pre-grad) |
FX Graph (post-grad) |
LoopLevelIR (pre-pass) |
LoopLevelIR (post-pass) |
OpSpec |
SuperDSC JSON |
|---|---|---|---|---|---|---|---|
FX |
|
✅ |
◐ 3/7 |
➖ |
➖ |
➖ |
➖ |
FX |
|
◐ 2/3 |
◐ 2/7 |
➖ |
➖ |
➖ |
➖ |
FX |
|
✅ |
◐ 3/7 |
➖ |
➖ |
➖ |
➖ |
FX |
|
➖ |
✅ |
➖ |
➖ |
➖ |
➖ |
FX |
|
➖ |
◐ 3/7 |
➖ |
➖ |
➖ |
➖ |
IR |
|
➖ |
➖ |
✅ |
✅ |
❌ |
❌ |
IR |
|
➖ |
➖ |
✅ |
✅ |
❌ |
❌ |
IR |
|
➖ |
➖ |
❌ |
❌ |
❌ |
❌ |
IR |
|
➖ |
➖ |
◐ 3/5 |
◐ 3/5 |
❌ |
❌ |
Stage 2 — FX Graph (pre-grad): 3 compute nodes
Cell = observed type of the field, or ❌ if absent.
Node |
target |
|
|
|
|
|
source line |
|---|---|---|---|---|---|---|---|
|
|
|
|
|
❌ |
❌ |
|
|
|
|
❌ |
|
❌ |
❌ |
|
|
|
|
|
|
❌ |
❌ |
|
Stage 2 — FX Graph (post-grad): 7 compute nodes
Cell = observed type of the field, or ❌ if absent.
Node |
target |
|
|
|
|
|
source line |
|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
❌ |
❌ |
❌ |
|
❌ |
— |
|
|
❌ |
❌ |
❌ |
|
❌ |
— |
|
|
|
❌ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
❌ |
❌ |
❌ |
|
❌ |
— |
|
|
❌ |
❌ |
❌ |
|
❌ |
— |
Stage 3 — LoopLevelIR (pre-pass): 5 operations
The lowered IR entering the Spyre pre-scheduling passes.
Op |
|
|
|
|
|---|---|---|---|---|
|
|
|
❌ |
✅ |
|
|
|
❌ |
❌ |
|
|
|
❌ |
✅ |
|
|
|
❌ |
✅ |
|
|
|
❌ |
❌ |
Stage 4 — LoopLevelIR (post-pass): 5 operations
The same IR after the pre-scheduling passes mutate it in place.
Op |
|
|
|
|
|---|---|---|---|---|
|
|
|
❌ |
✅ |
|
|
|
❌ |
❌ |
|
|
|
❌ |
✅ |
|
|
|
❌ |
✅ |
|
|
|
❌ |
❌ |
Stage 5 — OpSpec: 5 ops
OpSpec declared fields: ['op', 'is_reduction', 'iteration_space', 'args', 'op_info', 'tiled_symbols'] — no provenance field. The origins below are what is available on the input ComputedBuffer at create_op_spec; the OpSpec object itself declares no field to hold them.
Spyre op |
buffer |
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Stage 6 — SuperDSC: 5 sdsc_*.json files (2 kernels)
Provenance field present in any emitted sdsc_*.json: ❌
sdsc_fused_addmm_linear_relu_0
buffers (4):
op0,op1,op2,op3fx origins:
add_tensor_1,mm_default,mm_default_1,permute,permute_1,relukernel metadata:
# Topologically Sorted Source Nodes: [x, x_1, x_2], Original ATen: [aten.linear, aten.addmm, aten.relu]sdsc_*.jsonfiles: 4 provenance in JSON: ❌
sdsc_fused_addmm_1
buffers (1):
op4fx origins:
add_tensorkernel metadata:
# Topologically Sorted Source Nodes: [], Original ATen: [aten.addmm]sdsc_*.jsonfiles: 1 provenance in JSON: ❌