← all workloads

overload_resolution

A large user-defined overload set (`pick`/`pick2`, scalar + vector + two-arg candidates), then `n` call sites with rotating argument types. Every call enumerates all candidates and ranks them by conversion cost to choose the best match — isolating the candidate-ranking cost that scales with overload-set size times call-site count.

bucket: typecheck  ·  compile mode: module  ·  flags: (none)  ·  default N: 600

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.

overload_resolution — full phase breakdown across releases (median ms) overload_resolution 1.14× 0.0 28 56 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 overload_resolution — parseTranslationUnit overload_resolution — SemanticChecking overload_resolution — generateIR overload_resolution — frontEndExecute (self) overload_resolution — generateOutput (self) overload_resolution — 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 = 600); long files show the first 40 lines, the area around computeMain (±40), and the last 40 lines (gaps elided)

overload_resolution.slang

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

float pick(float x) { return float(x) + 1.0; }
float pick(int x) { return float(x) + 1.0; }
float pick(uint x) { return float(x) + 1.0; }
float pick(float2 x) { return float(x[0] + x[0]); }
float pick(float3 x) { return float(x[0] + x[0]); }
float pick(float4 x) { return float(x[0] + x[0]); }
float pick2(float a, float b) { return float(a) + float(b); }
float pick2(int a, float b) { return float(a) + float(b); }
float pick2(float a, int b) { return float(a) + float(b); }
float pick2(int a, int b) { return float(a) + float(b); }
float pick2(uint a, float b) { return float(a) + float(b); }
float pick2(float a, uint b) { return float(a) + float(b); }

float call_0() { return pick(1.0) + pick2(1.0, 2.0); }
float call_1() { return pick(2) + pick2(3, 4.0); }
float call_2() { return pick(3u) + pick2(5.0, 6); }
float call_3() { return pick(float2(1.0)) + pick2(7, 8); }
float call_4() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_5() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_6() { return pick(1.0) + pick2(1.0, 2.0); }
float call_7() { return pick(2) + pick2(3, 4.0); }
float call_8() { return pick(3u) + pick2(5.0, 6); }
float call_9() { return pick(float2(1.0)) + pick2(7, 8); }
float call_10() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_11() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_12() { return pick(1.0) + pick2(1.0, 2.0); }
float call_13() { return pick(2) + pick2(3, 4.0); }
float call_14() { return pick(3u) + pick2(5.0, 6); }
float call_15() { return pick(float2(1.0)) + pick2(7, 8); }
float call_16() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_17() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_18() { return pick(1.0) + pick2(1.0, 2.0); }
float call_19() { return pick(2) + pick2(3, 4.0); }
float call_20() { return pick(3u) + pick2(5.0, 6); }
float call_21() { return pick(float2(1.0)) + pick2(7, 8); }
float call_22() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_23() { return pick(float4(1.0)) + pick2(11.0, 12u); }

// … 539 lines omitted …

float call_563() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_564() { return pick(1.0) + pick2(1.0, 2.0); }
float call_565() { return pick(2) + pick2(3, 4.0); }
float call_566() { return pick(3u) + pick2(5.0, 6); }
float call_567() { return pick(float2(1.0)) + pick2(7, 8); }
float call_568() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_569() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_570() { return pick(1.0) + pick2(1.0, 2.0); }
float call_571() { return pick(2) + pick2(3, 4.0); }
float call_572() { return pick(3u) + pick2(5.0, 6); }
float call_573() { return pick(float2(1.0)) + pick2(7, 8); }
float call_574() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_575() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_576() { return pick(1.0) + pick2(1.0, 2.0); }
float call_577() { return pick(2) + pick2(3, 4.0); }
float call_578() { return pick(3u) + pick2(5.0, 6); }
float call_579() { return pick(float2(1.0)) + pick2(7, 8); }
float call_580() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_581() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_582() { return pick(1.0) + pick2(1.0, 2.0); }
float call_583() { return pick(2) + pick2(3, 4.0); }
float call_584() { return pick(3u) + pick2(5.0, 6); }
float call_585() { return pick(float2(1.0)) + pick2(7, 8); }
float call_586() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_587() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_588() { return pick(1.0) + pick2(1.0, 2.0); }
float call_589() { return pick(2) + pick2(3, 4.0); }
float call_590() { return pick(3u) + pick2(5.0, 6); }
float call_591() { return pick(float2(1.0)) + pick2(7, 8); }
float call_592() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_593() { return pick(float4(1.0)) + pick2(11.0, 12u); }
float call_594() { return pick(1.0) + pick2(1.0, 2.0); }
float call_595() { return pick(2) + pick2(3, 4.0); }
float call_596() { return pick(3u) + pick2(5.0, 6); }
float call_597() { return pick(float2(1.0)) + pick2(7, 8); }
float call_598() { return pick(float3(1.0)) + pick2(9u, 10.0); }
float call_599() { return pick(float4(1.0)) + pick2(11.0, 12u); }

[shader("compute")]
[numthreads(1,1,1)]
void computeMain()
{
    float acc = 0.0;
    acc += call_0();
    acc += call_1();
    acc += call_2();
    acc += call_3();
    acc += call_4();
    acc += call_5();
    acc += call_6();
    acc += call_7();
    acc += call_8();
    acc += call_9();
    acc += call_10();
    acc += call_11();
    acc += call_12();
    acc += call_13();
    acc += call_14();
    acc += call_15();
    acc += call_16();
    acc += call_17();
    acc += call_18();
    acc += call_19();
    acc += call_20();
    acc += call_21();
    acc += call_22();
    acc += call_23();
    acc += call_24();
    acc += call_25();
    acc += call_26();
    acc += call_27();
    acc += call_28();
    acc += call_29();
    acc += call_30();
    acc += call_31();
    acc += call_32();
    acc += call_33();
    acc += call_34();
    acc += call_35();
    acc += call_36();
    acc += call_37();
    acc += call_38();
    acc += call_39();
    acc += call_40();
    acc += call_41();
    acc += call_42();
    acc += call_43();
    acc += call_44();
    acc += call_45();
    acc += call_46();
    acc += call_47();
    acc += call_48();
    acc += call_49();
    acc += call_50();
    acc += call_51();
    acc += call_52();
    acc += call_53();
    acc += call_54();
    acc += call_55();
    acc += call_56();
    acc += call_57();
    acc += call_58();
    acc += call_59();
    acc += call_60();
    acc += call_61();
    acc += call_62();
    acc += call_63();
    outBuf[0] = acc;
}