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: 16 Regressions on 2/20/2023 2:42:44 PM #13466

Closed performanceautofiler[bot] closed 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
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
[Queue - 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).Queue(Size%3a%20512).html>) 3.55 μs 4.06 μs 1.14 0.16 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(String).ImmutableQueue(Size%3a%20512).html>) 5.16 μs 5.77 μs 1.12 0.05 False
[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(String).LinkedList(Size%3a%20512).html>) 3.01 μs 3.57 μs 1.19 0.04 False

graph graph graph Test Report

Repro

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

Payloads

Baseline Compare

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>.Queue(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.0562891866357464 > 3.728628191867505. IsChangePoint: Marked as a change because one of 12/23/2022 9:40:21 PM, 2/9/2023 4:27:10 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -14.275183364123318 (T) = (0 -3994.0164107112996) / Math.Sqrt((158.59585804705864 / (19)) + (25718.371438539314 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.12459559093329055 = (3551.51348885932 - 3994.0164107112996) / 3551.51348885932 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>.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.7713930555555555 > 5.419528551069677. IsChangePoint: Marked as a change because one of 12/23/2022 9:40:21 PM, 2/8/2023 7:09:09 PM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -23.932996210713313 (T) = (0 -5702.991443426042) / Math.Sqrt((5943.44661192778 / (19)) + (7829.101601830593 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.11486742607998039 = (5115.398755059608 - 5702.991443426042) / 5115.398755059608 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>.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 3.5686103526734927 > 3.164585859350211. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/30/2023 9:42:46 PM, 2/4/2023 4:58:40 AM, 2/16/2023 6:27:39 AM, 2/24/2023 9:01:57 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -28.37612094378514 (T) = (0 -3498.9563182873476) / Math.Sqrt((3484.0211388231696 / (29)) + (2086.6089451543153 / (17))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (17) - 2, .025) and -0.14467477650705252 = (3056.7252726266306 - 3498.9563182873476) / 3056.7252726266306 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 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
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
[ObjFooIsObj2 - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.ObjFooIsObj2.html>) 155.93 μs 219.99 μs 1.41 0.07 False Trace Trace
[FooObjIsFoo2 - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.FooObjIsFoo2.html>) 219.91 μs 280.66 μs 1.28 0.06 False Trace Trace
[ScalarValueTypeObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.ScalarValueTypeObj.html>) 219.75 μs 280.66 μs 1.28 0.07 False Trace Trace
[IntObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.IntObj.html>) 220.39 μs 281.99 μs 1.28 0.07 False Trace Trace

graph graph graph graph Test Report

Repro

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

Payloads

Baseline Compare

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.ObjFooIsObj2 ```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 219.99407862103178 > 163.72062345297033. IsChangePoint: Marked as a change because one of 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/15/2023 2:31:53 AM, 1/18/2023 8:37:25 PM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -96.30797643403177 (T) = (0 -220591.84416456817) / Math.Sqrt((106149.20889329133 / (19)) + (11941670.714691361 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.4127868766339206 = (156139.50540802456 - 220591.84416456817) / 156139.50540802456 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.ObjFooIsObj2() push ebp mov ebp,esp push edi push esi xor eax,eax mov ecx,ds:[0ABB6A68] test ecx,ecx jle short M00_L01 mov esi,ds:[7114138] nop nop nop nop nop nop nop nop nop M00_L00: mov edi,esi mov edx,7114154 call CORINFO_HELP_ASSIGN_REF_EDI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 53 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjFooIsObj2() push ebp mov ebp,esp push edi push esi xor eax,eax mov ecx,ds:[0B196D18] test ecx,ecx jle short M00_L01 mov esi,ds:[76D4138] nop nop nop nop nop nop nop nop nop M00_L00: mov edi,esi mov edx,76D4154 call CORINFO_HELP_ASSIGN_REF_EDI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 53 ``` #### PerfLabTests.CastingPerf.FooObjIsFoo2 ```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.6573288690477 > 230.88077213541663. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -68.6507514969642 (T) = (0 -280780.7252564042) / Math.Sqrt((13986893.142532296 / (19)) + (139136.16164439695 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.26664350130243947 = (221673.04767891555 - 280780.7252564042) / 221673.04767891555 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.FooObjIsFoo2() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0A936A68] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[6EC4154] 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:[804B858] M00_L01: mov edx,6EC4158 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.FooObjIsFoo2() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0B1C6D18] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[7784154] 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:[893B858] M00_L01: mov edx,7784158 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.65947066326527 > 230.75959132146642. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -75.42434840939934 (T) = (0 -280868.7277421652) / Math.Sqrt((11825981.24882252 / (19)) + (215975.66730722116 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.27099932045657565 = (220982.59473598297 - 280868.7277421652) / 220982.59473598297 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:[0B1A6A68] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[7694150] 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:[892B858] M00_L01: mov edx,7694148 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:[0A736D18] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[6C54150] 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:[4A3B858] M00_L01: mov edx,6C54148 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.IntObj ```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.98859215561225 > 230.81721577904935. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -160.90550664045966 (T) = (0 -281220.1650350311) / Math.Sqrt((2428863.5007484774 / (19)) + (370786.7191833726 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.27434226480538704 = (220678.67699418886 - 281220.1650350311) / 220678.67699418886 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.IntObj() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0A7F6A68] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[6D54150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_System.Int32[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[7F7B858] M00_L01: mov edx,6D54134 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.IntObj() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0AF36D18] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[7494150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_System.Int32[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[863B858] M00_L01: mov edx,7494134 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)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
Diff Diff

Regressions in System.MathBenchmarks.Single

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Min - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.MathBenchmarks.Single.Min.html>) 6.34 μs 7.31 μs 1.15 0.07 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.MathBenchmarks.Single*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.MathBenchmarks.Single.Min ```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.305235904007457 > 6.693549275268926. IsChangePoint: Marked as a change because one of 12/20/2022 1:34:12 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -33.691904321248856 (T) = (0 -7348.034980072938) / Math.Sqrt((11390.594541375956 / (19)) + (5049.780434718216 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.14756772677392485 = (6403.138401887568 - 7348.034980072938) / 6403.138401887568 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.MathBenchmarks.Single.Min() call dword ptr ds:[0AE11828]; System.MathBenchmarks.Single.MinTest() ret ; Total bytes of code 7 ``` ```assembly ; System.MathBenchmarks.Single.MinTest() push ebp mov ebp,esp push esi sub esp,1C vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax vxorps xmm0,xmm0,xmm0 vmovss xmm1,dword ptr ds:[8CB0A70] xor ecx,ecx vmovss xmm2,dword ptr ds:[8CB0A74] M01_L00: vsubss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[8CB0A78] jp short M01_L01 je short M01_L02 M01_L01: vucomiss xmm1,dword ptr ds:[8CB0A78] ja short M01_L04 M01_L02: vmovaps xmm3,xmm1 M01_L03: vaddss xmm0,xmm0,xmm3 inc ecx cmp ecx,1388 jl short M01_L00 vmovss xmm3,dword ptr ds:[8CB0A7C] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[8CB0A80] vucomiss xmm1,dword ptr ds:[8CB0A90] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L04: vmovss xmm3,dword ptr ds:[8CB0A78] jmp short M01_L03 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[0A6ED4E0] mov ecx,5E71 mov edx,0AE21BE0 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A6ED5D0] vmovss xmm0,dword ptr ds:[8CB0A7C] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0AE21BE0 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B70BA08] mov ecx,5E9B mov edx,0AE21BE0 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A6ED5D0] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0AE21BE0 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B70BA08] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[0A6ED570] mov edx,eax mov ecx,esi call dword ptr ds:[85C5C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 329 ``` ### Compare Jit Disasm ```assembly ; System.MathBenchmarks.Single.Min() call dword ptr ds:[0B185408]; System.MathBenchmarks.Single.MinTest() ret ; Total bytes of code 7 ``` ```assembly ; System.MathBenchmarks.Single.MinTest() push ebp mov ebp,esp push esi sub esp,1C vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax vxorps xmm0,xmm0,xmm0 vmovss xmm1,dword ptr ds:[0B9FF170] xor ecx,ecx vmovss xmm2,dword ptr ds:[0B9FF174] M01_L00: vsubss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[0B9FF178] jp short M01_L01 je short M01_L02 M01_L01: vucomiss xmm1,dword ptr ds:[0B9FF178] ja short M01_L04 M01_L02: vmovaps xmm3,xmm1 M01_L03: vaddss xmm0,xmm0,xmm3 inc ecx cmp ecx,1388 jl short M01_L00 vmovss xmm3,dword ptr ds:[0B9FF17C] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[0B9FF180] vucomiss xmm1,dword ptr ds:[0B9FF190] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L04: vmovss xmm3,dword ptr ds:[0B9FF178] jmp short M01_L03 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[0AA6F4E0] mov ecx,5E71 mov edx,0B1B1E90 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0AA6F5D0] vmovss xmm0,dword ptr ds:[0B9FF17C] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0B1B1E90 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0BA8DA08] mov ecx,5E9B mov edx,0B1B1E90 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0AA6F5D0] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0B1B1E90 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0BA8DA08] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[0AA6F570] mov edx,eax mov ecx,esi call dword ptr ds:[88D5C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 329 ``` ### 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 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Concat_CharEnumerable - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.Concat_CharEnumerable.html>) 7.94 μs 8.52 μs 1.07 0.03 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_String.Concat_CharEnumerable ```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 8.523640087383942 > 8.127289254058846. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/5/2023 11:35:29 PM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -30.547218535196965 (T) = (0 -8578.636415622412) / Math.Sqrt((13558.369755720672 / (19)) + (1882.3844223998049 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.11069183445984564 = (7723.687299631941 - 8578.636415622412) / 7723.687299631941 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_String.Concat_CharEnumerable() mov ecx,ds:[75744E8] call dword ptr ds:[0BA3B888]; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 13 ``` ```assembly ; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi sub esp,34 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 xor eax,eax mov [ebp-28],eax mov [ebp-24],eax mov [ebp-18],eax mov [ebp-0C],esp mov dword ptr [ebp-3C],0EA452E0 test ecx,ecx je near ptr M01_L12 call dword ptr ds:[39A029C] mov esi,eax mov [ebp-34],esi mov ecx,esi call dword ptr ds:[39A02A0] test eax,eax jne short M01_L00 mov dword ptr [ebp-38],88A0004 mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L06 jmp near ptr M01_L08 M01_L00: mov ecx,esi call dword ptr ds:[39A02A4] mov edi,eax mov ecx,esi call dword ptr ds:[39A02A8] test eax,eax jne short M01_L01 mov ecx,1 call System.String.FastAllocateString(Int32) mov [eax+8],di mov [ebp-38],eax mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L07 jmp near ptr M01_L08 M01_L01: test [esp],esp sub esp,200 lea ecx,[esp] mov [ebp-0C],esp xor edx,edx mov [ebp-30],edx mov [ebp-28],ecx mov dword ptr [ebp-24],100 mov [ebp-2C],edx mov ecx,[ebp-2C] mov edx,[ebp-28] mov eax,[ebp-24] cmp ecx,eax jae short M01_L02 mov [edx+ecx*2],di inc ecx mov [ebp-2C],ecx jmp short M01_L03 M01_L02: lea ecx,[ebp-30] mov edx,edi call dword ptr ds:[0B5AB288]; System.Text.ValueStringBuilder.GrowAndAppend(Char) M01_L03: mov ecx,esi call dword ptr ds:[39A02AC] mov edi,eax mov ecx,[ebp-2C] mov edx,[ebp-28] mov eax,[ebp-24] cmp ecx,eax jae short M01_L04 mov [edx+ecx*2],di inc ecx mov [ebp-2C],ecx jmp short M01_L05 M01_L04: lea ecx,[ebp-30] mov edx,edi call dword ptr ds:[0B5AB288]; System.Text.ValueStringBuilder.GrowAndAppend(Char) M01_L05: mov ecx,esi call dword ptr ds:[39A02B0] test eax,eax jne short M01_L03 lea ecx,[ebp-30] call dword ptr ds:[0B5AB120]; System.Text.ValueStringBuilder.ToString() mov [ebp-38],eax mov ecx,esi call dword ptr ds:[39A02B4] jmp short M01_L10 M01_L06: mov dword ptr [ebp-18],0 jmp short M01_L10 M01_L07: mov dword ptr [ebp-18],0 jmp short M01_L10 M01_L08: mov esi,[ebp-34] test esi,esi je short M01_L09 mov ecx,esi call dword ptr ds:[39A02B4] M01_L09: pop eax jmp eax M01_L10: mov eax,[ebp-38] cmp dword ptr [ebp-3C],0EA452E0 je short M01_L11 call CORINFO_HELP_FAIL_FAST M01_L11: lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L12: mov ecx,166D mov edx,3414000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8EE7B10] int 3 ; Total bytes of code 392 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.Concat_CharEnumerable() mov ecx,ds:[7AB44E8] call dword ptr ds:[0BCBD888]; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 13 ``` ```assembly ; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi sub esp,34 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 xor eax,eax mov [ebp-28],eax mov [ebp-24],eax mov [ebp-18],eax mov [ebp-0C],esp mov dword ptr [ebp-3C],29889933 test ecx,ecx je near ptr M01_L12 call dword ptr ds:[36A029C] mov esi,eax mov [ebp-34],esi mov ecx,esi call dword ptr ds:[36A02A0] test eax,eax jne short M01_L00 mov dword ptr [ebp-38],8B20004 mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L06 jmp near ptr M01_L08 M01_L00: mov ecx,esi call dword ptr ds:[36A02A4] mov edi,eax mov ecx,esi call dword ptr ds:[36A02A8] test eax,eax jne short M01_L01 mov ecx,1 call System.String.FastAllocateString(Int32) mov [eax+8],di mov [ebp-38],eax mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L07 jmp near ptr M01_L08 M01_L01: test [esp],esp sub esp,200 lea ecx,[esp] mov [ebp-0C],esp xor edx,edx mov [ebp-30],edx mov [ebp-28],ecx mov dword ptr [ebp-24],100 mov [ebp-2C],edx mov ecx,[ebp-2C] mov edx,[ebp-28] mov eax,[ebp-24] cmp ecx,eax jae short M01_L02 mov [edx+ecx*2],di inc ecx mov [ebp-2C],ecx jmp short M01_L03 M01_L02: lea ecx,[ebp-30] mov edx,edi call dword ptr ds:[0B7AD750]; System.Text.ValueStringBuilder.GrowAndAppend(Char) M01_L03: mov ecx,esi call dword ptr ds:[36A02AC] mov edi,eax mov ecx,[ebp-2C] mov edx,[ebp-28] mov eax,[ebp-24] cmp ecx,eax jae short M01_L04 mov [edx+ecx*2],di inc ecx mov [ebp-2C],ecx jmp short M01_L05 M01_L04: lea ecx,[ebp-30] mov edx,edi call dword ptr ds:[0B7AD750]; System.Text.ValueStringBuilder.GrowAndAppend(Char) M01_L05: mov ecx,esi call dword ptr ds:[36A02B0] test eax,eax jne short M01_L03 lea ecx,[ebp-30] call dword ptr ds:[0B7AD5E8]; System.Text.ValueStringBuilder.ToString() mov [ebp-38],eax mov ecx,esi call dword ptr ds:[36A02B4] jmp short M01_L10 M01_L06: mov dword ptr [ebp-18],0 jmp short M01_L10 M01_L07: mov dword ptr [ebp-18],0 jmp short M01_L10 M01_L08: mov esi,[ebp-34] test esi,esi je short M01_L09 mov ecx,esi call dword ptr ds:[36A02B4] M01_L09: pop eax jmp eax M01_L10: mov eax,[ebp-38] cmp dword ptr [ebp-3C],29889933 je short M01_L11 call CORINFO_HELP_FAIL_FAST M01_L11: lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L12: mov ecx,165F mov edx,3694000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[9179B10] int 3 ; Total bytes of code 392 ``` ### 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 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
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
[IEnumerable - 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).IEnumerable(Size%3a%20512).html>) 2.10 μs 2.23 μs 1.06 0.02 False

graph Test Report

Repro

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

Payloads

Baseline Compare

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>.IEnumerable(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.2339900219612336 > 2.205290434786426. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/5/2023 11:35:29 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -61.3708780964876 (T) = (0 -2246.9121245486745) / Math.Sqrt((4.583259733642692 / (19)) + (144.88305592290376 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.0691496902388712 = (2101.587967580728 - 2246.9121245486745) / 2101.587967580728 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 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
Diff Diff

Regressions in System.Text.Json.Document.Tests.Perf_EnumerateArray

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[EnumerateArray - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Document.Tests.Perf_EnumerateArray.EnumerateArray(TestCase%3a%20ArrayOfStrings).html>) 656.14 ns 695.68 ns 1.06 0.02 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Document.Tests.Perf_EnumerateArray*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Document.Tests.Perf_EnumerateArray.EnumerateArray(TestCase: ArrayOfStrings) ```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 695.6846703149174 > 688.9359785568079. IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/9/2023 4:10:34 PM, 2/14/2023 5:47:38 PM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -34.061147601079114 (T) = (0 -696.3636496238986) / Math.Sqrt((26.35024659090291 / (19)) + (2.058510911175205 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.06288482175036184 = (655.1637913853402 - 696.3636496238986) / 655.1637913853402 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.Text.Json.Document.Tests.Perf_EnumerateArray.EnumerateArray() push ebp mov ebp,esp push edi push esi push ebx sub esp,48 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 add ecx,10 mov ebx,[ecx] test ebx,ebx je near ptr M00_L16 mov eax,ebx mov ecx,[ecx+4] mov edx,ecx mov esi,[eax+18] test esi,esi je near ptr M00_L19 mov eax,[eax+1C] mov [ebp-54],eax mov edi,eax add edx,8 test edi,edi je near ptr M00_L17 cmp [edi+4],edx jb near ptr M00_L21 lea eax,[edi+edx+8] mov edi,[edi+4] sub edi,edx M00_L00: cmp edi,4 jl near ptr M00_L22 mov eax,[eax] shr eax,1C movzx eax,al mov edx,eax cmp eax,3 jne near ptr M00_L18 vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-40],xmm0 mov eax,ecx mov [ebp-38],ebx mov [ebp-34],eax mov dword ptr [ebp-40],0FFFFFFFF test esi,esi je near ptr M00_L19 mov eax,[ebp-54] test eax,eax je near ptr M00_L20 cmp [eax+4],ecx jb near ptr M00_L21 lea edx,[eax+ecx+8] mov eax,[eax+4] sub eax,ecx M00_L01: cmp eax,0C jl near ptr M00_L22 mov eax,[edx+8] mov edx,eax shr edx,1C movzx edx,dl cmp edx,5 jl short M00_L02 add ecx,0C jmp short M00_L03 M00_L02: and eax,0FFFFFFF lea eax,[eax+eax*2] lea ecx,[ecx+eax*4] M00_L03: mov [ebp-3C],ecx lea edi,[ebp-50] lea esi,[ebp-40] mov ecx,4 rep movsd lea edi,[ebp-30] lea esi,[ebp-50] mov ecx,4 rep movsd M00_L04: mov ecx,[ebp-30] mov esi,[ebp-2C] cmp ecx,esi jge near ptr M00_L14 test ecx,ecx jge short M00_L05 mov ecx,[ebp-24] add ecx,0C mov [ebp-30],ecx jmp short M00_L08 M00_L05: mov eax,[ebp-28] cmp dword ptr [eax+18],0 je short M00_L09 mov eax,[eax+1C] test eax,eax je short M00_L12 cmp [eax+4],ecx jb short M00_L10 lea edx,[eax+ecx+8] mov eax,[eax+4] sub eax,ecx M00_L06: cmp eax,0C jl short M00_L11 mov eax,[edx+8] mov edx,eax shr edx,1C movzx edx,dl cmp edx,5 jl short M00_L13 add ecx,0C M00_L07: mov [ebp-30],ecx M00_L08: cmp [ebp-30],esi jl short M00_L04 jmp short M00_L14 M00_L09: call dword ptr ds:[0B581F60] int 3 M00_L10: call dword ptr ds:[8787270] int 3 M00_L11: mov ecx,28 call dword ptr ds:[87875B8] int 3 M00_L12: test ecx,ecx jne short M00_L10 xor edx,edx xor eax,eax jmp short M00_L06 M00_L13: and eax,0FFFFFFF lea eax,[eax+eax*2] lea ecx,[ecx+eax*4+0C] jmp short M00_L07 M00_L14: jmp short M00_L15 pop eax jmp eax M00_L15: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L16: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8761CA8] mov ecx,esi call CORINFO_HELP_THROW M00_L17: test edx,edx jne short M00_L21 xor edx,edx xor edi,edi mov eax,edx jmp near ptr M00_L00 M00_L18: mov ecx,3 call dword ptr ds:[0B581D08] int 3 M00_L19: call dword ptr ds:[0B581F60] int 3 M00_L20: test ecx,ecx jne short M00_L21 xor edx,edx xor eax,eax jmp near ptr M00_L01 M00_L21: call dword ptr ds:[8787270] int 3 M00_L22: mov ecx,28 call dword ptr ds:[87875B8] int 3 ; Total bytes of code 512 ``` ### Compare Jit Disasm ```assembly ; System.Text.Json.Document.Tests.Perf_EnumerateArray.EnumerateArray() push ebp mov ebp,esp push edi push esi push ebx sub esp,48 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 add ecx,10 mov ebx,[ecx] test ebx,ebx je near ptr M00_L16 mov eax,ebx mov ecx,[ecx+4] mov edx,ecx mov esi,[eax+18] test esi,esi je near ptr M00_L19 mov eax,[eax+1C] mov [ebp-54],eax mov edi,eax add edx,8 test edi,edi je near ptr M00_L17 cmp [edi+4],edx jb near ptr M00_L21 lea eax,[edi+edx+8] mov edi,[edi+4] sub edi,edx M00_L00: cmp edi,4 jl near ptr M00_L22 mov eax,[eax] shr eax,1C movzx eax,al mov edx,eax cmp eax,3 jne near ptr M00_L18 vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-40],xmm0 mov eax,ecx mov [ebp-38],ebx mov [ebp-34],eax mov dword ptr [ebp-40],0FFFFFFFF test esi,esi je near ptr M00_L19 mov eax,[ebp-54] test eax,eax je near ptr M00_L20 cmp [eax+4],ecx jb near ptr M00_L21 lea edx,[eax+ecx+8] mov eax,[eax+4] sub eax,ecx M00_L01: cmp eax,0C jl near ptr M00_L22 mov eax,[edx+8] mov edx,eax shr edx,1C movzx edx,dl cmp edx,5 jl short M00_L02 add ecx,0C jmp short M00_L03 M00_L02: and eax,0FFFFFFF lea eax,[eax+eax*2] lea ecx,[ecx+eax*4] M00_L03: mov [ebp-3C],ecx lea edi,[ebp-50] lea esi,[ebp-40] mov ecx,4 rep movsd lea edi,[ebp-30] lea esi,[ebp-50] mov ecx,4 rep movsd M00_L04: mov ecx,[ebp-30] mov esi,[ebp-2C] cmp ecx,esi jge near ptr M00_L14 test ecx,ecx jge short M00_L05 mov ecx,[ebp-24] add ecx,0C mov [ebp-30],ecx jmp short M00_L08 M00_L05: mov eax,[ebp-28] cmp dword ptr [eax+18],0 je short M00_L09 mov eax,[eax+1C] test eax,eax je short M00_L12 cmp [eax+4],ecx jb short M00_L10 lea edx,[eax+ecx+8] mov eax,[eax+4] sub eax,ecx M00_L06: cmp eax,0C jl short M00_L11 mov eax,[edx+8] mov edx,eax shr edx,1C movzx edx,dl cmp edx,5 jl short M00_L13 add ecx,0C M00_L07: mov [ebp-30],ecx M00_L08: cmp [ebp-30],esi jl short M00_L04 jmp short M00_L14 M00_L09: call dword ptr ds:[0BC93F60] int 3 M00_L10: call dword ptr ds:[8F29270] int 3 M00_L11: mov ecx,28 call dword ptr ds:[8F295B8] int 3 M00_L12: test ecx,ecx jne short M00_L10 xor edx,edx xor eax,eax jmp short M00_L06 M00_L13: and eax,0FFFFFFF lea eax,[eax+eax*2] lea ecx,[ecx+eax*4+0C] jmp short M00_L07 M00_L14: jmp short M00_L15 pop eax jmp eax M00_L15: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L16: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8EE3CA8] mov ecx,esi call CORINFO_HELP_THROW M00_L17: test edx,edx jne short M00_L21 xor edx,edx xor edi,edi mov eax,edx jmp near ptr M00_L00 M00_L18: mov ecx,3 call dword ptr ds:[0BC93D08] int 3 M00_L19: call dword ptr ds:[0BC93F60] int 3 M00_L20: test ecx,ecx jne short M00_L21 xor edx,edx xor eax,eax jmp near ptr M00_L01 M00_L21: call dword ptr ds:[8F29270] int 3 M00_L22: mov ecx,28 call dword ptr ds:[8F295B8] int 3 ; Total bytes of code 512 ``` ### 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 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
Diff Diff

Regressions in PerfLabTests.CastingPerf2.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IFooFooIsIFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo.html>) 311.83 μs 440.44 μs 1.41 0.15 False Trace Trace
[FooObjIsFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo.html>) 439.78 μs 561.29 μs 1.28 0.12 False Trace Trace
[FooObjIsNull - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.FooObjIsNull.html>) 313.21 μs 439.81 μs 1.40 0.21 False Trace Trace

graph graph graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo ```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 440.4393402777779 > 327.4256091511124. IsChangePoint: Marked as a change because one of 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/30/2023 9:42:46 PM, 2/13/2023 6:54:14 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -66.62235085701421 (T) = (0 -443913.74301815766) / Math.Sqrt((257079.70494954413 / (19)) + (105351060.2513354 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.42241171081922585 = (312085.2701377784 - 443913.74301815766) / 312085.2701377784 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.CastingPerf2.CastingPerf.IFooFooIsIFoo() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0A8598C8 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0A859F00] test eax,eax jle short M00_L01 mov ecx,ds:[6D84264] M00_L00: mov edx,6D842C4 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0A3C6750 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0A3C6D88] test eax,eax jle short M00_L01 mov ecx,ds:[6914264] M00_L00: mov edx,69142C4 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` #### PerfLabTests.CastingPerf2.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 561.2871492346939 > 463.03796267361116. IsChangePoint: Marked as a change because one of 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/27/2023 7:12:54 PM, 2/9/2023 4:10:34 PM, 2/13/2023 6:54:14 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -90.99623866573461 (T) = (0 -561755.84771462) / Math.Sqrt((31476530.73484482 / (19)) + (919386.4130868585 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.2668254806916957 = (443435.8609584465 - 561755.84771462) / 443435.8609584465 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.CastingPerf2.CastingPerf.FooObjIsFoo() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0AB26AD8] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[6F54274] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.CastingPerf2.Foo cmp [eax],ecx je short M00_L01 call dword ptr ds:[82AB8B8] M00_L01: mov edx,6F5429C 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.CastingPerf2.CastingPerf.FooObjIsFoo() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0B1E6D88] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[7644274] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.CastingPerf2.Foo cmp [eax],ecx je short M00_L01 call dword ptr ds:[88EB8B8] M00_L01: mov edx,764429C 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.CastingPerf2.CastingPerf.FooObjIsNull ```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 439.8145949074074 > 328.5829723406863. IsChangePoint: Marked as a change because one of 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/30/2023 9:42:46 PM, 2/13/2023 6:54:14 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -48.4743969101086 (T) = (0 -451190.1061998449) / Math.Sqrt((452509.3429504481 / (19)) + (220544021.44417113 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.44405174258015817 = (312447.3264328336 - 451190.1061998449) / 312447.3264328336 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.CastingPerf2.CastingPerf.FooObjIsNull() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0A9D64A0 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0A9D6AD8] test eax,eax jle short M00_L01 mov ecx,ds:[6E9426C] M00_L00: mov edx,6E94274 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.FooObjIsNull() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0B246750 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0B246D88] test eax,eax jle short M00_L01 mov ecx,ds:[776426C] M00_L00: mov edx,7764274 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` ### 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 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

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_Leipzig.Count(Pattern%3a%20%22(%5bA-Za-z%5dawyer%7c%5bA-Za-z%5dinn)%5c%5cs%22%2c%20Options%3a%20None).html>) 1.19 secs 1.32 secs 1.11 0.02 False

graph Test Report

Repro

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

Payloads

Baseline Compare

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_Leipzig*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "([A-Za-z]awyer|[A-Za-z]inn)\\s", 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 1.31968421 > 1.2497592765. IsChangePoint: Marked as a change because one of 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -14.259931607058396 (T) = (0 -1352760077.3947186) / Math.Sqrt((141685036965650.44 / (19)) + (3162781889701080 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.13335758488001545 = (1193586292.1303258 - 1352760077.3947186) / 1193586292.1303258 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 06dd1262479775558b7b8ce4766ddc0e8ae41214
Compare 9ed6d997beaaebd9850181e8df1cbf4e65d1e9ef
Diff Diff

Regressions in System.Tests.Perf_Char

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Char_ToUpperInvariant - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Char.Char_ToUpperInvariant(input%3a%20%22Hello%20World!%22).html>) 15.07 ns 20.29 ns 1.35 0.03 False 177.10009354759734 184.39120900559735 1.0411694613590956) Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Char*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Char.Char_ToUpperInvariant(input: "Hello World!") ```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 20.289173439292814 > 15.833599769187119. IsChangePoint: Marked as a change because one of 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/15/2023 2:31:53 AM, 1/18/2023 8:37:25 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 2/28/2023 7:53:18 AM falls between 2/19/2023 7:20:18 PM and 2/28/2023 7:53:18 AM. IsRegressionStdDev: Marked as regression because -245.76242965898402 (T) = (0 -20.315664934902127) / Math.Sqrt((0.0011127676273781748 / (19)) + (0.010653355386370186 / (27))) is less than -2.0153675744421933 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (19) + (27) - 2, .025) and -0.3468241798422264 = (15.08412548494786 - 20.315664934902127) / 15.08412548494786 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_Char.Char_ToUpperInvariant(System.String) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov esi,edx xor edi,edi xor ebx,ebx mov eax,[esi+4] mov [ebp-18],eax test eax,eax jle short M00_L04 M00_L00: movzx edx,word ptr [esi+ebx*2+8] cmp edx,7F ja short M00_L02 lea ecx,[edx-61] cmp ecx,19 ja short M00_L01 and edx,5F M00_L01: mov ecx,edx jmp short M00_L03 M00_L02: mov ecx,ds:[74812F4] mov [ebp-14],dx cmp [ecx],cl xor edx,edx mov [ebp-10],edx push 1 lea edx,[ebp-10] push edx push 1 push 1 lea edx,[ebp-14] call dword ptr ds:[8D0B420] movzx ecx,word ptr [ebp-10] M00_L03: add edi,ecx inc ebx mov eax,[ebp-18] cmp eax,ebx jg short M00_L00 M00_L04: mov eax,edi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 115 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Char.Char_ToUpperInvariant(System.String) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov esi,edx xor edi,edi xor ebx,ebx mov eax,[esi+4] mov [ebp-18],eax test eax,eax jle short M00_L04 M00_L00: movzx edx,word ptr [esi+ebx*2+8] cmp edx,7F ja short M00_L02 lea ecx,[edx-61] cmp ecx,19 ja short M00_L01 and edx,5F M00_L01: mov ecx,edx jmp short M00_L03 M00_L02: mov ecx,ds:[6A112F4] mov [ebp-14],dx cmp [ecx],cl xor edx,edx mov [ebp-10],edx push 1 lea edx,[ebp-10] push edx push 1 push 1 lea edx,[ebp-14] call dword ptr ds:[83FD420] movzx ecx,word ptr [ebp-10] M00_L03: add edi,ecx inc ebx mov eax,[ebp-18] cmp eax,ebx jg short M00_L00 M00_L04: mov eax,edi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 115 ``` ### 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)