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: 19 Regressions on 1/13/2023 11:20:20 PM #11755

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
Diff Diff

Regressions in IfStatements.IfStatements

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Or - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/IfStatements.IfStatements.Or.html>) 69.29 μs 80.01 μs 1.15 0.01 False Trace Trace
[Single - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/IfStatements.IfStatements.Single.html>) 65.74 μs 71.89 μs 1.09 0.01 False Trace Trace

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'IfStatements.IfStatements*'
### Payloads [Baseline]() [Compare]() ### Histogram #### IfStatements.IfStatements.Or ```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 80.0103869047619 > 72.69527585730089. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 12/21/2022 9:23:17 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -109.97589323289597 (T) = (0 -79207.89996676048) / Math.Sqrt((48534.223617126445 / (37)) + (128679.34564084969 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.14264720079063636 = (69319.64644201101 - 79207.89996676048) / 69319.64644201101 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 ; IfStatements.IfStatements.Or() push ebp mov ebp,esp push edi push esi xor esi,esi M00_L00: mov ecx,ds:[77D4110] mov edx,ecx mov eax,[edx+4] cmp esi,eax jae short M00_L01 mov edx,[edx+esi*4+8] lea edi,[esi+1] cmp edi,eax jae short M00_L01 mov eax,[ecx+esi*4+0C] mov ecx,edx mov edx,eax call dword ptr ds:[0B0DB558]; IfStatements.IfStatements.OrInner(Int32, Int32) inc esi cmp esi,2710 jl short M00_L00 pop esi pop edi pop ebp ret M00_L01: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 66 ``` ```assembly ; IfStatements.IfStatements.OrInner(Int32, Int32) push ebp mov ebp,esp test cl,1 je short M01_L00 test dl,1 jne short M01_L01 M01_L00: mov ecx,5 M01_L01: push 0 push 0 call dword ptr ds:[0B0DB468]; IfStatements.IfStatements.Consume(Int32, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 30 ``` ### Compare Jit Disasm ```assembly ; IfStatements.IfStatements.Or() push ebp mov ebp,esp push edi push esi xor esi,esi M00_L00: mov ecx,ds:[69A4110] mov edx,ecx mov eax,[edx+4] cmp esi,eax jae short M00_L01 mov edx,[edx+esi*4+8] lea edi,[esi+1] cmp edi,eax jae short M00_L01 mov eax,[ecx+esi*4+0C] mov ecx,edx mov edx,eax call dword ptr ds:[0A38F558]; IfStatements.IfStatements.OrInner(Int32, Int32) inc esi cmp esi,2710 jl short M00_L00 pop esi pop edi pop ebp ret M00_L01: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 66 ``` ```assembly ; IfStatements.IfStatements.OrInner(Int32, Int32) push ebp mov ebp,esp test cl,1 je short M01_L00 test dl,1 jne short M01_L01 M01_L00: mov ecx,5 M01_L01: push 0 push 0 call dword ptr ds:[0A38F468]; IfStatements.IfStatements.Consume(Int32, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 30 ``` #### IfStatements.IfStatements.Single ```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 71.89016819571866 > 69.00450735294118. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 12/21/2022 9:23:17 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -142.51242633390777 (T) = (0 -71741.17784477815) / Math.Sqrt((13357.5577307171 / (37)) + (26738.924661109282 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.09114846382636967 = (65748.31952125083 - 71741.17784477815) / 65748.31952125083 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 ; IfStatements.IfStatements.Single() push ebp mov ebp,esp push esi xor esi,esi M00_L00: mov ecx,ds:[7294110] cmp esi,[ecx+4] jae short M00_L01 mov ecx,[ecx+esi*4+8] call dword ptr ds:[0AC6B498]; IfStatements.IfStatements.SingleInner(Int32) inc esi cmp esi,2710 jl short M00_L00 pop esi pop ebp ret M00_L01: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 45 ``` ```assembly ; IfStatements.IfStatements.SingleInner(Int32) push ebp mov ebp,esp test cl,1 jne short M01_L00 mov ecx,5 M01_L00: push 0 push 0 xor edx,edx call dword ptr ds:[0AC6B468]; IfStatements.IfStatements.Consume(Int32, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 27 ``` ### Compare Jit Disasm ```assembly ; IfStatements.IfStatements.Single() push ebp mov ebp,esp push esi xor esi,esi M00_L00: mov ecx,ds:[7744110] cmp esi,[ecx+4] jae short M00_L01 mov ecx,[ecx+esi*4+8] call dword ptr ds:[0B15F498]; IfStatements.IfStatements.SingleInner(Int32) inc esi cmp esi,2710 jl short M00_L00 pop esi pop ebp ret M00_L01: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 45 ``` ```assembly ; IfStatements.IfStatements.SingleInner(Int32) push ebp mov ebp,esp test cl,1 jne short M01_L00 mov ecx,5 M01_L00: push 0 push 0 xor edx,edx call dword ptr ds:[0B15F468]; IfStatements.IfStatements.Consume(Int32, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 27 ``` ### 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
Diff Diff

Regressions in System.Memory.Span<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[EndsWith - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Int32).EndsWith(Size%3a%20512).html>) 23.24 ns 26.69 ns 1.15 0.23 False
[IndexOfAnyFiveValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Int32).IndexOfAnyFiveValues(Size%3a%20512).html>) 597.73 ns 801.93 ns 1.34 0.04 False
[IndexOfAnyFiveValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Int32).IndexOfAnyFiveValues(Size%3a%2033).html>) 42.55 ns 52.75 ns 1.24 0.09 False
[IndexOfAnyFourValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Int32).IndexOfAnyFourValues(Size%3a%20512).html>) 503.38 ns 539.29 ns 1.07 0.05 False

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.Memory.Span&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Int32>.EndsWith(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 26.6936292975539 > 24.57393786167241. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 12/1/2022 1:10:54 PM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -15.142234665976249 (T) = (0 -27.103586187938994) / Math.Sqrt((0.5987116111704491 / (37)) + (0.5702447959232635 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.1364621775069892 = (23.849087742977094 - 27.103586187938994) / 23.849087742977094 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.Memory.Span<Int32>.IndexOfAnyFiveValues(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 801.9287447094043 > 627.2882356334111. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 12/7/2022 8:33:47 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -16.260260703527777 (T) = (0 -789.770882551215) / Math.Sqrt((3809.532989689991 / (37)) + (94.91312288267159 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.27213351229658994 = (620.8238953829909 - 789.770882551215) / 620.8238953829909 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.Memory.Span<Int32>.IndexOfAnyFiveValues(Size: 33) ```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 52.75464258638647 > 44.8690984714276. IsChangePoint: Marked as a change because one of 12/7/2022 8:33:47 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -16.28531895646136 (T) = (0 -53.240001505661276) / Math.Sqrt((13.147346697506588 / (37)) + (0.8781021789083536 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.24043783737400426 = (42.920330145982874 - 53.240001505661276) / 42.920330145982874 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.Memory.Span<Int32>.IndexOfAnyFourValues(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 539.2940872263404 > 529.5514813866405. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/2/2022 4:14:20 AM, 12/7/2022 8:33:47 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -15.07706529850497 (T) = (0 -537.6250277056973) / Math.Sqrt((128.07097303264027 / (37)) + (8.802062285935687 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.05882496097195258 = (507.75628410968164 - 537.6250277056973) / 507.75628410968164 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
Diff Diff

Regressions in System.Memory.Span<Char>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[StartsWith - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).StartsWith(Size%3a%20512).html>) 13.56 ns 14.56 ns 1.07 0.34 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span&lt;Char&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Char>.StartsWith(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 14.564429757535285 > 14.026282409647566. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 8:57:30 PM, 11/17/2022 7:01:39 PM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -5.500724559794038 (T) = (0 -15.23254022867085) / Math.Sqrt((0.933836881403255 / (37)) + (0.8792844235878783 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.1068953074714173 = (13.761500410971966 - 15.23254022867085) / 13.761500410971966 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
Diff Diff

Regressions in System.Collections.AddGivenSize<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ICollection - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.AddGivenSize(String).ICollection(Size%3a%20512).html>) 3.72 μs 4.18 μs 1.13 0.01 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.AddGivenSize&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.AddGivenSize<String>.ICollection(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 4.18012350232475 > 3.9276834631691755. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/22/2022 2:20:42 AM, 12/13/2022 4:26:35 PM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -49.92758782648277 (T) = (0 -4186.4073020199385) / Math.Sqrt((3072.6855254821835 / (37)) + (201.7900945481768 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.1304831339022022 = (3703.201911176946 - 4186.4073020199385) / 3703.201911176946 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
Diff Diff

Regressions in System.Tests.Perf_Random

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ctor_seeded - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.ctor_seeded.html>) 393.28 ns 433.93 ns 1.10 0.03 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Random*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Random.ctor_seeded ```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 433.92918711117727 > 413.1474419773829. IsChangePoint: Marked as a change because one of 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/21/2022 9:23:17 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -16.377531192715058 (T) = (0 -437.08386477632246) / Math.Sqrt((194.52988018308181 / (37)) + (4.632915211187287 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.09635434226055621 = (398.67025461412953 - 437.08386477632246) / 398.67025461412953 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.Tests.Perf_Random.ctor_seeded() push ebp mov ebp,esp push edi push esi sub esp,18 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax mov ecx,offset MT_System.Random call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,offset MT_System.Random+Net5CompatSeedImpl call CORINFO_HELP_NEWSFAST mov edi,eax xor ecx,ecx mov [ebp-20],ecx mov [ebp-1C],ecx mov [ebp-18],ecx lea ecx,[ebp-20] mov edx,1E240 call dword ptr ds:[0B423CC0]; System.Random+CompatPrng..ctor(Int32) lea eax,[edi+4] mov ecx,[ebp-20] mov edx,eax call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov edx,[ebp-1C] mov [eax+4],edx mov edx,[ebp-18] mov [eax+8],edx lea edx,[esi+4] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi lea esp,[ebp-8] pop esi pop edi pop ebp ret ; Total bytes of code 116 ``` ```assembly ; System.Random+CompatPrng..ctor(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,8 mov [ebp-14],ecx mov edi,edx mov ecx,offset MT_System.Int32[] mov edx,38 call CORINFO_HELP_NEWARR_1_VC cmp edi,80000000 je short M01_L02 mov esi,[ebp-14] test edi,edi jl short M01_L01 M01_L00: jmp short M01_L03 M01_L01: neg edi js near ptr M01_L12 jmp short M01_L00 nop nop nop nop M01_L02: mov esi,[ebp-14] mov edi,7FFFFFFF M01_L03: mov edx,edi neg edx add edx,9A4EC86 mov [eax+0E4],edx mov ecx,1 xor edi,edi mov ebx,1 M01_L04: add edi,15 cmp edi,37 jl short M01_L05 add edi,0FFFFFFC9 M01_L05: cmp edi,38 jae near ptr M01_L13 mov [eax+edi*4+8],ecx sub edx,ecx mov ecx,edx test ecx,ecx jge short M01_L06 add ecx,7FFFFFFF M01_L06: mov edx,[eax+edi*4+8] inc ebx cmp ebx,37 jl short M01_L04 mov dword ptr [ebp-10],1 M01_L07: mov ecx,1 nop nop nop nop M01_L08: lea edi,[ecx+1E] cmp edi,37 jl short M01_L11 add edi,0FFFFFFC9 mov [ebp-14],esi M01_L09: lea ebx,[eax+ecx*4+8] mov esi,[ebx] lea edx,[edi+1] cmp edx,38 jae short M01_L13 sub esi,[eax+edi*4+0C] mov [ebx],esi test esi,esi jge short M01_L10 lea edx,[eax+ecx*4+8] add esi,7FFFFFFF mov [edx],esi M01_L10: inc ecx cmp ecx,38 mov esi,[ebp-14] jl short M01_L08 mov edx,[ebp-10] inc edx cmp edx,5 mov [ebp-10],edx jl short M01_L07 mov edx,esi call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX xor eax,eax mov [esi+4],eax mov dword ptr [esi+8],15 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L11: mov [ebp-14],esi jmp short M01_L09 M01_L12: call dword ptr ds:[0B8A5CC0] int 3 M01_L13: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 276 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.ctor_seeded() push ebp mov ebp,esp push edi push esi sub esp,18 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax mov ecx,offset MT_System.Random call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,offset MT_System.Random+Net5CompatSeedImpl call CORINFO_HELP_NEWSFAST mov edi,eax xor ecx,ecx mov [ebp-20],ecx mov [ebp-1C],ecx mov [ebp-18],ecx lea ecx,[ebp-20] mov edx,1E240 call dword ptr ds:[0AC87D38]; System.Random+CompatPrng..ctor(Int32) lea eax,[edi+4] mov ecx,[ebp-20] mov edx,eax call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov edx,[ebp-1C] mov [eax+4],edx mov edx,[ebp-18] mov [eax+8],edx lea edx,[esi+4] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi lea esp,[ebp-8] pop esi pop edi pop ebp ret ; Total bytes of code 116 ``` ```assembly ; System.Random+CompatPrng..ctor(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,8 mov [ebp-14],ecx mov edi,edx mov ecx,offset MT_System.Int32[] mov edx,38 call CORINFO_HELP_NEWARR_1_VC cmp edi,80000000 je short M01_L02 mov esi,[ebp-14] test edi,edi jl short M01_L01 M01_L00: jmp short M01_L03 M01_L01: neg edi js near ptr M01_L12 jmp short M01_L00 nop nop nop nop M01_L02: mov esi,[ebp-14] mov edi,7FFFFFFF M01_L03: mov edx,edi neg edx add edx,9A4EC86 mov [eax+0E4],edx mov ecx,1 xor edi,edi mov ebx,1 M01_L04: add edi,15 cmp edi,37 jl short M01_L05 add edi,0FFFFFFC9 M01_L05: cmp edi,38 jae near ptr M01_L13 mov [eax+edi*4+8],ecx sub edx,ecx mov ecx,edx test ecx,ecx jge short M01_L06 add ecx,7FFFFFFF M01_L06: mov edx,[eax+edi*4+8] inc ebx cmp ebx,37 jl short M01_L04 mov dword ptr [ebp-10],1 M01_L07: mov ecx,1 nop nop nop nop M01_L08: lea edi,[ecx+1E] cmp edi,37 jl short M01_L11 add edi,0FFFFFFC9 mov [ebp-14],esi M01_L09: lea ebx,[eax+ecx*4+8] mov esi,[ebx] lea edx,[edi+1] cmp edx,38 jae short M01_L13 sub esi,[eax+edi*4+0C] mov [ebx],esi test esi,esi jge short M01_L10 lea edx,[eax+ecx*4+8] add esi,7FFFFFFF mov [edx],esi M01_L10: inc ecx cmp ecx,38 mov esi,[ebp-14] jl short M01_L08 mov edx,[ebp-10] inc edx cmp edx,5 mov [ebp-10],edx jl short M01_L07 mov edx,esi call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX xor eax,eax mov [esi+4],eax mov dword ptr [esi+8],15 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L11: mov [ebp-14],esi jmp short M01_L09 M01_L12: call dword ptr ds:[0B4FB348] int 3 M01_L13: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 276 ``` ### 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
Diff Diff

Regressions in System.Threading.Tests.Perf_Interlocked

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Increment_long - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Threading.Tests.Perf_Interlocked.Increment_long.html>) 9.94 ns 962.51 ns 96.85 0.16 False Trace Trace
[Decrement_long - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Threading.Tests.Perf_Interlocked.Decrement_long.html>) 9.94 ns 970.78 ns 97.69 0.14 False 35.58320742179445 34.62995801286024 0.9732106946505799 Trace Trace

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Threading.Tests.Perf_Interlocked*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Threading.Tests.Perf_Interlocked.Increment_long ```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 962.508800623053 > 10.458037231176695. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -17.994036481103738 (T) = (0 -913.240103105032) / Math.Sqrt((5.289313282012411 / (37)) + (47855.91045245268 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -88.98967697064126 = (10.148276267320892 - 913.240103105032) / 10.148276267320892 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.Threading.Tests.Perf_Interlocked.Increment_long() sub esp,8 cmp [ecx],cl add ecx,4 push 0 push 1 call System.Threading.Interlocked.ExchangeAdd(Int64 ByRef, Int64) add eax,1 adc edx,0 add esp,8 ret ; Total bytes of code 27 ``` ### Compare Jit Disasm ```assembly ; System.Threading.Tests.Perf_Interlocked.Increment_long() sub esp,8 cmp [ecx],cl add ecx,4 push 0 push 1 call System.Threading.Interlocked.ExchangeAdd(Int64 ByRef, Int64) add eax,1 adc edx,0 add esp,8 ret ; Total bytes of code 27 ``` #### System.Threading.Tests.Perf_Interlocked.Decrement_long ```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 970.7831520942024 > 10.435500934666265. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -18.000259065915255 (T) = (0 -913.3605348473553) / Math.Sqrt((0.06764534357147227 / (37)) + (47863.298898643894 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -91.14712131729206 = (9.911981207772756 - 913.3605348473553) / 9.911981207772756 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.Threading.Tests.Perf_Interlocked.Decrement_long() sub esp,8 cmp [ecx],cl add ecx,4 push 0FFFFFFFF push 0FFFFFFFF call System.Threading.Interlocked.ExchangeAdd(Int64 ByRef, Int64) add eax,0FFFFFFFF adc edx,0FFFFFFFF add esp,8 ret ; Total bytes of code 27 ``` ### Compare Jit Disasm ```assembly ; System.Threading.Tests.Perf_Interlocked.Decrement_long() sub esp,8 cmp [ecx],cl add ecx,4 push 0FFFFFFFF push 0FFFFFFFF call System.Threading.Interlocked.ExchangeAdd(Int64 ByRef, Int64) add eax,0FFFFFFFF adc edx,0FFFFFFFF add esp,8 ret ; Total bytes of code 27 ``` ### 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
Diff Diff

Regressions in System.Collections.AddGivenSize<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ICollection - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.AddGivenSize(Int32).ICollection(Size%3a%20512).html>) 1.41 μs 1.56 μs 1.11 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.AddGivenSize&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.AddGivenSize<Int32>.ICollection(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 1.5636809959294646 > 1.485276207222914. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -153.23250717439183 (T) = (0 -1559.6211240692555) / Math.Sqrt((6.286102448513076 / (37)) + (13.62719680531902 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.10197497969685171 = (1415.2963114446575 - 1559.6211240692555) / 1415.2963114446575 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
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
[Average - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.Average(input%3a%20IEnumerable).html>) 477.33 ns 566.56 ns 1.19 0.09 False Trace Trace
[Concat_Once - Duration of single invocation](<https://pvscmdupload.z22.web.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.90 μs 2.15 μs 1.13 0.02 False Trace Trace
[Max - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.Max(input%3a%20IEnumerable).html>) 462.15 ns 490.68 ns 1.06 0.03 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 'System.Linq.Tests.Perf_Enumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Linq.Tests.Perf_Enumerable.Average(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 566.5559910379584 > 501.37375838073604. IsChangePoint: Marked as a change because one of 11/9/2022 4:06:23 PM, 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/21/2022 9:23:17 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -19.445583195788657 (T) = (0 -567.2139644975063) / Math.Sqrt((757.4598894695654 / (37)) + (1.5258832086433032 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.18401860213914417 = (479.0583217803601 - 567.2139644975063) / 479.0583217803601 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.Average(System.Linq.Tests.LinqTestData) sub esp,8 vzeroupper mov ecx,[edx+4] call dword ptr ds:[8A07120]; System.Linq.Enumerable.Average(System.Collections.Generic.IEnumerable`1) fstp qword ptr [esp] vmovsd xmm0,qword ptr [esp] vmovsd qword ptr [esp],xmm0 fld qword ptr [esp] add esp,8 ret ; Total bytes of code 35 ``` ```assembly ; System.Linq.Enumerable.Average(System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 vzeroupper xor eax,eax mov [ebp-18],eax test ecx,ecx je near ptr M01_L16 cmp dword ptr [ecx],4EF5FC0 jne short M01_L00 lea eax,[ecx+8] mov esi,[ecx+4] jmp short M01_L01 M01_L00: cmp dword ptr [ecx],8884B94 jne near ptr M01_L08 mov eax,[ecx+4] mov esi,[ecx+8] test eax,eax je near ptr M01_L17 mov edx,[eax+4] cmp [eax+4],esi jb near ptr M01_L19 add eax,8 M01_L01: test esi,esi je near ptr M01_L18 xor edx,edx xor ecx,ecx xor edi,edi cmp esi,8 jl near ptr M01_L07 vxorps ymm0,ymm0,ymm0 M01_L02: cmp edi,esi ja near ptr M01_L19 mov [ebp-54],eax lea edx,[eax+edi*4] mov ecx,esi sub ecx,edi cmp ecx,8 jl near ptr M01_L20 vmovupd ymm1,[edx] vmovaps ymm2,ymm1 vpmovsxdq ymm2,xmm2 vextractf128 xmm1,ymm1,1 vpmovsxdq ymm1,xmm1 vpaddq ymm0,ymm0,ymm2 vpaddq ymm0,ymm0,ymm1 add edi,8 lea edx,[esi-8] cmp edi,edx jle near ptr M01_L06 vmovupd [ebp-48],ymm0 lea edx,[ebp-48] mov ecx,[edx] mov edx,[edx+4] lea ebx,[ebp-48] add ebx,8 mov eax,[ebx] mov ebx,[ebx+4] add ecx,eax adc edx,ebx lea ebx,[ebp-48] lea eax,[ebx+10] mov ebx,[eax] mov eax,[eax+4] add ecx,ebx adc edx,eax lea ebx,[ebp-48] lea eax,[ebx+18] mov ebx,[eax] mov eax,[eax+4] add ecx,ebx adc eax,edx mov edx,ecx mov ecx,eax M01_L03: cmp edi,esi jae short M01_L05 nop nop nop nop nop nop nop nop M01_L04: cmp edi,esi jae near ptr M01_L21 mov eax,[ebp-54] mov ebx,[eax+edi*4] mov eax,ebx sar eax,1F add edx,ebx adc ecx,eax inc edi cmp edi,esi jb short M01_L04 M01_L05: push ecx push edx call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-5C] vxorps xmm1,xmm1,xmm1 vcvtsi2sd xmm1,xmm1,esi vmovsd xmm0,qword ptr [ebp-5C] vdivsd xmm0,xmm0,xmm1 vmovsd qword ptr [ebp-5C],xmm0 fld qword ptr [ebp-5C] vzeroupper lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L06: mov eax,[ebp-54] jmp near ptr M01_L02 M01_L07: mov [ebp-54],eax jmp short M01_L03 M01_L08: call dword ptr ds:[0D602AC] mov ecx,eax mov [ebp-50],ecx call dword ptr ds:[0D602B0] test eax,eax je near ptr M01_L12 mov ecx,[ebp-50] call dword ptr ds:[0D602B4] mov esi,eax sar esi,1F mov edi,eax xor ebx,ebx mov dword ptr [ebp-4C],1 mov ecx,[ebp-50] call dword ptr ds:[0D602B8] test eax,eax je short M01_L10 M01_L09: mov ecx,[ebp-50] call dword ptr ds:[0D602BC] mov ecx,eax sar ecx,1F add edi,eax adc esi,ecx jo short M01_L11 mov eax,[ebp-4C] add eax,1 adc ebx,0 mov [ebp-4C],eax mov ecx,[ebp-50] call dword ptr ds:[0D602B8] test eax,eax jne short M01_L09 M01_L10: push esi push edi call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-5C] push ebx push dword ptr [ebp-4C] call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-64] vmovsd xmm1,qword ptr [ebp-5C] vmovsd xmm0,qword ptr [ebp-64] vdivsd xmm0,xmm1,xmm0 vmovsd qword ptr [ebp-28],xmm0 jmp short M01_L13 M01_L11: call CORINFO_HELP_OVERFLOW M01_L12: call dword ptr ds:[0A9417F8] int 3 M01_L13: mov ecx,[ebp-50] call dword ptr ds:[0D602C0] jmp short M01_L15 cmp dword ptr [ebp-50],0 je short M01_L14 mov ecx,[ebp-50] call dword ptr ds:[0D602C0] M01_L14: pop eax jmp eax M01_L15: vmovsd xmm0,qword ptr [ebp-28] vmovsd qword ptr [ebp-28],xmm0 fld qword ptr [ebp-28] vzeroupper lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L16: mov ecx,10 call dword ptr ds:[0A941798] int 3 M01_L17: test esi,esi jne short M01_L19 xor eax,eax xor esi,esi jmp near ptr M01_L01 M01_L18: call dword ptr ds:[0A9417F8] int 3 M01_L19: call dword ptr ds:[88110A8] int 3 M01_L20: mov ecx,6 call dword ptr ds:[88113F0] int 3 M01_L21: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 616 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Average(System.Linq.Tests.LinqTestData) sub esp,8 vzeroupper mov ecx,[edx+4] call dword ptr ds:[0A02B120]; System.Linq.Enumerable.Average(System.Collections.Generic.IEnumerable`1) fstp qword ptr [esp] vmovsd xmm0,qword ptr [esp] vmovsd qword ptr [esp],xmm0 fld qword ptr [esp] add esp,8 ret ; Total bytes of code 35 ``` ```assembly ; System.Linq.Enumerable.Average(System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 vzeroupper xor eax,eax mov [ebp-18],eax test ecx,ecx je near ptr M01_L16 cmp dword ptr [ecx],494603C jne short M01_L00 lea eax,[ecx+8] mov esi,[ecx+4] jmp short M01_L01 M01_L00: cmp dword ptr [ecx],8494CD0 jne near ptr M01_L08 mov eax,[ecx+4] mov esi,[ecx+8] test eax,eax je near ptr M01_L17 mov edx,[eax+4] cmp [eax+4],esi jb near ptr M01_L19 add eax,8 M01_L01: test esi,esi je near ptr M01_L18 xor edx,edx xor ecx,ecx xor edi,edi cmp esi,8 jl near ptr M01_L07 vxorps ymm0,ymm0,ymm0 M01_L02: cmp edi,esi ja near ptr M01_L19 mov [ebp-54],eax lea edx,[eax+edi*4] mov ecx,esi sub ecx,edi cmp ecx,8 jl near ptr M01_L20 vmovups ymm1,[edx] vmovaps ymm2,ymm1 vpmovsxdq ymm2,xmm2 vpaddq ymm0,ymm0,ymm2 vextractf128 xmm1,ymm1,1 vpmovsxdq ymm1,xmm1 vpaddq ymm0,ymm0,ymm1 add edi,8 lea edx,[esi-8] cmp edi,edx jle near ptr M01_L06 vmovups [ebp-48],ymm0 lea edx,[ebp-48] mov ecx,[edx] mov edx,[edx+4] lea ebx,[ebp-40] mov eax,[ebx] mov ebx,[ebx+4] add ecx,eax adc edx,ebx lea eax,[ebp-38] mov ebx,[eax] mov eax,[eax+4] add ebx,ecx adc eax,edx mov ecx,ebx mov edx,eax lea eax,[ebp-30] mov ebx,[eax] mov eax,[eax+4] add ebx,ecx adc eax,edx mov edx,ebx mov ecx,eax M01_L03: cmp edi,esi jae short M01_L05 nop nop nop nop nop nop nop nop nop nop nop nop nop M01_L04: cmp edi,esi jae near ptr M01_L21 mov eax,[ebp-54] mov ebx,[eax+edi*4] mov eax,ebx sar eax,1F add edx,ebx adc ecx,eax inc edi cmp edi,esi jb short M01_L04 M01_L05: push ecx push edx call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-5C] vxorps xmm1,xmm1,xmm1 vcvtsi2sd xmm1,xmm1,esi vmovsd xmm0,qword ptr [ebp-5C] vdivsd xmm0,xmm0,xmm1 vmovsd qword ptr [ebp-5C],xmm0 fld qword ptr [ebp-5C] vzeroupper lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L06: mov eax,[ebp-54] jmp near ptr M01_L02 M01_L07: mov [ebp-54],eax jmp short M01_L03 M01_L08: call dword ptr ds:[0F002AC] mov ecx,eax mov [ebp-50],ecx call dword ptr ds:[0F002B0] test eax,eax je near ptr M01_L12 mov ecx,[ebp-50] call dword ptr ds:[0F002B4] mov esi,eax sar esi,1F mov edi,eax xor ebx,ebx mov dword ptr [ebp-4C],1 mov ecx,[ebp-50] call dword ptr ds:[0F002B8] test eax,eax je short M01_L10 M01_L09: mov ecx,[ebp-50] call dword ptr ds:[0F002BC] mov ecx,eax sar ecx,1F add edi,eax adc esi,ecx jo short M01_L11 mov eax,[ebp-4C] add eax,1 adc ebx,0 mov [ebp-4C],eax mov ecx,[ebp-50] call dword ptr ds:[0F002B8] test eax,eax jne short M01_L09 M01_L10: push esi push edi call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-5C] push ebx push dword ptr [ebp-4C] call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-64] vmovsd xmm1,qword ptr [ebp-5C] vmovsd xmm0,qword ptr [ebp-64] vdivsd xmm0,xmm1,xmm0 vmovsd qword ptr [ebp-28],xmm0 jmp short M01_L13 M01_L11: call CORINFO_HELP_OVERFLOW M01_L12: call dword ptr ds:[0A5357F8] int 3 M01_L13: mov ecx,[ebp-50] call dword ptr ds:[0F002C0] jmp short M01_L15 cmp dword ptr [ebp-50],0 je short M01_L14 mov ecx,[ebp-50] call dword ptr ds:[0F002C0] M01_L14: pop eax jmp eax M01_L15: vmovsd xmm0,qword ptr [ebp-28] vmovsd qword ptr [ebp-28],xmm0 fld qword ptr [ebp-28] vzeroupper lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L16: mov ecx,10 call dword ptr ds:[0A535798] int 3 M01_L17: test esi,esi jne short M01_L19 xor eax,eax xor esi,esi jmp near ptr M01_L01 M01_L18: call dword ptr ds:[0A5357F8] int 3 M01_L19: call dword ptr ds:[84B5060] int 3 M01_L20: mov ecx,6 call dword ptr ds:[84B53A8] int 3 M01_L21: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 616 ``` #### 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.1492698002754818 > 1.991967551861808. IsChangePoint: Marked as a change because one of 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/14/2022 12:26:48 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -51.08688979747965 (T) = (0 -2148.3007752221492) / Math.Sqrt((838.4444864814774 / (37)) + (3.9173004925658166 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.12830511457443958 = (1904.0069458804317 - 2148.3007752221492) / 1904.0069458804317 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:[0BAB7000]; 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:[0BAB7078]; 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:[575B828]; 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:[0B051798] int 3 M01_L02: mov ecx,0E call dword ptr ds:[0B051798] 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:[53502AC] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[53502B0] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[53502B4] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[53502B0] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[53502B8] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[53502B8] 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:[0BB9B678]; 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:[0BB9B6F0]; 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:[572B828]; 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:[0B185798] int 3 M01_L02: mov ecx,0E call dword ptr ds:[0B185798] 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:[35F02AC] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[35F02B0] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[35F02B4] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[35F02B0] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[35F02B8] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[35F02B8] 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.Max(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 490.675761688339 > 485.2647620395185. IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 11/7/2022 4:10:19 PM, 11/11/2022 5:53:56 PM, 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -18.680302879991586 (T) = (0 -491.0812479292156) / Math.Sqrt((68.55552509160701 / (37)) + (0.5128942898509012 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.05502425846210111 = (465.46915295109903 - 491.0812479292156) / 465.46915295109903 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.Max(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] call dword ptr ds:[0B009660]; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi sub esp,24 vzeroupper xor eax,eax mov [ebp-24],eax mov [ebp-14],eax test ecx,ecx je near ptr M01_L25 cmp dword ptr [ecx],7E05FC0 jne short M01_L00 lea eax,[ecx+8] mov edx,[ecx+4] jmp short M01_L01 M01_L00: mov [ebp-28],ecx cmp dword ptr [ecx],84E4B94 jne near ptr M01_L18 lea ecx,[ebp-24] mov edx,[ebp-28] call dword ptr ds:[0B00D0A8] mov eax,[ebp-24] mov edx,[ebp-20] M01_L01: test edx,edx je near ptr M01_L26 cmp edx,4 jge short M01_L04 mov esi,[eax] mov ecx,1 cmp edx,1 jle near ptr M01_L24 M01_L02: mov edi,[eax+ecx*4] cmp edi,esi jle short M01_L03 mov esi,edi M01_L03: inc ecx cmp ecx,edx jl short M01_L02 jmp near ptr M01_L24 M01_L04: cmp edx,8 jge short M01_L09 lea edx,[eax+edx*4-10] vmovdqu xmm0,xmmword ptr [eax] add eax,10 cmp eax,edx jae short M01_L06 M01_L05: vpmaxsd xmm0,xmm0,[eax] add eax,10 cmp eax,edx jb short M01_L05 M01_L06: vpmaxsd xmm0,xmm0,[edx] vmovd esi,xmm0 vpextrd ecx,xmm0,1 cmp ecx,esi jle short M01_L07 mov esi,ecx M01_L07: vpextrd ecx,xmm0,2 cmp ecx,esi jle short M01_L08 mov esi,ecx M01_L08: vpextrd ecx,xmm0,3 cmp ecx,esi jle near ptr M01_L24 mov esi,ecx jmp near ptr M01_L24 M01_L09: mov ecx,eax lea eax,[ecx+edx*4-20] vmovdqu ymm0,ymmword ptr [ecx] add ecx,20 cmp ecx,eax jae short M01_L11 M01_L10: vpmaxsd ymm0,ymm0,[ecx] add ecx,20 cmp ecx,eax jb short M01_L10 M01_L11: vpmaxsd ymm0,ymm0,[eax] vmovaps ymm1,ymm0 vmovd esi,xmm1 vmovaps ymm1,ymm0 vpextrd ecx,xmm1,1 cmp ecx,esi jle short M01_L12 mov esi,ecx M01_L12: vmovaps ymm1,ymm0 vpextrd ecx,xmm1,2 cmp ecx,esi jle short M01_L13 mov esi,ecx M01_L13: vmovaps ymm1,ymm0 vpextrd ecx,xmm1,3 cmp ecx,esi jle short M01_L14 mov esi,ecx M01_L14: vextractf128 xmm1,ymm0,1 vmovd ecx,xmm1 cmp ecx,esi jle short M01_L15 mov esi,ecx M01_L15: vextractf128 xmm1,ymm0,1 vpextrd ecx,xmm1,1 cmp ecx,esi jle short M01_L16 mov esi,ecx M01_L16: vextractf128 xmm1,ymm0,1 vpextrd ecx,xmm1,2 cmp ecx,esi jle short M01_L17 mov esi,ecx M01_L17: vextractf128 xmm0,ymm0,1 vpextrd ecx,xmm0,3 cmp ecx,esi jle short M01_L24 mov esi,ecx jmp short M01_L24 M01_L18: mov ecx,[ebp-28] call dword ptr ds:[9F02AC] mov ecx,eax mov [ebp-2C],ecx call dword ptr ds:[9F02B0] test eax,eax je short M01_L19 mov ecx,[ebp-2C] call dword ptr ds:[9F02B4] mov esi,eax mov ecx,[ebp-2C] call dword ptr ds:[9F02B8] test eax,eax je short M01_L22 jmp short M01_L20 M01_L19: call dword ptr ds:[0A5A17F8] int 3 M01_L20: mov ecx,[ebp-2C] call dword ptr ds:[9F02BC] cmp eax,esi jle short M01_L21 mov esi,eax M01_L21: mov ecx,[ebp-2C] call dword ptr ds:[9F02B8] test eax,eax jne short M01_L20 M01_L22: mov ecx,[ebp-2C] call dword ptr ds:[9F02C0] jmp short M01_L24 cmp dword ptr [ebp-2C],0 je short M01_L23 mov ecx,[ebp-2C] call dword ptr ds:[9F02C0] M01_L23: pop eax jmp eax M01_L24: mov eax,esi vzeroupper lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L25: mov ecx,10 call dword ptr ds:[0A5A1798] int 3 M01_L26: call dword ptr ds:[0A5A17F8] int 3 ; Total bytes of code 517 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Max(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] call dword ptr ds:[0AEFDBB8]; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi sub esp,24 vzeroupper xor eax,eax mov [ebp-24],eax mov [ebp-14],eax test ecx,ecx je near ptr M01_L25 cmp dword ptr [ecx],7D6603C jne short M01_L00 lea eax,[ecx+8] mov edx,[ecx+4] jmp short M01_L01 M01_L00: mov [ebp-28],ecx cmp dword ptr [ecx],8444CD0 jne near ptr M01_L18 lea ecx,[ebp-24] mov edx,[ebp-28] call dword ptr ds:[0AF21450] mov eax,[ebp-24] mov edx,[ebp-20] M01_L01: test edx,edx je near ptr M01_L26 cmp edx,4 jge short M01_L04 mov esi,[eax] mov ecx,1 cmp edx,1 jle near ptr M01_L24 M01_L02: mov edi,[eax+ecx*4] cmp edi,esi jle short M01_L03 mov esi,edi M01_L03: inc ecx cmp ecx,edx jl short M01_L02 jmp near ptr M01_L24 M01_L04: cmp edx,8 jge short M01_L09 lea edx,[eax+edx*4-10] vmovups xmm0,[eax] add eax,10 cmp eax,edx jae short M01_L06 M01_L05: vpmaxsd xmm0,xmm0,[eax] add eax,10 cmp eax,edx jb short M01_L05 M01_L06: vpmaxsd xmm0,xmm0,[edx] vmovd esi,xmm0 vpextrd ecx,xmm0,1 cmp ecx,esi jle short M01_L07 mov esi,ecx M01_L07: vpextrd ecx,xmm0,2 cmp ecx,esi jle short M01_L08 mov esi,ecx M01_L08: vpextrd ecx,xmm0,3 cmp ecx,esi jle near ptr M01_L24 mov esi,ecx jmp near ptr M01_L24 M01_L09: mov ecx,eax lea eax,[ecx+edx*4-20] vmovups ymm0,[ecx] add ecx,20 cmp ecx,eax jae short M01_L11 M01_L10: vpmaxsd ymm0,ymm0,[ecx] add ecx,20 cmp ecx,eax jb short M01_L10 M01_L11: vpmaxsd ymm0,ymm0,[eax] vmovaps ymm1,ymm0 vmovd esi,xmm1 vmovaps ymm1,ymm0 vpextrd ecx,xmm1,1 cmp ecx,esi jle short M01_L12 mov esi,ecx M01_L12: vmovaps ymm1,ymm0 vpextrd ecx,xmm1,2 cmp ecx,esi jle short M01_L13 mov esi,ecx M01_L13: vmovaps ymm1,ymm0 vpextrd ecx,xmm1,3 cmp ecx,esi jle short M01_L14 mov esi,ecx M01_L14: vextractf128 xmm1,ymm0,1 vmovd ecx,xmm1 cmp ecx,esi jle short M01_L15 mov esi,ecx M01_L15: vextractf128 xmm1,ymm0,1 vpextrd ecx,xmm1,1 cmp ecx,esi jle short M01_L16 mov esi,ecx M01_L16: vextractf128 xmm1,ymm0,1 vpextrd ecx,xmm1,2 cmp ecx,esi jle short M01_L17 mov esi,ecx M01_L17: vextractf128 xmm0,ymm0,1 vpextrd ecx,xmm0,3 cmp ecx,esi jle short M01_L24 mov esi,ecx jmp short M01_L24 M01_L18: mov ecx,[ebp-28] call dword ptr ds:[2ED02AC] mov ecx,eax mov [ebp-2C],ecx call dword ptr ds:[2ED02B0] test eax,eax je short M01_L19 mov ecx,[ebp-2C] call dword ptr ds:[2ED02B4] mov esi,eax mov ecx,[ebp-2C] call dword ptr ds:[2ED02B8] test eax,eax je short M01_L22 jmp short M01_L20 M01_L19: call dword ptr ds:[0A4E57F8] int 3 M01_L20: mov ecx,[ebp-2C] call dword ptr ds:[2ED02BC] cmp eax,esi jle short M01_L21 mov esi,eax M01_L21: mov ecx,[ebp-2C] call dword ptr ds:[2ED02B8] test eax,eax jne short M01_L20 M01_L22: mov ecx,[ebp-2C] call dword ptr ds:[2ED02C0] jmp short M01_L24 cmp dword ptr [ebp-2C],0 je short M01_L23 mov ecx,[ebp-2C] call dword ptr ds:[2ED02C0] M01_L23: pop eax jmp eax M01_L24: mov eax,esi vzeroupper lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L25: mov ecx,10 call dword ptr ds:[0A4E5798] int 3 M01_L26: call dword ptr ds:[0A4E57F8] int 3 ; Total bytes of code 517 ``` ### 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
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
[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(Int32).ConcurrentBag(Size%3a%20512).html>) 2.11 μs 2.27 μs 1.07 0.02 False
[ImmutableQueue - 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).ImmutableQueue(Size%3a%20512).html>) 4.51 μs 5.13 μs 1.14 0.06 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.IterateForEach&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<Int32>.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 2.266817478731632 > 2.216873135284043. IsChangePoint: Marked as a change because one of 12/14/2022 12:26:48 AM, 12/21/2022 9:23:17 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -17.060321366905484 (T) = (0 -2269.491844320676) / Math.Sqrt((2436.758291216136 / (37)) + (14.506116459087158 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.0653682007831255 = (2130.241772424247 - 2269.491844320676) / 2130.241772424247 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<Int32>.ImmutableQueue(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.129027777777778 > 4.769645057128289. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/2/2022 5:47:06 PM, 12/14/2022 12:26:48 AM, 12/20/2022 1:34:12 PM, 12/23/2022 9:40:21 PM, 1/5/2023 11:35:29 PM, 1/12/2023 6:14:36 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -10.354882682933003 (T) = (0 -5043.197524243739) / Math.Sqrt((29118.292550262202 / (32)) + (16461.591680079324 / (24))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (24) - 2, .025) and -0.08935170676746057 = (4629.540205347372 - 5043.197524243739) / 4629.540205347372 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
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.93 μs 2.11 μs 1.09 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.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.105905443462829 > 2.0240689159515544. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -59.48084079146513 (T) = (0 -2099.6006951158724) / Math.Sqrt((172.3454606646823 / (37)) + (63.28034093211991 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -0.08704010031219482 = (1931.4841232746364 - 2099.6006951158724) / 1931.4841232746364 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 e52462326be03fb329384b7e04a33d3eb7c16736
Compare 99ba09612b31e90e1e7feb5511ee541f9f3ef02b
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
[MultipleSerial - 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).MultipleSerial(RentalSize%3a%204096%2c%20ManipulateArray%3a%20False%2c%20Async%3a%20True%2c%20UseSharedPool%3a%20False).html>) 660.22 ns 26.13 μs 39.57 0.14 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>.MultipleSerial(RentalSize: 4096, ManipulateArray: False, Async: True, 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 26.127442 > 689.030821875. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsRegressionStdDev: Marked as regression because -11.821226599927233 (T) = (0 -21142.530908521305) / Math.Sqrt((405.2125173559537 / (37)) + (57026416.775095455 / (19))) is less than -2.0048792881871513 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (19) - 2, .025) and -30.899558740122895 = (662.7844316206316 - 21142.530908521305) / 662.7844316206316 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)