Skip to content

Regressions around IndexOf #80441

Description

@performanceautofiler

Run Information

Architecturex64
OSWindows 10.0.18362
Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
DiffDiff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
Count - Duration of single invocation8.68 ms11.31 ms1.300.05False

graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)

Description of detection logic

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 11.31371125 > 9.244280525862068.
IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
IsRegressionStdDev: Marked as regression because -6.374166673789645 (T) = (0 -9603758.60660944) / Math.Sqrt((8648777551.858488 / (14)) + (541761443840.9534 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09484229454698666 = (8771819.150979357 - 9603758.60660944) / 8771819.150979357 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
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecturex64
OSWindows 10.0.18362
Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
DiffDiff

Regressions in System.Tests.Perf_String

BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
Replace_Char - Duration of single invocation4.17 ns5.58 ns1.340.05FalseTraceTrace
TrimEnd_CharArr - Duration of single invocation15.10 ns16.24 ns1.080.04FalseTraceTrace
Replace_Char - Duration of single invocation4.13 ns6.14 ns1.490.04FalseTraceTrace
Replace_String - Duration of single invocation52.91 ns56.12 ns1.060.17FalseTraceTrace
Replace_Char - Duration of single invocation19.53 ns22.33 ns1.140.06FalseTraceTrace

graph
graph
graph
graph
graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')

Description of detection logic

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.5791697719305775 > 4.373588329296491.
IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
IsRegressionStdDev: Marked as regression because -27.243637733037268 (T) = (0 -5.4979369389559425) / Math.Sqrt((0.00019304484897805758 / (14)) + (0.07992415633537059 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.32372669563033424 = (4.15337770032501 - 5.4979369389559425) / 4.15337770032501 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.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFBA9C250C0]; System.String.Replace(Char, Char)
; Total bytes of code 21
; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3A3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

Compare Jit Disasm

; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char); Total bytes of code 21
; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A6B438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])

Description of detection logic

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 16.243533696179 > 15.84953257735199.
IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
IsRegressionStdDev: Marked as regression because -13.227699752533349 (T) = (0 -16.421167827143552) / Math.Sqrt((0.08018990762463707 / (14)) + (0.08814426859036918 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.07970713135289936 = (15.208909296141657 - 16.421167827143552) / 15.208909296141657 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.TrimEnd_CharArr(System.String, Char[])
mov rcx,rdx
mov rdx,r8
cmp [rcx],ecx
jmp qword ptr [7FFCA57154F8]; System.String.TrimEnd(Char[])
; Total bytes of code 14
; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFCA5715510]nopaddrsp,28ret; Total bytes of code 74

Compare Jit Disasm

; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])movrcx,rdxmovrdx,r8cmp[rcx],ecxjmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[]); Total bytes of code 14
; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFEA4995510]nopaddrsp,28ret; Total bytes of code 74

System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')

Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 6.141896447049398 > 4.345308369149102.
IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
IsRegressionStdDev: Marked as regression because -77.67081568675944 (T) = (0 -6.195133441371548) / Math.Sqrt((0.000163412449150792 / (14)) + (0.02276838353402995 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.4972135604471777 = (4.137775401607522 - 6.195133441371548) / 4.137775401607522 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.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFBA9C550C0]; System.String.Replace(Char, Char)
; Total bytes of code 21
; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3D3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

Compare Jit Disasm

; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char); Total bytes of code 21
; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00AAB438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")

Description of detection logic

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 56.12304519478277 > 55.71160747100109.
IsChangePoint: Marked as a change because one of 11/17/2022 7:01:39 PM, 11/18/2022 3:21:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
IsRegressionStdDev: Marked as regression because -5.791124591809122 (T) = (0 -56.58363624443871) / Math.Sqrt((2.1664145734713496 / (14)) + (2.5689714504370484 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.05192214047934187 = (53.790707569530355 - 56.58363624443871) / 53.790707569530355 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.Replace_String(System.String, System.String, System.String)
mov rcx,rdx
mov rdx,r8
mov r8,r9
cmp [rcx],ecx
jmp qword ptr [7FFCE0E250D8]; System.String.Replace(System.String, System.String)
; Total bytes of code 17
; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushrdipushrsipushrbxsubrsp,58learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4mov[rbp+30],raxmovrax,0C6A9C64BB2F3mov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L15movr14d,[rdi+8]testr14d,r14dje near ptr M01_L15testrbx,rbxjne short M01_L00movrbx,7FFCE0EC0008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+28],rdxmov dword ptr [rbp+30],80xoredx,edxmov[rbp+18],rdxmov[rbp+20],edxcmpr14d,1jne near ptr M01_L06cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)movrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dicall qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)testeax,eaxjl near ptr M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L04movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L05M01_L04:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L05:incr15djmp short M01_L03M01_L06:xorr15d,r15dM01_L07:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFCE12D1408]testeax,eaxjl short M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L08movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L09M01_L08:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L09:addr15d,r14djmp short M01_L07M01_L10:cmp dword ptr [rbp+20],0jne short M01_L12movrax,rsimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L11call CORINFO_HELP_FAIL_FASTM01_L11:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L12:movedx,r14dmovecx,[rbp+20]cmpecx,[rbp+30]ja near ptr M01_L16movr8,[rbp+28]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+18]testrsi,rsije short M01_L13xorecx,ecxmov[rbp+18],rcxmovrcx,7FFCE0D84D68movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,1A6AE807CD0movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L13:movrax,rdimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L14call CORINFO_HELP_FAIL_FASTM01_L14:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L15:movecx,16A1movrdx,7FFCE0C64000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFCE0E2DC78]int3M01_L16:call qword ptr [7FFCE15734E0]int3; Total bytes of code 610

Compare Jit Disasm

; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)movrcx,rdxmovrdx,r8movr8,r9cmp[rcx],ecxjmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String); Total bytes of code 17
; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushr12pushrdipushrsipushrbxsubrsp,60learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4movrax,23C2D26E54ECmov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L17movr14d,[rdi+8]testr14d,r14dje near ptr M01_L17testrbx,rbxjne short M01_L00movrbx,7FFEA4A50008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+30],rdxmov dword ptr [rbp+38],80xoredx,edxmov[rbp+20],rdxmov[rbp+28],edxcmpr14d,1jne near ptr M01_L08cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)movrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrdx,r15dlearcx,[rsi+rdx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dimov[rbp+1C],edxmovzxedx,word ptr [rbp+1C]decedxcmpedx,0FEjae short M01_L04movzxedx,word ptr [rbp+1C]movsxrdx,dxcall qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxjmp short M01_L05M01_L04:movedx,[rbp+1C]call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxM01_L05:testr12d,r12djl near ptr M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L06movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L07M01_L06:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L07:lear15d,[r15+r12+1]jmp short M01_L03M01_L08:xorr15d,r15dM01_L09:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFEA4E61408]movr12d,eaxtestr12d,r12djl short M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L10movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L11M01_L10:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L11:addr15d,r12daddr15d,r14djmp short M01_L09M01_L12:cmp dword ptr [rbp+28],0jne short M01_L14movrax,rsimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L13call CORINFO_HELP_FAIL_FASTM01_L13:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L14:movedx,r14dmovecx,[rbp+28]cmpecx,[rbp+38]ja near ptr M01_L18movr8,[rbp+30]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+20]testrsi,rsije short M01_L15xorecx,ecxmov[rbp+20],rcxmovrcx,7FFEA4914DB8movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,22F6A407CD8movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L15:movrax,rdimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L16call CORINFO_HELP_FAIL_FASTM01_L16:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L17:movecx,16A1movrdx,7FFEA47F4000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFEA49BDC78]int3M01_L18:call qword ptr [7FFEA4ED3060]int3; Total bytes of code 667

System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')

Description of detection logic

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 22.330607657133392 > 20.635651568171316.
IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
IsRegressionStdDev: Marked as regression because -19.533480701550356 (T) = (0 -22.051279089043497) / Math.Sqrt((0.04802330264672898 / (14)) + (0.36899131861666284 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.11991782255368702 = (19.69008675900985 - 22.051279089043497) / 19.69008675900985 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.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFBA9C050C0]; System.String.Replace(Char, Char)
; Total bytes of code 21
; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

Compare Jit Disasm

; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char); Total bytes of code 21
; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

Docs

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

Run Information

Architecturex64
OSWindows 10.0.18362
Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
DiffDiff

Regressions in System.Memory.Span<Int32>

BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
IndexOfAnyFourValues - Duration of single invocation811.41 ns893.12 ns1.100.04False
IndexOfAnyFiveValues - Duration of single invocation857.19 ns916.26 ns1.070.08False

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;*'
Details

Payloads

Baseline
Compare

Histogram

System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)

Description of detection logic

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 893.115476054079 > 853.6086389195757.
IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 10/31/2022 10:23:25 PM, 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
IsRegressionStdDev: Marked as regression because -17.655352723675087 (T) = (0 -886.6573219555273) / Math.Sqrt((4.976405318076591 / (14)) + (550.567469208571 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.08955635836868671 = (813.7783008150718 - 886.6573219555273) / 813.7783008150718 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&lt;Int32&gt;.IndexOfAnyFiveValues(Size: 512)
```log

Description of detection logic

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 916.2596480801636 > 884.884366122159.
IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
IsRegressionStdDev: Marked as regression because -14.792582161741155 (T) = (0 -919.5926411095774) / Math.Sqrt((234.02346260062512 / (14)) + (404.93175657466077 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09481762636242623 = (839.9505259747775 - 919.5926411095774) / 839.9505259747775 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
Benchmarking workflow for dotnet/runtime repository

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
     blocks
    (function() {
    function addCopyButtons() {
    document.querySelectorAll('pre code').forEach(function(codeBlock) {
    if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
    codeBlock.parentElement.setAttribute('data-copy-added', 'true');
    var btn = document.createElement('button');
    btn.textContent = 'Copy';
    btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
    btn.onmouseover = function() { this.style.opacity = '1'; };
    btn.onmouseout = function() { this.style.opacity = '0.7'; };
    btn.onclick = function() {
    navigator.clipboard.writeText(codeBlock.textContent).then(function() {
    btn.textContent = 'Copied!';
    setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
    });
    };
    codeBlock.parentElement.style.position = 'relative';
    codeBlock.parentElement.appendChild(btn);
    });
    }
    addCopyButtons();
    // Re-run on dynamic content
    var observer = new MutationObserver(addCopyButtons);
    observer.observe(document.body, { childList: true, subtree: true });
    })();
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    Regressions around IndexOf · Issue #80441 · dotnet/runtime · GitHub
    Skip to content

    Regressions around IndexOf #80441

    Description

    @performanceautofiler

    Run Information

    Architecturex64
    OSWindows 10.0.18362
    Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
    Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
    DiffDiff

    Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

    BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
    Count - Duration of single invocation8.68 ms11.31 ms1.300.05False

    graph
    Test Report

    Repro

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

    Payloads

    Baseline
    Compare

    Histogram

    System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)

    Description of detection logic

    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 11.31371125 > 9.244280525862068.
    IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
    IsRegressionStdDev: Marked as regression because -6.374166673789645 (T) = (0 -9603758.60660944) / Math.Sqrt((8648777551.858488 / (14)) + (541761443840.9534 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09484229454698666 = (8771819.150979357 - 9603758.60660944) / 8771819.150979357 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
    Benchmarking workflow for dotnet/runtime repository

    ### Run Information
    Architecturex64
    OSWindows 10.0.18362
    Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
    Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
    DiffDiff

    Regressions in System.Tests.Perf_String

    BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
    Replace_Char - Duration of single invocation4.17 ns5.58 ns1.340.05FalseTraceTrace
    TrimEnd_CharArr - Duration of single invocation15.10 ns16.24 ns1.080.04FalseTraceTrace
    Replace_Char - Duration of single invocation4.13 ns6.14 ns1.490.04FalseTraceTrace
    Replace_String - Duration of single invocation52.91 ns56.12 ns1.060.17FalseTraceTrace
    Replace_Char - Duration of single invocation19.53 ns22.33 ns1.140.06FalseTraceTrace

    graph
    graph
    graph
    graph
    graph
    Test Report

    Repro

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

    Payloads

    Baseline
    Compare

    Histogram

    System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')

    Description of detection logic

    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.5791697719305775 > 4.373588329296491.
    IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
    IsRegressionStdDev: Marked as regression because -27.243637733037268 (T) = (0 -5.4979369389559425) / Math.Sqrt((0.00019304484897805758 / (14)) + (0.07992415633537059 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.32372669563033424 = (4.15337770032501 - 5.4979369389559425) / 4.15337770032501 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.Replace_Char(System.String, Char, Char)
    mov rcx,rdx
    mov edx,r8d
    movzx r8d,r9w
    movzx edx,dx
    cmp [rcx],ecx
    jmp qword ptr [7FFBA9C250C0]; System.String.Replace(Char, Char)
    ; Total bytes of code 21
    
    ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3A3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

    Compare Jit Disasm

    ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char); Total bytes of code 21
    ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A6B438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

    System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])

    Description of detection logic

    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 16.243533696179 > 15.84953257735199.
    IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
    IsRegressionStdDev: Marked as regression because -13.227699752533349 (T) = (0 -16.421167827143552) / Math.Sqrt((0.08018990762463707 / (14)) + (0.08814426859036918 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.07970713135289936 = (15.208909296141657 - 16.421167827143552) / 15.208909296141657 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.TrimEnd_CharArr(System.String, Char[])
    mov rcx,rdx
    mov rdx,r8
    cmp [rcx],ecx
    jmp qword ptr [7FFCA57154F8]; System.String.TrimEnd(Char[])
    ; Total bytes of code 14
    
    ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFCA5715510]nopaddrsp,28ret; Total bytes of code 74

    Compare Jit Disasm

    ; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])movrcx,rdxmovrdx,r8cmp[rcx],ecxjmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[]); Total bytes of code 14
    ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFEA4995510]nopaddrsp,28ret; Total bytes of code 74

    System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')

    Description of detection logic

    IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
    IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
    IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
    IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
    IsRegressionWindowed: Marked as regression because 6.141896447049398 > 4.345308369149102.
    IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
    IsRegressionStdDev: Marked as regression because -77.67081568675944 (T) = (0 -6.195133441371548) / Math.Sqrt((0.000163412449150792 / (14)) + (0.02276838353402995 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.4972135604471777 = (4.137775401607522 - 6.195133441371548) / 4.137775401607522 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.Replace_Char(System.String, Char, Char)
    mov rcx,rdx
    mov edx,r8d
    movzx r8d,r9w
    movzx edx,dx
    cmp [rcx],ecx
    jmp qword ptr [7FFBA9C550C0]; System.String.Replace(Char, Char)
    ; Total bytes of code 21
    
    ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3D3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

    Compare Jit Disasm

    ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char); Total bytes of code 21
    ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00AAB438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

    System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")

    Description of detection logic

    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 56.12304519478277 > 55.71160747100109.
    IsChangePoint: Marked as a change because one of 11/17/2022 7:01:39 PM, 11/18/2022 3:21:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
    IsRegressionStdDev: Marked as regression because -5.791124591809122 (T) = (0 -56.58363624443871) / Math.Sqrt((2.1664145734713496 / (14)) + (2.5689714504370484 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.05192214047934187 = (53.790707569530355 - 56.58363624443871) / 53.790707569530355 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.Replace_String(System.String, System.String, System.String)
    mov rcx,rdx
    mov rdx,r8
    mov r8,r9
    cmp [rcx],ecx
    jmp qword ptr [7FFCE0E250D8]; System.String.Replace(System.String, System.String)
    ; Total bytes of code 17
    
    ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushrdipushrsipushrbxsubrsp,58learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4mov[rbp+30],raxmovrax,0C6A9C64BB2F3mov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L15movr14d,[rdi+8]testr14d,r14dje near ptr M01_L15testrbx,rbxjne short M01_L00movrbx,7FFCE0EC0008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+28],rdxmov dword ptr [rbp+30],80xoredx,edxmov[rbp+18],rdxmov[rbp+20],edxcmpr14d,1jne near ptr M01_L06cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)movrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dicall qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)testeax,eaxjl near ptr M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L04movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L05M01_L04:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L05:incr15djmp short M01_L03M01_L06:xorr15d,r15dM01_L07:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFCE12D1408]testeax,eaxjl short M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L08movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L09M01_L08:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L09:addr15d,r14djmp short M01_L07M01_L10:cmp dword ptr [rbp+20],0jne short M01_L12movrax,rsimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L11call CORINFO_HELP_FAIL_FASTM01_L11:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L12:movedx,r14dmovecx,[rbp+20]cmpecx,[rbp+30]ja near ptr M01_L16movr8,[rbp+28]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+18]testrsi,rsije short M01_L13xorecx,ecxmov[rbp+18],rcxmovrcx,7FFCE0D84D68movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,1A6AE807CD0movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L13:movrax,rdimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L14call CORINFO_HELP_FAIL_FASTM01_L14:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L15:movecx,16A1movrdx,7FFCE0C64000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFCE0E2DC78]int3M01_L16:call qword ptr [7FFCE15734E0]int3; Total bytes of code 610

    Compare Jit Disasm

    ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)movrcx,rdxmovrdx,r8movr8,r9cmp[rcx],ecxjmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String); Total bytes of code 17
    ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushr12pushrdipushrsipushrbxsubrsp,60learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4movrax,23C2D26E54ECmov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L17movr14d,[rdi+8]testr14d,r14dje near ptr M01_L17testrbx,rbxjne short M01_L00movrbx,7FFEA4A50008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+30],rdxmov dword ptr [rbp+38],80xoredx,edxmov[rbp+20],rdxmov[rbp+28],edxcmpr14d,1jne near ptr M01_L08cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)movrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrdx,r15dlearcx,[rsi+rdx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dimov[rbp+1C],edxmovzxedx,word ptr [rbp+1C]decedxcmpedx,0FEjae short M01_L04movzxedx,word ptr [rbp+1C]movsxrdx,dxcall qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxjmp short M01_L05M01_L04:movedx,[rbp+1C]call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxM01_L05:testr12d,r12djl near ptr M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L06movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L07M01_L06:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L07:lear15d,[r15+r12+1]jmp short M01_L03M01_L08:xorr15d,r15dM01_L09:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFEA4E61408]movr12d,eaxtestr12d,r12djl short M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L10movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L11M01_L10:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L11:addr15d,r12daddr15d,r14djmp short M01_L09M01_L12:cmp dword ptr [rbp+28],0jne short M01_L14movrax,rsimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L13call CORINFO_HELP_FAIL_FASTM01_L13:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L14:movedx,r14dmovecx,[rbp+28]cmpecx,[rbp+38]ja near ptr M01_L18movr8,[rbp+30]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+20]testrsi,rsije short M01_L15xorecx,ecxmov[rbp+20],rcxmovrcx,7FFEA4914DB8movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,22F6A407CD8movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L15:movrax,rdimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L16call CORINFO_HELP_FAIL_FASTM01_L16:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L17:movecx,16A1movrdx,7FFEA47F4000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFEA49BDC78]int3M01_L18:call qword ptr [7FFEA4ED3060]int3; Total bytes of code 667

    System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')

    Description of detection logic

    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 22.330607657133392 > 20.635651568171316.
    IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
    IsRegressionStdDev: Marked as regression because -19.533480701550356 (T) = (0 -22.051279089043497) / Math.Sqrt((0.04802330264672898 / (14)) + (0.36899131861666284 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.11991782255368702 = (19.69008675900985 - 22.051279089043497) / 19.69008675900985 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.Replace_Char(System.String, Char, Char)
    mov rcx,rdx
    mov edx,r8d
    movzx r8d,r9w
    movzx edx,dx
    cmp [rcx],ecx
    jmp qword ptr [7FFBA9C050C0]; System.String.Replace(Char, Char)
    ; Total bytes of code 21
    
    ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

    Compare Jit Disasm

    ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char); Total bytes of code 21
    ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

    Docs

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

    Run Information

    Architecturex64
    OSWindows 10.0.18362
    Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
    Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
    DiffDiff

    Regressions in System.Memory.Span<Int32>

    BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
    IndexOfAnyFourValues - Duration of single invocation811.41 ns893.12 ns1.100.04False
    IndexOfAnyFiveValues - Duration of single invocation857.19 ns916.26 ns1.070.08False

    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;*'
    Details

    Payloads

    Baseline
    Compare

    Histogram

    System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)

    Description of detection logic

    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 893.115476054079 > 853.6086389195757.
    IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 10/31/2022 10:23:25 PM, 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
    IsRegressionStdDev: Marked as regression because -17.655352723675087 (T) = (0 -886.6573219555273) / Math.Sqrt((4.976405318076591 / (14)) + (550.567469208571 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.08955635836868671 = (813.7783008150718 - 886.6573219555273) / 813.7783008150718 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&lt;Int32&gt;.IndexOfAnyFiveValues(Size: 512)
    ```log
    

    Description of detection logic

    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 916.2596480801636 > 884.884366122159.
    IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
    IsRegressionStdDev: Marked as regression because -14.792582161741155 (T) = (0 -919.5926411095774) / Math.Sqrt((234.02346260062512 / (14)) + (404.93175657466077 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09481762636242623 = (839.9505259747775 - 919.5926411095774) / 839.9505259747775 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
    Benchmarking workflow for dotnet/runtime repository

    Metadata

    Metadata

    Assignees

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Regressions around IndexOf · Issue #80441 · dotnet/runtime · GitHub
      Skip to content

      Regressions around IndexOf #80441

      Description

      @performanceautofiler

      Run Information

      Architecturex64
      OSWindows 10.0.18362
      Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
      Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
      DiffDiff

      Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

      BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
      Count - Duration of single invocation8.68 ms11.31 ms1.300.05False

      graph
      Test Report

      Repro

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

      Payloads

      Baseline
      Compare

      Histogram

      System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)

      Description of detection logic

      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 11.31371125 > 9.244280525862068.
      IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
      IsRegressionStdDev: Marked as regression because -6.374166673789645 (T) = (0 -9603758.60660944) / Math.Sqrt((8648777551.858488 / (14)) + (541761443840.9534 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09484229454698666 = (8771819.150979357 - 9603758.60660944) / 8771819.150979357 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
      Benchmarking workflow for dotnet/runtime repository

      ### Run Information
      Architecturex64
      OSWindows 10.0.18362
      Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
      Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
      DiffDiff

      Regressions in System.Tests.Perf_String

      BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
      Replace_Char - Duration of single invocation4.17 ns5.58 ns1.340.05FalseTraceTrace
      TrimEnd_CharArr - Duration of single invocation15.10 ns16.24 ns1.080.04FalseTraceTrace
      Replace_Char - Duration of single invocation4.13 ns6.14 ns1.490.04FalseTraceTrace
      Replace_String - Duration of single invocation52.91 ns56.12 ns1.060.17FalseTraceTrace
      Replace_Char - Duration of single invocation19.53 ns22.33 ns1.140.06FalseTraceTrace

      graph
      graph
      graph
      graph
      graph
      Test Report

      Repro

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

      Payloads

      Baseline
      Compare

      Histogram

      System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')

      Description of detection logic

      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.5791697719305775 > 4.373588329296491.
      IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
      IsRegressionStdDev: Marked as regression because -27.243637733037268 (T) = (0 -5.4979369389559425) / Math.Sqrt((0.00019304484897805758 / (14)) + (0.07992415633537059 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.32372669563033424 = (4.15337770032501 - 5.4979369389559425) / 4.15337770032501 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.Replace_Char(System.String, Char, Char)
      mov rcx,rdx
      mov edx,r8d
      movzx r8d,r9w
      movzx edx,dx
      cmp [rcx],ecx
      jmp qword ptr [7FFBA9C250C0]; System.String.Replace(Char, Char)
      ; Total bytes of code 21
      
      ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3A3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

      Compare Jit Disasm

      ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char); Total bytes of code 21
      ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A6B438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

      System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])

      Description of detection logic

      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 16.243533696179 > 15.84953257735199.
      IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
      IsRegressionStdDev: Marked as regression because -13.227699752533349 (T) = (0 -16.421167827143552) / Math.Sqrt((0.08018990762463707 / (14)) + (0.08814426859036918 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.07970713135289936 = (15.208909296141657 - 16.421167827143552) / 15.208909296141657 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.TrimEnd_CharArr(System.String, Char[])
      mov rcx,rdx
      mov rdx,r8
      cmp [rcx],ecx
      jmp qword ptr [7FFCA57154F8]; System.String.TrimEnd(Char[])
      ; Total bytes of code 14
      
      ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFCA5715510]nopaddrsp,28ret; Total bytes of code 74

      Compare Jit Disasm

      ; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])movrcx,rdxmovrdx,r8cmp[rcx],ecxjmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[]); Total bytes of code 14
      ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFEA4995510]nopaddrsp,28ret; Total bytes of code 74

      System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')

      Description of detection logic

      IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
      IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
      IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
      IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
      IsRegressionWindowed: Marked as regression because 6.141896447049398 > 4.345308369149102.
      IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
      IsRegressionStdDev: Marked as regression because -77.67081568675944 (T) = (0 -6.195133441371548) / Math.Sqrt((0.000163412449150792 / (14)) + (0.02276838353402995 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.4972135604471777 = (4.137775401607522 - 6.195133441371548) / 4.137775401607522 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.Replace_Char(System.String, Char, Char)
      mov rcx,rdx
      mov edx,r8d
      movzx r8d,r9w
      movzx edx,dx
      cmp [rcx],ecx
      jmp qword ptr [7FFBA9C550C0]; System.String.Replace(Char, Char)
      ; Total bytes of code 21
      
      ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3D3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

      Compare Jit Disasm

      ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char); Total bytes of code 21
      ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00AAB438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

      System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")

      Description of detection logic

      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 56.12304519478277 > 55.71160747100109.
      IsChangePoint: Marked as a change because one of 11/17/2022 7:01:39 PM, 11/18/2022 3:21:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
      IsRegressionStdDev: Marked as regression because -5.791124591809122 (T) = (0 -56.58363624443871) / Math.Sqrt((2.1664145734713496 / (14)) + (2.5689714504370484 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.05192214047934187 = (53.790707569530355 - 56.58363624443871) / 53.790707569530355 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.Replace_String(System.String, System.String, System.String)
      mov rcx,rdx
      mov rdx,r8
      mov r8,r9
      cmp [rcx],ecx
      jmp qword ptr [7FFCE0E250D8]; System.String.Replace(System.String, System.String)
      ; Total bytes of code 17
      
      ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushrdipushrsipushrbxsubrsp,58learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4mov[rbp+30],raxmovrax,0C6A9C64BB2F3mov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L15movr14d,[rdi+8]testr14d,r14dje near ptr M01_L15testrbx,rbxjne short M01_L00movrbx,7FFCE0EC0008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+28],rdxmov dword ptr [rbp+30],80xoredx,edxmov[rbp+18],rdxmov[rbp+20],edxcmpr14d,1jne near ptr M01_L06cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)movrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dicall qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)testeax,eaxjl near ptr M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L04movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L05M01_L04:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L05:incr15djmp short M01_L03M01_L06:xorr15d,r15dM01_L07:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFCE12D1408]testeax,eaxjl short M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L08movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L09M01_L08:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L09:addr15d,r14djmp short M01_L07M01_L10:cmp dword ptr [rbp+20],0jne short M01_L12movrax,rsimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L11call CORINFO_HELP_FAIL_FASTM01_L11:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L12:movedx,r14dmovecx,[rbp+20]cmpecx,[rbp+30]ja near ptr M01_L16movr8,[rbp+28]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+18]testrsi,rsije short M01_L13xorecx,ecxmov[rbp+18],rcxmovrcx,7FFCE0D84D68movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,1A6AE807CD0movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L13:movrax,rdimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L14call CORINFO_HELP_FAIL_FASTM01_L14:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L15:movecx,16A1movrdx,7FFCE0C64000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFCE0E2DC78]int3M01_L16:call qword ptr [7FFCE15734E0]int3; Total bytes of code 610

      Compare Jit Disasm

      ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)movrcx,rdxmovrdx,r8movr8,r9cmp[rcx],ecxjmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String); Total bytes of code 17
      ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushr12pushrdipushrsipushrbxsubrsp,60learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4movrax,23C2D26E54ECmov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L17movr14d,[rdi+8]testr14d,r14dje near ptr M01_L17testrbx,rbxjne short M01_L00movrbx,7FFEA4A50008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+30],rdxmov dword ptr [rbp+38],80xoredx,edxmov[rbp+20],rdxmov[rbp+28],edxcmpr14d,1jne near ptr M01_L08cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)movrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrdx,r15dlearcx,[rsi+rdx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dimov[rbp+1C],edxmovzxedx,word ptr [rbp+1C]decedxcmpedx,0FEjae short M01_L04movzxedx,word ptr [rbp+1C]movsxrdx,dxcall qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxjmp short M01_L05M01_L04:movedx,[rbp+1C]call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxM01_L05:testr12d,r12djl near ptr M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L06movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L07M01_L06:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L07:lear15d,[r15+r12+1]jmp short M01_L03M01_L08:xorr15d,r15dM01_L09:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFEA4E61408]movr12d,eaxtestr12d,r12djl short M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L10movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L11M01_L10:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L11:addr15d,r12daddr15d,r14djmp short M01_L09M01_L12:cmp dword ptr [rbp+28],0jne short M01_L14movrax,rsimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L13call CORINFO_HELP_FAIL_FASTM01_L13:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L14:movedx,r14dmovecx,[rbp+28]cmpecx,[rbp+38]ja near ptr M01_L18movr8,[rbp+30]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+20]testrsi,rsije short M01_L15xorecx,ecxmov[rbp+20],rcxmovrcx,7FFEA4914DB8movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,22F6A407CD8movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L15:movrax,rdimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L16call CORINFO_HELP_FAIL_FASTM01_L16:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L17:movecx,16A1movrdx,7FFEA47F4000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFEA49BDC78]int3M01_L18:call qword ptr [7FFEA4ED3060]int3; Total bytes of code 667

      System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')

      Description of detection logic

      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 22.330607657133392 > 20.635651568171316.
      IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
      IsRegressionStdDev: Marked as regression because -19.533480701550356 (T) = (0 -22.051279089043497) / Math.Sqrt((0.04802330264672898 / (14)) + (0.36899131861666284 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.11991782255368702 = (19.69008675900985 - 22.051279089043497) / 19.69008675900985 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.Replace_Char(System.String, Char, Char)
      mov rcx,rdx
      mov edx,r8d
      movzx r8d,r9w
      movzx edx,dx
      cmp [rcx],ecx
      jmp qword ptr [7FFBA9C050C0]; System.String.Replace(Char, Char)
      ; Total bytes of code 21
      
      ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

      Compare Jit Disasm

      ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char); Total bytes of code 21
      ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

      Docs

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

      Run Information

      Architecturex64
      OSWindows 10.0.18362
      Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
      Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
      DiffDiff

      Regressions in System.Memory.Span<Int32>

      BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
      IndexOfAnyFourValues - Duration of single invocation811.41 ns893.12 ns1.100.04False
      IndexOfAnyFiveValues - Duration of single invocation857.19 ns916.26 ns1.070.08False

      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;*'
      Details

      Payloads

      Baseline
      Compare

      Histogram

      System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)

      Description of detection logic

      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 893.115476054079 > 853.6086389195757.
      IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 10/31/2022 10:23:25 PM, 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
      IsRegressionStdDev: Marked as regression because -17.655352723675087 (T) = (0 -886.6573219555273) / Math.Sqrt((4.976405318076591 / (14)) + (550.567469208571 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.08955635836868671 = (813.7783008150718 - 886.6573219555273) / 813.7783008150718 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&lt;Int32&gt;.IndexOfAnyFiveValues(Size: 512)
      ```log
      

      Description of detection logic

      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 916.2596480801636 > 884.884366122159.
      IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
      IsRegressionStdDev: Marked as regression because -14.792582161741155 (T) = (0 -919.5926411095774) / Math.Sqrt((234.02346260062512 / (14)) + (404.93175657466077 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09481762636242623 = (839.9505259747775 - 919.5926411095774) / 839.9505259747775 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
      Benchmarking workflow for dotnet/runtime repository

      Metadata

      Metadata

      Assignees

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Regressions around IndexOf · Issue #80441 · dotnet/runtime · GitHub
        Skip to content

        Regressions around IndexOf #80441

        Description

        @performanceautofiler

        Run Information

        Architecturex64
        OSWindows 10.0.18362
        Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
        Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
        DiffDiff

        Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

        BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
        Count - Duration of single invocation8.68 ms11.31 ms1.300.05False

        graph
        Test Report

        Repro

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

        Payloads

        Baseline
        Compare

        Histogram

        System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)

        Description of detection logic

        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 11.31371125 > 9.244280525862068.
        IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
        IsRegressionStdDev: Marked as regression because -6.374166673789645 (T) = (0 -9603758.60660944) / Math.Sqrt((8648777551.858488 / (14)) + (541761443840.9534 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09484229454698666 = (8771819.150979357 - 9603758.60660944) / 8771819.150979357 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
        Benchmarking workflow for dotnet/runtime repository

        ### Run Information
        Architecturex64
        OSWindows 10.0.18362
        Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
        Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
        DiffDiff

        Regressions in System.Tests.Perf_String

        BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
        Replace_Char - Duration of single invocation4.17 ns5.58 ns1.340.05FalseTraceTrace
        TrimEnd_CharArr - Duration of single invocation15.10 ns16.24 ns1.080.04FalseTraceTrace
        Replace_Char - Duration of single invocation4.13 ns6.14 ns1.490.04FalseTraceTrace
        Replace_String - Duration of single invocation52.91 ns56.12 ns1.060.17FalseTraceTrace
        Replace_Char - Duration of single invocation19.53 ns22.33 ns1.140.06FalseTraceTrace

        graph
        graph
        graph
        graph
        graph
        Test Report

        Repro

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

        Payloads

        Baseline
        Compare

        Histogram

        System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')

        Description of detection logic

        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.5791697719305775 > 4.373588329296491.
        IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
        IsRegressionStdDev: Marked as regression because -27.243637733037268 (T) = (0 -5.4979369389559425) / Math.Sqrt((0.00019304484897805758 / (14)) + (0.07992415633537059 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.32372669563033424 = (4.15337770032501 - 5.4979369389559425) / 4.15337770032501 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.Replace_Char(System.String, Char, Char)
        mov rcx,rdx
        mov edx,r8d
        movzx r8d,r9w
        movzx edx,dx
        cmp [rcx],ecx
        jmp qword ptr [7FFBA9C250C0]; System.String.Replace(Char, Char)
        ; Total bytes of code 21
        
        ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3A3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

        Compare Jit Disasm

        ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char); Total bytes of code 21
        ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A6B438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

        System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])

        Description of detection logic

        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 16.243533696179 > 15.84953257735199.
        IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
        IsRegressionStdDev: Marked as regression because -13.227699752533349 (T) = (0 -16.421167827143552) / Math.Sqrt((0.08018990762463707 / (14)) + (0.08814426859036918 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.07970713135289936 = (15.208909296141657 - 16.421167827143552) / 15.208909296141657 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.TrimEnd_CharArr(System.String, Char[])
        mov rcx,rdx
        mov rdx,r8
        cmp [rcx],ecx
        jmp qword ptr [7FFCA57154F8]; System.String.TrimEnd(Char[])
        ; Total bytes of code 14
        
        ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFCA5715510]nopaddrsp,28ret; Total bytes of code 74

        Compare Jit Disasm

        ; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])movrcx,rdxmovrdx,r8cmp[rcx],ecxjmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[]); Total bytes of code 14
        ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFEA4995510]nopaddrsp,28ret; Total bytes of code 74

        System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')

        Description of detection logic

        IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
        IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
        IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
        IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
        IsRegressionWindowed: Marked as regression because 6.141896447049398 > 4.345308369149102.
        IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
        IsRegressionStdDev: Marked as regression because -77.67081568675944 (T) = (0 -6.195133441371548) / Math.Sqrt((0.000163412449150792 / (14)) + (0.02276838353402995 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.4972135604471777 = (4.137775401607522 - 6.195133441371548) / 4.137775401607522 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.Replace_Char(System.String, Char, Char)
        mov rcx,rdx
        mov edx,r8d
        movzx r8d,r9w
        movzx edx,dx
        cmp [rcx],ecx
        jmp qword ptr [7FFBA9C550C0]; System.String.Replace(Char, Char)
        ; Total bytes of code 21
        
        ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3D3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

        Compare Jit Disasm

        ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char); Total bytes of code 21
        ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00AAB438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

        System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")

        Description of detection logic

        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 56.12304519478277 > 55.71160747100109.
        IsChangePoint: Marked as a change because one of 11/17/2022 7:01:39 PM, 11/18/2022 3:21:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
        IsRegressionStdDev: Marked as regression because -5.791124591809122 (T) = (0 -56.58363624443871) / Math.Sqrt((2.1664145734713496 / (14)) + (2.5689714504370484 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.05192214047934187 = (53.790707569530355 - 56.58363624443871) / 53.790707569530355 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.Replace_String(System.String, System.String, System.String)
        mov rcx,rdx
        mov rdx,r8
        mov r8,r9
        cmp [rcx],ecx
        jmp qword ptr [7FFCE0E250D8]; System.String.Replace(System.String, System.String)
        ; Total bytes of code 17
        
        ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushrdipushrsipushrbxsubrsp,58learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4mov[rbp+30],raxmovrax,0C6A9C64BB2F3mov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L15movr14d,[rdi+8]testr14d,r14dje near ptr M01_L15testrbx,rbxjne short M01_L00movrbx,7FFCE0EC0008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+28],rdxmov dword ptr [rbp+30],80xoredx,edxmov[rbp+18],rdxmov[rbp+20],edxcmpr14d,1jne near ptr M01_L06cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)movrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dicall qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)testeax,eaxjl near ptr M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L04movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L05M01_L04:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L05:incr15djmp short M01_L03M01_L06:xorr15d,r15dM01_L07:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFCE12D1408]testeax,eaxjl short M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L08movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L09M01_L08:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L09:addr15d,r14djmp short M01_L07M01_L10:cmp dword ptr [rbp+20],0jne short M01_L12movrax,rsimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L11call CORINFO_HELP_FAIL_FASTM01_L11:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L12:movedx,r14dmovecx,[rbp+20]cmpecx,[rbp+30]ja near ptr M01_L16movr8,[rbp+28]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+18]testrsi,rsije short M01_L13xorecx,ecxmov[rbp+18],rcxmovrcx,7FFCE0D84D68movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,1A6AE807CD0movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L13:movrax,rdimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L14call CORINFO_HELP_FAIL_FASTM01_L14:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L15:movecx,16A1movrdx,7FFCE0C64000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFCE0E2DC78]int3M01_L16:call qword ptr [7FFCE15734E0]int3; Total bytes of code 610

        Compare Jit Disasm

        ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)movrcx,rdxmovrdx,r8movr8,r9cmp[rcx],ecxjmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String); Total bytes of code 17
        ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushr12pushrdipushrsipushrbxsubrsp,60learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4movrax,23C2D26E54ECmov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L17movr14d,[rdi+8]testr14d,r14dje near ptr M01_L17testrbx,rbxjne short M01_L00movrbx,7FFEA4A50008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+30],rdxmov dword ptr [rbp+38],80xoredx,edxmov[rbp+20],rdxmov[rbp+28],edxcmpr14d,1jne near ptr M01_L08cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)movrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrdx,r15dlearcx,[rsi+rdx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dimov[rbp+1C],edxmovzxedx,word ptr [rbp+1C]decedxcmpedx,0FEjae short M01_L04movzxedx,word ptr [rbp+1C]movsxrdx,dxcall qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxjmp short M01_L05M01_L04:movedx,[rbp+1C]call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxM01_L05:testr12d,r12djl near ptr M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L06movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L07M01_L06:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L07:lear15d,[r15+r12+1]jmp short M01_L03M01_L08:xorr15d,r15dM01_L09:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFEA4E61408]movr12d,eaxtestr12d,r12djl short M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L10movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L11M01_L10:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L11:addr15d,r12daddr15d,r14djmp short M01_L09M01_L12:cmp dword ptr [rbp+28],0jne short M01_L14movrax,rsimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L13call CORINFO_HELP_FAIL_FASTM01_L13:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L14:movedx,r14dmovecx,[rbp+28]cmpecx,[rbp+38]ja near ptr M01_L18movr8,[rbp+30]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+20]testrsi,rsije short M01_L15xorecx,ecxmov[rbp+20],rcxmovrcx,7FFEA4914DB8movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,22F6A407CD8movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L15:movrax,rdimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L16call CORINFO_HELP_FAIL_FASTM01_L16:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L17:movecx,16A1movrdx,7FFEA47F4000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFEA49BDC78]int3M01_L18:call qword ptr [7FFEA4ED3060]int3; Total bytes of code 667

        System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')

        Description of detection logic

        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 22.330607657133392 > 20.635651568171316.
        IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
        IsRegressionStdDev: Marked as regression because -19.533480701550356 (T) = (0 -22.051279089043497) / Math.Sqrt((0.04802330264672898 / (14)) + (0.36899131861666284 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.11991782255368702 = (19.69008675900985 - 22.051279089043497) / 19.69008675900985 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.Replace_Char(System.String, Char, Char)
        mov rcx,rdx
        mov edx,r8d
        movzx r8d,r9w
        movzx edx,dx
        cmp [rcx],ecx
        jmp qword ptr [7FFBA9C050C0]; System.String.Replace(Char, Char)
        ; Total bytes of code 21
        
        ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

        Compare Jit Disasm

        ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char); Total bytes of code 21
        ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

        Docs

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

        Run Information

        Architecturex64
        OSWindows 10.0.18362
        Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
        Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
        DiffDiff

        Regressions in System.Memory.Span<Int32>

        BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
        IndexOfAnyFourValues - Duration of single invocation811.41 ns893.12 ns1.100.04False
        IndexOfAnyFiveValues - Duration of single invocation857.19 ns916.26 ns1.070.08False

        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;*'
        Details

        Payloads

        Baseline
        Compare

        Histogram

        System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)

        Description of detection logic

        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 893.115476054079 > 853.6086389195757.
        IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 10/31/2022 10:23:25 PM, 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
        IsRegressionStdDev: Marked as regression because -17.655352723675087 (T) = (0 -886.6573219555273) / Math.Sqrt((4.976405318076591 / (14)) + (550.567469208571 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.08955635836868671 = (813.7783008150718 - 886.6573219555273) / 813.7783008150718 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&lt;Int32&gt;.IndexOfAnyFiveValues(Size: 512)
        ```log
        

        Description of detection logic

        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 916.2596480801636 > 884.884366122159.
        IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
        IsRegressionStdDev: Marked as regression because -14.792582161741155 (T) = (0 -919.5926411095774) / Math.Sqrt((234.02346260062512 / (14)) + (404.93175657466077 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09481762636242623 = (839.9505259747775 - 919.5926411095774) / 839.9505259747775 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
        Benchmarking workflow for dotnet/runtime repository

        Metadata

        Metadata

        Assignees

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Regressions around IndexOf · Issue #80441 · dotnet/runtime · GitHub
          Skip to content

          Regressions around IndexOf #80441

          Description

          @performanceautofiler

          Run Information

          Architecturex64
          OSWindows 10.0.18362
          Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
          Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
          DiffDiff

          Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

          BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
          Count - Duration of single invocation8.68 ms11.31 ms1.300.05False

          graph
          Test Report

          Repro

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

          Payloads

          Baseline
          Compare

          Histogram

          System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)

          Description of detection logic

          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 11.31371125 > 9.244280525862068.
          IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
          IsRegressionStdDev: Marked as regression because -6.374166673789645 (T) = (0 -9603758.60660944) / Math.Sqrt((8648777551.858488 / (14)) + (541761443840.9534 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09484229454698666 = (8771819.150979357 - 9603758.60660944) / 8771819.150979357 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
          Benchmarking workflow for dotnet/runtime repository

          ### Run Information
          Architecturex64
          OSWindows 10.0.18362
          Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
          Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
          DiffDiff

          Regressions in System.Tests.Perf_String

          BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
          Replace_Char - Duration of single invocation4.17 ns5.58 ns1.340.05FalseTraceTrace
          TrimEnd_CharArr - Duration of single invocation15.10 ns16.24 ns1.080.04FalseTraceTrace
          Replace_Char - Duration of single invocation4.13 ns6.14 ns1.490.04FalseTraceTrace
          Replace_String - Duration of single invocation52.91 ns56.12 ns1.060.17FalseTraceTrace
          Replace_Char - Duration of single invocation19.53 ns22.33 ns1.140.06FalseTraceTrace

          graph
          graph
          graph
          graph
          graph
          Test Report

          Repro

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

          Payloads

          Baseline
          Compare

          Histogram

          System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')

          Description of detection logic

          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.5791697719305775 > 4.373588329296491.
          IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
          IsRegressionStdDev: Marked as regression because -27.243637733037268 (T) = (0 -5.4979369389559425) / Math.Sqrt((0.00019304484897805758 / (14)) + (0.07992415633537059 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.32372669563033424 = (4.15337770032501 - 5.4979369389559425) / 4.15337770032501 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.Replace_Char(System.String, Char, Char)
          mov rcx,rdx
          mov edx,r8d
          movzx r8d,r9w
          movzx edx,dx
          cmp [rcx],ecx
          jmp qword ptr [7FFBA9C250C0]; System.String.Replace(Char, Char)
          ; Total bytes of code 21
          
          ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3A3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

          Compare Jit Disasm

          ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char); Total bytes of code 21
          ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A6B438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

          System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])

          Description of detection logic

          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 16.243533696179 > 15.84953257735199.
          IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
          IsRegressionStdDev: Marked as regression because -13.227699752533349 (T) = (0 -16.421167827143552) / Math.Sqrt((0.08018990762463707 / (14)) + (0.08814426859036918 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.07970713135289936 = (15.208909296141657 - 16.421167827143552) / 15.208909296141657 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.TrimEnd_CharArr(System.String, Char[])
          mov rcx,rdx
          mov rdx,r8
          cmp [rcx],ecx
          jmp qword ptr [7FFCA57154F8]; System.String.TrimEnd(Char[])
          ; Total bytes of code 14
          
          ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFCA5715510]nopaddrsp,28ret; Total bytes of code 74

          Compare Jit Disasm

          ; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])movrcx,rdxmovrdx,r8cmp[rcx],ecxjmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[]); Total bytes of code 14
          ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFEA4995510]nopaddrsp,28ret; Total bytes of code 74

          System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')

          Description of detection logic

          IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
          IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
          IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
          IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
          IsRegressionWindowed: Marked as regression because 6.141896447049398 > 4.345308369149102.
          IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
          IsRegressionStdDev: Marked as regression because -77.67081568675944 (T) = (0 -6.195133441371548) / Math.Sqrt((0.000163412449150792 / (14)) + (0.02276838353402995 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.4972135604471777 = (4.137775401607522 - 6.195133441371548) / 4.137775401607522 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.Replace_Char(System.String, Char, Char)
          mov rcx,rdx
          mov edx,r8d
          movzx r8d,r9w
          movzx edx,dx
          cmp [rcx],ecx
          jmp qword ptr [7FFBA9C550C0]; System.String.Replace(Char, Char)
          ; Total bytes of code 21
          
          ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3D3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

          Compare Jit Disasm

          ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char); Total bytes of code 21
          ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00AAB438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

          System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")

          Description of detection logic

          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 56.12304519478277 > 55.71160747100109.
          IsChangePoint: Marked as a change because one of 11/17/2022 7:01:39 PM, 11/18/2022 3:21:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
          IsRegressionStdDev: Marked as regression because -5.791124591809122 (T) = (0 -56.58363624443871) / Math.Sqrt((2.1664145734713496 / (14)) + (2.5689714504370484 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.05192214047934187 = (53.790707569530355 - 56.58363624443871) / 53.790707569530355 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.Replace_String(System.String, System.String, System.String)
          mov rcx,rdx
          mov rdx,r8
          mov r8,r9
          cmp [rcx],ecx
          jmp qword ptr [7FFCE0E250D8]; System.String.Replace(System.String, System.String)
          ; Total bytes of code 17
          
          ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushrdipushrsipushrbxsubrsp,58learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4mov[rbp+30],raxmovrax,0C6A9C64BB2F3mov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L15movr14d,[rdi+8]testr14d,r14dje near ptr M01_L15testrbx,rbxjne short M01_L00movrbx,7FFCE0EC0008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+28],rdxmov dword ptr [rbp+30],80xoredx,edxmov[rbp+18],rdxmov[rbp+20],edxcmpr14d,1jne near ptr M01_L06cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)movrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dicall qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)testeax,eaxjl near ptr M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L04movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L05M01_L04:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L05:incr15djmp short M01_L03M01_L06:xorr15d,r15dM01_L07:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFCE12D1408]testeax,eaxjl short M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L08movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L09M01_L08:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L09:addr15d,r14djmp short M01_L07M01_L10:cmp dword ptr [rbp+20],0jne short M01_L12movrax,rsimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L11call CORINFO_HELP_FAIL_FASTM01_L11:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L12:movedx,r14dmovecx,[rbp+20]cmpecx,[rbp+30]ja near ptr M01_L16movr8,[rbp+28]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+18]testrsi,rsije short M01_L13xorecx,ecxmov[rbp+18],rcxmovrcx,7FFCE0D84D68movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,1A6AE807CD0movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L13:movrax,rdimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L14call CORINFO_HELP_FAIL_FASTM01_L14:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L15:movecx,16A1movrdx,7FFCE0C64000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFCE0E2DC78]int3M01_L16:call qword ptr [7FFCE15734E0]int3; Total bytes of code 610

          Compare Jit Disasm

          ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)movrcx,rdxmovrdx,r8movr8,r9cmp[rcx],ecxjmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String); Total bytes of code 17
          ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushr12pushrdipushrsipushrbxsubrsp,60learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4movrax,23C2D26E54ECmov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L17movr14d,[rdi+8]testr14d,r14dje near ptr M01_L17testrbx,rbxjne short M01_L00movrbx,7FFEA4A50008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+30],rdxmov dword ptr [rbp+38],80xoredx,edxmov[rbp+20],rdxmov[rbp+28],edxcmpr14d,1jne near ptr M01_L08cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)movrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrdx,r15dlearcx,[rsi+rdx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dimov[rbp+1C],edxmovzxedx,word ptr [rbp+1C]decedxcmpedx,0FEjae short M01_L04movzxedx,word ptr [rbp+1C]movsxrdx,dxcall qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxjmp short M01_L05M01_L04:movedx,[rbp+1C]call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxM01_L05:testr12d,r12djl near ptr M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L06movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L07M01_L06:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L07:lear15d,[r15+r12+1]jmp short M01_L03M01_L08:xorr15d,r15dM01_L09:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFEA4E61408]movr12d,eaxtestr12d,r12djl short M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L10movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L11M01_L10:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L11:addr15d,r12daddr15d,r14djmp short M01_L09M01_L12:cmp dword ptr [rbp+28],0jne short M01_L14movrax,rsimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L13call CORINFO_HELP_FAIL_FASTM01_L13:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L14:movedx,r14dmovecx,[rbp+28]cmpecx,[rbp+38]ja near ptr M01_L18movr8,[rbp+30]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+20]testrsi,rsije short M01_L15xorecx,ecxmov[rbp+20],rcxmovrcx,7FFEA4914DB8movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,22F6A407CD8movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L15:movrax,rdimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L16call CORINFO_HELP_FAIL_FASTM01_L16:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L17:movecx,16A1movrdx,7FFEA47F4000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFEA49BDC78]int3M01_L18:call qword ptr [7FFEA4ED3060]int3; Total bytes of code 667

          System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')

          Description of detection logic

          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 22.330607657133392 > 20.635651568171316.
          IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
          IsRegressionStdDev: Marked as regression because -19.533480701550356 (T) = (0 -22.051279089043497) / Math.Sqrt((0.04802330264672898 / (14)) + (0.36899131861666284 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.11991782255368702 = (19.69008675900985 - 22.051279089043497) / 19.69008675900985 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.Replace_Char(System.String, Char, Char)
          mov rcx,rdx
          mov edx,r8d
          movzx r8d,r9w
          movzx edx,dx
          cmp [rcx],ecx
          jmp qword ptr [7FFBA9C050C0]; System.String.Replace(Char, Char)
          ; Total bytes of code 21
          
          ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

          Compare Jit Disasm

          ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char); Total bytes of code 21
          ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

          Docs

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

          Run Information

          Architecturex64
          OSWindows 10.0.18362
          Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
          Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
          DiffDiff

          Regressions in System.Memory.Span<Int32>

          BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
          IndexOfAnyFourValues - Duration of single invocation811.41 ns893.12 ns1.100.04False
          IndexOfAnyFiveValues - Duration of single invocation857.19 ns916.26 ns1.070.08False

          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;*'
          Details

          Payloads

          Baseline
          Compare

          Histogram

          System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)

          Description of detection logic

          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 893.115476054079 > 853.6086389195757.
          IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 10/31/2022 10:23:25 PM, 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
          IsRegressionStdDev: Marked as regression because -17.655352723675087 (T) = (0 -886.6573219555273) / Math.Sqrt((4.976405318076591 / (14)) + (550.567469208571 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.08955635836868671 = (813.7783008150718 - 886.6573219555273) / 813.7783008150718 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&lt;Int32&gt;.IndexOfAnyFiveValues(Size: 512)
          ```log
          

          Description of detection logic

          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 916.2596480801636 > 884.884366122159.
          IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
          IsRegressionStdDev: Marked as regression because -14.792582161741155 (T) = (0 -919.5926411095774) / Math.Sqrt((234.02346260062512 / (14)) + (404.93175657466077 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09481762636242623 = (839.9505259747775 - 919.5926411095774) / 839.9505259747775 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
          Benchmarking workflow for dotnet/runtime repository

          Metadata

          Metadata

          Assignees

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Regressions around IndexOf · Issue #80441 · dotnet/runtime · GitHub
            Skip to content

            Regressions around IndexOf #80441

            Description

            @performanceautofiler

            Run Information

            Architecturex64
            OSWindows 10.0.18362
            Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
            Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
            DiffDiff

            Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

            BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
            Count - Duration of single invocation8.68 ms11.31 ms1.300.05False

            graph
            Test Report

            Repro

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

            Payloads

            Baseline
            Compare

            Histogram

            System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)

            Description of detection logic

            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 11.31371125 > 9.244280525862068.
            IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
            IsRegressionStdDev: Marked as regression because -6.374166673789645 (T) = (0 -9603758.60660944) / Math.Sqrt((8648777551.858488 / (14)) + (541761443840.9534 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09484229454698666 = (8771819.150979357 - 9603758.60660944) / 8771819.150979357 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
            Benchmarking workflow for dotnet/runtime repository

            ### Run Information
            Architecturex64
            OSWindows 10.0.18362
            Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
            Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
            DiffDiff

            Regressions in System.Tests.Perf_String

            BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
            Replace_Char - Duration of single invocation4.17 ns5.58 ns1.340.05FalseTraceTrace
            TrimEnd_CharArr - Duration of single invocation15.10 ns16.24 ns1.080.04FalseTraceTrace
            Replace_Char - Duration of single invocation4.13 ns6.14 ns1.490.04FalseTraceTrace
            Replace_String - Duration of single invocation52.91 ns56.12 ns1.060.17FalseTraceTrace
            Replace_Char - Duration of single invocation19.53 ns22.33 ns1.140.06FalseTraceTrace

            graph
            graph
            graph
            graph
            graph
            Test Report

            Repro

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

            Payloads

            Baseline
            Compare

            Histogram

            System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')

            Description of detection logic

            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.5791697719305775 > 4.373588329296491.
            IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
            IsRegressionStdDev: Marked as regression because -27.243637733037268 (T) = (0 -5.4979369389559425) / Math.Sqrt((0.00019304484897805758 / (14)) + (0.07992415633537059 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.32372669563033424 = (4.15337770032501 - 5.4979369389559425) / 4.15337770032501 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.Replace_Char(System.String, Char, Char)
            mov rcx,rdx
            mov edx,r8d
            movzx r8d,r9w
            movzx edx,dx
            cmp [rcx],ecx
            jmp qword ptr [7FFBA9C250C0]; System.String.Replace(Char, Char)
            ; Total bytes of code 21
            
            ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3A3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

            Compare Jit Disasm

            ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char); Total bytes of code 21
            ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A6B438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

            System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])

            Description of detection logic

            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 16.243533696179 > 15.84953257735199.
            IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
            IsRegressionStdDev: Marked as regression because -13.227699752533349 (T) = (0 -16.421167827143552) / Math.Sqrt((0.08018990762463707 / (14)) + (0.08814426859036918 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.07970713135289936 = (15.208909296141657 - 16.421167827143552) / 15.208909296141657 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.TrimEnd_CharArr(System.String, Char[])
            mov rcx,rdx
            mov rdx,r8
            cmp [rcx],ecx
            jmp qword ptr [7FFCA57154F8]; System.String.TrimEnd(Char[])
            ; Total bytes of code 14
            
            ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFCA5715510]nopaddrsp,28ret; Total bytes of code 74

            Compare Jit Disasm

            ; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])movrcx,rdxmovrdx,r8cmp[rcx],ecxjmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[]); Total bytes of code 14
            ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFEA4995510]nopaddrsp,28ret; Total bytes of code 74

            System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')

            Description of detection logic

            IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
            IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
            IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
            IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
            IsRegressionWindowed: Marked as regression because 6.141896447049398 > 4.345308369149102.
            IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
            IsRegressionStdDev: Marked as regression because -77.67081568675944 (T) = (0 -6.195133441371548) / Math.Sqrt((0.000163412449150792 / (14)) + (0.02276838353402995 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.4972135604471777 = (4.137775401607522 - 6.195133441371548) / 4.137775401607522 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.Replace_Char(System.String, Char, Char)
            mov rcx,rdx
            mov edx,r8d
            movzx r8d,r9w
            movzx edx,dx
            cmp [rcx],ecx
            jmp qword ptr [7FFBA9C550C0]; System.String.Replace(Char, Char)
            ; Total bytes of code 21
            
            ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3D3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

            Compare Jit Disasm

            ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char); Total bytes of code 21
            ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00AAB438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

            System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")

            Description of detection logic

            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 56.12304519478277 > 55.71160747100109.
            IsChangePoint: Marked as a change because one of 11/17/2022 7:01:39 PM, 11/18/2022 3:21:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
            IsRegressionStdDev: Marked as regression because -5.791124591809122 (T) = (0 -56.58363624443871) / Math.Sqrt((2.1664145734713496 / (14)) + (2.5689714504370484 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.05192214047934187 = (53.790707569530355 - 56.58363624443871) / 53.790707569530355 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.Replace_String(System.String, System.String, System.String)
            mov rcx,rdx
            mov rdx,r8
            mov r8,r9
            cmp [rcx],ecx
            jmp qword ptr [7FFCE0E250D8]; System.String.Replace(System.String, System.String)
            ; Total bytes of code 17
            
            ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushrdipushrsipushrbxsubrsp,58learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4mov[rbp+30],raxmovrax,0C6A9C64BB2F3mov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L15movr14d,[rdi+8]testr14d,r14dje near ptr M01_L15testrbx,rbxjne short M01_L00movrbx,7FFCE0EC0008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+28],rdxmov dword ptr [rbp+30],80xoredx,edxmov[rbp+18],rdxmov[rbp+20],edxcmpr14d,1jne near ptr M01_L06cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)movrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dicall qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)testeax,eaxjl near ptr M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L04movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L05M01_L04:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L05:incr15djmp short M01_L03M01_L06:xorr15d,r15dM01_L07:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFCE12D1408]testeax,eaxjl short M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L08movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L09M01_L08:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L09:addr15d,r14djmp short M01_L07M01_L10:cmp dword ptr [rbp+20],0jne short M01_L12movrax,rsimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L11call CORINFO_HELP_FAIL_FASTM01_L11:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L12:movedx,r14dmovecx,[rbp+20]cmpecx,[rbp+30]ja near ptr M01_L16movr8,[rbp+28]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+18]testrsi,rsije short M01_L13xorecx,ecxmov[rbp+18],rcxmovrcx,7FFCE0D84D68movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,1A6AE807CD0movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L13:movrax,rdimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L14call CORINFO_HELP_FAIL_FASTM01_L14:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L15:movecx,16A1movrdx,7FFCE0C64000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFCE0E2DC78]int3M01_L16:call qword ptr [7FFCE15734E0]int3; Total bytes of code 610

            Compare Jit Disasm

            ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)movrcx,rdxmovrdx,r8movr8,r9cmp[rcx],ecxjmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String); Total bytes of code 17
            ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushr12pushrdipushrsipushrbxsubrsp,60learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4movrax,23C2D26E54ECmov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L17movr14d,[rdi+8]testr14d,r14dje near ptr M01_L17testrbx,rbxjne short M01_L00movrbx,7FFEA4A50008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+30],rdxmov dword ptr [rbp+38],80xoredx,edxmov[rbp+20],rdxmov[rbp+28],edxcmpr14d,1jne near ptr M01_L08cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)movrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrdx,r15dlearcx,[rsi+rdx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dimov[rbp+1C],edxmovzxedx,word ptr [rbp+1C]decedxcmpedx,0FEjae short M01_L04movzxedx,word ptr [rbp+1C]movsxrdx,dxcall qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxjmp short M01_L05M01_L04:movedx,[rbp+1C]call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxM01_L05:testr12d,r12djl near ptr M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L06movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L07M01_L06:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L07:lear15d,[r15+r12+1]jmp short M01_L03M01_L08:xorr15d,r15dM01_L09:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFEA4E61408]movr12d,eaxtestr12d,r12djl short M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L10movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L11M01_L10:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L11:addr15d,r12daddr15d,r14djmp short M01_L09M01_L12:cmp dword ptr [rbp+28],0jne short M01_L14movrax,rsimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L13call CORINFO_HELP_FAIL_FASTM01_L13:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L14:movedx,r14dmovecx,[rbp+28]cmpecx,[rbp+38]ja near ptr M01_L18movr8,[rbp+30]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+20]testrsi,rsije short M01_L15xorecx,ecxmov[rbp+20],rcxmovrcx,7FFEA4914DB8movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,22F6A407CD8movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L15:movrax,rdimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L16call CORINFO_HELP_FAIL_FASTM01_L16:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L17:movecx,16A1movrdx,7FFEA47F4000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFEA49BDC78]int3M01_L18:call qword ptr [7FFEA4ED3060]int3; Total bytes of code 667

            System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')

            Description of detection logic

            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 22.330607657133392 > 20.635651568171316.
            IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
            IsRegressionStdDev: Marked as regression because -19.533480701550356 (T) = (0 -22.051279089043497) / Math.Sqrt((0.04802330264672898 / (14)) + (0.36899131861666284 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.11991782255368702 = (19.69008675900985 - 22.051279089043497) / 19.69008675900985 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.Replace_Char(System.String, Char, Char)
            mov rcx,rdx
            mov edx,r8d
            movzx r8d,r9w
            movzx edx,dx
            cmp [rcx],ecx
            jmp qword ptr [7FFBA9C050C0]; System.String.Replace(Char, Char)
            ; Total bytes of code 21
            
            ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

            Compare Jit Disasm

            ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char); Total bytes of code 21
            ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

            Docs

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

            Run Information

            Architecturex64
            OSWindows 10.0.18362
            Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
            Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
            DiffDiff

            Regressions in System.Memory.Span<Int32>

            BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
            IndexOfAnyFourValues - Duration of single invocation811.41 ns893.12 ns1.100.04False
            IndexOfAnyFiveValues - Duration of single invocation857.19 ns916.26 ns1.070.08False

            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;*'
            Details

            Payloads

            Baseline
            Compare

            Histogram

            System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)

            Description of detection logic

            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 893.115476054079 > 853.6086389195757.
            IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 10/31/2022 10:23:25 PM, 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
            IsRegressionStdDev: Marked as regression because -17.655352723675087 (T) = (0 -886.6573219555273) / Math.Sqrt((4.976405318076591 / (14)) + (550.567469208571 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.08955635836868671 = (813.7783008150718 - 886.6573219555273) / 813.7783008150718 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&lt;Int32&gt;.IndexOfAnyFiveValues(Size: 512)
            ```log
            

            Description of detection logic

            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 916.2596480801636 > 884.884366122159.
            IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
            IsRegressionStdDev: Marked as regression because -14.792582161741155 (T) = (0 -919.5926411095774) / Math.Sqrt((234.02346260062512 / (14)) + (404.93175657466077 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09481762636242623 = (839.9505259747775 - 919.5926411095774) / 839.9505259747775 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
            Benchmarking workflow for dotnet/runtime repository

            Metadata

            Metadata

            Assignees

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Regressions around IndexOf · Issue #80441 · dotnet/runtime · GitHub
              Skip to content

              Regressions around IndexOf #80441

              Description

              @performanceautofiler

              Run Information

              Architecturex64
              OSWindows 10.0.18362
              Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
              Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
              DiffDiff

              Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

              BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
              Count - Duration of single invocation8.68 ms11.31 ms1.300.05False

              graph
              Test Report

              Repro

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

              Payloads

              Baseline
              Compare

              Histogram

              System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)

              Description of detection logic

              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 11.31371125 > 9.244280525862068.
              IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
              IsRegressionStdDev: Marked as regression because -6.374166673789645 (T) = (0 -9603758.60660944) / Math.Sqrt((8648777551.858488 / (14)) + (541761443840.9534 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09484229454698666 = (8771819.150979357 - 9603758.60660944) / 8771819.150979357 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
              Benchmarking workflow for dotnet/runtime repository

              ### Run Information
              Architecturex64
              OSWindows 10.0.18362
              Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
              Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
              DiffDiff

              Regressions in System.Tests.Perf_String

              BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
              Replace_Char - Duration of single invocation4.17 ns5.58 ns1.340.05FalseTraceTrace
              TrimEnd_CharArr - Duration of single invocation15.10 ns16.24 ns1.080.04FalseTraceTrace
              Replace_Char - Duration of single invocation4.13 ns6.14 ns1.490.04FalseTraceTrace
              Replace_String - Duration of single invocation52.91 ns56.12 ns1.060.17FalseTraceTrace
              Replace_Char - Duration of single invocation19.53 ns22.33 ns1.140.06FalseTraceTrace

              graph
              graph
              graph
              graph
              graph
              Test Report

              Repro

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

              Payloads

              Baseline
              Compare

              Histogram

              System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')

              Description of detection logic

              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.5791697719305775 > 4.373588329296491.
              IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
              IsRegressionStdDev: Marked as regression because -27.243637733037268 (T) = (0 -5.4979369389559425) / Math.Sqrt((0.00019304484897805758 / (14)) + (0.07992415633537059 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.32372669563033424 = (4.15337770032501 - 5.4979369389559425) / 4.15337770032501 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.Replace_Char(System.String, Char, Char)
              mov rcx,rdx
              mov edx,r8d
              movzx r8d,r9w
              movzx edx,dx
              cmp [rcx],ecx
              jmp qword ptr [7FFBA9C250C0]; System.String.Replace(Char, Char)
              ; Total bytes of code 21
              
              ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3A3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

              Compare Jit Disasm

              ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char); Total bytes of code 21
              ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A6B438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

              System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])

              Description of detection logic

              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 16.243533696179 > 15.84953257735199.
              IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
              IsRegressionStdDev: Marked as regression because -13.227699752533349 (T) = (0 -16.421167827143552) / Math.Sqrt((0.08018990762463707 / (14)) + (0.08814426859036918 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.07970713135289936 = (15.208909296141657 - 16.421167827143552) / 15.208909296141657 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.TrimEnd_CharArr(System.String, Char[])
              mov rcx,rdx
              mov rdx,r8
              cmp [rcx],ecx
              jmp qword ptr [7FFCA57154F8]; System.String.TrimEnd(Char[])
              ; Total bytes of code 14
              
              ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFCA5715510]nopaddrsp,28ret; Total bytes of code 74

              Compare Jit Disasm

              ; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])movrcx,rdxmovrdx,r8cmp[rcx],ecxjmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[]); Total bytes of code 14
              ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFEA4995510]nopaddrsp,28ret; Total bytes of code 74

              System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')

              Description of detection logic

              IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
              IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
              IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
              IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
              IsRegressionWindowed: Marked as regression because 6.141896447049398 > 4.345308369149102.
              IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
              IsRegressionStdDev: Marked as regression because -77.67081568675944 (T) = (0 -6.195133441371548) / Math.Sqrt((0.000163412449150792 / (14)) + (0.02276838353402995 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.4972135604471777 = (4.137775401607522 - 6.195133441371548) / 4.137775401607522 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.Replace_Char(System.String, Char, Char)
              mov rcx,rdx
              mov edx,r8d
              movzx r8d,r9w
              movzx edx,dx
              cmp [rcx],ecx
              jmp qword ptr [7FFBA9C550C0]; System.String.Replace(Char, Char)
              ; Total bytes of code 21
              
              ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3D3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

              Compare Jit Disasm

              ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char); Total bytes of code 21
              ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00AAB438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

              System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")

              Description of detection logic

              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 56.12304519478277 > 55.71160747100109.
              IsChangePoint: Marked as a change because one of 11/17/2022 7:01:39 PM, 11/18/2022 3:21:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
              IsRegressionStdDev: Marked as regression because -5.791124591809122 (T) = (0 -56.58363624443871) / Math.Sqrt((2.1664145734713496 / (14)) + (2.5689714504370484 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.05192214047934187 = (53.790707569530355 - 56.58363624443871) / 53.790707569530355 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.Replace_String(System.String, System.String, System.String)
              mov rcx,rdx
              mov rdx,r8
              mov r8,r9
              cmp [rcx],ecx
              jmp qword ptr [7FFCE0E250D8]; System.String.Replace(System.String, System.String)
              ; Total bytes of code 17
              
              ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushrdipushrsipushrbxsubrsp,58learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4mov[rbp+30],raxmovrax,0C6A9C64BB2F3mov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L15movr14d,[rdi+8]testr14d,r14dje near ptr M01_L15testrbx,rbxjne short M01_L00movrbx,7FFCE0EC0008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+28],rdxmov dword ptr [rbp+30],80xoredx,edxmov[rbp+18],rdxmov[rbp+20],edxcmpr14d,1jne near ptr M01_L06cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)movrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dicall qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)testeax,eaxjl near ptr M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L04movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L05M01_L04:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L05:incr15djmp short M01_L03M01_L06:xorr15d,r15dM01_L07:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFCE12D1408]testeax,eaxjl short M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L08movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L09M01_L08:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L09:addr15d,r14djmp short M01_L07M01_L10:cmp dword ptr [rbp+20],0jne short M01_L12movrax,rsimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L11call CORINFO_HELP_FAIL_FASTM01_L11:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L12:movedx,r14dmovecx,[rbp+20]cmpecx,[rbp+30]ja near ptr M01_L16movr8,[rbp+28]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+18]testrsi,rsije short M01_L13xorecx,ecxmov[rbp+18],rcxmovrcx,7FFCE0D84D68movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,1A6AE807CD0movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L13:movrax,rdimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L14call CORINFO_HELP_FAIL_FASTM01_L14:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L15:movecx,16A1movrdx,7FFCE0C64000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFCE0E2DC78]int3M01_L16:call qword ptr [7FFCE15734E0]int3; Total bytes of code 610

              Compare Jit Disasm

              ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)movrcx,rdxmovrdx,r8movr8,r9cmp[rcx],ecxjmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String); Total bytes of code 17
              ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushr12pushrdipushrsipushrbxsubrsp,60learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4movrax,23C2D26E54ECmov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L17movr14d,[rdi+8]testr14d,r14dje near ptr M01_L17testrbx,rbxjne short M01_L00movrbx,7FFEA4A50008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+30],rdxmov dword ptr [rbp+38],80xoredx,edxmov[rbp+20],rdxmov[rbp+28],edxcmpr14d,1jne near ptr M01_L08cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)movrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrdx,r15dlearcx,[rsi+rdx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dimov[rbp+1C],edxmovzxedx,word ptr [rbp+1C]decedxcmpedx,0FEjae short M01_L04movzxedx,word ptr [rbp+1C]movsxrdx,dxcall qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxjmp short M01_L05M01_L04:movedx,[rbp+1C]call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxM01_L05:testr12d,r12djl near ptr M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L06movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L07M01_L06:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L07:lear15d,[r15+r12+1]jmp short M01_L03M01_L08:xorr15d,r15dM01_L09:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFEA4E61408]movr12d,eaxtestr12d,r12djl short M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L10movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L11M01_L10:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L11:addr15d,r12daddr15d,r14djmp short M01_L09M01_L12:cmp dword ptr [rbp+28],0jne short M01_L14movrax,rsimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L13call CORINFO_HELP_FAIL_FASTM01_L13:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L14:movedx,r14dmovecx,[rbp+28]cmpecx,[rbp+38]ja near ptr M01_L18movr8,[rbp+30]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+20]testrsi,rsije short M01_L15xorecx,ecxmov[rbp+20],rcxmovrcx,7FFEA4914DB8movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,22F6A407CD8movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L15:movrax,rdimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L16call CORINFO_HELP_FAIL_FASTM01_L16:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L17:movecx,16A1movrdx,7FFEA47F4000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFEA49BDC78]int3M01_L18:call qword ptr [7FFEA4ED3060]int3; Total bytes of code 667

              System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')

              Description of detection logic

              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 22.330607657133392 > 20.635651568171316.
              IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
              IsRegressionStdDev: Marked as regression because -19.533480701550356 (T) = (0 -22.051279089043497) / Math.Sqrt((0.04802330264672898 / (14)) + (0.36899131861666284 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.11991782255368702 = (19.69008675900985 - 22.051279089043497) / 19.69008675900985 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.Replace_Char(System.String, Char, Char)
              mov rcx,rdx
              mov edx,r8d
              movzx r8d,r9w
              movzx edx,dx
              cmp [rcx],ecx
              jmp qword ptr [7FFBA9C050C0]; System.String.Replace(Char, Char)
              ; Total bytes of code 21
              
              ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

              Compare Jit Disasm

              ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char); Total bytes of code 21
              ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

              Docs

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

              Run Information

              Architecturex64
              OSWindows 10.0.18362
              Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
              Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
              DiffDiff

              Regressions in System.Memory.Span<Int32>

              BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
              IndexOfAnyFourValues - Duration of single invocation811.41 ns893.12 ns1.100.04False
              IndexOfAnyFiveValues - Duration of single invocation857.19 ns916.26 ns1.070.08False

              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;*'
              Details

              Payloads

              Baseline
              Compare

              Histogram

              System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)

              Description of detection logic

              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 893.115476054079 > 853.6086389195757.
              IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 10/31/2022 10:23:25 PM, 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
              IsRegressionStdDev: Marked as regression because -17.655352723675087 (T) = (0 -886.6573219555273) / Math.Sqrt((4.976405318076591 / (14)) + (550.567469208571 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.08955635836868671 = (813.7783008150718 - 886.6573219555273) / 813.7783008150718 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&lt;Int32&gt;.IndexOfAnyFiveValues(Size: 512)
              ```log
              

              Description of detection logic

              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 916.2596480801636 > 884.884366122159.
              IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
              IsRegressionStdDev: Marked as regression because -14.792582161741155 (T) = (0 -919.5926411095774) / Math.Sqrt((234.02346260062512 / (14)) + (404.93175657466077 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09481762636242623 = (839.9505259747775 - 919.5926411095774) / 839.9505259747775 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
              Benchmarking workflow for dotnet/runtime repository

              Metadata

              Metadata

              Assignees

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Regressions around IndexOf · Issue #80441 · dotnet/runtime · GitHub
                Skip to content

                Regressions around IndexOf #80441

                Description

                @performanceautofiler

                Run Information

                Architecturex64
                OSWindows 10.0.18362
                Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
                Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
                DiffDiff

                Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

                BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
                Count - Duration of single invocation8.68 ms11.31 ms1.300.05False

                graph
                Test Report

                Repro

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

                Payloads

                Baseline
                Compare

                Histogram

                System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)

                Description of detection logic

                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 11.31371125 > 9.244280525862068.
                IsChangePoint: Marked as a change because one of 10/27/2022 12:34:03 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
                IsRegressionStdDev: Marked as regression because -6.374166673789645 (T) = (0 -9603758.60660944) / Math.Sqrt((8648777551.858488 / (14)) + (541761443840.9534 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09484229454698666 = (8771819.150979357 - 9603758.60660944) / 8771819.150979357 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
                Benchmarking workflow for dotnet/runtime repository

                ### Run Information
                Architecturex64
                OSWindows 10.0.18362
                Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
                Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
                DiffDiff

                Regressions in System.Tests.Perf_String

                BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
                Replace_Char - Duration of single invocation4.17 ns5.58 ns1.340.05FalseTraceTrace
                TrimEnd_CharArr - Duration of single invocation15.10 ns16.24 ns1.080.04FalseTraceTrace
                Replace_Char - Duration of single invocation4.13 ns6.14 ns1.490.04FalseTraceTrace
                Replace_String - Duration of single invocation52.91 ns56.12 ns1.060.17FalseTraceTrace
                Replace_Char - Duration of single invocation19.53 ns22.33 ns1.140.06FalseTraceTrace

                graph
                graph
                graph
                graph
                graph
                Test Report

                Repro

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

                Payloads

                Baseline
                Compare

                Histogram

                System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')

                Description of detection logic

                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.5791697719305775 > 4.373588329296491.
                IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
                IsRegressionStdDev: Marked as regression because -27.243637733037268 (T) = (0 -5.4979369389559425) / Math.Sqrt((0.00019304484897805758 / (14)) + (0.07992415633537059 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.32372669563033424 = (4.15337770032501 - 5.4979369389559425) / 4.15337770032501 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.Replace_Char(System.String, Char, Char)
                mov rcx,rdx
                mov edx,r8d
                movzx r8d,r9w
                movzx edx,dx
                cmp [rcx],ecx
                jmp qword ptr [7FFBA9C250C0]; System.String.Replace(Char, Char)
                ; Total bytes of code 21
                
                ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3A3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

                Compare Jit Disasm

                ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char); Total bytes of code 21
                ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A6B438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

                System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])

                Description of detection logic

                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 16.243533696179 > 15.84953257735199.
                IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
                IsRegressionStdDev: Marked as regression because -13.227699752533349 (T) = (0 -16.421167827143552) / Math.Sqrt((0.08018990762463707 / (14)) + (0.08814426859036918 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.07970713135289936 = (15.208909296141657 - 16.421167827143552) / 15.208909296141657 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.TrimEnd_CharArr(System.String, Char[])
                mov rcx,rdx
                mov rdx,r8
                cmp [rcx],ecx
                jmp qword ptr [7FFCA57154F8]; System.String.TrimEnd(Char[])
                ; Total bytes of code 14
                
                ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFCA5715510]nopaddrsp,28ret; Total bytes of code 74

                Compare Jit Disasm

                ; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])movrcx,rdxmovrdx,r8cmp[rcx],ecxjmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[]); Total bytes of code 14
                ; System.String.TrimEnd(Char[])subrsp,28xoreax,eaxmov[rsp+20],raxtestrdx,rdxje short M01_L00movr8d,[rdx+8]testr8d,r8dje short M01_L00addrdx,10mov[rsp+20],rdxmovrdx,[rsp+20]movr9d,2call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)nopaddrsp,28retM01_L00:movedx,2call qword ptr [7FFEA4995510]nopaddrsp,28ret; Total bytes of code 74

                System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')

                Description of detection logic

                IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
                IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
                IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
                IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
                IsRegressionWindowed: Marked as regression because 6.141896447049398 > 4.345308369149102.
                IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
                IsRegressionStdDev: Marked as regression because -77.67081568675944 (T) = (0 -6.195133441371548) / Math.Sqrt((0.000163412449150792 / (14)) + (0.02276838353402995 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.4972135604471777 = (4.137775401607522 - 6.195133441371548) / 4.137775401607522 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.Replace_Char(System.String, Char, Char)
                mov rcx,rdx
                mov edx,r8d
                movzx r8d,r9w
                movzx edx,dx
                cmp [rcx],ecx
                jmp qword ptr [7FFBA9C550C0]; System.String.Replace(Char, Char)
                ; Total bytes of code 21
                
                ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA3D3000]movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

                Compare Jit Disasm

                ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char); Total bytes of code 21
                ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00AAB438]movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

                System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")

                Description of detection logic

                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 56.12304519478277 > 55.71160747100109.
                IsChangePoint: Marked as a change because one of 11/17/2022 7:01:39 PM, 11/18/2022 3:21:53 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
                IsRegressionStdDev: Marked as regression because -5.791124591809122 (T) = (0 -56.58363624443871) / Math.Sqrt((2.1664145734713496 / (14)) + (2.5689714504370484 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.05192214047934187 = (53.790707569530355 - 56.58363624443871) / 53.790707569530355 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.Replace_String(System.String, System.String, System.String)
                mov rcx,rdx
                mov rdx,r8
                mov r8,r9
                cmp [rcx],ecx
                jmp qword ptr [7FFCE0E250D8]; System.String.Replace(System.String, System.String)
                ; Total bytes of code 17
                
                ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushrdipushrsipushrbxsubrsp,58learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4mov[rbp+30],raxmovrax,0C6A9C64BB2F3mov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L15movr14d,[rdi+8]testr14d,r14dje near ptr M01_L15testrbx,rbxjne short M01_L00movrbx,7FFCE0EC0008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+28],rdxmov dword ptr [rbp+30],80xoredx,edxmov[rbp+18],rdxmov[rbp+20],edxcmpr14d,1jne near ptr M01_L06cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)movrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dicall qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)testeax,eaxjl near ptr M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L04movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L05M01_L04:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L05:incr15djmp short M01_L03M01_L06:xorr15d,r15dM01_L07:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFCE12D1408]testeax,eaxjl short M01_L10addr15d,eaxmovedx,r15dmovecx,[rbp+20]movrax,[rbp+28]movr8d,[rbp+30]cmpecx,r8djae short M01_L08movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+20],ecxjmp short M01_L09M01_L08:learcx,[rbp+18]call qword ptr [7FFCE17ABC30]M01_L09:addr15d,r14djmp short M01_L07M01_L10:cmp dword ptr [rbp+20],0jne short M01_L12movrax,rsimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L11call CORINFO_HELP_FAIL_FASTM01_L11:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L12:movedx,r14dmovecx,[rbp+20]cmpecx,[rbp+30]ja near ptr M01_L16movr8,[rbp+28]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+18]testrsi,rsije short M01_L13xorecx,ecxmov[rbp+18],rcxmovrcx,7FFCE0D84D68movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,1A6AE807CD0movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L13:movrax,rdimovrcx,0C6A9C64BB2F3cmp[rbp],rcxje short M01_L14call CORINFO_HELP_FAIL_FASTM01_L14:noplearsp,[rbp+38]poprbxpoprsipoprdipopr14popr15poprbpretM01_L15:movecx,16A1movrdx,7FFCE0C64000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFCE0E2DC78]int3M01_L16:call qword ptr [7FFCE15734E0]int3; Total bytes of code 610

                Compare Jit Disasm

                ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)movrcx,rdxmovrdx,r8movr8,r9cmp[rcx],ecxjmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String); Total bytes of code 17
                ; System.String.Replace(System.String, System.String)pushrbppushr15pushr14pushr12pushrdipushrsipushrbxsubrsp,60learbp,[rsp+20]xoreax,eaxmov[rbp+8],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+10],xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4movrax,23C2D26E54ECmov[rbp],raxmovrsi,rcxmovrdi,rdxmovrbx,r8testrdi,rdije near ptr M01_L17movr14d,[rdi+8]testr14d,r14dje near ptr M01_L17testrbx,rbxjne short M01_L00movrbx,7FFEA4A50008M01_L00:test[rsp],espsubrsp,200leardx,[rsp+20]mov[rbp+30],rdxmov dword ptr [rbp+38],80xoredx,edxmov[rbp+20],rdxmov[rbp+28],edxcmpr14d,1jne near ptr M01_L08cmp dword ptr [rbx+8],1jne short M01_L02movzxedx,word ptr [rdi+0C]movzxr8d,word ptr [rbx+0C]movrcx,rsicall qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)movrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L01call CORINFO_HELP_FAIL_FASTM01_L01:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L02:movzxedi,word ptr [rdi+0C]xorr15d,r15dM01_L03:movsxdrdx,r15dlearcx,[rsi+rdx*2+0C]movr8d,[rsi+8]subr8d,r15dmovsxrdx,dimov[rbp+1C],edxmovzxedx,word ptr [rbp+1C]decedxcmpedx,0FEjae short M01_L04movzxedx,word ptr [rbp+1C]movsxrdx,dxcall qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxjmp short M01_L05M01_L04:movedx,[rbp+1C]call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movr12d,eaxM01_L05:testr12d,r12djl near ptr M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L06movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L07M01_L06:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L07:lear15d,[r15+r12+1]jmp short M01_L03M01_L08:xorr15d,r15dM01_L09:movsxdrcx,r15dlearcx,[rsi+rcx*2+0C]movedx,[rsi+8]subedx,r15dlear8,[rdi+0C]movr9d,r14dcall qword ptr [7FFEA4E61408]movr12d,eaxtestr12d,r12djl short M01_L12leaedx,[r15+r12]movecx,[rbp+28]movrax,[rbp+30]movr8d,[rbp+38]cmpecx,r8djae short M01_L10movr8d,ecxmov[rax+r8*4],edxincecxmov[rbp+28],ecxjmp short M01_L11M01_L10:learcx,[rbp+20]call qword ptr [7FFEA532DC48]M01_L11:addr15d,r12daddr15d,r14djmp short M01_L09M01_L12:cmp dword ptr [rbp+28],0jne short M01_L14movrax,rsimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L13call CORINFO_HELP_FAIL_FASTM01_L13:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L14:movedx,r14dmovecx,[rbp+28]cmpecx,[rbp+38]ja near ptr M01_L18movr8,[rbp+30]mov[rbp+8],r8mov[rbp+10],ecxmovrcx,rsimovr8,rbxlear9,[rbp+8]call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)movrdi,raxmovrsi,[rbp+20]testrsi,rsije short M01_L15xorecx,ecxmov[rbp+20],rcxmovrcx,7FFEA4914DB8movedx,31call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASSmovrcx,22F6A407CD8movrcx,[rcx]movrdx,rsixorr8d,r8dcmp[rcx],ecxcall qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)M01_L15:movrax,rdimovrcx,23C2D26E54ECcmp[rbp],rcxje short M01_L16call CORINFO_HELP_FAIL_FASTM01_L16:noplearsp,[rbp+40]poprbxpoprsipoprdipopr12popr14popr15poprbpretM01_L17:movecx,16A1movrdx,7FFEA47F4000call CORINFO_HELP_STRCNSmovrdx,raxmovrcx,rdicall qword ptr [7FFEA49BDC78]int3M01_L18:call qword ptr [7FFEA4ED3060]int3; Total bytes of code 667

                System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')

                Description of detection logic

                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 22.330607657133392 > 20.635651568171316.
                IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
                IsRegressionStdDev: Marked as regression because -19.533480701550356 (T) = (0 -22.051279089043497) / Math.Sqrt((0.04802330264672898 / (14)) + (0.36899131861666284 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.11991782255368702 = (19.69008675900985 - 22.051279089043497) / 19.69008675900985 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.Replace_Char(System.String, Char, Char)
                mov rcx,rdx
                mov edx,r8d
                movzx r8d,r9w
                movzx edx,dx
                cmp [rcx],ecx
                jmp qword ptr [7FFBA9C050C0]; System.String.Replace(Char, Char)
                ; Total bytes of code 21
                
                ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,28movrsi,rcxmovedi,edxmovebx,r8dmovzxecx,dimovzxr8d,bxcmpecx,r8dje near ptr M01_L03learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dicall qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxtestebp,ebpjge short M01_L00movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L00:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L04M01_L01:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L02subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L02:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L03:movrax,rsiaddrsp,28poprbxpoprbppoprsipoprdipopr14popr15retM01_L04:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L01; Total bytes of code 231

                Compare Jit Disasm

                ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)movrcx,rdxmovedx,r8dmovzxr8d,r9wmovzxedx,dxcmp[rcx],ecxjmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char); Total bytes of code 21
                ; System.String.Replace(Char, Char)pushr15pushr14pushrdipushrsipushrbppushrbxsubrsp,38movrsi,rcxmovedi,edxmovebx,r8dmovzxedx,dimovzxecx,bxcmpedx,ecxje near ptr M01_L05learcx,[rsi+0C]movr8d,[rsi+8]movsxrdx,dimov[rsp+34],edxmovzxedx,word ptr [rsp+34]leaeax,[rdx-1]cmpeax,0FEjae short M01_L00movsxrdx,dxcall qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxjmp short M01_L01M01_L00:movedx,[rsp+34]call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)movebp,eaxM01_L01:testebp,ebpjge short M01_L02movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L02:movecx,[rsi+8]subecx,ebpmovr14d,ecxmovecx,[rsi+8]call System.String.FastAllocateString(Int32)movr15,raxtestebp,ebpjg short M01_L06M01_L03:movr8d,ebplearcx,[rsi+r8*2+0C]cmp[r15],r15bmovr8d,ebpleardx,[r15+r8*2+0C]movr8d,[rsi+8]cmpr8,8jb short M01_L04subr8,r14andr8,7lear9,[r8+r8]subrcx,r9lear9,[r8+r8]subrdx,r9addr14,r8M01_L04:mov[rsp+20],r14movzxr8d,dimovzxr9d,bxcall qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)movrax,r15addrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L05:movrax,rsiaddrsp,38poprbxpoprbppoprsipoprdipopr14popr15retM01_L06:cmp[r15],r15blearcx,[r15+0C]leardx,[rsi+0C]movr8d,ebpaddr8,r8call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)jmp near ptr M01_L03; Total bytes of code 266

                Docs

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

                Run Information

                Architecturex64
                OSWindows 10.0.18362
                Baselineee6de921299d1b86a02d9049b9c8dd164cab1401
                Compare7fa0d5b5942f138c362f2753398b4a8d4f71eb73
                DiffDiff

                Regressions in System.Memory.Span<Int32>

                BenchmarkBaselineTestTest/BaseTest QualityEdge DetectorBaseline IRCompare IRIR RatioBaseline ETLCompare ETL
                IndexOfAnyFourValues - Duration of single invocation811.41 ns893.12 ns1.100.04False
                IndexOfAnyFiveValues - Duration of single invocation857.19 ns916.26 ns1.070.08False

                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;*'
                Details

                Payloads

                Baseline
                Compare

                Histogram

                System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)

                Description of detection logic

                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 893.115476054079 > 853.6086389195757.
                IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 10/31/2022 10:23:25 PM, 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
                IsRegressionStdDev: Marked as regression because -17.655352723675087 (T) = (0 -886.6573219555273) / Math.Sqrt((4.976405318076591 / (14)) + (550.567469208571 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.08955635836868671 = (813.7783008150718 - 886.6573219555273) / 813.7783008150718 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&lt;Int32&gt;.IndexOfAnyFiveValues(Size: 512)
                ```log
                

                Description of detection logic

                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 916.2596480801636 > 884.884366122159.
                IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 1:28:02 AM falls between 1/1/2023 3:57:25 AM and 1/10/2023 1:28:02 AM.
                IsRegressionStdDev: Marked as regression because -14.792582161741155 (T) = (0 -919.5926411095774) / Math.Sqrt((234.02346260062512 / (14)) + (404.93175657466077 / (33))) is less than -2.0141033888794695 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (33) - 2, .025) and -0.09481762636242623 = (839.9505259747775 - 919.5926411095774) / 839.9505259747775 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
                Benchmarking workflow for dotnet/runtime repository

                Metadata

                Metadata

                Assignees

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions