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
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.
exact compiled source (N = 1000); long files show the first 40 lines, the area around computeMain (±40), and the last 40 lines (gaps elided)
// 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);
}