← all workloads

diagnostics_clean

N functions with distinct compile-time constants, no errors. Scaling null: n scales independent declarations; ideal cost is O(n).

bucket: diagnostics  ·  mode: target  ·  flags: -target spirv -emit-spirv-directly

Phase composition vs N (stacked sub-counters)

compileInner split into phase buckets (named leaves + (self) residuals) stacked across the sweep sizes — the top edge is compileInner, so you can see which phase drives the scaling.

diagnostics_clean — phase composition vs N (v2026.12, median ms) diagnostics_clean 4.2× over N 400→3200 0.0 64 127 400 800 1600 3200 N diagnostics_clean — parseTranslationUnit diagnostics_clean — SemanticChecking diagnostics_clean — generateIR diagnostics_clean — frontEndExecute (self) diagnostics_clean — specializeModule diagnostics_clean — simplifyIR diagnostics_clean — linkIR diagnostics_clean — unrollLoopsInModule diagnostics_clean — legalizeResourceTypes diagnostics_clean — legalizeExistentialTypeLayout diagnostics_clean — performMandatoryEarlyInlining diagnostics_clean — performForceInlining diagnostics_clean — linkAndOptimizeIR (self) diagnostics_clean — generateOutput (self) diagnostics_clean — compileInner (self) phase buckets parseTranslationUnit SemanticChecking generateIR frontEndExecute (self) specializeModule simplifyIR linkIR unrollLoopsInModule legalizeResourceTypes legalizeExistentialTypeLayout performMandatoryEarlyInlining performForceInlining linkAndOptimizeIR (self) emitEntryPointsSourceFromIR generateOutput (self) compileInner (self)

Scaling analysis

floor-subtracted power-law fit (t − floor) = a·Nk; floor = the minimal workload (fixed per-compile cost), k the global exponent, top-2× the local high-end doubling ratio.

N rangefloor (ms)k (work)fit R²t(Nmin)t(Nmax)top-2×
400–3200140.951.000281181.78×

Growth attribution (N=400 → N=3200)

compileInner grows by 90 ms across the sweep; the mutually-exclusive phase buckets below partition that growth exactly (no nested-timer double counting). × lin is the same metric as the top-level panels, per bucket: the end point vs a linear expectation anchored to the bucket's share of the minimal floor and fitted on the low-N half — 1.0 = grew exactly linearly, >1 bends up. The super-linearity lives where × lin (and k) are red.

buckett@N=400t@N=3200Δ msshare× lin∝Nk
generateIR856+4853%0.98×0.97
SemanticChecking1137+2629%0.92×0.93
parseTranslationUnit218+1617%1.09×1.07

Near-constant (≤2% of growth each): generateOutput (self) (2→3 ms), performMandatoryEarlyInlining (0→2 ms), specializeModule (1→1 ms), linkIR (0→1 ms), simplifyIR (1→1 ms), frontEndExecute (self) (1→0 ms), compileInner (self) (0→0 ms), legalizeExistentialTypeLayout (0→0 ms), legalizeResourceTypes (0→0 ms), performForceInlining (0→0 ms), unrollLoopsInModule (0→0 ms), linkAndOptimizeIR (self) (1→0 ms).

Sweep numbers (median ms)

NcompileInnerfrontEndExecuteSemanticChecking
400282211
800413415
1600666022
320011811137