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
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 = 600); 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;
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;
}