Skip to content

[Perf] Windows/x64: 52 Regressions on 6/14/2025 5:22:46 PM +00:00 #116754

Closed

Description

@performanceautofiler

Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in Span.Sorting

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
13.69 μs 18.30 μs 1.34 0.10 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Span.Sorting*'
Details

Span.Sorting.QuickSortSpan(Size: 512)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Tests.Perf_Int64

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
11.31 ns 16.47 ns 1.46 0.02 False
26.68 ns 37.01 ns 1.39 0.04 False
10.37 ns 14.94 ns 1.44 0.05 False
11.23 ns 15.43 ns 1.37 0.04 False
26.60 ns 36.91 ns 1.39 0.09 False
27.61 ns 30.69 ns 1.11 0.06 False
27.40 ns 30.62 ns 1.12 0.05 False
30.57 ns 42.02 ns 1.37 0.06 False
31.91 ns 37.62 ns 1.18 0.06 False
10.95 ns 16.83 ns 1.54 0.08 False
26.75 ns 32.32 ns 1.21 0.04 False
26.96 ns 31.77 ns 1.18 0.05 False

graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Int64*'
Details

System.Tests.Perf_Int64.TryParse(value: "12345")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.ParseSpan(value: "9223372036854775807")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.Parse(value: "12345")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.ParseSpan(value: "12345")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.TryParseSpan(value: "9223372036854775807")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.ParseSpan(value: "-9223372036854775808")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.TryParse(value: "-9223372036854775808")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.Parse(value: "9223372036854775807")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.TryParse(value: "9223372036854775807")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.TryParseSpan(value: "12345")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.Parse(value: "-9223372036854775808")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_Int64.TryParseSpan(value: "-9223372036854775808")

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in ArrayDeAbstraction

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
376.44 ns 487.18 ns 1.29 0.00 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'ArrayDeAbstraction*'
Details

ArrayDeAbstraction.foreach_opaque_array_via_interface

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in PerfLabTests.LowLevelPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
1.59 ms 1.84 ms 1.15 0.02 False
155.96 μs 187.15 μs 1.20 0.12 False
156.00 μs 187.15 μs 1.20 0.02 False

graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.LowLevelPerf*'
Details

PerfLabTests.LowLevelPerf.EmptyStaticFunction5Arg

ETL Files

Histogram

JIT Disasms

PerfLabTests.LowLevelPerf.GenericClassGenericStaticMethod

ETL Files

Histogram

JIT Disasms

PerfLabTests.LowLevelPerf.StructWithInterfaceInterfaceMethod

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.ContainsFalse<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
24.44 μs 27.79 μs 1.14 0.14 False
21.66 μs 24.82 μs 1.15 0.27 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsFalse&lt;Int32&gt;*'
Details

System.Collections.ContainsFalse<Int32>.Span(Size: 512)

ETL Files

Histogram

JIT Disasms

System.Collections.ContainsFalse<Int32>.ImmutableArray(Size: 512)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Memory.Span<Char>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
12.14 ns 13.43 ns 1.11 0.04 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span&lt;Char&gt;*'
Details

System.Memory.Span<Char>.StartsWith(Size: 512)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in PerfLabTests.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
283.70 μs 313.05 μs 1.10 0.06 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf*'
Details

PerfLabTests.CastingPerf.FooObjIsFoo2

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.ContainsFalse<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
768.46 μs 871.82 μs 1.13 0.01 False
768.20 μs 870.05 μs 1.13 0.01 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsFalse&lt;String&gt;*'
Details

System.Collections.ContainsFalse<String>.Array(Size: 512)

ETL Files

Histogram

JIT Disasms

System.Collections.ContainsFalse<String>.Span(Size: 512)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in IfStatements.IfStatements

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
37.46 μs 40.60 μs 1.08 0.01 False
28.14 μs 34.32 μs 1.22 0.01 False
43.55 μs 49.75 μs 1.14 0.01 False

graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'IfStatements.IfStatements*'
Details

IfStatements.IfStatements.AndAnd

ETL Files

Histogram

JIT Disasms

IfStatements.IfStatements.Single

ETL Files

Histogram

JIT Disasms

IfStatements.IfStatements.AndAndAnd

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Buffers.Binary.Tests.BinaryReadAndWriteTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
879.41 ns 941.12 ns 1.07 0.03 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Binary.Tests.BinaryReadAndWriteTests*'
Details

System.Buffers.Binary.Tests.BinaryReadAndWriteTests.MeasureReverseEndianness

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS Windows 10.0.22621
Queue TigerWindows
Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Tests.Perf_UInt64

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
12.12 ns 14.42 ns 1.19 0.04 False
11.66 ns 14.99 ns 1.29 0.04 False
12.15 ns 14.64 ns 1.20 0.04 False

graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_UInt64*'
Details

System.Tests.Perf_UInt64.TryParse(value: "12345")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_UInt64.Parse(value: "12345")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_UInt64.ParseSpan(value: "12345")

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Activity

  1. performanceautofiler commented on Jun 17, 2025

    @performanceautofiler
    Author

    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in PerfLabTests.CastingPerf2.CastingPerf

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    291.99 μs 343.12 μs 1.18 0.04 False
    586.72 μs 624.65 μs 1.06 0.02 False
    557.66 μs 624.64 μs 1.12 0.03 False
    286.38 μs 312.75 μs 1.09 0.09 False
    593.65 μs 626.39 μs 1.06 0.01 False
    374.30 μs 496.12 μs 1.33 0.01 False

    graph
    graph
    graph
    graph
    graph
    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*'
    Details

    PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFoo

    ETL Files

    Histogram

    JIT Disasms

    PerfLabTests.CastingPerf2.CastingPerf.ObjFooIsObj

    ETL Files

    Histogram

    JIT Disasms

    PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo

    ETL Files

    Histogram

    JIT Disasms

    PerfLabTests.CastingPerf2.CastingPerf.FooObjIsDescendant

    ETL Files

    Histogram

    JIT Disasms

    PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo

    ETL Files

    Histogram

    JIT Disasms

    PerfLabTests.CastingPerf2.CastingPerf.FooObjIsNull

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Text.Perf_Ascii

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    5.55 ns 7.60 ns 1.37 0.01 False
    11.18 ns 13.63 ns 1.22 0.01 False
    15.06 ns 16.37 ns 1.09 0.02 False

    graph
    graph
    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Perf_Ascii*'
    Details

    System.Text.Perf_Ascii.Equals_Bytes(Size: 128)

    ETL Files

    Histogram

    JIT Disasms

    System.Text.Perf_Ascii.Equals_Chars(Size: 128)

    ETL Files

    Histogram

    JIT Disasms

    System.Text.Perf_Ascii.EqualsIgnoreCase_DifferentCase_Bytes(Size: 128)

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.MathBenchmarks.Double

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    9.60 μs 10.21 μs 1.06 0.02 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.MathBenchmarks.Double*'
    Details

    System.MathBenchmarks.Double.ScaleB

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Tests.Perf_Char

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    8.50 ns 10.67 ns 1.26 0.05 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Char*'
    Details

    System.Tests.Perf_Char.Char_ToLowerInvariant(input: "Hello World!")

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Globalization.Tests.StringSearch

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    12.32 ns 13.60 ns 1.10 0.03 False
    24.93 ns 29.51 ns 1.18 0.02 False
    929.52 ns 1.06 μs 1.15 0.33 False

    graph
    graph
    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Globalization.Tests.StringSearch*'
    Details

    System.Globalization.Tests.StringSearch.IsSuffix_DifferentLastChar(Options: (en-US, IgnoreCase, False))

    ETL Files

    Histogram

    JIT Disasms

    System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound(Options: (en-US, Ordinal, False))

    ETL Files

    Histogram

    JIT Disasms

    System.Globalization.Tests.StringSearch.LastIndexOf_Word_NotFound(Options: (en-US, OrdinalIgnoreCase, False))

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in SeekUnroll

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    2.11 secs 2.54 secs 1.20 0.14 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'SeekUnroll*'
    Details

    SeekUnroll.Test(boxedIndex: 27)

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Collections.IterateForEach<Int32>

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    1.37 μs 1.50 μs 1.09 0.02 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;Int32&gt;*'
    Details

    System.Collections.IterateForEach<Int32>.FrozenDictionary(Size: 512)

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in Benchstone.BenchI.IniArray

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    78.96 ms 90.21 ms 1.14 0.50 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Benchstone.BenchI.IniArray*'
    Details

    Benchstone.BenchI.IniArray.Test

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Collections.Perf_Frozen<Int16>

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    15.66 ns 16.82 ns 1.07 0.02 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Perf_Frozen&lt;Int16&gt;*'
    Details

    System.Collections.Perf_Frozen<Int16>.Contains_True(Count: 4)

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Tests.Perf_String

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    116.25 ns 159.37 ns 1.37 0.02 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*'
    Details

    System.Tests.Perf_String.IndexerCheckPathLength

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Text.Json.Tests.Utf8JsonReaderCommentsTests

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    617.76 ns 651.98 ns 1.06 0.11 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Utf8JsonReaderCommentsTests*'
    Details

    System.Text.Json.Tests.Utf8JsonReaderCommentsTests.Utf8JsonReaderCommentParsing(CommentHandling: Allow, SegmentSize: 0, TestCase: LongMultiLine)

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Perf_Convert

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    1.67 μs 1.79 μs 1.07 0.41 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Perf_Convert*'
    Details

    System.Perf_Convert.ToBase64CharArray(binaryDataSize: 1024, formattingOptions: InsertLineBreaks)

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository


    Run Information

    Name Value
    Architecture x64
    OS Windows 10.0.22621
    Queue TigerWindows
    Baseline 3cabc2180c2a1707ba535e5d6911d53d58731dd2
    Compare 9ed11b9729f17813247a8bebd39873c32305fc7e
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Regressions in System.Tests.Perf_Random

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    3.29 μs 3.75 μs 1.14 0.03 False

    graph
    Test Report

    Repro

    General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

    git clone https://github.com/dotnet/performance.git
    py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Random*'
    Details

    System.Tests.Perf_Random.NextBytes_span

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository

  2. DrewScoggins commented on Jun 17, 2025

    @DrewScoggins
    Member
  3. added
    needs-area-labelAn area label is needed to ensure this gets routed to the appropriate area owners
    on Jun 17, 2025
  4. added
    area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
    and removed
    needs-area-labelAn area label is needed to ensure this gets routed to the appropriate area owners
    untriagedNew issue has not been triaged by the area owner
    on Jun 17, 2025
  5. AndyAyersMS commented on Jun 17, 2025

    @AndyAyersMS
    Member
  6. dotnet-policy-service commented on Jun 17, 2025

    @dotnet-policy-service
    Contributor

    Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
    See info in area-owners.md if you want to be subscribed.

  7. added this to the 10.0.0 milestone on Jun 17, 2025
  8. amanasifkhalid commented on Aug 1, 2025

    @amanasifkhalid
    Contributor
    Notes Recent Score Orig Score Ampere Ubuntu Tiger Ubuntu Tiger Windows Surface Windows Viper Ubuntu Viper Windows Benchmark
    1.80 1.12 1.80
    1.12
    System.Tests.Perf_UInt64.TryParseHex(value: "FFFFFFFFFFFFFFFF")
    1.78 1.78 1.78
    1.78
    System.Collections.IterateForEach(String).List(Size: 512)
    1.56 1.44 1.56
    1.44
    System.Tests.Perf_Int64.Parse(value: "12345")
    1.49 1.37 1.49
    1.37
    System.Tests.Perf_Int32.ToStringHex(value: 12345)
    1.45 1.54 1.45
    1.54
    System.Tests.Perf_Int64.TryParseSpan(value: "12345")
    1.41 1.37 1.41
    1.37
    System.Tests.Perf_Int64.ParseSpan(value: "12345")
    1.40 1.40 1.40
    1.40
    System.Linq.Tests.Perf_Enumerable.SelectToList(input: Range)
    1.37 1.37 1.37
    1.37
    SeekUnroll.Test(boxedIndex: 1)
    1.37 1.37 1.36
    1.37
    1.37
    1.37
    SeekUnroll.Test(boxedIndex: 3)
    1.35 1.15 1.35
    1.15
    System.Collections.ContainsFalse(Int32).ImmutableArray(Size: 512)
    1.34 1.34 1.35
    1.35
    1.34
    1.34
    System.Collections.IterateForEach(Int32).IEnumerable(Size: 512)
    1.33 1.39 1.33
    1.39
    System.Tests.Perf_Int64.ParseSpan(value: "9223372036854775807")
    1.32 1.35 1.32
    1.35
    LinqBenchmarks.Count00ForX
    1.32 1.35 1.32
    1.35
    System.Memory.Span(Byte).IndexOfAnyThreeValues(Size: 512)
    1.32 1.31 1.52
    1.51
    1.15
    1.14
    System.Tests.Perf_Int32.TryParseSpan(value: "-2147483648")
    1.32 1.32 1.43
    1.44
    1.38
    1.37
    1.16
    1.17
    SeekUnroll.Test(boxedIndex: 11)
    1.31 1.46 1.31
    1.46
    System.Tests.Perf_Int64.TryParse(value: "12345")
    1.31 1.31 1.41
    1.41
    1.21
    1.21
    System.Collections.IterateForEach(Int32).FrozenSet(Size: 512)
    1.27 1.27 1.27
    1.27
    1.28
    1.28
    System.Numerics.Tests.Perf_VectorConvert.Widen_sbyte
    1.27 1.27 1.27
    1.27
    1.27
    1.27
    System.Numerics.Tests.Perf_VectorConvert.Widen_ushort
    1.27 1.27 1.27
    1.27
    1.27
    1.27
    System.Numerics.Tests.Perf_VectorConvert.Widen_byte
    1.27 1.27 1.27
    1.27
    Loops.StrengthReduction.SumS16Span
    1.27 1.26 1.27
    1.27
    1.26
    1.26
    System.Numerics.Tests.Perf_VectorConvert.Widen_short
    1.26 1.24 1.37
    1.37
    1.20
    1.18
    1.21
    1.19
    SeekUnroll.Test(boxedIndex: 27)
    1.26 1.25 1.26
    1.25
    System.Diagnostics.Perf_Activity.EnumerateActivityEventsLarge
    1.25 1.20 1.25
    1.20
    System.Tests.Perf_UInt64.ParseSpan(value: "12345")
    1.25 1.25 1.21
    1.21
    1.29
    1.29
    ArrayDeAbstraction.foreach_opaque_array_via_interface
    1.24 1.24 1.46
    1.45
    1.12
    1.14
    1.16
    1.16
    System.Tests.Perf_Int32.ParseSpan(value: "-2147483648")
    1.24 1.24 1.24
    1.24
    1.23
    1.24
    ArrayDeAbstraction.foreach_member_array_via_interface
    1.24 1.24 1.24
    1.24
    1.23
    1.24
    ArrayDeAbstraction.foreach_member_array_via_interface_property
    1.23 1.22 1.23
    1.22
    PerfLabTests.CastingPerf.FooObjIsFoo
    1.23 1.23 1.23
    1.23
    Loops.StrengthReduction.SumIntsSpan
    1.22 1.19 1.22
    1.19
    System.Tests.Perf_UInt64.TryParse(value: "12345")
    1.22 1.22 1.22
    1.22
    Benchstone.MDBenchI.MDMulMatrix.Test
    1.22 1.22 1.22
    1.22
    ArrayDeAbstraction.foreach_static_array_via_interface_property
    1.22 1.21 1.24
    1.24
    1.19
    1.19
    ArrayDeAbstraction.foreach_static_array_via_interface
    1.21 1.21 1.21
    1.21
    PerfLabTests.CastingPerf.ScalarValueTypeObj
    1.21 1.21 1.21
    1.21
    PerfLabTests.CastingPerf.ObjrefValueTypeObj
    1.21 1.21 1.30
    1.31
    1.12
    1.12
    System.Tests.Perf_UInt64.Parse(value: "18446744073709551615")
    1.21 1.20 1.21
    1.21
    1.20
    1.20
    PerfLabTests.LowLevelPerf.GenericClassGenericStaticMethod
    1.20 1.20 1.20
    1.20
    PerfLabTests.CastingPerf.IntObj
    1.20 1.20 1.20
    1.20
    PerfLabTests.LowLevelPerf.StructWithInterfaceInterfaceMethod
    1.20 1.20 1.20
    1.20
    1.20
    1.20
    PerfLabTests.LowLevelPerf.GenericGenericMethod
    1.19 1.19 1.37
    1.37
    1.14
    1.15
    1.07
    1.08
    SeekUnroll.Test(boxedIndex: 19)
    1.19 1.26 1.19
    1.26
    System.Memory.Span(Byte).IndexOfAnyFourValues(Size: 512)
    1.18 1.21 1.33
    1.39
    1.14
    1.17
    1.09
    1.10
    System.Tests.Perf_Int64.TryParseSpan(value: "9223372036854775807")
    1.18 1.14 1.17
    1.11
    1.19
    1.18
    System.Tests.Perf_Int64.ParseSpan(value: "-9223372036854775808")
    1.17 1.29 1.17
    1.29
    System.Tests.Perf_UInt64.Parse(value: "12345")
    1.17 1.18 1.16
    1.18
    1.18
    1.18
    System.Tests.Perf_Int64.TryParse(value: "9223372036854775807")
    1.17 1.17 1.17
    1.17
    Benchstone.MDBenchI.MDArray2.Test
    1.17 1.15 1.17
    1.15
    System.Tests.Perf_Int32.TryParse(value: "2147483647")
    1.16 1.16 1.16
    1.16
    System.Tests.Perf_Int32.TryParseSpan(value: "2147483647")
    1.16 1.14 1.16
    1.14
    System.Tests.Perf_Int32.Parse(value: "12345")
    1.16 1.16 1.16
    1.16
    System.Tests.Perf_Array.ArrayAssign2D
    1.15 1.19 1.00
    1.07
    1.33
    1.33
    System.Buffers.Binary.Tests.BinaryReadAndWriteTests.MeasureReverseEndianness
    1.15 1.07 1.00
    1.07
    1.33
    1.07
    Struct.FilteredSpanEnumerator.Sum
    1.14 1.12 1.14
    1.12
    System.Tests.Perf_Int64.TryParse(value: "-9223372036854775808")
    1.14 1.13 1.14
    1.13
    System.Tests.Perf_Int32.ParseSpan(value: "12345")
    1.13 1.14 1.17
    1.21
    1.10
    1.07
    System.Tests.Perf_Int64.Parse(value: "-9223372036854775808")
    1.13 1.14 1.19
    1.18
    1.08
    1.11
    System.Tests.Perf_Int64.TryParseSpan(value: "-9223372036854775808")
    1.13 1.27 1.28
    1.28
    1.00
    1.27
    System.Numerics.Tests.Perf_VectorConvert.Widen_int
    1.12 1.27 1.27
    1.27
    1.00
    1.27
    System.Numerics.Tests.Perf_VectorConvert.Widen_uint
    1.12 1.24 1.17
    1.37
    1.08
    1.12
    System.Tests.Perf_Int64.Parse(value: "9223372036854775807")
    1.12 1.17 1.12
    1.17
    System.Tests.Perf_UInt32.Parse(value: "12345")
    1.11 1.09 1.11
    1.09
    System.Tests.Perf_UInt64.TryParse(value: "18446744073709551615")
    1.11 1.22 1.11
    1.22
    IfStatements.IfStatements.Single
    1.11 1.09 1.11
    1.09
    System.Collections.ContainsTrue(Int32).ImmutableSortedSet(Size: 512)
    1.11 1.12 1.06
    1.09
    1.16
    1.16
    System.Tests.Perf_Int32.Parse(value: "2147483647")
    1.11 1.11 1.11
    1.11
    System.Memory.Span(Char).StartsWith(Size: 512)
    1.10 1.10 1.10
    1.10
    System.Tests.Perf_Int16.Parse(value: "-32768")
    1.10 1.10 1.10
    1.10
    PerfLabTests.CastingPerf.FooObjIsFoo2
    1.10 1.16 1.10
    1.16
    System.Tests.Perf_SByte.TryParse(value: "-128")
    1.10 1.11 1.10
    1.11
    System.Tests.Perf_Int16.TryParse(value: "32767")
    1.09 1.09 1.09
    1.10
    1.10
    1.10
    1.08
    1.08
    System.Collections.IterateForEach(Int32).FrozenDictionary(Size: 512)
    1.09 1.09 1.09
    1.09
    System.Tests.Perf_UInt32.ParseSpan(value: "12345")
    1.09 1.09 1.07
    1.07
    1.11
    1.11
    System.Tests.Perf_UInt32.ParseSpan(value: "4294967295")
    1.09 1.09 1.09
    1.09
    System.Tests.Perf_UInt16.Parse(value: "65535")
    1.08 1.08 1.08
    1.08
    System.Tests.Perf_UInt16.Parse(value: "12345")
    1.08 1.09 1.08
    1.09
    Loops.StrengthReduction.SumShortsSpan
    1.08 1.09 1.04
    1.06
    1.13
    1.13
    System.Tests.Perf_UInt64.ParseSpan(value: "18446744073709551615")
    1.08 1.14 1.08
    1.14
    IfStatements.IfStatements.AndAndAnd
    1.07 1.11 1.07
    1.11
    System.Collections.CreateAddAndRemove(String).Queue(Size: 512)
    1.07 1.09 1.07
    1.09
    System.Tests.Perf_UInt16.TryParse(value: "65535")
    1.07 1.07 1.07
    1.07
    System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "Holmes.{0,25}Watson
    1.07 1.06 1.07
    1.06
    System.Tests.Perf_UInt32.Parse(value: "4294967295")
    1.06 1.06 1.06
    1.06
    Benchstone.MDBenchI.MDNDhrystone.Test
    1.06 1.64 0.81
    2.00
    1.39
    1.34
    Span.Sorting.QuickSortSpan(Size: 512)
    1.05 1.05 1.05
    1.05
    System.Text.Perf_Utf8Encoding.GetByteCount(Input: EnglishMostlyAscii)
    1.05 1.05 1.05
    1.05
    System.Text.Perf_Utf8Encoding.GetByteCount(Input: Greek)
    1.05 1.31 0.96
    1.50
    1.15
    1.15
    System.Tests.Perf_Int32.TryParse(value: "-2147483648")
    1.02 1.23 1.02
    1.23
    PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo
    1.01 1.15 1.01
    1.15
    PerfLabTests.LowLevelPerf.EmptyStaticFunction5Arg
    1.01 1.16 1.01
    1.16
    System.Tests.Perf_UInt32.TryParseHex(value: "FFFFFFFF")
    1.01 1.26 1.01
    1.26
    Loops.StrengthReduction.SumS8Span
    1.00 1.08 1.00
    1.08
    Benchstone.MDBenchI.MDLogicArray.Test
    1.00 1.21 1.00
    1.21
    PerfLabTests.LowLevelPerf.EmptyStaticFunction
    1.00 1.26 1.00
    1.26
    Loops.StrengthReduction.SumS12Span
    1.00 1.08 1.00
    1.08
    IfStatements.IfStatements.AndAnd
    1.00 1.12 1.00
    1.11
    1.00
    1.14
    PerfLabTests.LowLevelPerf.StaticDelegate
    1.00 1.42 1.00
    1.42
    PerfLabTests.LowLevelPerf.ForeachOverList100Elements
    1.00 1.27 1.00
    1.27
    Loops.StrengthReduction.SumS29Span
    1.00 1.14 1.00
    1.14
    System.Collections.ContainsFalse(Int32).Span(Size: 512)
    1.00 1.21 1.00
    1.21
    PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo
    1.00 1.39 1.00
    1.39
    System.Numerics.Tests.Perf_VectorConvert.Convert_double_ulong
    0.99 1.20 0.99
    1.20
    PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFooInterAlia
    0.99 1.87 0.99
    1.87
    Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark.ForEach_Array
    0.97 1.93 0.97
    1.93
    System.Tests.Perf_String.IndexerCheckLengthHoisting
    0.96 1.12 0.96
    1.12
    System.Tests.Perf_Int32.TryParse(value: "12345")
    0.95 1.08 0.95
    1.08
    Microsoft.Extensions.Logging.ScopesOverheadBenchmark.NotFiltered(HasISupportLoggingScopeLogger: True, CaptureScopes: False)
    0.95 1.25 0.89
    1.18
    1.00
    1.33
    System.Buffers.Binary.Tests.BinaryReadAndWriteTests.MeasureReverseUsingNtoH
    0.93 1.17 0.93
    1.17
    Loops.StrengthReduction.SumS3Span
    0.86 1.60 0.86
    1.60
    System.Globalization.Tests.StringEquality.Compare_Same_Upper(Count: 1024, Options: (en-US, OrdinalIgnoreCase))
    0.86 1.14 0.86
    1.14
    System.Tests.Perf_Int32.ParseSpan(value: "2147483647")
    0.82 1.19 0.82
    1.19
    System.Tests.Perf_UInt32.TryParse(value: "12345")
    0.80 1.13 0.80
    1.13
    System.Collections.ContainsFalse(String).Array(Size: 512)
    0.79 1.13 0.79
    1.13
    System.Collections.ContainsFalse(String).Span(Size: 512)
  9. amanasifkhalid commented on Aug 1, 2025

    @amanasifkhalid
    Contributor

    For many of the regressions, we're now inverting more loops because the flowgraph is in a more compact state after flow opts, and the additional inversions frequently make sense. For example, the hot loop in System.Collections.IterateForEach(String).List(Size: 512) is now correctly rotated. Previously, it was this:

    BB20 [0022]  1  0    BB01                  1       36984 [000..???)-> BB02(1)                 (always) T0    try {       LIR IBC keep internal
    BB02 [0001]  2  0    BB13,BB20           513.65 18996752 [000..018)-> BB17(1.94e-06),BB12(1)  ( cond ) T0                i LIR IBC keep bwd
    BB12 [0013]  1  0    BB02                513.65 18996715 [000..000)-> BB18(0.00194),BB13(0.998)   ( cond ) T0                i LIR IBC internal bwd
    BB13 [0014]  1  0    BB12                512.65 18959768 [000..022)-> BB02(1)                 (always) T0                i LIR IBC idxlen bwd
    

    Now, it is this:

    BB20 [0022]  1  0    BB01                  1       37192 [000..???)-> BB21(1),BB14(1.95e-06)  ( cond ) T0    try {       LIR IBC keep internal
    BB21 [0023]  2  0    BB02,BB20           512.31 19053919 [000..000)-> BB14(0.00195),BB13(0.998)   ( cond ) T0                LIR IBC keep internal bwd
    BB13 [0014]  1  0    BB21                511.31 19016765 [000..022)-> BB02(1)                 (always) T0                i LIR IBC idxlen bwd
    BB02 [0001]  1  0    BB13                511.31 19016765 [000..018)-> BB14(1.95e-06),BB21(1)  ( cond ) T0                i LIR IBC keep bwd
    

    However, the change in loop flow from inversion frequently pessimizes loop hoisting, because hoisting's side effect detection is quite conservative. Once we've processed the loop header, we assume every block visited after is preceded by code with side effects, so slight changes in loop flow can disable hoisting of nodes with side effects. Now that we iterate loop blocks in RPO during hoisting, I think we can get rid of this assumption, and allow the current side effect detection logic handle setting the "before side effect" flag.

  10. amanasifkhalid commented on Aug 15, 2025

    @amanasifkhalid
    Contributor

    Here is where we currently stand.

    Notes Recent Score Orig Score Ampere Ubuntu Tiger Ubuntu Tiger Windows Surface Windows Viper Ubuntu Viper Windows Benchmark
    1.89 1.78 1.89
    1.78
    System.Collections.IterateForEach(String).List(Size: 512)
    1.81 1.87 1.81
    1.87
    Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark.ForEach_Array
    1.61 1.35 1.61
    1.35
    LinqBenchmarks.Count00ForX
    1.55 1.44 1.55
    1.44
    System.Tests.Perf_Int64.Parse(value: "12345")
    1.44 1.54 1.44
    1.54
    System.Tests.Perf_Int64.TryParseSpan(value: "12345")
    1.41 1.37 1.41
    1.37
    System.Tests.Perf_Int64.ParseSpan(value: "12345")
    1.41 1.39 1.41
    1.39
    System.Tests.Perf_Int64.ParseSpan(value: "9223372036854775807")
    1.39 1.40 1.39
    1.40
    System.Linq.Tests.Perf_Enumerable.SelectToList(input: Range)
    1.37 1.37 1.37
    1.37
    SeekUnroll.Test(boxedIndex: 1)
    1.37 1.37 1.37
    1.37
    1.37
    1.37
    SeekUnroll.Test(boxedIndex: 3)
    1.36 1.15 1.36
    1.15
    System.Collections.ContainsFalse(Int32).ImmutableArray(Size: 512)
    1.36 1.31 1.61
    1.50
    1.15
    1.15
    System.Tests.Perf_Int32.TryParse(value: "-2147483648")
    1.36 1.12 1.36
    1.12
    System.Tests.Perf_Int64.TryParse(value: "-9223372036854775808")
    1.34 1.34 1.34
    1.35
    1.34
    1.34
    System.Collections.IterateForEach(Int32).IEnumerable(Size: 512)
    1.34 1.35 1.34
    1.35
    System.Memory.Span(Byte).IndexOfAnyThreeValues(Size: 512)
    1.32 1.32 1.43
    1.44
    1.38
    1.37
    1.16
    1.17
    SeekUnroll.Test(boxedIndex: 11)
    1.31 1.31 1.42
    1.41
    1.21
    1.21
    System.Collections.IterateForEach(Int32).FrozenSet(Size: 512)
    1.30 1.31 1.48
    1.51
    1.15
    1.14
    System.Tests.Perf_Int32.TryParseSpan(value: "-2147483648")
    1.30 1.46 1.30
    1.46
    System.Tests.Perf_Int64.TryParse(value: "12345")
    1.27 1.27 1.27
    1.27
    1.28
    1.28
    System.Numerics.Tests.Perf_VectorConvert.Widen_sbyte
    1.27 1.27 1.28
    1.28
    1.27
    1.27
    System.Numerics.Tests.Perf_VectorConvert.Widen_int
    1.27 1.25 1.25
    1.21
    1.29
    1.29
    ArrayDeAbstraction.foreach_opaque_array_via_interface
    1.27 1.27 1.27
    1.27
    1.27
    1.27
    System.Numerics.Tests.Perf_VectorConvert.Widen_uint
    1.27 1.27 1.27
    1.27
    1.27
    1.27
    System.Numerics.Tests.Perf_VectorConvert.Widen_ushort
    1.27 1.27 1.27
    1.27
    1.27
    1.27
    System.Numerics.Tests.Perf_VectorConvert.Widen_byte
    1.27 1.24 1.37
    1.37
    1.21
    1.18
    1.22
    1.19
    SeekUnroll.Test(boxedIndex: 27)
    1.26 1.26 1.27
    1.27
    1.26
    1.26
    System.Numerics.Tests.Perf_VectorConvert.Widen_short
    1.26 1.27 1.26
    1.27
    Loops.StrengthReduction.SumS16Span
    1.26 1.20 1.26
    1.20
    System.Tests.Perf_UInt64.ParseSpan(value: "12345")
    1.25 1.14 1.31
    1.11
    1.19
    1.18
    System.Tests.Perf_Int64.ParseSpan(value: "-9223372036854775808")
    1.24 1.25 1.24
    1.25
    System.Diagnostics.Perf_Activity.EnumerateActivityEventsLarge
    1.24 1.24 1.24
    1.24
    1.23
    1.24
    ArrayDeAbstraction.foreach_member_array_via_interface
    1.24 1.24 1.24
    1.24
    1.23
    1.24
    ArrayDeAbstraction.foreach_member_array_via_interface_property
    1.23 1.23 1.23
    1.23
    Loops.StrengthReduction.SumIntsSpan
    1.22 1.24 1.47
    1.45
    1.07
    1.14
    1.16
    1.16
    System.Tests.Perf_Int32.ParseSpan(value: "-2147483648")
    1.22 1.22 1.22
    1.22
    Benchstone.MDBenchI.MDMulMatrix.Test
    1.22 1.21 1.25
    1.24
    1.19
    1.19
    ArrayDeAbstraction.foreach_static_array_via_interface
    1.22 1.22 1.22
    1.22
    ArrayDeAbstraction.foreach_static_array_via_interface_property
    1.22 1.21 1.22
    1.21
    PerfLabTests.CastingPerf.ScalarValueTypeObj
    1.21 1.22 1.21
    1.22
    PerfLabTests.CastingPerf.FooObjIsFoo
    1.21 1.21 1.39
    1.39
    1.14
    1.17
    1.12
    1.10
    System.Tests.Perf_Int64.TryParseSpan(value: "9223372036854775807")
    1.21 1.21 1.21
    1.21
    PerfLabTests.CastingPerf.ObjrefValueTypeObj
    1.21 1.21 1.31
    1.31
    1.12
    1.12
    System.Tests.Perf_UInt64.Parse(value: "18446744073709551615")
    1.21 1.26 1.21
    1.26
    System.Memory.Span(Byte).IndexOfAnyFourValues(Size: 512)
    1.20 1.20 1.20
    1.21
    1.20
    1.20
    PerfLabTests.LowLevelPerf.GenericClassGenericStaticMethod
    1.20 1.20 1.20
    1.20
    PerfLabTests.LowLevelPerf.StructWithInterfaceInterfaceMethod
    1.20 1.20 1.20
    1.20
    PerfLabTests.CastingPerf.IntObj
    1.20 1.20 1.20
    1.20
    1.20
    1.20
    PerfLabTests.LowLevelPerf.GenericGenericMethod
    1.19 1.09 1.19
    1.09
    System.Tests.Perf_UInt32.ParseSpan(value: "12345")
    1.19 1.19 1.19
    1.19
    System.Tests.Perf_UInt32.TryParse(value: "12345")
    1.19 1.19 1.37
    1.37
    1.13
    1.15
    1.07
    1.08
    SeekUnroll.Test(boxedIndex: 19)
    1.19 1.19 1.19
    1.19
    System.Tests.Perf_UInt64.TryParse(value: "12345")
    1.18 1.14 1.18
    1.14
    System.Tests.Perf_Int32.Parse(value: "12345")
    1.17 1.15 1.17
    1.15
    System.Tests.Perf_Int32.TryParse(value: "2147483647")
    1.16 1.16 1.16
    1.16
    System.Tests.Perf_Int32.TryParseSpan(value: "2147483647")
    1.15 1.07 1.00
    1.07
    1.33
    1.07
    Struct.FilteredSpanEnumerator.Sum
    1.15 1.19 1.00
    1.07
    1.33
    1.33
    System.Buffers.Binary.Tests.BinaryReadAndWriteTests.MeasureReverseEndianness
    1.15 1.29 1.15
    1.29
    System.Tests.Perf_UInt64.Parse(value: "12345")
    1.15 1.13 1.15
    1.13
    System.Tests.Perf_Int32.ParseSpan(value: "12345")
    1.15 1.17 1.15
    1.17
    Benchstone.MDBenchI.MDArray2.Test
    1.14 1.18 1.11
    1.18
    1.18
    1.18
    System.Tests.Perf_Int64.TryParse(value: "9223372036854775807")
    1.14 1.14 1.21
    1.21
    1.08
    1.07
    System.Tests.Perf_Int64.Parse(value: "-9223372036854775808")
    1.14 1.14 1.21
    1.18
    1.08
    1.11
    System.Tests.Perf_Int64.TryParseSpan(value: "-9223372036854775808")
    1.12 1.16 1.12
    1.16
    System.Tests.Perf_Array.ArrayAssign2D
    1.12 1.17 1.12
    1.17
    System.Tests.Perf_UInt32.Parse(value: "12345")
    1.12 1.16 1.12
    1.16
    System.Tests.Perf_SByte.TryParse(value: "-128")
    1.12 1.11 1.12
    1.11
    System.Memory.Span(Char).StartsWith(Size: 512)
    1.12 1.24 1.13
    1.37
    1.10
    1.12
    System.Tests.Perf_Int64.Parse(value: "9223372036854775807")
    1.11 1.09 1.11
    1.09
    System.Collections.ContainsTrue(Int32).ImmutableSortedSet(Size: 512)
    1.11 1.22 1.11
    1.22
    IfStatements.IfStatements.Single
    1.11 1.14 1.11
    1.14
    System.Tests.Perf_Int32.ParseSpan(value: "2147483647")
    1.10 1.10 1.10
    1.10
    System.Tests.Perf_Int16.Parse(value: "-32768")
    1.10 1.10 1.10
    1.10
    PerfLabTests.CastingPerf.FooObjIsFoo2
    1.10 1.09 1.10
    1.09
    System.Tests.Perf_UInt64.TryParse(value: "18446744073709551615")
    1.10 1.11 1.10
    1.11
    System.Tests.Perf_Int16.TryParse(value: "32767")
    1.09 1.09 1.10
    1.10
    1.10
    1.10
    1.08
    1.08
    System.Collections.IterateForEach(Int32).FrozenDictionary(Size: 512)
    1.09 1.09 1.09
    1.09
    System.Tests.Perf_UInt16.Parse(value: "65535")
    1.09 1.09 1.09
    1.09
    Loops.StrengthReduction.SumShortsSpan
    1.08 1.08 1.08
    1.08
    System.Tests.Perf_UInt16.Parse(value: "12345")
    1.08 1.09 1.07
    1.07
    1.08
    1.11
    System.Tests.Perf_UInt32.ParseSpan(value: "4294967295")
    1.08 1.09 1.04
    1.06
    1.12
    1.13
    System.Tests.Perf_UInt64.ParseSpan(value: "18446744073709551615")
    1.08 1.14 1.08
    1.14
    IfStatements.IfStatements.AndAndAnd
    1.07 1.11 1.07
    1.11
    System.Collections.CreateAddAndRemove(String).Queue(Size: 512)
    1.07 1.09 1.07
    1.09
    System.Tests.Perf_UInt16.TryParse(value: "65535")
    1.07 1.06 1.07
    1.06
    System.Tests.Perf_UInt32.Parse(value: "4294967295")
    1.06 1.06 1.06
    1.06
    Benchstone.MDBenchI.MDNDhrystone.Test
    1.05 1.05 1.05
    1.05
    System.Text.Perf_Utf8Encoding.GetByteCount(Input: EnglishMostlyAscii)
    1.05 1.05 1.05
    1.05
    System.Text.Perf_Utf8Encoding.GetByteCount(Input: Greek)
    1.04 1.37 1.04
    1.37
    System.Tests.Perf_Int32.ToStringHex(value: 12345)
    1.03 1.64 0.80
    2.00
    1.32
    1.34
    Span.Sorting.QuickSortSpan(Size: 512)
    1.02 1.12 1.02
    1.12
    System.Tests.Perf_UInt64.TryParseHex(value: "FFFFFFFFFFFFFFFF")
    1.01 1.16 1.01
    1.16
    System.Tests.Perf_UInt32.TryParseHex(value: "FFFFFFFF")
    1.01 1.23 1.01
    1.23
    PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo
    1.01 1.15 1.01
    1.15
    PerfLabTests.LowLevelPerf.EmptyStaticFunction5Arg
    1.00 1.21 1.00
    1.21
    PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo
    1.00 1.12 1.00
    1.11
    1.00
    1.14
    PerfLabTests.LowLevelPerf.StaticDelegate
    1.00 1.08 1.00
    1.08
    IfStatements.IfStatements.AndAnd
    1.00 1.21 1.00
    1.21
    PerfLabTests.LowLevelPerf.EmptyStaticFunction
    1.00 1.26 1.00
    1.26
    Loops.StrengthReduction.SumS12Span
    1.00 1.26 1.00
    1.26
    Loops.StrengthReduction.SumS8Span
    1.00 1.27 1.00
    1.27
    Loops.StrengthReduction.SumS29Span
    1.00 1.08 1.00
    1.08
    Benchstone.MDBenchI.MDLogicArray.Test
    1.00 1.12 0.85
    1.09
    1.16
    1.16
    System.Tests.Perf_Int32.Parse(value: "2147483647")
    1.00 1.14 1.00
    1.14
    System.Collections.ContainsFalse(Int32).Span(Size: 512)
    0.99 1.20 0.99
    1.20
    PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFooInterAlia
    0.99 1.39 0.99
    1.39
    System.Numerics.Tests.Perf_VectorConvert.Convert_double_ulong
    0.99 1.93 0.99
    1.93
    System.Tests.Perf_String.IndexerCheckLengthHoisting
    0.98 1.42 0.98
    1.42
    PerfLabTests.LowLevelPerf.ForeachOverList100Elements
    0.96 1.08 0.96
    1.08
    Microsoft.Extensions.Logging.ScopesOverheadBenchmark.NotFiltered(HasISupportLoggingScopeLogger: True, CaptureScopes: False)
    0.95 1.25 0.90
    1.18
    1.00
    1.33
    System.Buffers.Binary.Tests.BinaryReadAndWriteTests.MeasureReverseUsingNtoH
    0.94 1.12 0.94
    1.12
    System.Tests.Perf_Int32.TryParse(value: "12345")
    0.93 1.07 0.93
    1.07
    System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "Holmes.{0,25}Watson
    0.93 1.17 0.93
    1.17
    Loops.StrengthReduction.SumS3Span
    0.85 1.60 0.85
    1.60
    System.Globalization.Tests.StringEquality.Compare_Same_Upper(Count: 1024, Options: (en-US, OrdinalIgnoreCase))
    0.80 1.13 0.80
    1.13
    System.Collections.ContainsFalse(String).Array(Size: 512)
    0.79 1.13 0.79
    1.13
    System.Collections.ContainsFalse(String).Span(Size: 512)
  11. amanasifkhalid commented on Aug 15, 2025

    @amanasifkhalid
    Contributor

    Inverting the loop in System.Collections.IterateForEach(String).List(Size: 512) means we can no longer hoist loop expressions as aggressively as before, as the changed flow through the loop means these hoists would violate side effect ordering constraints. Detecting whether inversion would affect a loop's hoisting potential would be tricky, and I don't think this problem is widespread enough to consider that approach; when more inversion pessimizes loop hoisting, it's more likely that the existing quirks in hoisting -- such as its reluctance to hoist conditionally-executing code -- inhibits us, rather than its correctness constraints.

    After this, we have a tail of Intel-only regressions; the Perf_Int.Parse regressions are probably the same underlying method. As mentioned in #116486, I'd like inversion to have more insight into the clonability of loops in .NET 11, so we can enable BCE/GDV/etc more often. There are plenty of cases where more inversion pessimizes loop hoisting, RBO, etc, but I'm inclined to believe the cases where we invert less are a bigger missed opportunity. Once RC1 snaps, I'll try moving some of the cloning profitability heuristics earlier so we can invert more confidently.

  12. modified the milestones: 10.0.0, 11.0.0 on Aug 15, 2025
  13. AndyAyersMS commented on May 20, 2026

    @AndyAyersMS
    Member

    We stopped running Tiger around Nov 2025 so we don't have up to date data there. Looking at Viper most of the benchmarks are looking pretty good (AI summary, but I double-checked a few).

    So going to close this.

  14. locked and limited conversation to collaborators on Jun 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions