Skip to content

[Perf] Regressions in System.Tests.Perf_String.Split #51259

Open

Description

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline a7ed1fd065da1b2309c07bacc1b44d2e567107c8
Compare 5bad843281caac09e18958f27d7d914eb6086e77
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Split 447.82 ns 475.44 ns 1.06 4901.795735129068 5308.495503816714 1.0829695463997007 Trace Trace
Split 473.54 ns 534.99 ns 1.13 5192.342616628743 5599.544937428896 1.0784236231823507 Trace Trace

graph
graph
Historical Data in Reporting System

Repro

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

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_String.Remove_Int(s: "dzsdzsDDZSDZSDZSddsz", i: 7)


Baseline Jit Disasm

; System.Tests.Perf_String.Remove_Int(System.String, Int32)
       mov       rcx,rdx
       mov       edx,r8d
       cmp       [rcx],ecx
       jmp       near ptr System.String.Remove(Int32)
; Total bytes of code 13
; System.String.Remove(Int32)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       r8d,[rcx+8]
       movsxd    r8,r8d
       mov       eax,edx
       cmp       r8,rax
       jl        short M01_L00
       mov       r8d,edx
       xor       edx,edx
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       jmp       near ptr System.String.Substring(Int32, Int32)
M01_L00:
       mov       rcx,1D9CCCE5AD0
       mov       rsi,[rcx]
       test      edx,edx
       jl        short M01_L01
       mov       rcx,1D9CCCE5AF0
       mov       rcx,[rcx]
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       rdi,rax
       jmp       short M01_L02
M01_L01:
       mov       rcx,1D9CCCE5AE8
       mov       rcx,[rcx]
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       rdi,rax
M01_L02:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       mov       rcx,rbx
       mov       rdx,rsi
       mov       r8,rdi
       call      System.ArgumentOutOfRangeException..ctor(System.String, System.String)
       mov       rcx,rbx
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 144

Compare Jit Disasm

; System.Tests.Perf_String.Remove_Int(System.String, Int32)
       mov       rcx,rdx
       mov       edx,r8d
       cmp       [rcx],ecx
       jmp       near ptr System.String.Remove(Int32)
; Total bytes of code 13
; System.String.Remove(Int32)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       r8d,[rcx+8]
       movsxd    r8,r8d
       mov       eax,edx
       cmp       r8,rax
       jl        short M01_L00
       mov       r8d,edx
       xor       edx,edx
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       jmp       near ptr System.String.Substring(Int32, Int32)
M01_L00:
       mov       rcx,242E2DA5AD0
       mov       rsi,[rcx]
       test      edx,edx
       jl        short M01_L01
       mov       rcx,242E2DA5AF0
       mov       rcx,[rcx]
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       rdi,rax
       jmp       short M01_L02
M01_L01:
       mov       rcx,242E2DA5AE8
       mov       rcx,[rcx]
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       rdi,rax
M01_L02:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       mov       rcx,rbx
       mov       rdx,rsi
       mov       r8,rdi
       call      System.ArgumentOutOfRangeException..ctor(System.String, System.String)
       mov       rcx,rbx
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 144

System.Tests.Perf_String.Split(s: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", arr: [' '], options: None)


Baseline Jit Disasm

; System.Tests.Perf_String.Split(System.String, Char[], System.StringSplitOptions)
       push      rsi
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       cmp       [rdx],edx
       test      r8,r8
       je        short M00_L01
       lea       rcx,[r8+10]
       mov       esi,[r8+8]
M00_L00:
       mov       [rsp+20],rcx
       mov       [rsp+28],esi
       mov       rcx,rdx
       lea       rdx,[rsp+20]
       mov       r8d,7FFFFFFF
       call      System.String.SplitInternal(System.ReadOnlySpan`1<Char>, Int32, System.StringSplitOptions)
       nop
       add       rsp,30
       pop       rsi
       ret
M00_L01:
       xor       ecx,ecx
       xor       esi,esi
       jmp       short M00_L00
; Total bytes of code 68
; System.String.SplitInternal(System.ReadOnlySpan`1<Char>, Int32, System.StringSplitOptions)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+30]
       xor       eax,eax
       mov       [rbp+8],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp+10],xmm4
       vmovdqa   xmmword ptr [rbp+20],xmm4
       vmovdqa   xmmword ptr [rbp+30],xmm4
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,74B06C2F5775
       mov       [rbp],rax
       mov       rsi,rcx
       mov       edi,r8d
       mov       ebx,r9d
       test      edi,edi
       jl        near ptr M01_L17
       test      ebx,0FFFFFFFC
       jne       near ptr M01_L18
       cmp       edi,1
       jle       near ptr M01_L08
       cmp       dword ptr [rsi+8],0
       je        near ptr M01_L08
       cmp       dword ptr [rdx+8],0
       jbe       near ptr M01_L15
M01_L00:
       add       rsp,30
       test      [rsp],esp
       sub       rsp,200
       sub       rsp,30
       lea       rcx,[rsp+30]
       lea       r8,[rbp+48]
       mov       [r8],rcx
       mov       dword ptr [r8+8],80
       xor       ecx,ecx
       mov       [rbp+38],rcx
       mov       [rbp+40],ecx
       vmovdqu   xmm0,xmmword ptr [rdx]
       vmovdqu   xmmword ptr [rbp+28],xmm0
       mov       rcx,rsi
       lea       rdx,[rbp+28]
       lea       r8,[rbp+38]
       call      System.String.MakeSeparatorList(System.ReadOnlySpan`1<Char>, System.Collections.Generic.ValueListBuilder`1<Int32> ByRef)
       mov       eax,[rbp+40]
       mov       ecx,eax
       mov       edx,[rbp+50]
       cmp       rcx,rdx
       ja        near ptr M01_L16
       mov       r10,[rbp+48]
       test      eax,eax
       je        near ptr M01_L07
       test      ebx,ebx
       jne       near ptr M01_L09
       xor       r14d,r14d
       xor       r15d,r15d
       mov       [rbp+18],r10
       mov       [rbp+20],eax
       mov       [rbp+8],r14
       mov       [rbp+10],r15d
       mov       [rsp+20],edi
       mov       rcx,rsi
       lea       rdx,[rbp+18]
       lea       r8,[rbp+8]
       mov       r9d,1
       call      System.String.SplitWithoutPostProcessing(System.ReadOnlySpan`1<Int32>, System.ReadOnlySpan`1<Int32>, Int32, Int32)
       mov       r12,rax
M01_L01:
       cmp       qword ptr [rbp+38],0
       jne       near ptr M01_L13
M01_L02:
       mov       rax,r12
       mov       rcx,74B06C2F5775
       cmp       [rbp],rcx
       je        short M01_L03
       call      CORINFO_HELP_FAIL_FAST
M01_L03:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L04:
       test      bl,1
       jne       near ptr M01_L10
M01_L05:
       test      edi,edi
       je        near ptr M01_L11
       mov       rcx,offset MT_System.String[]
       mov       edx,1
       call      CORINFO_HELP_NEWARR_1_OBJ
       mov       r14,rax
       lea       rcx,[r14+10]
       mov       rdx,r13
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,r14
       mov       rcx,74B06C2F5775
       cmp       [rbp],rcx
       je        short M01_L06
       call      CORINFO_HELP_FAIL_FAST
M01_L06:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L07:
       mov       edi,1
M01_L08:
       mov       r13,rsi
       test      bl,2
       jne       near ptr M01_L14
       jmp       short M01_L04
M01_L09:
       xor       r14d,r14d
       xor       r15d,r15d
       mov       [rbp+18],r10
       mov       [rbp+20],eax
       mov       [rbp+8],r14
       mov       [rbp+10],r15d
       mov       [rsp+20],edi
       mov       [rsp+28],ebx
       mov       rcx,rsi
       lea       rdx,[rbp+18]
       lea       r8,[rbp+8]
       mov       r9d,1
       call      System.String.SplitWithPostProcessing(System.ReadOnlySpan`1<Int32>, System.ReadOnlySpan`1<Int32>, Int32, Int32, System.StringSplitOptions)
       mov       r12,rax
       jmp       near ptr M01_L01
M01_L10:
       cmp       dword ptr [r13+8],0
       jne       near ptr M01_L05
M01_L11:
       mov       rcx,7FFD30584540
       mov       edx,28
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rax,1E4BE372EF0
       mov       rax,[rax]
       mov       rcx,74B06C2F5775
       cmp       [rbp],rcx
       je        short M01_L12
       call      CORINFO_HELP_FAIL_FAST
M01_L12:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L13:
       mov       rcx,7FFD30584540
       mov       edx,29
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rcx,1E4BE372EF8
       mov       rcx,[rcx]
       mov       rdx,[rbp+38]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFD30843DB0]
       xor       ecx,ecx
       mov       [rbp+38],rcx
       jmp       near ptr M01_L02
M01_L14:
       test      edi,edi
       jle       near ptr M01_L04
       cmp       [rsi],esi
       mov       rcx,rsi
       mov       edx,3
       call      System.String.TrimWhiteSpaceHelper(System.Text.TrimType)
       mov       r13,rax
       jmp       near ptr M01_L04
M01_L15:
       and       ebx,0FFFFFFFD
       jmp       near ptr M01_L00
M01_L16:
       call      System.ThrowHelper.ThrowArgumentOutOfRangeException()
       int       3
M01_L17:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1C9
       mov       rdx,7FFD30474020
       call      CORINFO_HELP_STRCNS
       mov       rdi,rax
       mov       ecx,0A1B7
       mov       rdx,7FFD30474020
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      System.ArgumentOutOfRangeException..ctor(System.String, System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L18:
       mov       ecx,42
       mov       edx,57
       call      System.ThrowHelper.ThrowArgumentException(System.ExceptionResource, System.ExceptionArgument)
       int       3
; Total bytes of code 813

Compare Jit Disasm

; System.Tests.Perf_String.Split(System.String, Char[], System.StringSplitOptions)
       push      rsi
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       cmp       [rdx],edx
       test      r8,r8
       je        short M00_L01
       lea       rcx,[r8+10]
       mov       esi,[r8+8]
M00_L00:
       mov       [rsp+20],rcx
       mov       [rsp+28],esi
       mov       rcx,rdx
       lea       rdx,[rsp+20]
       mov       r8d,7FFFFFFF
       call      System.String.SplitInternal(System.ReadOnlySpan`1<Char>, Int32, System.StringSplitOptions)
       nop
       add       rsp,30
       pop       rsi
       ret
M00_L01:
       xor       ecx,ecx
       xor       esi,esi
       jmp       short M00_L00
; Total bytes of code 68
; System.String.SplitInternal(System.ReadOnlySpan`1<Char>, Int32, System.StringSplitOptions)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+30]
       xor       eax,eax
       mov       [rbp+8],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp+10],xmm4
       vmovdqa   xmmword ptr [rbp+20],xmm4
       vmovdqa   xmmword ptr [rbp+30],xmm4
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,66EA0E1BF416
       mov       [rbp],rax
       mov       rsi,rcx
       mov       edi,r8d
       mov       ebx,r9d
       test      edi,edi
       jl        near ptr M01_L17
       test      ebx,0FFFFFFFC
       jne       near ptr M01_L18
       cmp       edi,1
       jle       near ptr M01_L08
       cmp       dword ptr [rsi+8],0
       je        near ptr M01_L08
       cmp       dword ptr [rdx+8],0
       jbe       near ptr M01_L15
M01_L00:
       add       rsp,30
       test      [rsp],esp
       sub       rsp,200
       sub       rsp,30
       lea       rcx,[rsp+30]
       lea       r8,[rbp+48]
       mov       [r8],rcx
       mov       dword ptr [r8+8],80
       xor       ecx,ecx
       mov       [rbp+38],rcx
       mov       [rbp+40],ecx
       vmovdqu   xmm0,xmmword ptr [rdx]
       vmovdqu   xmmword ptr [rbp+28],xmm0
       mov       rcx,rsi
       lea       rdx,[rbp+28]
       lea       r8,[rbp+38]
       call      System.String.MakeSeparatorList(System.ReadOnlySpan`1<Char>, System.Collections.Generic.ValueListBuilder`1<Int32> ByRef)
       mov       eax,[rbp+40]
       mov       ecx,eax
       mov       edx,[rbp+50]
       cmp       rcx,rdx
       ja        near ptr M01_L16
       mov       r10,[rbp+48]
       test      eax,eax
       je        near ptr M01_L07
       test      ebx,ebx
       jne       near ptr M01_L09
       xor       r14d,r14d
       xor       r15d,r15d
       mov       [rbp+18],r10
       mov       [rbp+20],eax
       mov       [rbp+8],r14
       mov       [rbp+10],r15d
       mov       [rsp+20],edi
       mov       rcx,rsi
       lea       rdx,[rbp+18]
       lea       r8,[rbp+8]
       mov       r9d,1
       call      System.String.SplitWithoutPostProcessing(System.ReadOnlySpan`1<Int32>, System.ReadOnlySpan`1<Int32>, Int32, Int32)
       mov       r12,rax
M01_L01:
       cmp       qword ptr [rbp+38],0
       jne       near ptr M01_L13
M01_L02:
       mov       rax,r12
       mov       rcx,66EA0E1BF416
       cmp       [rbp],rcx
       je        short M01_L03
       call      CORINFO_HELP_FAIL_FAST
M01_L03:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L04:
       test      bl,1
       jne       near ptr M01_L10
M01_L05:
       test      edi,edi
       je        near ptr M01_L11
       mov       rcx,offset MT_System.String[]
       mov       edx,1
       call      CORINFO_HELP_NEWARR_1_OBJ
       mov       r14,rax
       lea       rcx,[r14+10]
       mov       rdx,r13
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,r14
       mov       rcx,66EA0E1BF416
       cmp       [rbp],rcx
       je        short M01_L06
       call      CORINFO_HELP_FAIL_FAST
M01_L06:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L07:
       mov       edi,1
M01_L08:
       mov       r13,rsi
       test      bl,2
       jne       near ptr M01_L14
       jmp       short M01_L04
M01_L09:
       xor       r14d,r14d
       xor       r15d,r15d
       mov       [rbp+18],r10
       mov       [rbp+20],eax
       mov       [rbp+8],r14
       mov       [rbp+10],r15d
       mov       [rsp+20],edi
       mov       [rsp+28],ebx
       mov       rcx,rsi
       lea       rdx,[rbp+18]
       lea       r8,[rbp+8]
       mov       r9d,1
       call      System.String.SplitWithPostProcessing(System.ReadOnlySpan`1<Int32>, System.ReadOnlySpan`1<Int32>, Int32, Int32, System.StringSplitOptions)
       mov       r12,rax
       jmp       near ptr M01_L01
M01_L10:
       cmp       dword ptr [r13+8],0
       jne       near ptr M01_L05
M01_L11:
       mov       rcx,7FFF5B9D4550
       mov       edx,28
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rax,1F298002EF0
       mov       rax,[rax]
       mov       rcx,66EA0E1BF416
       cmp       [rbp],rcx
       je        short M01_L12
       call      CORINFO_HELP_FAIL_FAST
M01_L12:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L13:
       mov       rcx,7FFF5B9D4550
       mov       edx,29
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rcx,1F298002EF8
       mov       rcx,[rcx]
       mov       rdx,[rbp+38]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFF5BC945C8]
       xor       ecx,ecx
       mov       [rbp+38],rcx
       jmp       near ptr M01_L02
M01_L14:
       test      edi,edi
       jle       near ptr M01_L04
       cmp       [rsi],esi
       mov       rcx,rsi
       mov       edx,3
       call      System.String.TrimWhiteSpaceHelper(System.Text.TrimType)
       mov       r13,rax
       jmp       near ptr M01_L04
M01_L15:
       and       ebx,0FFFFFFFD
       jmp       near ptr M01_L00
M01_L16:
       call      System.ThrowHelper.ThrowArgumentOutOfRangeException()
       int       3
M01_L17:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1C9
       mov       rdx,7FFF5B8C4020
       call      CORINFO_HELP_STRCNS
       mov       rdi,rax
       mov       ecx,0A21D
       mov       rdx,7FFF5B8C4020
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      System.ArgumentOutOfRangeException..ctor(System.String, System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L18:
       mov       ecx,42
       mov       edx,57
       call      System.ThrowHelper.ThrowArgumentException(System.ExceptionResource, System.ExceptionArgument)
       int       3
; Total bytes of code 813

System.Tests.Perf_String.Remove_Int(s: "dzsdzsDDZSDZSDZSddsz", i: 10)


Baseline Jit Disasm

; System.Tests.Perf_String.Remove_Int(System.String, Int32)
       mov       rcx,rdx
       mov       edx,r8d
       cmp       [rcx],ecx
       jmp       near ptr System.String.Remove(Int32)
; Total bytes of code 13
; System.String.Remove(Int32)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       r8d,[rcx+8]
       movsxd    r8,r8d
       mov       eax,edx
       cmp       r8,rax
       jl        short M01_L00
       mov       r8d,edx
       xor       edx,edx
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       jmp       near ptr System.String.Substring(Int32, Int32)
M01_L00:
       mov       rcx,23C27A15AD0
       mov       rsi,[rcx]
       test      edx,edx
       jl        short M01_L01
       mov       rcx,23C27A15AF0
       mov       rcx,[rcx]
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       rdi,rax
       jmp       short M01_L02
M01_L01:
       mov       rcx,23C27A15AE8
       mov       rcx,[rcx]
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       rdi,rax
M01_L02:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       mov       rcx,rbx
       mov       rdx,rsi
       mov       r8,rdi
       call      System.ArgumentOutOfRangeException..ctor(System.String, System.String)
       mov       rcx,rbx
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 144

Compare Jit Disasm

; System.Tests.Perf_String.Remove_Int(System.String, Int32)
       mov       rcx,rdx
       mov       edx,r8d
       cmp       [rcx],ecx
       jmp       near ptr System.String.Remove(Int32)
; Total bytes of code 13
; System.String.Remove(Int32)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       r8d,[rcx+8]
       movsxd    r8,r8d
       mov       eax,edx
       cmp       r8,rax
       jl        short M01_L00
       mov       r8d,edx
       xor       edx,edx
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       jmp       near ptr System.String.Substring(Int32, Int32)
M01_L00:
       mov       rcx,2119C895AD0
       mov       rsi,[rcx]
       test      edx,edx
       jl        short M01_L01
       mov       rcx,2119C895AF0
       mov       rcx,[rcx]
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       rdi,rax
       jmp       short M01_L02
M01_L01:
       mov       rcx,2119C895AE8
       mov       rcx,[rcx]
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       rdi,rax
M01_L02:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       mov       rcx,rbx
       mov       rdx,rsi
       mov       r8,rdi
       call      System.ArgumentOutOfRangeException..ctor(System.String, System.String)
       mov       rcx,rbx
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 144

System.Tests.Perf_String.IndexerCheckBoundCheckHoist


Baseline Jit Disasm

; System.Tests.Perf_String.IndexerCheckBoundCheckHoist()
       sub       rsp,28
       mov       rcx,7FFF9CD3B1C8
       mov       edx,18A
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       rax,217EAE19428
       mov       rax,[rax]
       mov       rdx,rax
       xor       ecx,ecx
       mov       eax,[rax+8]
       xor       r8d,r8d
       test      eax,eax
       jle       short M00_L02
       cmp       [rdx+8],eax
       setge     r9b
       movzx     r9d,r9b
       mov       r10d,eax
       not       r10d
       shr       r10d,1F
       test      r10d,r9d
       je        short M00_L01
       xchg      ax,ax
M00_L00:
       movsxd    r9,r8d
       movzx     r9d,word ptr [rdx+r9*2+0C]
       add       ecx,r9d
       inc       r8d
       cmp       r8d,eax
       jl        short M00_L00
       jmp       short M00_L02
M00_L01:
       cmp       r8d,[rdx+8]
       jae       short M00_L03
       movsxd    r9,r8d
       movzx     r9d,word ptr [rdx+r9*2+0C]
       add       r9d,ecx
       mov       ecx,r9d
       inc       r8d
       cmp       r8d,eax
       jl        short M00_L01
M00_L02:
       mov       eax,ecx
       add       rsp,28
       ret
M00_L03:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 144

Compare Jit Disasm

; System.Tests.Perf_String.IndexerCheckBoundCheckHoist()
       sub       rsp,28
       mov       rcx,7FFD6FA5B5C8
       mov       edx,18A
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       rax,1C759A89428
       mov       rax,[rax]
       mov       rdx,rax
       xor       ecx,ecx
       mov       eax,[rax+8]
       xor       r8d,r8d
       test      eax,eax
       jle       short M00_L02
       cmp       [rdx+8],eax
       setge     r9b
       movzx     r9d,r9b
       mov       r10d,eax
       not       r10d
       shr       r10d,1F
       test      r10d,r9d
       je        short M00_L01
       xchg      ax,ax
M00_L00:
       movsxd    r9,r8d
       movzx     r9d,word ptr [rdx+r9*2+0C]
       add       ecx,r9d
       inc       r8d
       cmp       r8d,eax
       jl        short M00_L00
       jmp       short M00_L02
M00_L01:
       cmp       r8d,[rdx+8]
       jae       short M00_L03
       movsxd    r9,r8d
       movzx     r9d,word ptr [rdx+r9*2+0C]
       add       r9d,ecx
       mov       ecx,r9d
       inc       r8d
       cmp       r8d,eax
       jl        short M00_L01
M00_L02:
       mov       eax,ecx
       add       rsp,28
       ret
M00_L03:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 144

System.Tests.Perf_String.Insert(s1: "dzsdzsDDZSDZSDZSddsz", i: 7, s2: "Test")


Baseline Jit Disasm

; System.Tests.Perf_String.Insert(System.String, Int32, System.String)
       mov       rcx,rdx
       mov       edx,r8d
       mov       r8,r9
       cmp       [rcx],ecx
       jmp       near ptr System.String.Insert(Int32, System.String)
; Total bytes of code 16
; System.String.Insert(Int32, System.String)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       rdi,rcx
       mov       ebx,edx
       mov       rsi,r8
       test      rsi,rsi
       je        near ptr M01_L02
       mov       ebp,[rdi+8]
       movsxd    rax,ebp
       mov       ecx,ebx
       cmp       rax,rcx
       jl        near ptr M01_L03
       mov       r14d,[rsi+8]
       test      ebp,ebp
       jne       short M01_L00
       mov       rax,rsi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L00:
       test      r14d,r14d
       jne       short M01_L01
       mov       rax,rdi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L01:
       lea       ecx,[r14+rbp]
       call      System.String.FastAllocateString(Int32)
       mov       r15,rax
       cmp       [r15],r15d
       lea       r12,[r15+0C]
       mov       rcx,r12
       lea       rdx,[rdi+0C]
       movsxd    r13,ebx
       add       r13,r13
       mov       r8,r13
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       mov       rcx,r12
       add       rcx,r13
       lea       rdx,[rsi+0C]
       movsxd    r8,r14d
       add       r8,r8
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       add       r14d,ebx
       movsxd    r8,r14d
       lea       rcx,[r12+r8*2]
       add       rdi,0C
       lea       rdx,[rdi+r13]
       sub       ebp,ebx
       movsxd    r8,ebp
       add       r8,r8
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       mov       rax,r15
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L02:
       mov       rcx,offset MT_System.ArgumentNullException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,305
       mov       rdx,7FFB09DF4020
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      System.ArgumentNullException..ctor(System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L03:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,199A
       mov       rdx,7FFB09DF4020
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      System.ArgumentOutOfRangeException..ctor(System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 330

Compare Jit Disasm

; System.Tests.Perf_String.Insert(System.String, Int32, System.String)
       mov       rcx,rdx
       mov       edx,r8d
       mov       r8,r9
       cmp       [rcx],ecx
       jmp       near ptr System.String.Insert(Int32, System.String)
; Total bytes of code 16
; System.String.Insert(Int32, System.String)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       rdi,rcx
       mov       ebx,edx
       mov       rsi,r8
       test      rsi,rsi
       je        near ptr M01_L02
       mov       ebp,[rdi+8]
       movsxd    rax,ebp
       mov       ecx,ebx
       cmp       rax,rcx
       jl        near ptr M01_L03
       mov       r14d,[rsi+8]
       test      ebp,ebp
       jne       short M01_L00
       mov       rax,rsi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L00:
       test      r14d,r14d
       jne       short M01_L01
       mov       rax,rdi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L01:
       lea       ecx,[r14+rbp]
       call      System.String.FastAllocateString(Int32)
       mov       r15,rax
       cmp       [r15],r15d
       lea       r12,[r15+0C]
       mov       rcx,r12
       lea       rdx,[rdi+0C]
       movsxd    r13,ebx
       add       r13,r13
       mov       r8,r13
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       mov       rcx,r12
       add       rcx,r13
       lea       rdx,[rsi+0C]
       movsxd    r8,r14d
       add       r8,r8
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       add       r14d,ebx
       movsxd    r8,r14d
       lea       rcx,[r12+r8*2]
       add       rdi,0C
       lea       rdx,[rdi+r13]
       sub       ebp,ebx
       movsxd    r8,ebp
       add       r8,r8
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       mov       rax,r15
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L02:
       mov       rcx,offset MT_System.ArgumentNullException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,305
       mov       rdx,7FFC62054020
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      System.ArgumentNullException..ctor(System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L03:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,199A
       mov       rdx,7FFC62054020
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      System.ArgumentOutOfRangeException..ctor(System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 330

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


Baseline Jit Disasm

; System.Tests.Perf_String.Trim_CharArr(System.String, Char[])
       mov       rcx,rdx
       mov       rdx,r8
       cmp       [rcx],ecx
       jmp       near ptr System.String.Trim(Char[])
; Total bytes of code 13
; System.String.Trim(Char[])
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       test      rdx,rdx
       je        short M01_L00
       mov       r8d,[rdx+8]
       test      r8d,r8d
       je        short M01_L00
       add       rdx,10
       mov       [rsp+20],rdx
       mov       rdx,[rsp+20]
       mov       r9d,3
       call      System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
       nop
       add       rsp,28
       ret
M01_L00:
       mov       edx,3
       call      System.String.TrimWhiteSpaceHelper(System.Text.TrimType)
       nop
       add       rsp,28
       ret
; Total bytes of code 72

Compare Jit Disasm

; System.Tests.Perf_String.Trim_CharArr(System.String, Char[])
       mov       rcx,rdx
       mov       rdx,r8
       cmp       [rcx],ecx
       jmp       near ptr System.String.Trim(Char[])
; Total bytes of code 13
; System.String.Trim(Char[])
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       test      rdx,rdx
       je        short M01_L00
       mov       r8d,[rdx+8]
       test      r8d,r8d
       je        short M01_L00
       add       rdx,10
       mov       [rsp+20],rdx
       mov       rdx,[rsp+20]
       mov       r9d,3
       call      System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
       nop
       add       rsp,28
       ret
M01_L00:
       mov       edx,3
       call      System.String.TrimWhiteSpaceHelper(System.Text.TrimType)
       nop
       add       rsp,28
       ret
; Total bytes of code 72

System.Tests.Perf_String.Insert(s1: "Test", i: 2, s2: " Test")


Baseline Jit Disasm

; System.Tests.Perf_String.Insert(System.String, Int32, System.String)
       mov       rcx,rdx
       mov       edx,r8d
       mov       r8,r9
       cmp       [rcx],ecx
       jmp       near ptr System.String.Insert(Int32, System.String)
; Total bytes of code 16
; System.String.Insert(Int32, System.String)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       rdi,rcx
       mov       ebx,edx
       mov       rsi,r8
       test      rsi,rsi
       je        near ptr M01_L02
       mov       ebp,[rdi+8]
       movsxd    rax,ebp
       mov       ecx,ebx
       cmp       rax,rcx
       jl        near ptr M01_L03
       mov       r14d,[rsi+8]
       test      ebp,ebp
       jne       short M01_L00
       mov       rax,rsi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L00:
       test      r14d,r14d
       jne       short M01_L01
       mov       rax,rdi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L01:
       lea       ecx,[r14+rbp]
       call      System.String.FastAllocateString(Int32)
       mov       r15,rax
       cmp       [r15],r15d
       lea       r12,[r15+0C]
       mov       rcx,r12
       lea       rdx,[rdi+0C]
       movsxd    r13,ebx
       add       r13,r13
       mov       r8,r13
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       mov       rcx,r12
       add       rcx,r13
       lea       rdx,[rsi+0C]
       movsxd    r8,r14d
       add       r8,r8
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       add       r14d,ebx
       movsxd    r8,r14d
       lea       rcx,[r12+r8*2]
       add       rdi,0C
       lea       rdx,[rdi+r13]
       sub       ebp,ebx
       movsxd    r8,ebp
       add       r8,r8
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       mov       rax,r15
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L02:
       mov       rcx,offset MT_System.ArgumentNullException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,305
       mov       rdx,7FFB0AD64020
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      System.ArgumentNullException..ctor(System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L03:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,199A
       mov       rdx,7FFB0AD64020
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      System.ArgumentOutOfRangeException..ctor(System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 330

Compare Jit Disasm

; System.Tests.Perf_String.Insert(System.String, Int32, System.String)
       mov       rcx,rdx
       mov       edx,r8d
       mov       r8,r9
       cmp       [rcx],ecx
       jmp       near ptr System.String.Insert(Int32, System.String)
; Total bytes of code 16
; System.String.Insert(Int32, System.String)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       rdi,rcx
       mov       ebx,edx
       mov       rsi,r8
       test      rsi,rsi
       je        near ptr M01_L02
       mov       ebp,[rdi+8]
       movsxd    rax,ebp
       mov       ecx,ebx
       cmp       rax,rcx
       jl        near ptr M01_L03
       mov       r14d,[rsi+8]
       test      ebp,ebp
       jne       short M01_L00
       mov       rax,rsi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L00:
       test      r14d,r14d
       jne       short M01_L01
       mov       rax,rdi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L01:
       lea       ecx,[r14+rbp]
       call      System.String.FastAllocateString(Int32)
       mov       r15,rax
       cmp       [r15],r15d
       lea       r12,[r15+0C]
       mov       rcx,r12
       lea       rdx,[rdi+0C]
       movsxd    r13,ebx
       add       r13,r13
       mov       r8,r13
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       mov       rcx,r12
       add       rcx,r13
       lea       rdx,[rsi+0C]
       movsxd    r8,r14d
       add       r8,r8
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       add       r14d,ebx
       movsxd    r8,r14d
       lea       rcx,[r12+r8*2]
       add       rdi,0C
       lea       rdx,[rdi+r13]
       sub       ebp,ebx
       movsxd    r8,ebp
       add       r8,r8
       call      System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
       mov       rax,r15
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L02:
       mov       rcx,offset MT_System.ArgumentNullException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,305
       mov       rdx,7FFC68CF4020
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      System.ArgumentNullException..ctor(System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L03:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,199A
       mov       rdx,7FFC68CF4020
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      System.ArgumentOutOfRangeException..ctor(System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 330

System.Tests.Perf_String.Split(s: "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", arr: [' '], options: RemoveEmptyEntries)


Baseline Jit Disasm

; System.Tests.Perf_String.Split(System.String, Char[], System.StringSplitOptions)
       push      rsi
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       cmp       [rdx],edx
       test      r8,r8
       je        short M00_L01
       lea       rcx,[r8+10]
       mov       esi,[r8+8]
M00_L00:
       mov       [rsp+20],rcx
       mov       [rsp+28],esi
       mov       rcx,rdx
       lea       rdx,[rsp+20]
       mov       r8d,7FFFFFFF
       call      System.String.SplitInternal(System.ReadOnlySpan`1<Char>, Int32, System.StringSplitOptions)
       nop
       add       rsp,30
       pop       rsi
       ret
M00_L01:
       xor       ecx,ecx
       xor       esi,esi
       jmp       short M00_L00
; Total bytes of code 68
; System.String.SplitInternal(System.ReadOnlySpan`1<Char>, Int32, System.StringSplitOptions)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+30]
       xor       eax,eax
       mov       [rbp+8],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp+10],xmm4
       vmovdqa   xmmword ptr [rbp+20],xmm4
       vmovdqa   xmmword ptr [rbp+30],xmm4
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,0A468D8BE0260
       mov       [rbp],rax
       mov       rsi,rcx
       mov       edi,r8d
       mov       ebx,r9d
       test      edi,edi
       jl        near ptr M01_L17
       test      ebx,0FFFFFFFC
       jne       near ptr M01_L18
       cmp       edi,1
       jle       near ptr M01_L08
       cmp       dword ptr [rsi+8],0
       je        near ptr M01_L08
       cmp       dword ptr [rdx+8],0
       jbe       near ptr M01_L15
M01_L00:
       add       rsp,30
       test      [rsp],esp
       sub       rsp,200
       sub       rsp,30
       lea       rcx,[rsp+30]
       lea       r8,[rbp+48]
       mov       [r8],rcx
       mov       dword ptr [r8+8],80
       xor       ecx,ecx
       mov       [rbp+38],rcx
       mov       [rbp+40],ecx
       vmovdqu   xmm0,xmmword ptr [rdx]
       vmovdqu   xmmword ptr [rbp+28],xmm0
       mov       rcx,rsi
       lea       rdx,[rbp+28]
       lea       r8,[rbp+38]
       call      System.String.MakeSeparatorList(System.ReadOnlySpan`1<Char>, System.Collections.Generic.ValueListBuilder`1<Int32> ByRef)
       mov       eax,[rbp+40]
       mov       ecx,eax
       mov       edx,[rbp+50]
       cmp       rcx,rdx
       ja        near ptr M01_L16
       mov       r10,[rbp+48]
       test      eax,eax
       je        near ptr M01_L07
       test      ebx,ebx
       jne       near ptr M01_L09
       xor       r14d,r14d
       xor       r15d,r15d
       mov       [rbp+18],r10
       mov       [rbp+20],eax
       mov       [rbp+8],r14
       mov       [rbp+10],r15d
       mov       [rsp+20],edi
       mov       rcx,rsi
       lea       rdx,[rbp+18]
       lea       r8,[rbp+8]
       mov       r9d,1
       call      System.String.SplitWithoutPostProcessing(System.ReadOnlySpan`1<Int32>, System.ReadOnlySpan`1<Int32>, Int32, Int32)
       mov       r12,rax
M01_L01:
       cmp       qword ptr [rbp+38],0
       jne       near ptr M01_L13
M01_L02:
       mov       rax,r12
       mov       rcx,0A468D8BE0260
       cmp       [rbp],rcx
       je        short M01_L03
       call      CORINFO_HELP_FAIL_FAST
M01_L03:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L04:
       test      bl,1
       jne       near ptr M01_L10
M01_L05:
       test      edi,edi
       je        near ptr M01_L11
       mov       rcx,offset MT_System.String[]
       mov       edx,1
       call      CORINFO_HELP_NEWARR_1_OBJ
       mov       r14,rax
       lea       rcx,[r14+10]
       mov       rdx,r13
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,r14
       mov       rcx,0A468D8BE0260
       cmp       [rbp],rcx
       je        short M01_L06
       call      CORINFO_HELP_FAIL_FAST
M01_L06:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L07:
       mov       edi,1
M01_L08:
       mov       r13,rsi
       test      bl,2
       jne       near ptr M01_L14
       jmp       short M01_L04
M01_L09:
       xor       r14d,r14d
       xor       r15d,r15d
       mov       [rbp+18],r10
       mov       [rbp+20],eax
       mov       [rbp+8],r14
       mov       [rbp+10],r15d
       mov       [rsp+20],edi
       mov       [rsp+28],ebx
       mov       rcx,rsi
       lea       rdx,[rbp+18]
       lea       r8,[rbp+8]
       mov       r9d,1
       call      System.String.SplitWithPostProcessing(System.ReadOnlySpan`1<Int32>, System.ReadOnlySpan`1<Int32>, Int32, Int32, System.StringSplitOptions)
       mov       r12,rax
       jmp       near ptr M01_L01
M01_L10:
       cmp       dword ptr [r13+8],0
       jne       near ptr M01_L05
M01_L11:
       mov       rcx,7FFD305B4540
       mov       edx,28
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rax,26F43432EF0
       mov       rax,[rax]
       mov       rcx,0A468D8BE0260
       cmp       [rbp],rcx
       je        short M01_L12
       call      CORINFO_HELP_FAIL_FAST
M01_L12:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L13:
       mov       rcx,7FFD305B4540
       mov       edx,29
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rcx,26F43432EF8
       mov       rcx,[rcx]
       mov       rdx,[rbp+38]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFD30874528]
       xor       ecx,ecx
       mov       [rbp+38],rcx
       jmp       near ptr M01_L02
M01_L14:
       test      edi,edi
       jle       near ptr M01_L04
       cmp       [rsi],esi
       mov       rcx,rsi
       mov       edx,3
       call      System.String.TrimWhiteSpaceHelper(System.Text.TrimType)
       mov       r13,rax
       jmp       near ptr M01_L04
M01_L15:
       and       ebx,0FFFFFFFD
       jmp       near ptr M01_L00
M01_L16:
       call      System.ThrowHelper.ThrowArgumentOutOfRangeException()
       int       3
M01_L17:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1C9
       mov       rdx,7FFD304A4020
       call      CORINFO_HELP_STRCNS
       mov       rdi,rax
       mov       ecx,0A1B7
       mov       rdx,7FFD304A4020
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      System.ArgumentOutOfRangeException..ctor(System.String, System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L18:
       mov       ecx,42
       mov       edx,57
       call      System.ThrowHelper.ThrowArgumentException(System.ExceptionResource, System.ExceptionArgument)
       int       3
; Total bytes of code 813

Compare Jit Disasm

; System.Tests.Perf_String.Split(System.String, Char[], System.StringSplitOptions)
       push      rsi
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       cmp       [rdx],edx
       test      r8,r8
       je        short M00_L01
       lea       rcx,[r8+10]
       mov       esi,[r8+8]
M00_L00:
       mov       [rsp+20],rcx
       mov       [rsp+28],esi
       mov       rcx,rdx
       lea       rdx,[rsp+20]
       mov       r8d,7FFFFFFF
       call      System.String.SplitInternal(System.ReadOnlySpan`1<Char>, Int32, System.StringSplitOptions)
       nop
       add       rsp,30
       pop       rsi
       ret
M00_L01:
       xor       ecx,ecx
       xor       esi,esi
       jmp       short M00_L00
; Total bytes of code 68
; System.String.SplitInternal(System.ReadOnlySpan`1<Char>, Int32, System.StringSplitOptions)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+30]
       xor       eax,eax
       mov       [rbp+8],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp+10],xmm4
       vmovdqa   xmmword ptr [rbp+20],xmm4
       vmovdqa   xmmword ptr [rbp+30],xmm4
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,501E46E3C13B
       mov       [rbp],rax
       mov       rsi,rcx
       mov       edi,r8d
       mov       ebx,r9d
       test      edi,edi
       jl        near ptr M01_L17
       test      ebx,0FFFFFFFC
       jne       near ptr M01_L18
       cmp       edi,1
       jle       near ptr M01_L08
       cmp       dword ptr [rsi+8],0
       je        near ptr M01_L08
       cmp       dword ptr [rdx+8],0
       jbe       near ptr M01_L15
M01_L00:
       add       rsp,30
       test      [rsp],esp
       sub       rsp,200
       sub       rsp,30
       lea       rcx,[rsp+30]
       lea       r8,[rbp+48]
       mov       [r8],rcx
       mov       dword ptr [r8+8],80
       xor       ecx,ecx
       mov       [rbp+38],rcx
       mov       [rbp+40],ecx
       vmovdqu   xmm0,xmmword ptr [rdx]
       vmovdqu   xmmword ptr [rbp+28],xmm0
       mov       rcx,rsi
       lea       rdx,[rbp+28]
       lea       r8,[rbp+38]
       call      System.String.MakeSeparatorList(System.ReadOnlySpan`1<Char>, System.Collections.Generic.ValueListBuilder`1<Int32> ByRef)
       mov       eax,[rbp+40]
       mov       ecx,eax
       mov       edx,[rbp+50]
       cmp       rcx,rdx
       ja        near ptr M01_L16
       mov       r10,[rbp+48]
       test      eax,eax
       je        near ptr M01_L07
       test      ebx,ebx
       jne       near ptr M01_L09
       xor       r14d,r14d
       xor       r15d,r15d
       mov       [rbp+18],r10
       mov       [rbp+20],eax
       mov       [rbp+8],r14
       mov       [rbp+10],r15d
       mov       [rsp+20],edi
       mov       rcx,rsi
       lea       rdx,[rbp+18]
       lea       r8,[rbp+8]
       mov       r9d,1
       call      System.String.SplitWithoutPostProcessing(System.ReadOnlySpan`1<Int32>, System.ReadOnlySpan`1<Int32>, Int32, Int32)
       mov       r12,rax
M01_L01:
       cmp       qword ptr [rbp+38],0
       jne       near ptr M01_L13
M01_L02:
       mov       rax,r12
       mov       rcx,501E46E3C13B
       cmp       [rbp],rcx
       je        short M01_L03
       call      CORINFO_HELP_FAIL_FAST
M01_L03:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L04:
       test      bl,1
       jne       near ptr M01_L10
M01_L05:
       test      edi,edi
       je        near ptr M01_L11
       mov       rcx,offset MT_System.String[]
       mov       edx,1
       call      CORINFO_HELP_NEWARR_1_OBJ
       mov       r14,rax
       lea       rcx,[r14+10]
       mov       rdx,r13
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,r14
       mov       rcx,501E46E3C13B
       cmp       [rbp],rcx
       je        short M01_L06
       call      CORINFO_HELP_FAIL_FAST
M01_L06:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L07:
       mov       edi,1
M01_L08:
       mov       r13,rsi
       test      bl,2
       jne       near ptr M01_L14
       jmp       short M01_L04
M01_L09:
       xor       r14d,r14d
       xor       r15d,r15d
       mov       [rbp+18],r10
       mov       [rbp+20],eax
       mov       [rbp+8],r14
       mov       [rbp+10],r15d
       mov       [rsp+20],edi
       mov       [rsp+28],ebx
       mov       rcx,rsi
       lea       rdx,[rbp+18]
       lea       r8,[rbp+8]
       mov       r9d,1
       call      System.String.SplitWithPostProcessing(System.ReadOnlySpan`1<Int32>, System.ReadOnlySpan`1<Int32>, Int32, Int32, System.StringSplitOptions)
       mov       r12,rax
       jmp       near ptr M01_L01
M01_L10:
       cmp       dword ptr [r13+8],0
       jne       near ptr M01_L05
M01_L11:
       mov       rcx,7FFF5B7F4550
       mov       edx,28
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rax,23418002EF0
       mov       rax,[rax]
       mov       rcx,501E46E3C13B
       cmp       [rbp],rcx
       je        short M01_L12
       call      CORINFO_HELP_FAIL_FAST
M01_L12:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M01_L13:
       mov       rcx,7FFF5B7F4550
       mov       edx,29
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rcx,23418002EF8
       mov       rcx,[rcx]
       mov       rdx,[rbp+38]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFF5BAB4D40]
       xor       ecx,ecx
       mov       [rbp+38],rcx
       jmp       near ptr M01_L02
M01_L14:
       test      edi,edi
       jle       near ptr M01_L04
       cmp       [rsi],esi
       mov       rcx,rsi
       mov       edx,3
       call      System.String.TrimWhiteSpaceHelper(System.Text.TrimType)
       mov       r13,rax
       jmp       near ptr M01_L04
M01_L15:
       and       ebx,0FFFFFFFD
       jmp       near ptr M01_L00
M01_L16:
       call      System.ThrowHelper.ThrowArgumentOutOfRangeException()
       int       3
M01_L17:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1C9
       mov       rdx,7FFF5B6E4020
       call      CORINFO_HELP_STRCNS
       mov       rdi,rax
       mov       ecx,0A21D
       mov       rdx,7FFF5B6E4020
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       xor       edx,edx
       call      System.SR.GetResourceString(System.String, System.String)
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      System.ArgumentOutOfRangeException..ctor(System.String, System.String)
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L18:
       mov       ecx,42
       mov       edx,57
       call      System.ThrowHelper.ThrowArgumentException(System.ExceptionResource, System.ExceptionArgument)
       int       3
; Total bytes of code 813

Docs

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions