← all workloads

implicit_conversion

`n` functions, each a cascade of cross-type conversions: scalar widening (int/uint -> float), splats, mixed initializer lists (per-element coercion), vector compose/truncate, and explicit narrowing. Stresses the coercion / conversion-cost engine in semantic checking rather than operator overloading. Scaling null: n scales conversion sites against a FIXED type set; ideal cost is O(n).

bucket: typecheck  ·  mode: module  ·  flags: (none)

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.

implicit_conversion — phase composition vs N (v2026.13.1, median ms) implicit_conversion 6.8× over N 300→2400 0.0 226 451 300 600 1200 2400 N implicit_conversion — parseTranslationUnit implicit_conversion — SemanticChecking implicit_conversion — generateIR implicit_conversion — frontEndExecute (self) implicit_conversion — generateOutput (self) implicit_conversion — 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×
300–2400111.001.000614181.93×

Growth attribution (N=300 → N=2400)

compileInner grows by 357 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=300t@N=2400Δ msshare× lin∝Nk
SemanticChecking35225+19053%0.96×0.96
generateIR19143+12435%1.00×0.99
parseTranslationUnit326+236%1.07×1.05
generateOutput (self)424+206%1.23×1.22

Near-constant (≤2% of growth each): compileInner (self) (0→0 ms), frontEndExecute (self) (0→0 ms).

Sweep numbers (median ms)

NcompileInnerSemanticCheckingfrontEndExecute
300613557
60011262106
1200216117204
2400418226394