dotnet / perf-autofiling-issues

A landing place for auto-filed performance issues before they receive triage
MIT License
9 stars 4 forks source link

[Perf] Windows/x86: 22 Regressions on 12/6/2022 5:44:36 AM #10651

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Collections.IndexerSetReverse<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IList - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IndexerSetReverse(String).IList(Size%3a%20512).html>) 2.84 μs 3.01 μs 1.06 0.03 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IndexerSetReverse&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IndexerSetReverse<String>.IList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 3.0094169224374956 > 2.9741681675585063. IsChangePoint: Marked as a change because one of 10/2/2022 4:08:26 PM, 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -10.163432407287011 (T) = (0 -3026.684546869151) / Math.Sqrt((5683.966894720505 / (22)) + (2297.574916058679 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.06453583555918195 = (2843.196485987047 - 3026.684546869151) / 2843.196485987047 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in PerfLabTests.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[FooObjIsFoo - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.FooObjIsFoo.html>) 224.53 μs 280.65 μs 1.25 0.04 False Trace Trace
[ScalarValueTypeObj - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.ScalarValueTypeObj.html>) 220.08 μs 280.66 μs 1.28 0.04 False Trace Trace
[ObjrefValueTypeObj - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.ObjrefValueTypeObj.html>) 219.99 μs 281.85 μs 1.28 0.04 False Trace Trace

graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.CastingPerf.FooObjIsFoo ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 280.65319196428567 > 231.14544718309858. IsChangePoint: Marked as a change because one of 10/3/2022 4:48:37 PM, 10/10/2022 3:36:43 PM, 10/19/2022 7:27:15 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -175.49517330895682 (T) = (0 -281038.2886135223) / Math.Sqrt((2407807.487078914 / (22)) + (327512.7489189927 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.27467237060287014 = (220478.84232448076 - 281038.2886135223) / 220478.84232448076 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjIsFoo() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0AC22918] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[7264158] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.Foo[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[857B858] M00_L01: mov edx,7264160 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjIsFoo() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0AC02918] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[72E4150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.Foo[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[849B858] M00_L01: mov edx,72E4158 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` #### PerfLabTests.CastingPerf.ScalarValueTypeObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 280.6628869047619 > 231.0371540798611. IsChangePoint: Marked as a change because one of 10/3/2022 4:48:37 PM, 10/10/2022 3:36:43 PM, 10/19/2022 4:51:05 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -216.3357643422799 (T) = (0 -280938.68756997987) / Math.Sqrt((1534268.1100099322 / (22)) + (275341.45664719504 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.2736231353197211 = (220582.27412731087 - 280938.68756997987) / 220582.27412731087 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ScalarValueTypeObj() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0A882918] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[70A4158] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.FooSVT[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[34BB858] M00_L01: mov edx,70A4150 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ScalarValueTypeObj() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0B0B2918] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[76F4150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.FooSVT[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[555B858] M00_L01: mov edx,76F4148 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` #### PerfLabTests.CastingPerf.ObjrefValueTypeObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 281.8501860119047 > 231.0434002622506. IsChangePoint: Marked as a change because one of 10/3/2022 4:48:37 PM, 10/10/2022 3:36:43 PM, 10/19/2022 7:27:15 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -458.8714786760231 (T) = (0 -280826.0745668461) / Math.Sqrt((271255.03002994566 / (22)) + (176358.76785896486 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.2759372213471643 = (220093.95906668773 - 280826.0745668461) / 220093.95906668773 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjrefValueTypeObj() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0A4A2918] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[6AA4158] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.FooORVT[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[7D8B858] M00_L01: mov edx,6AA4154 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjrefValueTypeObj() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0AD42918] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[7314150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.FooORVT[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[85DB858] M00_L01: mov edx,731414C call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Buffers.Tests.RentReturnArrayPoolTests<Object>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SingleSerial - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Tests.RentReturnArrayPoolTests(Object).SingleSerial(RentalSize%3a%204096%2c%20ManipulateArray%3a%20False%2c%20Async%3a%20False%2c%20UseSharedPool%3a%20True).html>) 25.55 ns 32.26 ns 1.26 0.29 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Tests.RentReturnArrayPoolTests&lt;Object&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Buffers.Tests.RentReturnArrayPoolTests<Object>.SingleSerial(RentalSize: 4096, ManipulateArray: False, Async: False, UseSharedPool: True) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 32.26492625 > 27.355133932291665. IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -11.259640722166115 (T) = (0 -32.945079390449166) / Math.Sqrt((2.8150588768483464 / (22)) + (6.890275534162714 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.24457678329646937 = (26.47090949518488 - 32.945079390449166) / 26.47090949518488 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Collections.IndexerSet<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IndexerSet(Int32).IList(Size%3a%20512).html>) 1.94 μs 2.22 μs 1.14 0.05 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IndexerSet&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IndexerSet<Int32>.IList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.2153897868603436 > 2.0526736159741943. IsChangePoint: Marked as a change because one of 9/29/2022 7:42:19 AM, 10/2/2022 4:08:26 PM, 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -62.93667286014658 (T) = (0 -2235.229033557804) / Math.Sqrt((332.68759765905793 / (22)) + (239.5833784344159 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.1528335895323446 = (1938.899988561698 - 2235.229033557804) / 1938.899988561698 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Collections.IterateForEachNonGeneric<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ArrayList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEachNonGeneric(Int32).ArrayList(Size%3a%20512).html>) 2.81 μs 3.24 μs 1.15 0.04 False
[SortedList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEachNonGeneric(Int32).SortedList(Size%3a%20512).html>) 6.80 μs 7.53 μs 1.11 0.03 False

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEachNonGeneric&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEachNonGeneric<Int32>.ArrayList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 3.2436757967090184 > 2.9545176409283256. IsChangePoint: Marked as a change because one of 10/11/2022 6:23:40 AM, 10/25/2022 12:27:43 PM, 11/2/2022 4:14:20 AM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -246.5633084221798 (T) = (0 -3235.826881363799) / Math.Sqrt((37.12804572400982 / (22)) + (43.338084548662124 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.15094205897331328 = (2811.4594093905016 - 3235.826881363799) / 2811.4594093905016 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEachNonGeneric<Int32>.SortedList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.530412435456109 > 7.224187703787351. IsChangePoint: Marked as a change because one of 10/2/2022 4:08:26 PM, 11/16/2022 6:51:59 PM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -11.014148679731516 (T) = (0 -7615.884115401511) / Math.Sqrt((54527.40952987916 / (22)) + (9119.356767041643 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.08201070496399425 = (7038.640265259614 - 7615.884115401511) / 7038.640265259614 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Collections.ContainsTrue<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Span - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsTrue(String).Span(Size%3a%20512).html>) 446.58 μs 480.80 μs 1.08 0.00 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsTrue&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsTrue<String>.Span(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 480.7978661616163 > 466.8030051749465. IsChangePoint: Marked as a change because one of 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -118.0818146480258 (T) = (0 -478921.22216835443) / Math.Sqrt((1299741.1968578764 / (22)) + (828610.3677904498 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.07668698632558661 = (444810.0778135812 - 478921.22216835443) / 444810.0778135812 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Collections.IterateForEach<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[HashSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).HashSet(Size%3a%20512).html>) 2.27 μs 2.55 μs 1.13 0.06 False
[ConcurrentBag - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).ConcurrentBag(Size%3a%20512).html>) 5.72 μs 6.51 μs 1.14 0.01 False
[ConcurrentStack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).ConcurrentStack(Size%3a%20512).html>) 5.16 μs 5.62 μs 1.09 0.03 False

graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<String>.HashSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.5532435618906315 > 2.379408960075175. IsChangePoint: Marked as a change because one of 9/29/2022 7:42:19 AM, 10/2/2022 4:08:26 PM, 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -18.81467197068887 (T) = (0 -2561.217567703008) / Math.Sqrt((5636.58428803241 / (22)) + (60.79490931758637 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.13377813306609507 = (2259.011258910652 - 2561.217567703008) / 2259.011258910652 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.ConcurrentBag(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 6.505317954673424 > 6.016570697867737. IsChangePoint: Marked as a change because one of 11/20/2022 2:44:51 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -25.87869821390391 (T) = (0 -6443.920068688427) / Math.Sqrt((10086.161862042256 / (22)) + (12844.322574844282 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.13139231371672178 = (5695.566418972382 - 6443.920068688427) / 5695.566418972382 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.ConcurrentStack(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 5.620869304294693 > 5.434466722092273. IsChangePoint: Marked as a change because one of 9/29/2022 7:42:19 AM, 10/6/2022 2:13:23 PM, 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -45.9621731224393 (T) = (0 -5634.1980025076455) / Math.Sqrt((299.03217288848 / (22)) + (3148.2015477637674 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.09177775134581499 = (5160.57228274021 - 5634.1980025076455) / 5160.57228274021 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22(%3fi)Sher%5ba-z%5d%2b%7cHol%5ba-z%5d%2b%22%2c%20Options%3a%20None).html>) 6.43 ms 6.82 ms 1.06 0.03 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "(?i)Sher[a-z]+|Hol[a-z]+", Options: None) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 6.819258378378379 > 6.772682834217507. IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -20.74545172626147 (T) = (0 -6875972.767074225) / Math.Sqrt((4797212806.4586525 / (22)) + (4150098468.2950025 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.058920464472224446 = (6493379.812525648 - 6875972.767074225) / 6493379.812525648 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Collections.IterateFor<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateFor(Int32).IList(Size%3a%20512).html>) 1.93 μs 2.24 μs 1.17 0.04 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateFor&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateFor<Int32>.IList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.2445344018015434 > 2.02274512020121. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -355.71252306456006 (T) = (0 -2246.333258192405) / Math.Sqrt((9.294945277418098 / (22)) + (12.876895966569911 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.16515299600436675 = (1927.9298649153423 - 2246.333258192405) / 1927.9298649153423 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Collections.IterateForEach<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[LinkedList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(Int32).LinkedList(Size%3a%20512).html>) 2.00 μs 2.45 μs 1.23 0.07 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<Int32>.LinkedList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.4528681363302947 > 2.102060718680228. IsChangePoint: Marked as a change because one of 9/26/2022 8:26:31 AM, 9/29/2022 8:01:59 PM, 11/14/2022 1:59:26 PM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -40.496223675520945 (T) = (0 -2450.187999553329) / Math.Sqrt((2378.8736098361064 / (22)) + (25.74187195545594 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.2084102042015211 = (2027.6128015422835 - 2450.187999553329) / 2027.6128015422835 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Buffers.Tests.RentReturnArrayPoolTests<Byte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ProducerConsumer - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Tests.RentReturnArrayPoolTests(Byte).ProducerConsumer(RentalSize%3a%204096%2c%20ManipulateArray%3a%20False%2c%20Async%3a%20False%2c%20UseSharedPool%3a%20False).html>) 1.04 μs 12.22 μs 11.71 0.19 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Tests.RentReturnArrayPoolTests&lt;Byte&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Buffers.Tests.RentReturnArrayPoolTests<Byte>.ProducerConsumer(RentalSize: 4096, ManipulateArray: False, Async: False, UseSharedPool: False) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 12.216821525000002 > 1.09304285625. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -9.75872674421308 (T) = (0 -9323.614694442274) / Math.Sqrt((62.1207625979355 / (22)) + (24489616.456009496 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -7.952807570314242 = (1041.4179709790208 - 9323.614694442274) / 1041.4179709790208 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 21a3647f09ca92cbf890129d4e917cbd01a1b374
Compare d45904acf566817af32eb20a3cbeff042c0e717d
Diff Diff

Regressions in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Aggregate - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.Aggregate(input%3a%20IEnumerable).html>) 644.19 ns 745.67 ns 1.16 0.01 False Trace Trace
[SingleWithPredicate_LastElementMatches - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.SingleWithPredicate_LastElementMatches(input%3a%20List).html>) 969.69 ns 1.03 μs 1.06 0.01 False Trace Trace
[WhereFirst_LastElementMatches - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.WhereFirst_LastElementMatches(input%3a%20Array).html>) 325.43 ns 383.20 ns 1.18 0.05 False Trace Trace
[WhereSingleOrDefault_LastElementMatches - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.WhereSingleOrDefault_LastElementMatches(input%3a%20IEnumerable).html>) 721.44 ns 780.64 ns 1.08 0.03 False Trace Trace
[Concat_Once - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.Concat_Once(input%3a%20IEnumerable).html>) 1.99 μs 2.22 μs 1.11 0.04 False Trace Trace
[SequenceEqual - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.SequenceEqual(input1%3a%20IEnumerable%2c%20input2%3a%20IEnumerable).html>) 1.17 μs 1.29 μs 1.10 0.02 False Trace Trace

graph graph graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_Enumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Linq.Tests.Perf_Enumerable.Aggregate(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 745.6719043912564 > 676.605746429876. IsChangePoint: Marked as a change because one of 10/2/2022 4:08:26 PM, 11/11/2022 5:53:56 PM, 12/1/2022 7:29:59 PM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -21.402650070167038 (T) = (0 -751.3302163149749) / Math.Sqrt((447.5243525330514 / (22)) + (30.295309223589452 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.15109660499064653 = (652.7082201941513 - 751.3302163149749) / 652.7082201941513 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Aggregate(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi sub esp,8 vzeroupper mov esi,[edx+4] mov edx,ds:[6924930] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`3[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[69248D4] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AC729C0 mov edx,6924930 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0AC73A38]; System.Linq.Enumerable.Aggregate[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`3) vxorps xmm0,xmm0,xmm0 vcvtsi2sd xmm0,xmm0,eax vmovsd qword ptr [ebp-0C],xmm0 fld qword ptr [ebp-0C] lea esp,[ebp-4] pop esi pop ebp ret M00_L01: call dword ptr ds:[471B630] int 3 ; Total bytes of code 107 ``` ```assembly ; System.Linq.Enumerable.Aggregate[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`3) push ebp mov ebp,esp push edi push esi push ebx sub esp,18 xor eax,eax mov [ebp-18],eax mov esi,edx test ecx,ecx je near ptr M01_L05 test esi,esi je near ptr M01_L06 call dword ptr ds:[0C602AC] mov edi,eax mov [ebp-24],edi mov ecx,edi call dword ptr ds:[0C602B0] test eax,eax je short M01_L00 mov ecx,edi call dword ptr ds:[0C602B4] mov ebx,eax mov ecx,edi call dword ptr ds:[0C602B8] test eax,eax je short M01_L02 jmp short M01_L01 M01_L00: call dword ptr ds:[0A2837F8] int 3 M01_L01: mov ecx,edi call dword ptr ds:[0C602BC] push eax mov edx,ebx mov ecx,[esi+4] call dword ptr [esi+0C] mov ebx,eax mov ecx,edi call dword ptr ds:[0C602B8] test eax,eax jne short M01_L01 M01_L02: mov ecx,edi call dword ptr ds:[0C602C0] jmp short M01_L04 cmp dword ptr [ebp-24],0 je short M01_L03 mov ecx,[ebp-24] call dword ptr ds:[0C602C0] M01_L03: pop eax jmp eax M01_L04: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0A283798] int 3 M01_L06: mov ecx,5 call dword ptr ds:[0A283798] int 3 ; Total bytes of code 179 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Aggregate(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi sub esp,8 vzeroupper mov esi,[edx+4] mov edx,ds:[7424928] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`3[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[74248CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B864468 mov edx,7424928 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B8654E0]; System.Linq.Enumerable.Aggregate[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`3) vxorps xmm0,xmm0,xmm0 vcvtsi2sd xmm0,xmm0,eax vmovsd qword ptr [ebp-0C],xmm0 fld qword ptr [ebp-0C] lea esp,[ebp-4] pop esi pop ebp ret M00_L01: call dword ptr ds:[871B630] int 3 ; Total bytes of code 107 ``` ```assembly ; System.Linq.Enumerable.Aggregate[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`3) push ebp mov ebp,esp push edi push esi push ebx sub esp,18 xor eax,eax mov [ebp-18],eax mov esi,edx test ecx,ecx je near ptr M01_L05 test esi,esi je near ptr M01_L06 call dword ptr ds:[51802B0] mov edi,eax mov [ebp-24],edi mov ecx,edi call dword ptr ds:[51802B4] test eax,eax je short M01_L00 mov ecx,edi call dword ptr ds:[51802B8] mov ebx,eax mov ecx,edi call dword ptr ds:[51802BC] test eax,eax je short M01_L02 jmp short M01_L01 M01_L00: call dword ptr ds:[0AEB3E70] int 3 M01_L01: mov ecx,edi call dword ptr ds:[51802C0] push eax mov edx,ebx mov ecx,[esi+4] call dword ptr [esi+0C] mov ebx,eax mov ecx,edi call dword ptr ds:[51802BC] test eax,eax jne short M01_L01 M01_L02: mov ecx,edi call dword ptr ds:[51802C4] jmp short M01_L04 cmp dword ptr [ebp-24],0 je short M01_L03 mov ecx,[ebp-24] call dword ptr ds:[51802C4] M01_L03: pop eax jmp eax M01_L04: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0AEB3E10] int 3 M01_L06: mov ecx,5 call dword ptr ds:[0AEB3E10] int 3 ; Total bytes of code 179 ``` #### System.Linq.Tests.Perf_Enumerable.SingleWithPredicate_LastElementMatches(input: List) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.029624749410702 > 1017.1486093216718. IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -23.351863066188418 (T) = (0 -1025.3242449815436) / Math.Sqrt((137.97616290565273 / (22)) + (2.716195210935456 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.06089355959165894 = (966.4723060211563 - 1025.3242449815436) / 966.4723060211563 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.SingleWithPredicate_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[776490C] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[77648D4] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0BC52A68 mov edx,776490C call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: lea ecx,[ebp-8] push ecx mov ecx,esi call dword ptr ds:[0BC53BD0]; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[8A8B630] int 3 M00_L02: call dword ptr ds:[0B263810] int 3 ; Total bytes of code 101 ``` ```assembly ; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-2C],eax mov [ebp-18],eax mov esi,edx mov edi,[ebp+8] test ecx,ecx je near ptr M01_L11 test esi,esi je near ptr M01_L12 call dword ptr ds:[55202AC] mov ebx,eax mov [ebp-2C],ebx mov ecx,ebx call dword ptr ds:[55202B0] test eax,eax je short M01_L05 M01_L00: mov ecx,ebx call dword ptr ds:[55202B4] mov [ebp-24],eax mov ecx,[esi+4] mov edx,eax call dword ptr [esi+0C] test eax,eax jne short M01_L01 mov ecx,ebx call dword ptr ds:[55202B0] test eax,eax jne short M01_L00 jmp short M01_L05 M01_L01: mov ecx,ebx call dword ptr ds:[55202B8] test eax,eax je short M01_L03 M01_L02: mov ecx,ebx call dword ptr ds:[55202BC] mov edx,eax mov ecx,[esi+4] call dword ptr [esi+0C] test eax,eax jne short M01_L04 mov ecx,ebx call dword ptr ds:[55202B8] test eax,eax jne short M01_L02 M01_L03: mov byte ptr [edi],1 mov edi,[ebp-24] mov [ebp-28],edi mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L06 jmp short M01_L07 M01_L04: call dword ptr ds:[0B2637E0] int 3 M01_L05: mov ecx,ebx call dword ptr ds:[55202C0] jmp short M01_L09 M01_L06: mov dword ptr [ebp-18],0 jmp short M01_L10 M01_L07: mov ebx,[ebp-2C] test ebx,ebx je short M01_L08 mov ecx,ebx call dword ptr ds:[55202C0] M01_L08: pop eax jmp eax M01_L09: mov byte ptr [edi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L10: mov eax,[ebp-28] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L11: mov ecx,10 call dword ptr ds:[0B263798] int 3 M01_L12: mov ecx,0C call dword ptr ds:[0B263798] int 3 ; Total bytes of code 268 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.SingleWithPredicate_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[78A4904] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[78A48CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0BAE4528 mov edx,78A4904 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: lea ecx,[ebp-8] push ecx mov ecx,esi call dword ptr ds:[0BAE5690]; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[587B630] int 3 M00_L02: call dword ptr ds:[0B133E88] int 3 ; Total bytes of code 101 ``` ```assembly ; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-2C],eax mov [ebp-18],eax mov esi,edx mov edi,[ebp+8] test ecx,ecx je near ptr M01_L11 test esi,esi je near ptr M01_L12 call dword ptr ds:[35502B0] mov ebx,eax mov [ebp-2C],ebx mov ecx,ebx call dword ptr ds:[35502B4] test eax,eax je short M01_L05 M01_L00: mov ecx,ebx call dword ptr ds:[35502B8] mov [ebp-24],eax mov ecx,[esi+4] mov edx,eax call dword ptr [esi+0C] test eax,eax jne short M01_L01 mov ecx,ebx call dword ptr ds:[35502B4] test eax,eax jne short M01_L00 jmp short M01_L05 M01_L01: mov ecx,ebx call dword ptr ds:[35502BC] test eax,eax je short M01_L03 M01_L02: mov ecx,ebx call dword ptr ds:[35502C0] mov edx,eax mov ecx,[esi+4] call dword ptr [esi+0C] test eax,eax jne short M01_L04 mov ecx,ebx call dword ptr ds:[35502BC] test eax,eax jne short M01_L02 M01_L03: mov byte ptr [edi],1 mov edi,[ebp-24] mov [ebp-28],edi mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L06 jmp short M01_L07 M01_L04: call dword ptr ds:[0B133E58] int 3 M01_L05: mov ecx,ebx call dword ptr ds:[35502C4] jmp short M01_L09 M01_L06: mov dword ptr [ebp-18],0 jmp short M01_L10 M01_L07: mov ebx,[ebp-2C] test ebx,ebx je short M01_L08 mov ecx,ebx call dword ptr ds:[35502C4] M01_L08: pop eax jmp eax M01_L09: mov byte ptr [edi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L10: mov eax,[ebp-28] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L11: mov ecx,10 call dword ptr ds:[0B133E10] int 3 M01_L12: mov ecx,0C call dword ptr ds:[0B133E10] int 3 ; Total bytes of code 268 ``` #### System.Linq.Tests.Perf_Enumerable.WhereFirst_LastElementMatches(input: Array) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 383.19623747502067 > 341.48316291365603. IsChangePoint: Marked as a change because one of 9/29/2022 7:42:19 AM, 10/2/2022 11:57:04 PM, 10/19/2022 7:27:15 PM, 10/26/2022 7:11:30 AM, 11/2/2022 4:14:20 AM, 11/11/2022 5:53:56 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -332.52287119285666 (T) = (0 -384.2554219804279) / Math.Sqrt((0.3238527658875106 / (22)) + (0.571961609522168 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.1816037154230296 = (325.19821744370483 - 384.2554219804279) / 325.19821744370483 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereFirst_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[6A648E8] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[6A648D4] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AE02990 mov edx,6A648E8 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0AE03BB8]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0AE03E40]; System.Linq.Enumerable.TryGetFirst[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[48BB630] int 3 M00_L02: call dword ptr ds:[0A4137F8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[48BB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[48BB7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,9ECF940 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[6A64E60] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[48BB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0A413798] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0A413798] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetFirst[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov esi,ecx mov edi,edx test esi,esi je near ptr M02_L08 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[48BB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L00 mov ecx,eax mov edx,edi call dword ptr ds:[285030C] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[48BB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[2850304] test eax,eax jle short M02_L06 mov byte ptr [edi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[2850308] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,esi call dword ptr ds:[28502F4] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[28502F8] test eax,eax je short M02_L02 mov byte ptr [edi],1 mov ecx,[ebp-28] call dword ptr ds:[28502FC] mov [ebp-24],eax mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L03 jmp short M02_L04 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[2850300] jmp short M02_L06 M02_L03: mov dword ptr [ebp-18],0 jmp short M02_L07 M02_L04: mov ecx,[ebp-28] test ecx,ecx je short M02_L05 call dword ptr ds:[2850300] mov ecx,[ebp-28] M02_L05: pop eax jmp eax M02_L06: mov byte ptr [edi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L07: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L08: mov ecx,10 call dword ptr ds:[0A413798] int 3 ; Total bytes of code 250 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereFirst_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[71B48E0] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[71B48CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B654450 mov edx,71B48E0 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B655678]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0B655900]; System.Linq.Enumerable.TryGetFirst[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[850B630] int 3 M00_L02: call dword ptr ds:[0ACA3E70] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[850B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[850B7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0A76FC38 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[71B4E58] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[850B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0ACA3E10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0ACA3E10] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetFirst[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov esi,ecx mov edi,edx test esi,esi je near ptr M02_L08 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[850B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L00 mov ecx,eax mov edx,edi call dword ptr ds:[4F80310] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[850B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[4F80308] test eax,eax jle short M02_L06 mov byte ptr [edi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[4F8030C] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,esi call dword ptr ds:[4F802F8] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[4F802FC] test eax,eax je short M02_L02 mov byte ptr [edi],1 mov ecx,[ebp-28] call dword ptr ds:[4F80300] mov [ebp-24],eax mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L03 jmp short M02_L04 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[4F80304] jmp short M02_L06 M02_L03: mov dword ptr [ebp-18],0 jmp short M02_L07 M02_L04: mov ecx,[ebp-28] test ecx,ecx je short M02_L05 call dword ptr ds:[4F80304] mov ecx,[ebp-28] M02_L05: pop eax jmp eax M02_L06: mov byte ptr [edi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L07: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L08: mov ecx,10 call dword ptr ds:[0ACA3E10] int 3 ; Total bytes of code 250 ``` #### System.Linq.Tests.Perf_Enumerable.WhereSingleOrDefault_LastElementMatches(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 780.6421634993062 > 758.4353152600254. IsChangePoint: Marked as a change because one of 11/2/2022 4:14:20 AM, 11/11/2022 5:53:56 PM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -51.063665455092874 (T) = (0 -780.9763796118025) / Math.Sqrt((25.568859479965887 / (22)) + (2.8355198290089736 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.07871809602185174 = (723.9856107836928 - 780.9763796118025) / 723.9856107836928 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereSingleOrDefault_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[6DB4908] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[6DB48D4] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B1E2A50 mov edx,6DB4908 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B1E3BB8]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0B1E3E40]; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[801B630] int 3 ; Total bytes of code 95 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[801B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[801B7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0A2AF940 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[6DB4E64] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[801B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0A7F3798] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0A7F3798] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov edi,ecx mov esi,edx test edi,edi je near ptr M02_L09 mov edx,edi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[801B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[3180320] test eax,eax je short M02_L00 cmp eax,1 jne near ptr M02_L10 mov byte ptr [esi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[3180324] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov byte ptr [esi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,edi call dword ptr ds:[318030C] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[3180310] test eax,eax jne short M02_L02 mov byte ptr [esi],0 xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L04 jmp short M02_L06 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[3180314] mov edi,eax mov ecx,[ebp-28] call dword ptr ds:[3180318] test eax,eax jne short M02_L03 mov byte ptr [esi],1 mov [ebp-24],edi mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L05 jmp short M02_L06 M02_L03: mov ecx,[ebp-28] call dword ptr ds:[318031C] jmp short M02_L10 M02_L04: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L05: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L06: mov ecx,[ebp-28] test ecx,ecx je short M02_L07 call dword ptr ds:[318031C] mov ecx,[ebp-28] M02_L07: pop eax jmp eax M02_L08: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L09: mov ecx,10 call dword ptr ds:[0A7F3798] int 3 M02_L10: mov byte ptr [esi],0 call dword ptr ds:[0A7F37C8] int 3 ; Total bytes of code 287 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereSingleOrDefault_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[73A4900] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[73A48CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B604510 mov edx,73A4900 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B605678]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0B605900]; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[512B630] int 3 ; Total bytes of code 95 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[512B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[512B7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0A71FC38 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[73A4E5C] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[512B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0AC53E10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0AC53E10] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov edi,ecx mov esi,edx test edi,edi je near ptr M02_L09 mov edx,edi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[512B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[30F0324] test eax,eax je short M02_L00 cmp eax,1 jne near ptr M02_L10 mov byte ptr [esi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[30F0328] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov byte ptr [esi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,edi call dword ptr ds:[30F0310] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[30F0314] test eax,eax jne short M02_L02 mov byte ptr [esi],0 xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L04 jmp short M02_L06 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[30F0318] mov edi,eax mov ecx,[ebp-28] call dword ptr ds:[30F031C] test eax,eax jne short M02_L03 mov byte ptr [esi],1 mov [ebp-24],edi mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L05 jmp short M02_L06 M02_L03: mov ecx,[ebp-28] call dword ptr ds:[30F0320] jmp short M02_L10 M02_L04: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L05: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L06: mov ecx,[ebp-28] test ecx,ecx je short M02_L07 call dword ptr ds:[30F0320] mov ecx,[ebp-28] M02_L07: pop eax jmp eax M02_L08: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L09: mov ecx,10 call dword ptr ds:[0AC53E10] int 3 M02_L10: mov byte ptr [esi],0 call dword ptr ds:[0AC53E40] int 3 ; Total bytes of code 287 ``` #### System.Linq.Tests.Perf_Enumerable.Concat_Once(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.2155135196114215 > 2.0829553827459533. IsChangePoint: Marked as a change because one of 9/29/2022 7:42:19 AM, 10/2/2022 4:08:26 PM, 10/18/2022 1:35:00 AM, 10/19/2022 7:27:15 PM, 11/7/2022 4:10:19 PM, 11/10/2022 9:13:35 AM, 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -92.19230388606083 (T) = (0 -2222.9316136524026) / Math.Sqrt((109.52055167471056 / (22)) + (52.6337706572703 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.11850560209292131 = (1987.4121412471295 - 2222.9316136524026) / 1987.4121412471295 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Concat_Once(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,ecx mov edx,[edx+4] mov ecx,edx call dword ptr ds:[0BAD3900]; System.Linq.Enumerable.Concat[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1) mov ecx,eax mov edx,[esi+4] call dword ptr ds:[0BAD3978]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop ebp ret ; Total bytes of code 31 ``` ```assembly ; System.Linq.Enumerable.Concat[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je short M01_L01 test edi,edi je short M01_L02 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+ConcatIterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[3CDB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax jne short M01_L00 mov ecx,offset MT_System.Linq.Enumerable+Concat2Iterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+18] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx pop ebx pop esi pop edi pop ebp ret M01_L00: mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+30] call dword ptr [eax+8] pop ebx pop esi pop edi pop ebp ret M01_L01: mov ecx,4 call dword ptr ds:[0B0E3798] int 3 M01_L02: mov ecx,0E call dword ptr ds:[0B0E3798] int 3 ; Total bytes of code 119 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[34F02AC] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[34F02B0] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[34F02B4] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[34F02B0] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[34F02B8] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[34F02B8] M02_L02: pop eax jmp eax M02_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Concat_Once(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,ecx mov edx,[edx+4] mov ecx,edx call dword ptr ds:[0B4053C0]; System.Linq.Enumerable.Concat[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1) mov ecx,eax mov edx,[esi+4] call dword ptr ds:[0B405438]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop ebp ret ; Total bytes of code 31 ``` ```assembly ; System.Linq.Enumerable.Concat[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je short M01_L01 test edi,edi je short M01_L02 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+ConcatIterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[832B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax jne short M01_L00 mov ecx,offset MT_System.Linq.Enumerable+Concat2Iterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+18] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx pop ebx pop esi pop edi pop ebp ret M01_L00: mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+30] call dword ptr [eax+8] pop ebx pop esi pop edi pop ebp ret M01_L01: mov ecx,4 call dword ptr ds:[0AA53E10] int 3 M01_L02: mov ecx,0E call dword ptr ds:[0AA53E10] int 3 ; Total bytes of code 119 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[0F802B0] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[0F802B4] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[0F802B8] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[0F802B4] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[0F802BC] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[0F802BC] M02_L02: pop eax jmp eax M02_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` #### System.Linq.Tests.Perf_Enumerable.SequenceEqual(input1: IEnumerable, input2: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.2922153231630793 > 1.2272463855246434. IsChangePoint: Marked as a change because one of 10/10/2022 3:36:43 PM, 10/26/2022 7:11:30 AM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/13/2022 2:17:54 AM falls between 12/4/2022 6:53:17 AM and 12/13/2022 2:17:54 AM. IsRegressionStdDev: Marked as regression because -130.7423188472087 (T) = (0 -1291.7718394211129) / Math.Sqrt((15.049377533048837 / (22)) + (5.334156944433243 / (34))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (22) + (34) - 2, .025) and -0.10231026314027591 = (1171.8768141930352 - 1291.7718394211129) / 1171.8768141930352 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.SequenceEqual(System.Linq.Tests.LinqTestData, System.Linq.Tests.LinqTestData) mov ecx,[edx+4] mov edx,[esp+4] mov edx,[edx+4] push 0 call dword ptr ds:[0B0C3918]; System.Linq.Enumerable.SequenceEqual[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEqualityComparer`1) ret 4 ; Total bytes of code 21 ``` ```assembly ; System.Linq.Enumerable.SequenceEqual[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEqualityComparer`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,3C xor eax,eax mov [ebp-40],eax mov [ebp-44],eax mov [ebp-18],eax mov edi,ecx mov ebx,edx mov esi,[ebp+8] test edi,edi je near ptr M01_L20 test ebx,ebx je near ptr M01_L21 mov edx,edi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[4B0B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-2C],eax test eax,eax je near ptr M01_L05 mov edx,ebx mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[4B0B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-30],eax test eax,eax je near ptr M01_L05 mov edx,edi mov ecx,offset MT_System.Int32[] call dword ptr ds:[4B0B7F8] mov [ebp-34],eax test eax,eax je short M01_L00 mov edx,ebx mov ecx,offset MT_System.Int32[] call dword ptr ds:[4B0B7F8] test eax,eax je short M01_L00 mov edi,[ebp-34] lea ecx,[edi+8] mov edx,[edi+4] lea ebx,[eax+8] mov eax,[eax+4] push edx push ecx push eax push ebx mov ecx,esi call dword ptr ds:[0B0C3CA8] jmp near ptr M01_L19 M01_L00: mov ecx,[ebp-2C] call dword ptr ds:[49902D4] mov [ebp-48],eax mov ecx,[ebp-30] call dword ptr ds:[49902D8] mov edx,[ebp-48] cmp edx,eax jne near ptr M01_L04 mov edx,[ebp-2C] mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[4B0B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-38],eax test eax,eax je short M01_L05 mov edx,[ebp-30] mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[4B0B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-3C],eax test eax,eax je short M01_L05 test esi,esi jne short M01_L01 mov esi,ds:[6CB1FA8] M01_L01: mov ecx,[ebp-2C] call dword ptr ds:[49902DC] mov edi,eax xor ebx,ebx test edi,edi jle short M01_L03 M01_L02: mov ecx,[ebp-38] mov edx,ebx call dword ptr ds:[49902E0] mov [ebp-28],eax mov ecx,[ebp-3C] mov edx,ebx call dword ptr ds:[49902E4] push eax mov edx,[ebp-28] mov ecx,esi call dword ptr ds:[49902E8] test eax,eax je short M01_L04 inc ebx cmp ebx,edi jl short M01_L02 M01_L03: mov eax,1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L04: xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L05: mov ecx,edi call dword ptr ds:[49902AC] mov ecx,eax mov [ebp-40],ecx mov ecx,ebx call dword ptr ds:[49902B0] mov ecx,eax mov [ebp-44],ecx test esi,esi jne short M01_L06 mov esi,ds:[6CB1FA8] M01_L06: mov ecx,[ebp-40] call dword ptr ds:[49902B4] test eax,eax je short M01_L08 M01_L07: mov ecx,[ebp-44] call dword ptr ds:[49902B8] test eax,eax je short M01_L09 mov ecx,[ebp-40] call dword ptr ds:[49902BC] mov edi,eax mov ecx,[ebp-44] call dword ptr ds:[49902C0] push eax mov edx,edi mov ecx,esi call dword ptr ds:[49902C4] test eax,eax je short M01_L09 mov ecx,[ebp-40] call dword ptr ds:[49902B4] test eax,eax jne short M01_L07 M01_L08: mov ecx,[ebp-44] call dword ptr ds:[49902C8] xor ecx,ecx test eax,eax sete cl mov [ebp-24],ecx jmp short M01_L10 M01_L09: xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L11 jmp short M01_L12 M01_L10: mov ecx,[ebp-44] call dword ptr ds:[49902CC] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L15 jmp short M01_L16 M01_L11: mov dword ptr [ebp-18],0 jmp short M01_L14 M01_L12: mov ecx,[ebp-44] test ecx,ecx je short M01_L13 call dword ptr ds:[49902CC] mov ecx,[ebp-44] M01_L13: pop eax jmp eax M01_L14: mov ecx,[ebp-40] test ecx,ecx je short M01_L18 call dword ptr ds:[49902D0] jmp short M01_L18 M01_L15: mov dword ptr [ebp-18],0 jmp short M01_L18 M01_L16: mov ecx,[ebp-40] test ecx,ecx je short M01_L17 call dword ptr ds:[49902D0] mov ecx,[ebp-40] M01_L17: pop eax jmp eax M01_L18: mov eax,[ebp-24] M01_L19: movzx eax,al lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L20: mov ecx,4 call dword ptr ds:[0A6D3798] int 3 M01_L21: mov ecx,0E call dword ptr ds:[0A6D3798] int 3 ; Total bytes of code 632 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.SequenceEqual(System.Linq.Tests.LinqTestData, System.Linq.Tests.LinqTestData) mov ecx,[edx+4] mov edx,[esp+4] mov edx,[edx+4] push 0 call dword ptr ds:[0B4253D8]; System.Linq.Enumerable.SequenceEqual[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEqualityComparer`1) ret 4 ; Total bytes of code 21 ``` ```assembly ; System.Linq.Enumerable.SequenceEqual[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEqualityComparer`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,3C xor eax,eax mov [ebp-40],eax mov [ebp-44],eax mov [ebp-18],eax mov edi,ecx mov ebx,edx mov esi,[ebp+8] test edi,edi je near ptr M01_L20 test ebx,ebx je near ptr M01_L21 mov edx,edi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[82DB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-2C],eax test eax,eax je near ptr M01_L05 mov edx,ebx mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[82DB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-30],eax test eax,eax je near ptr M01_L05 mov edx,edi mov ecx,offset MT_System.Int32[] call dword ptr ds:[82DB7F8] mov [ebp-34],eax test eax,eax je short M01_L00 mov edx,ebx mov ecx,offset MT_System.Int32[] call dword ptr ds:[82DB7F8] test eax,eax je short M01_L00 mov edi,[ebp-34] lea ecx,[edi+8] mov edx,[edi+4] lea ebx,[eax+8] mov eax,[eax+4] push edx push ecx push eax push ebx mov ecx,esi call dword ptr ds:[0B425768] jmp near ptr M01_L19 M01_L00: mov ecx,[ebp-2C] call dword ptr ds:[30102D8] mov [ebp-48],eax mov ecx,[ebp-30] call dword ptr ds:[30102DC] mov edx,[ebp-48] cmp edx,eax jne near ptr M01_L04 mov edx,[ebp-2C] mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[82DB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-38],eax test eax,eax je short M01_L05 mov edx,[ebp-30] mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[82DB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-3C],eax test eax,eax je short M01_L05 test esi,esi jne short M01_L01 mov esi,ds:[7001FA4] M01_L01: mov ecx,[ebp-2C] call dword ptr ds:[30102E0] mov edi,eax xor ebx,ebx test edi,edi jle short M01_L03 M01_L02: mov ecx,[ebp-38] mov edx,ebx call dword ptr ds:[30102E4] mov [ebp-28],eax mov ecx,[ebp-3C] mov edx,ebx call dword ptr ds:[30102E8] push eax mov edx,[ebp-28] mov ecx,esi call dword ptr ds:[30102EC] test eax,eax je short M01_L04 inc ebx cmp ebx,edi jl short M01_L02 M01_L03: mov eax,1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L04: xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L05: mov ecx,edi call dword ptr ds:[30102B0] mov ecx,eax mov [ebp-40],ecx mov ecx,ebx call dword ptr ds:[30102B4] mov ecx,eax mov [ebp-44],ecx test esi,esi jne short M01_L06 mov esi,ds:[7001FA4] M01_L06: mov ecx,[ebp-40] call dword ptr ds:[30102B8] test eax,eax je short M01_L08 M01_L07: mov ecx,[ebp-44] call dword ptr ds:[30102BC] test eax,eax je short M01_L09 mov ecx,[ebp-40] call dword ptr ds:[30102C0] mov edi,eax mov ecx,[ebp-44] call dword ptr ds:[30102C4] push eax mov edx,edi mov ecx,esi call dword ptr ds:[30102C8] test eax,eax je short M01_L09 mov ecx,[ebp-40] call dword ptr ds:[30102B8] test eax,eax jne short M01_L07 M01_L08: mov ecx,[ebp-44] call dword ptr ds:[30102CC] xor ecx,ecx test eax,eax sete cl mov [ebp-24],ecx jmp short M01_L10 M01_L09: xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L11 jmp short M01_L12 M01_L10: mov ecx,[ebp-44] call dword ptr ds:[30102D0] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L15 jmp short M01_L16 M01_L11: mov dword ptr [ebp-18],0 jmp short M01_L14 M01_L12: mov ecx,[ebp-44] test ecx,ecx je short M01_L13 call dword ptr ds:[30102D0] mov ecx,[ebp-44] M01_L13: pop eax jmp eax M01_L14: mov ecx,[ebp-40] test ecx,ecx je short M01_L18 call dword ptr ds:[30102D4] jmp short M01_L18 M01_L15: mov dword ptr [ebp-18],0 jmp short M01_L18 M01_L16: mov ecx,[ebp-40] test ecx,ecx je short M01_L17 call dword ptr ds:[30102D4] mov ecx,[ebp-40] M01_L17: pop eax jmp eax M01_L18: mov eax,[ebp-24] M01_L19: movzx eax,al lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L20: mov ecx,4 call dword ptr ds:[0AA73E10] int 3 M01_L21: mov ecx,0E call dword ptr ds:[0AA73E10] int 3 ; Total bytes of code 632 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)