← 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.

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.

implicit_conversion — full phase breakdown across releases (median ms) implicit_conversion 1.01× 0.0 82 164 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 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)

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)

implicit_conversion.slang

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

float conv_0()
{
    int i = 0; uint u = 0u; float f = 0.0;
    float a = i;
    float b = u;
    float2 v2 = f;
    float3 v3 = float3(i, u, f);
    float4 v4 = float4(v3, a);
    int2 iv = int2(v2);
    float3 w = v4.xyz;
    return a + b + v2.x + v3.y + v4.w + float(iv.x) + w.z;
}
float conv_1()
{
    int i = 1; uint u = 1u; float f = 1.0;
    float a = i;
    float b = u;
    float2 v2 = f;
    float3 v3 = float3(i, u, f);
    float4 v4 = float4(v3, a);
    int2 iv = int2(v2);
    float3 w = v4.xyz;
    return a + b + v2.x + v3.y + v4.w + float(iv.x) + w.z;
}
float conv_2()
{
    int i = 2; uint u = 2u; float f = 2.0;
    float a = i;
    float b = u;
    float2 v2 = f;
    float3 v3 = float3(i, u, f);
    float4 v4 = float4(v3, a);
    int2 iv = int2(v2);
    float3 w = v4.xyz;
    return a + b + v2.x + v3.y + v4.w + float(iv.x) + w.z;
}
float conv_3()

// … 7126 lines omitted …

}
float conv_597()
{
    int i = 2; uint u = 2u; float f = 3.0;
    float a = i;
    float b = u;
    float2 v2 = f;
    float3 v3 = float3(i, u, f);
    float4 v4 = float4(v3, a);
    int2 iv = int2(v2);
    float3 w = v4.xyz;
    return a + b + v2.x + v3.y + v4.w + float(iv.x) + w.z;
}
float conv_598()
{
    int i = 3; uint u = 3u; float f = 4.0;
    float a = i;
    float b = u;
    float2 v2 = f;
    float3 v3 = float3(i, u, f);
    float4 v4 = float4(v3, a);
    int2 iv = int2(v2);
    float3 w = v4.xyz;
    return a + b + v2.x + v3.y + v4.w + float(iv.x) + w.z;
}
float conv_599()
{
    int i = 4; uint u = 4u; float f = 5.0;
    float a = i;
    float b = u;
    float2 v2 = f;
    float3 v3 = float3(i, u, f);
    float4 v4 = float4(v3, a);
    int2 iv = int2(v2);
    float3 w = v4.xyz;
    return a + b + v2.x + v3.y + v4.w + float(iv.x) + w.z;
}

[shader("compute")]
[numthreads(1,1,1)]
void computeMain()
{
    float acc = 0.0;
    acc += conv_0();
    acc += conv_1();
    acc += conv_2();
    acc += conv_3();
    acc += conv_4();
    acc += conv_5();
    acc += conv_6();
    acc += conv_7();
    acc += conv_8();
    acc += conv_9();
    acc += conv_10();
    acc += conv_11();
    acc += conv_12();
    acc += conv_13();
    acc += conv_14();
    acc += conv_15();
    acc += conv_16();
    acc += conv_17();
    acc += conv_18();
    acc += conv_19();
    acc += conv_20();
    acc += conv_21();
    acc += conv_22();
    acc += conv_23();
    acc += conv_24();
    acc += conv_25();
    acc += conv_26();
    acc += conv_27();
    acc += conv_28();
    acc += conv_29();
    acc += conv_30();
    acc += conv_31();
    acc += conv_32();
    acc += conv_33();
    acc += conv_34();
    acc += conv_35();
    acc += conv_36();
    acc += conv_37();
    acc += conv_38();
    acc += conv_39();
    acc += conv_40();
    acc += conv_41();
    acc += conv_42();
    acc += conv_43();
    acc += conv_44();
    acc += conv_45();
    acc += conv_46();
    acc += conv_47();
    acc += conv_48();
    acc += conv_49();
    acc += conv_50();
    acc += conv_51();
    acc += conv_52();
    acc += conv_53();
    acc += conv_54();
    acc += conv_55();
    acc += conv_56();
    acc += conv_57();
    acc += conv_58();
    acc += conv_59();
    acc += conv_60();
    acc += conv_61();
    acc += conv_62();
    acc += conv_63();
    outBuf[0] = acc;
}