← all workloads

sema_generics

n distinct generic functions with interface constraints, each instantiated at several concrete types. Stresses semantic checking, generic constraint satisfaction and instantiation in the front-end.

bucket: sema  ·  compile mode: module  ·  flags: (none)  ·  default N: 1000

Phase composition across releases

Full sub-counter decomposition of compileInner — named leaf timers plus (self) residuals (a parent's time not covered by a named child, e.g. the autodiff transform in linkAndOptimizeIR (self)). Topmost band traces compileInner; hover a band for its phase.

sema_generics — full phase breakdown across releases (median ms) sema_generics 1.38× 0.0 566 1132 daily → 25.14 25.15 25.16 25.17 25.18 25.19 25.20 25.21 25.22 25.23 25.24 26.1 26.2 26.3 26.4 26.5 26.7 26.8 26.9 26.10 26.11 06-25 06-26 sema_generics — parseTranslationUnit sema_generics — SemanticChecking sema_generics — generateIR sema_generics — frontEndExecute (self) sema_generics — generateOutput (self) sema_generics — compileInner (self) phase buckets parseTranslationUnit SemanticChecking generateIR frontEndExecute (self) specializeModule simplifyIR linkIR unrollLoopsInModule legalizeResourceTypes legalizeExistentialTypeLayout performMandatoryEarlyInlining performForceInlining linkAndOptimizeIR (self) emitEntryPointsSourceFromIR generateOutput (self) compileInner (self)

Compiled Slang source

exact compiled source (N = 1000); long files show the first 40 lines, the area around computeMain (±40), and the last 40 lines (gaps elided)

sema_generics.slang

// AUTO-GENERATED by perf-suite/workloads.py — do not edit by hand.
RWStructuredBuffer<float> outBuf;

T poly_0<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_1<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_2<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_3<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_4<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_5<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_6<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_7<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_8<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_9<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_10<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_11<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_12<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_13<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_14<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_15<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_16<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_17<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_18<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_19<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_20<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_21<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_22<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_23<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_24<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_25<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_26<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_27<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_28<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_29<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_30<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_31<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_32<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_33<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_34<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_35<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_36<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }

// … 926 lines omitted …

T poly_963<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_964<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_965<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_966<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_967<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_968<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_969<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_970<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_971<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_972<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_973<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_974<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_975<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_976<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_977<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_978<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_979<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_980<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_981<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_982<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_983<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_984<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_985<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_986<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_987<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_988<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_989<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_990<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_991<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_992<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_993<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_994<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_995<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_996<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_997<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_998<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }
T poly_999<T : IArithmetic>(T a, T b) { return a * a + b * a + a + b; }

[shader("compute")]
[numthreads(1,1,1)]
void computeMain()
{
    float facc = 0.0; int iacc = 0; uint uacc = 0u;
    float fx = outBuf[0]; int ix = int(outBuf[0]); uint ux = uint(outBuf[0]);
    facc += poly_0<float>(fx, fx + 1.0);
    iacc += poly_0<int>(ix, ix + 1);
    uacc += poly_0<uint>(ux, ux + 1u);
    facc += poly_1<float>(fx, fx + 1.0);
    iacc += poly_1<int>(ix, ix + 1);
    uacc += poly_1<uint>(ux, ux + 1u);
    facc += poly_2<float>(fx, fx + 1.0);
    iacc += poly_2<int>(ix, ix + 1);
    uacc += poly_2<uint>(ux, ux + 1u);
    facc += poly_3<float>(fx, fx + 1.0);
    iacc += poly_3<int>(ix, ix + 1);
    uacc += poly_3<uint>(ux, ux + 1u);
    facc += poly_4<float>(fx, fx + 1.0);
    iacc += poly_4<int>(ix, ix + 1);
    uacc += poly_4<uint>(ux, ux + 1u);
    facc += poly_5<float>(fx, fx + 1.0);
    iacc += poly_5<int>(ix, ix + 1);
    uacc += poly_5<uint>(ux, ux + 1u);
    facc += poly_6<float>(fx, fx + 1.0);
    iacc += poly_6<int>(ix, ix + 1);
    uacc += poly_6<uint>(ux, ux + 1u);
    facc += poly_7<float>(fx, fx + 1.0);
    iacc += poly_7<int>(ix, ix + 1);
    uacc += poly_7<uint>(ux, ux + 1u);
    facc += poly_8<float>(fx, fx + 1.0);
    iacc += poly_8<int>(ix, ix + 1);
    uacc += poly_8<uint>(ux, ux + 1u);
    facc += poly_9<float>(fx, fx + 1.0);
    iacc += poly_9<int>(ix, ix + 1);
    uacc += poly_9<uint>(ux, ux + 1u);
    facc += poly_10<float>(fx, fx + 1.0);
    iacc += poly_10<int>(ix, ix + 1);
    uacc += poly_10<uint>(ux, ux + 1u);
    facc += poly_11<float>(fx, fx + 1.0);
    iacc += poly_11<int>(ix, ix + 1);
    uacc += poly_11<uint>(ux, ux + 1u);
    facc += poly_12<float>(fx, fx + 1.0);

// … 2925 lines omitted …

    iacc += poly_987<int>(ix, ix + 1);
    uacc += poly_987<uint>(ux, ux + 1u);
    facc += poly_988<float>(fx, fx + 1.0);
    iacc += poly_988<int>(ix, ix + 1);
    uacc += poly_988<uint>(ux, ux + 1u);
    facc += poly_989<float>(fx, fx + 1.0);
    iacc += poly_989<int>(ix, ix + 1);
    uacc += poly_989<uint>(ux, ux + 1u);
    facc += poly_990<float>(fx, fx + 1.0);
    iacc += poly_990<int>(ix, ix + 1);
    uacc += poly_990<uint>(ux, ux + 1u);
    facc += poly_991<float>(fx, fx + 1.0);
    iacc += poly_991<int>(ix, ix + 1);
    uacc += poly_991<uint>(ux, ux + 1u);
    facc += poly_992<float>(fx, fx + 1.0);
    iacc += poly_992<int>(ix, ix + 1);
    uacc += poly_992<uint>(ux, ux + 1u);
    facc += poly_993<float>(fx, fx + 1.0);
    iacc += poly_993<int>(ix, ix + 1);
    uacc += poly_993<uint>(ux, ux + 1u);
    facc += poly_994<float>(fx, fx + 1.0);
    iacc += poly_994<int>(ix, ix + 1);
    uacc += poly_994<uint>(ux, ux + 1u);
    facc += poly_995<float>(fx, fx + 1.0);
    iacc += poly_995<int>(ix, ix + 1);
    uacc += poly_995<uint>(ux, ux + 1u);
    facc += poly_996<float>(fx, fx + 1.0);
    iacc += poly_996<int>(ix, ix + 1);
    uacc += poly_996<uint>(ux, ux + 1u);
    facc += poly_997<float>(fx, fx + 1.0);
    iacc += poly_997<int>(ix, ix + 1);
    uacc += poly_997<uint>(ux, ux + 1u);
    facc += poly_998<float>(fx, fx + 1.0);
    iacc += poly_998<int>(ix, ix + 1);
    uacc += poly_998<uint>(ux, ux + 1u);
    facc += poly_999<float>(fx, fx + 1.0);
    iacc += poly_999<int>(ix, ix + 1);
    uacc += poly_999<uint>(ux, ux + 1u);
    outBuf[0] = facc + float(iacc) + float(uacc);
}