Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JitDiff X64] MihaZupan/runtime/indexof-revert #708

Open
MihuBot opened this issue Oct 8, 2024 · 2 comments
Open

[JitDiff X64] MihaZupan/runtime/indexof-revert #708

MihuBot opened this issue Oct 8, 2024 · 2 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Oct 8, 2024

Job completed in 18 minutes 15 seconds.
https://github.com/MihaZupan/runtime/tree/indexof-revert

Diffs

Found 262 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39440219
Total bytes of diff: 39439933
Total bytes of delta: -286 (-0.00 % of base)
Total relative delta: -0.31
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
        -286 : System.Private.CoreLib.dasm (-0.00 % of base)

1 total files with Code Size differences (1 improved, 0 regressed), 258 unchanged.

Top method improvements (bytes):
        -145 (-15.38 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:IndexOfOrdinalHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)
        -141 (-15.39 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:IndexOfOrdinalIgnoreCaseHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)

Top method improvements (percentages):
        -141 (-15.39 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:IndexOfOrdinalIgnoreCaseHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)
        -145 (-15.38 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:IndexOfOrdinalHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)

2 total methods with Code Size differences (2 improved, 0 regressed), 232536 unchanged.

--------------------------------------------------------------------------------

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Oct 8, 2024

Top method improvements

-145 (-15.38 % of base) - System.Globalization.CompareInfo:IndexOfOrdinalHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this
 ; Assembly listing for method System.Globalization.CompareInfo:IndexOfOrdinalHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 5 single block inlinees; 6 inlinees without PGO data
+; 0 inlinees with PGO data; 3 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T15] (  4,  3   )     ref  ->  r12         this class-hnd single-def <System.Globalization.CompareInfo>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
 ;* V02 arg2         [V02    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
 ;  V03 arg3         [V03,T16] (  4,  3   )     int  ->  [rbp-0x2C]  single-def
-;  V04 arg4         [V04,T23] (  4,  2   )    long  ->  [rbp+0x10]  single-def
-;  V05 arg5         [V05,T30] (  2,  1   )   ubyte  ->  [rbp+0x18]  single-def
+;  V04 arg4         [V04,T21] (  4,  2   )    long  ->  [rbp+0x10]  single-def
+;  V05 arg5         [V05,T23] (  2,  1   )   ubyte  ->  [rbp+0x18]  single-def
 ;* V06 loc0         [V06    ] (  0,  0   )    long  ->  zero-ref   
 ;  V07 loc1         [V07    ] (  1,  1   )   byref  ->  [rbp-0x38]  must-init pinned single-def
 ;  V08 loc2         [V08    ] (  1,  1   )   byref  ->  [rbp-0x40]  must-init pinned single-def
 ;  V09 loc3         [V09,T04] (  6, 36.50)    long  ->  [rbp-0x48]  spill-single-def
 ;  V10 loc4         [V10,T05] (  4, 34   )    long  ->  [rbp-0x50]  spill-single-def
-;  V11 loc5         [V11,T22] (  5,  2.50)     int  ->  rax        
-;  V12 loc6         [V12,T10] (  7,  7   )     int  ->  rsi        
-;  V13 loc7         [V13,T17] (  3,  5   )     int  ->  rdi        
-;* V14 loc8         [V14    ] (  0,  0   )  struct (16) zero-ref    multireg-arg <System.ReadOnlySpan`1[ushort]>
-;  V15 loc9         [V15,T07] (  7, 17.50)     int  ->  rax        
-;  V16 loc10        [V16,T01] (  5, 84   )     int  ->  rcx        
-;  V17 loc11        [V17,T02] (  8, 75   )     int  ->   r8        
-;  V18 loc12        [V18,T00] (  4,128   )  ushort  ->   r9        
-;  V19 loc13        [V19,T03] (  2, 64   )  ushort  ->  r11        
-;* V20 loc14        [V20    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[ubyte]>
-;  V21 OutArgs      [V21    ] (  1,  1   )  struct ( 8) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V22 tmp1         [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V23 tmp2         [V23    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;  V24 tmp3         [V24,T09] (  4,  8   )     ref  ->  rdi         class-hnd single-def "Inlining Arg" <System.Buffers.SearchValues`1[ushort]>
-;* V25 tmp4         [V25    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;  V26 tmp5         [V26,T18] (  4,  4   )     ref  ->  rdi         class-hnd single-def "Inlining Arg" <System.Buffers.SearchValues`1[ushort]>
-;* V27 tmp6         [V27    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V28 tmp7         [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;  V29 tmp8         [V29,T24] (  2,  2   )   byref  ->  r14         single-def "Inlining Arg"
-;  V30 tmp9         [V30,T25] (  2,  2   )     int  ->  rdx         "Inlining Arg"
-;* V31 tmp10        [V31    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V32 tmp11        [V32    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V33 tmp12        [V33    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;  V34 tmp13        [V34,T19] (  4,  4   )     ref  ->  rdi         class-hnd single-def "Inlining Arg" <System.Buffers.SearchValues`1[ushort]>
-;  V35 tmp14        [V35,T13] (  5,  6   )     int  ->  rax         "Single return block return value"
-;  V36 FramesRoot   [V36,T12] ( 10,  6   )    long  ->  [rbp-0x58]  spill-single-def "Pinvoke FrameListRoot"
-;  V37 PInvokeFrame [V37    ] ( 12,  8   )  struct (64) [rbp-0x98]  do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
-;  V38 tmp17        [V38,T11] (  6,  4.50)   byref  ->  r14         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V39 tmp18        [V39,T08] ( 12, 10   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V40 tmp19        [V40,T14] (  4,  4   )   byref  ->  r13         single-def "field V02._reference (fldOffset=0x0)" P-INDEP
-;  V41 tmp20        [V41,T06] ( 10, 25   )     int  ->  rbx         single-def "field V02._length (fldOffset=0x8)" P-INDEP
-;  V42 tmp21        [V42,T26] (  3,  1.50)   byref  ->  [rbp-0xA8]  "field V14._reference (fldOffset=0x0)" P-INDEP
-;  V43 tmp22        [V43,T27] (  3,  1.50)     int  ->  [rbp-0x9C]  "field V14._length (fldOffset=0x8)" P-INDEP
-;* V44 tmp23        [V44    ] (  0,  0   )   byref  ->  zero-ref    "field V20._reference (fldOffset=0x0)" P-INDEP
-;* V45 tmp24        [V45    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
-;* V46 tmp25        [V46    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
-;* V47 tmp26        [V47    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
-;* V48 tmp27        [V48    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V23._reference (fldOffset=0x0)" P-INDEP
-;* V49 tmp28        [V49    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
-;* V50 tmp29        [V50    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V25._reference (fldOffset=0x0)" P-INDEP
-;* V51 tmp30        [V51    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
-;* V52 tmp31        [V52    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
-;* V53 tmp32        [V53    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
-;  V54 tmp33        [V54,T28] (  2,  1   )   byref  ->  r14         single-def "field V28._reference (fldOffset=0x0)" P-INDEP
-;  V55 tmp34        [V55,T31] (  2,  1   )     int  ->  rdx         "field V28._length (fldOffset=0x8)" P-INDEP
-;  V56 tmp35        [V56,T29] (  2,  1   )   byref  ->  r14         single-def "field V31._reference (fldOffset=0x0)" P-INDEP
-;* V57 tmp36        [V57,T33] (  0,  0   )     int  ->  zero-ref    "field V31._length (fldOffset=0x8)" P-INDEP
-;* V58 tmp37        [V58    ] (  0,  0   )   byref  ->  zero-ref    "field V33._reference (fldOffset=0x0)" P-INDEP
-;* V59 tmp38        [V59    ] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
-;  V60 tmp39        [V60,T20] (  2,  4   )    long  ->  rcx         "Cast away GC"
-;  V61 tmp40        [V61,T21] (  2,  4   )    long  ->  rdx         "Cast away GC"
-;* V62 cse0         [V62,T32] (  0,  0   )   byref  ->  zero-ref    "CSE #02: moderate"
+;  V11 loc5         [V11,T22] (  3,  1.50)     int  ->  rax        
+;  V12 loc6         [V12,T14] (  4,  5.50)     int  ->  rsi        
+;  V13 loc7         [V13,T17] (  3,  5   )     int  ->  rdx        
+;  V14 loc8         [V14,T07] (  7, 17.50)     int  ->  rax        
+;  V15 loc9         [V15,T01] (  5, 84   )     int  ->  rdi        
+;  V16 loc10        [V16,T02] (  8, 75   )     int  ->  rcx        
+;  V17 loc11        [V17,T00] (  4,128   )  ushort  ->   r8        
+;  V18 loc12        [V18,T03] (  2, 64   )  ushort  ->   r9        
+;* V19 loc13        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[ubyte]>
+;  V20 OutArgs      [V20    ] (  1,  1   )  struct ( 8) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V21 tmp1         [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V22 tmp2         [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;  V23 tmp3         [V23,T09] (  4,  8   )     ref  ->  rdi         class-hnd single-def "Inlining Arg" <System.Buffers.SearchValues`1[ushort]>
+;* V24 tmp4         [V24    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;  V25 tmp5         [V25,T18] (  4,  4   )     ref  ->  rdi         class-hnd single-def "Inlining Arg" <System.Buffers.SearchValues`1[ushort]>
+;* V26 tmp6         [V26    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V27 tmp7         [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;  V28 tmp8         [V28,T11] (  5,  6   )     int  ->  rax         "Single return block return value"
+;  V29 FramesRoot   [V29,T10] ( 10,  6   )    long  ->  [rbp-0x58]  spill-single-def "Pinvoke FrameListRoot"
+;  V30 PInvokeFrame [V30    ] ( 12,  8   )  struct (64) [rbp-0x98]  do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
+;  V31 tmp11        [V31,T13] (  4,  3.50)   byref  ->  r13         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V32 tmp12        [V32,T08] (  9,  8.50)     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;  V33 tmp13        [V33,T12] (  4,  4   )   byref  ->  r14         single-def "field V02._reference (fldOffset=0x0)" P-INDEP
+;  V34 tmp14        [V34,T06] ( 10, 25   )     int  ->  rbx         single-def "field V02._length (fldOffset=0x8)" P-INDEP
+;* V35 tmp15        [V35    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
+;* V36 tmp16        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
+;* V37 tmp17        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V21._reference (fldOffset=0x0)" P-INDEP
+;* V38 tmp18        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
+;* V39 tmp19        [V39    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
+;* V40 tmp20        [V40    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
+;* V41 tmp21        [V41    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V24._reference (fldOffset=0x0)" P-INDEP
+;* V42 tmp22        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V24._length (fldOffset=0x8)" P-INDEP
+;* V43 tmp23        [V43    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V26._reference (fldOffset=0x0)" P-INDEP
+;* V44 tmp24        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
+;* V45 tmp25        [V45    ] (  0,  0   )   byref  ->  zero-ref    "field V27._reference (fldOffset=0x0)" P-INDEP
+;* V46 tmp26        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
+;  V47 tmp27        [V47,T19] (  2,  4   )    long  ->  rcx         "Cast away GC"
+;  V48 tmp28        [V48,T20] (  2,  4   )    long  ->  rdx         "Cast away GC"
+;* V49 cse0         [V49,T24] (  0,  0   )   byref  ->  zero-ref    "CSE #02: moderate"
 ;
-; Lcl frame size = 136
+; Lcl frame size = 120
 
 G_M39468_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 136
+       sub      rsp, 120
        vzeroupper 
-       lea      rbp, [rsp+0xB0]
+       lea      rbp, [rsp+0xA0]
        xor      eax, eax
        mov      qword ptr [rbp-0x38], rax
        mov      qword ptr [rbp-0x40], rax
        mov      dword ptr [rbp-0x2C], r9d
        mov      r12, rdi
-       mov      r14, rsi
+       mov      r13, rsi
        mov      r15d, edx
-       mov      r13, rcx
+       mov      r14, rcx
        mov      ebx, r8d
-						;; size=57 bbWeight=1 PerfScore 12.25
+						;; size=54 bbWeight=1 PerfScore 12.25
 G_M39468_IG02:
        lea      rdi, [rbp-0x90]
        call     CORINFO_HELP_INIT_PINVOKE_FRAME
        mov      qword ptr [rbp-0x58], rax
        mov      rdi, rsp
        mov      qword ptr [rbp-0x78], rdi
        mov      rdi, rbp
        mov      qword ptr [rbp-0x68], rdi
-       mov      bword ptr [rbp-0x38], r14
-       mov      rcx, r14
-       mov      bword ptr [rbp-0x40], r13
+       mov      bword ptr [rbp-0x38], r13
+       mov      rcx, r13
+       mov      bword ptr [rbp-0x40], r14
        mov      qword ptr [rbp-0x48], rcx
-       mov      rdx, r13
+       mov      rdx, r14
        mov      qword ptr [rbp-0x50], rdx
        mov      rdi, 0xD1FFAB1E      ; global ptr
        test     byte  ptr [rdi], 1
-       je       G_M39468_IG34
+       je       G_M39468_IG31
 						;; size=71 bbWeight=1 PerfScore 13.75
 G_M39468_IG03:
        mov      rsi, 0xD1FFAB1E      ; data for System.Globalization.CompareInfo:s_nonSpecialAsciiChars
        mov      rdi, gword ptr [rsi]
        test     rdi, rdi
-       je       G_M39468_IG36
-       mov      rsi, r13
+       je       G_M39468_IG32
+       mov      rsi, r14
        mov      edx, ebx
        mov      r8, qword ptr [rdi]
        mov      r8, qword ptr [r8+0x48]
        call     [r8+0x18]System.Buffers.SearchValues`1[ushort]:ContainsAnyExcept(System.ReadOnlySpan`1[ushort]):ubyte:this
        test     eax, eax
        je       G_M39468_IG10
 						;; size=46 bbWeight=1 PerfScore 12.25
 G_M39468_IG04:
-       mov      r10, qword ptr [rbp-0x48]
-       mov      r13, qword ptr [rbp-0x50]
+       mov      r10, qword ptr [rbp-0x50]
+       mov      r13, qword ptr [rbp-0x48]
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 G_M39468_IG05:
        cmp      byte  ptr [rbp+0x18], 0
-       je       G_M39468_IG28
+       je       G_M39468_IG25
        mov      r14, qword ptr [rbp+0x10]
        mov      qword ptr [rsp], r14
        mov      rdi, qword ptr [r12+0x20]
-       mov      rsi, r13
+       mov      rsi, r10
        mov      edx, ebx
-       mov      rcx, r10
+       mov      rcx, r13
        mov      r8d, r15d
        mov      r9d, dword ptr [rbp-0x2C]
        mov      rax, 0xD1FFAB1E      ; function address
        mov      qword ptr [rbp-0x80], rax
        lea      rax, G_M39468_IG08
        mov      qword ptr [rbp-0x70], rax
        lea      rax, [rbp-0x90]
        mov      r15, qword ptr [rbp-0x58]
        mov      qword ptr [r15+0x08], rax
        mov      byte  ptr [r15+0x04], 0
 						;; size=83 bbWeight=0.50 PerfScore 7.88
 G_M39468_IG06:
        mov      rax, 0xD1FFAB1E      ; code for Interop+Globalization:IndexOf(long,ulong,int,ulong,int,int,ulong):int
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M39468_IG07:
        call     [rax]Interop+Globalization:IndexOf(long,ulong,int,ulong,int,int,ulong):int
 						;; size=2 bbWeight=0.50 PerfScore 1.50
 G_M39468_IG08:
        mov      byte  ptr [r15+0x04], 1
        mov      rcx, 0xD1FFAB1E      ; function address
        cmp      dword ptr [rcx], 0
        je       SHORT G_M39468_IG09
        mov      rdi, 0xD1FFAB1E
        call     [rdi]CORINFO_HELP_STOP_FOR_GC
 						;; size=32 bbWeight=0.50 PerfScore 4.25
 G_M39468_IG09:
        mov      rdi, qword ptr [rbp-0x88]
        mov      qword ptr [r15+0x08], rdi
-       jmp      G_M39468_IG33
-       align    [0 bytes for IG20]
+       jmp      G_M39468_IG30
+       align    [0 bytes for IG18]
 						;; size=16 bbWeight=0.50 PerfScore 2.00
 G_M39468_IG10:
        cmp      ebx, r15d
-       jg       G_M39468_IG27
+       jg       G_M39468_IG24
        cmp      byte  ptr [rbp+0x18], 0
        jne      SHORT G_M39468_IG11
        mov      eax, r15d
        sub      eax, ebx
        mov      esi, -1
-       cmp      eax, r15d
-       ja       G_M39468_IG35
-       mov      edx, eax
-       mov      edi, -1
-       mov      bword ptr [rbp-0xA8], r14
-       mov      dword ptr [rbp-0x9C], edx
+       mov      edx, -1
        jmp      SHORT G_M39468_IG12
-						;; size=56 bbWeight=0.50 PerfScore 5.38
+						;; size=32 bbWeight=0.50 PerfScore 3.62
 G_M39468_IG11:
        xor      eax, eax
        mov      esi, r15d
        sub      esi, ebx
        inc      esi
-       cmp      esi, r15d
-       ja       G_M39468_IG35
-       mov      edx, esi
-       lea      r14, bword ptr [r14+2*rdx]
-       mov      edx, r15d
-       sub      edx, esi
-       mov      bword ptr [rbp-0xA8], r14
-       mov      dword ptr [rbp-0x9C], edx
-       mov      edi, 1
-						;; size=47 bbWeight=0.50 PerfScore 2.88
+       mov      edx, 1
+						;; size=14 bbWeight=0.50 PerfScore 0.62
 G_M39468_IG12:
        cmp      eax, esi
-       jne      SHORT G_M39468_IG15
-						;; size=4 bbWeight=0.50 PerfScore 0.62
+       je       G_M39468_IG23
+						;; size=8 bbWeight=0.50 PerfScore 0.62
 G_M39468_IG13:
-       mov      r10, qword ptr [rbp-0x48]
-       mov      r13, qword ptr [rbp-0x50]
-						;; size=8 bbWeight=0.25 PerfScore 0.50
-G_M39468_IG14:
-       mov      rsi, 0xD1FFAB1E      ; data for System.Globalization.CompareInfo:s_nonSpecialAsciiChars
-       mov      rdi, gword ptr [rsi]
-       test     rdi, rdi
-       jne      G_M39468_IG25
-       jmp      G_M39468_IG36
-						;; size=27 bbWeight=0.50 PerfScore 2.75
-G_M39468_IG15:
-       xor      ecx, ecx
-       mov      r8d, eax
+       xor      edi, edi
+       mov      ecx, eax
        test     ebx, ebx
-       jg       SHORT G_M39468_IG20
-						;; size=9 bbWeight=4 PerfScore 7.00
-G_M39468_IG16:
-       mov      r10, qword ptr [rbp-0x48]
-       mov      r13, qword ptr [rbp-0x50]
+       jg       SHORT G_M39468_IG18
+						;; size=8 bbWeight=4 PerfScore 7.00
+G_M39468_IG14:
+       mov      r10, qword ptr [rbp-0x50]
+       mov      r13, qword ptr [rbp-0x48]
 						;; size=8 bbWeight=2 PerfScore 4.00
-G_M39468_IG17:
-       cmp      r8d, r15d
-       jge      SHORT G_M39468_IG18
-       movsxd   r8, r8d
-       cmp      word  ptr [r10+2*r8], 128
+G_M39468_IG15:
+       cmp      ecx, r15d
+       jge      SHORT G_M39468_IG16
+       movsxd   rcx, ecx
+       cmp      word  ptr [r13+2*rcx], 128
        jae      G_M39468_IG05
-						;; size=21 bbWeight=0.50 PerfScore 2.75
-G_M39468_IG18:
+						;; size=22 bbWeight=0.50 PerfScore 2.75
+G_M39468_IG16:
        mov      r14, qword ptr [rbp+0x10]
        test     r14, r14
-       je       SHORT G_M39468_IG19
+       je       SHORT G_M39468_IG17
        mov      dword ptr [r14], ebx
 						;; size=12 bbWeight=0.50 PerfScore 1.62
-G_M39468_IG19:
-       jmp      G_M39468_IG33
+G_M39468_IG17:
+       jmp      G_M39468_IG30
 						;; size=5 bbWeight=0.50 PerfScore 1.00
-G_M39468_IG20:
-       movsxd   r9, r8d
-       mov      r10, qword ptr [rbp-0x48]
+G_M39468_IG18:
+       movsxd   r8, ecx
+       mov      r13, qword ptr [rbp-0x48]
+       movzx    r8, word  ptr [r13+2*r8]
+       movsxd   r9, edi
+       mov      r10, qword ptr [rbp-0x50]
        movzx    r9, word  ptr [r10+2*r9]
-       movsxd   r11, ecx
-       mov      r13, qword ptr [rbp-0x50]
-       movzx    r11, word  ptr [r13+2*r11]
-       cmp      r9d, 128
+       cmp      r8d, 128
+       mov      r10, qword ptr [rbp-0x50]
        jge      G_M39468_IG05
-       mov      edx, r9d
+       mov      r11d, r8d
        mov      r14, 0xD1FFAB1E      ; static handle
-       cmp      byte  ptr [rdx+r14], 0
+       cmp      byte  ptr [r11+r14], 0
        jne      G_M39468_IG05
-       cmp      r9d, r11d
-       jne      SHORT G_M39468_IG22
-						;; size=67 bbWeight=32 PerfScore 432.00
-G_M39468_IG21:
+       cmp      r8d, r9d
+       jne      SHORT G_M39468_IG20
+						;; size=71 bbWeight=32 PerfScore 464.00
+G_M39468_IG19:
+       inc      edi
        inc      ecx
-       inc      r8d
-       cmp      ecx, ebx
-       jl       SHORT G_M39468_IG20
-       jmp      SHORT G_M39468_IG17
-						;; size=11 bbWeight=16 PerfScore 60.00
-G_M39468_IG22:
-       lea      edx, [r15-0x01]
-       cmp      r8d, edx
-       jge      SHORT G_M39468_IG24
-						;; size=9 bbWeight=4 PerfScore 7.00
-G_M39468_IG23:
-       movsxd   rdx, r8d
-       cmp      word  ptr [r10+2*rdx+0x02], 128
-       mov      r10, qword ptr [rbp-0x48]
+       cmp      edi, ebx
+       jl       SHORT G_M39468_IG18
+       jmp      SHORT G_M39468_IG15
+						;; size=10 bbWeight=16 PerfScore 60.00
+G_M39468_IG20:
+       lea      edi, [r15-0x01]
+       cmp      ecx, edi
+       jge      SHORT G_M39468_IG22
+						;; size=8 bbWeight=4 PerfScore 7.00
+G_M39468_IG21:
+       movsxd   rdi, ecx
+       cmp      word  ptr [r13+2*rdi+0x02], 128
        jae      G_M39468_IG05
-						;; size=21 bbWeight=2 PerfScore 10.50
-G_M39468_IG24:
-       add      eax, edi
+						;; size=17 bbWeight=2 PerfScore 8.50
+G_M39468_IG22:
+       add      eax, edx
        cmp      eax, esi
-       jne      G_M39468_IG15
-       jmp      G_M39468_IG14
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M39468_IG25:
-       mov      rsi, bword ptr [rbp-0xA8]
-       mov      edx, dword ptr [rbp-0x9C]
-       mov      rax, qword ptr [rdi]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x18]System.Buffers.SearchValues`1[ushort]:ContainsAnyExcept(System.ReadOnlySpan`1[ushort]):ubyte:this
-       test     eax, eax
-       mov      r10, qword ptr [rbp-0x48]
-       jne      G_M39468_IG05
-						;; size=35 bbWeight=0.50 PerfScore 5.62
-G_M39468_IG26:
+       jne      G_M39468_IG13
+						;; size=10 bbWeight=4 PerfScore 6.00
+G_M39468_IG23:
        mov      eax, -1
-       jmp      G_M39468_IG33
+       jmp      G_M39468_IG30
 						;; size=10 bbWeight=0.50 PerfScore 1.12
-G_M39468_IG27:
-       mov      r13, qword ptr [rbp-0x50]
+G_M39468_IG24:
+       mov      r10, qword ptr [rbp-0x50]
        mov      rsi, 0xD1FFAB1E      ; data for System.Globalization.CompareInfo:s_nonSpecialAsciiChars
        mov      rdi, gword ptr [rsi]
        test     rdi, rdi
-       je       G_M39468_IG36
-       mov      rsi, r14
+       je       G_M39468_IG32
+       mov      rsi, r13
        mov      edx, r15d
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x48]
        call     [rax+0x18]System.Buffers.SearchValues`1[ushort]:ContainsAnyExcept(System.ReadOnlySpan`1[ushort]):ubyte:this
        test     eax, eax
-       mov      r10, qword ptr [rbp-0x48]
+       mov      r10, qword ptr [rbp-0x50]
+       mov      r13, qword ptr [rbp-0x48]
        jne      G_M39468_IG05
-       jmp      SHORT G_M39468_IG26
-						;; size=56 bbWeight=0.50 PerfScore 8.12
-G_M39468_IG28:
+       jmp      SHORT G_M39468_IG23
+						;; size=60 bbWeight=0.50 PerfScore 8.62
+G_M39468_IG25:
        mov      r14, qword ptr [rbp+0x10]
        mov      qword ptr [rsp], r14
        mov      rdi, qword ptr [r12+0x20]
-       mov      rsi, r13
+       mov      rsi, r10
        mov      edx, ebx
-       mov      rcx, r10
+       mov      rcx, r13
        mov      r8d, r15d
        mov      r9d, dword ptr [rbp-0x2C]
        mov      rax, 0xD1FFAB1E      ; function address
        mov      qword ptr [rbp-0x80], rax
-       lea      rax, G_M39468_IG31
+       lea      rax, G_M39468_IG28
        mov      qword ptr [rbp-0x70], rax
        lea      rax, [rbp-0x90]
        mov      r15, qword ptr [rbp-0x58]
        mov      qword ptr [r15+0x08], rax
        mov      byte  ptr [r15+0x04], 0
 						;; size=73 bbWeight=0.50 PerfScore 6.38
-G_M39468_IG29:
+G_M39468_IG26:
        mov      rax, 0xD1FFAB1E      ; code for Interop+Globalization:LastIndexOf(long,ulong,int,ulong,int,int,ulong):int
 						;; size=10 bbWeight=0.50 PerfScore 0.12
-G_M39468_IG30:
+G_M39468_IG27:
        call     [rax]Interop+Globalization:LastIndexOf(long,ulong,int,ulong,int,int,ulong):int
 						;; size=2 bbWeight=0.50 PerfScore 1.50
-G_M39468_IG31:
+G_M39468_IG28:
        mov      byte  ptr [r15+0x04], 1
        mov      rcx, 0xD1FFAB1E      ; function address
        cmp      dword ptr [rcx], 0
-       je       SHORT G_M39468_IG32
+       je       SHORT G_M39468_IG29
        mov      rdi, 0xD1FFAB1E
        call     [rdi]CORINFO_HELP_STOP_FOR_GC
 						;; size=32 bbWeight=0.50 PerfScore 4.25
-G_M39468_IG32:
+G_M39468_IG29:
        mov      rdi, qword ptr [rbp-0x88]
        mov      qword ptr [r15+0x08], rdi
 						;; size=11 bbWeight=0.50 PerfScore 1.00
-G_M39468_IG33:
-       add      rsp, 136
+G_M39468_IG30:
+       add      rsp, 120
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=18 bbWeight=1 PerfScore 4.25
-G_M39468_IG34:
+						;; size=15 bbWeight=1 PerfScore 4.25
+G_M39468_IG31:
        mov      rdi, 0xD1FFAB1E      ; System.Globalization.CompareInfo
        call     CORINFO_HELP_GET_GCSTATIC_BASE
        jmp      G_M39468_IG03
 						;; size=20 bbWeight=0 PerfScore 0.00
-G_M39468_IG35:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
-       call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
-       int3     
-						;; size=13 bbWeight=0 PerfScore 0.00
-G_M39468_IG36:
+G_M39468_IG32:
        mov      edi, 6
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 943, prolog size 57, PerfScore 639.38, instruction count 227, allocated bytes for code 943 (MethodHash=211765d3) for method System.Globalization.CompareInfo:IndexOfOrdinalHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)
+; Total bytes of code 798, prolog size 54, PerfScore 649.00, instruction count 196, allocated bytes for code 798 (MethodHash=211765d3) for method System.Globalization.CompareInfo:IndexOfOrdinalHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)
 ; ============================================================
-141 (-15.39 % of base) - System.Globalization.CompareInfo:IndexOfOrdinalIgnoreCaseHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this
 ; Assembly listing for method System.Globalization.CompareInfo:IndexOfOrdinalIgnoreCaseHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 18 single block inlinees; 6 inlinees without PGO data
+; 0 inlinees with PGO data; 13 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T14] (  4,  3   )     ref  ->  r12         this class-hnd single-def <System.Globalization.CompareInfo>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
 ;* V02 arg2         [V02    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
 ;  V03 arg3         [V03,T15] (  4,  3   )     int  ->  [rbp-0x2C]  single-def
-;  V04 arg4         [V04,T22] (  4,  2   )    long  ->  [rbp+0x10]  single-def
-;  V05 arg5         [V05,T31] (  2,  1   )   ubyte  ->  [rbp+0x18]  single-def
+;  V04 arg4         [V04,T20] (  4,  2   )    long  ->  [rbp+0x10]  single-def
+;  V05 arg5         [V05,T23] (  2,  1   )   ubyte  ->  [rbp+0x18]  single-def
 ;* V06 loc0         [V06    ] (  0,  0   )    long  ->  zero-ref   
 ;  V07 loc1         [V07    ] (  1,  1   )   byref  ->  [rbp-0x38]  must-init pinned single-def
 ;  V08 loc2         [V08    ] (  1,  1   )   byref  ->  [rbp-0x40]  must-init pinned single-def
 ;  V09 loc3         [V09,T04] (  6, 36.50)    long  ->  [rbp-0x48]  spill-single-def
 ;  V10 loc4         [V10,T05] (  4, 34   )    long  ->  [rbp-0x50]  spill-single-def
-;  V11 loc5         [V11,T20] (  5,  2.50)     int  ->  rax        
-;  V12 loc6         [V12,T09] (  7,  7   )     int  ->  rdx        
-;  V13 loc7         [V13,T16] (  3,  5   )     int  ->  rcx        
-;* V14 loc8         [V14    ] (  0,  0   )  struct (16) zero-ref    <System.ReadOnlySpan`1[ushort]>
-;  V15 loc9         [V15,T07] (  7, 17.50)     int  ->  rax        
-;  V16 loc10        [V16,T02] (  5, 84   )     int  ->   r8        
-;  V17 loc11        [V17,T03] (  8, 75   )     int  ->   r9        
-;  V18 loc12        [V18,T00] (  8,176   )  ushort  ->  r10        
-;  V19 loc13        [V19,T01] (  6,112   )  ushort  ->  r11        
-;* V20 loc14        [V20    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[ubyte]>
-;  V21 OutArgs      [V21    ] (  1,  1   )  struct ( 8) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V22 tmp1         [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V23 tmp2         [V23    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;  V24 tmp3         [V24,T17] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Buffers.AsciiCharSearchValues`2[System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst]>
-;* V25 tmp4         [V25    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V26 tmp5         [V26    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V27 tmp6         [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V28 tmp7         [V28    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V29 tmp8         [V29    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;* V30 tmp9         [V30    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V31 tmp10        [V31,T23] (  2,  2   )     ref  ->  rdx         class-hnd exact single-def "Inlining Arg" <System.Buffers.AsciiCharSearchValues`2[System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst]>
-;* V32 tmp11        [V32    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V33 tmp12        [V33    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V34 tmp13        [V34    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V35 tmp14        [V35    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V36 tmp15        [V36    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;* V37 tmp16        [V37    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V38 tmp17        [V38    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;  V39 tmp18        [V39,T24] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
-;  V40 tmp19        [V40,T26] (  2,  2   )     int  ->  rsi         "Inlining Arg"
-;* V41 tmp20        [V41    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V42 tmp21        [V42    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V43 tmp22        [V43    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;  V44 tmp23        [V44,T25] (  2,  2   )     ref  ->  rdx         class-hnd exact single-def "Inlining Arg" <System.Buffers.AsciiCharSearchValues`2[System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst]>
-;* V45 tmp24        [V45    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V46 tmp25        [V46    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-;* V47 tmp26        [V47    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V48 tmp27        [V48    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;* V49 tmp28        [V49    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V50 tmp29        [V50,T12] (  5,  6   )     int  ->  rax         "Single return block return value"
-;  V51 FramesRoot   [V51,T11] ( 10,  6   )    long  ->  [rbp-0x58]  spill-single-def "Pinvoke FrameListRoot"
-;  V52 PInvokeFrame [V52    ] ( 12,  8   )  struct (64) [rbp-0x98]  do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
-;  V53 tmp32        [V53,T10] (  6,  4.50)   byref  ->  r14         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V54 tmp33        [V54,T08] ( 12, 10   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V55 tmp34        [V55,T13] (  4,  4   )   byref  ->  r13         single-def "field V02._reference (fldOffset=0x0)" P-INDEP
-;  V56 tmp35        [V56,T06] ( 10, 25   )     int  ->  rbx         single-def "field V02._length (fldOffset=0x8)" P-INDEP
-;  V57 tmp36        [V57,T27] (  3,  1.50)   byref  ->  [rbp-0xA8]  "field V14._reference (fldOffset=0x0)" P-INDEP
-;  V58 tmp37        [V58,T28] (  3,  1.50)     int  ->  [rbp-0x9C]  "field V14._length (fldOffset=0x8)" P-INDEP
-;* V59 tmp38        [V59    ] (  0,  0   )   byref  ->  zero-ref    "field V20._reference (fldOffset=0x0)" P-INDEP
-;* V60 tmp39        [V60    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
-;* V61 tmp40        [V61    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
-;* V62 tmp41        [V62    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
-;* V63 tmp42        [V63    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V23._reference (fldOffset=0x0)" P-INDEP
-;* V64 tmp43        [V64    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
-;* V65 tmp44        [V65    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V25._reference (fldOffset=0x0)" P-INDEP
-;* V66 tmp45        [V66    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
-;* V67 tmp46        [V67    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V26._reference (fldOffset=0x0)" P-INDEP
-;* V68 tmp47        [V68    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
-;* V69 tmp48        [V69    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
-;* V70 tmp49        [V70    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
-;* V71 tmp50        [V71    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V32._reference (fldOffset=0x0)" P-INDEP
-;* V72 tmp51        [V72    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
-;* V73 tmp52        [V73    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V33._reference (fldOffset=0x0)" P-INDEP
-;* V74 tmp53        [V74    ] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
-;* V75 tmp54        [V75    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V34._reference (fldOffset=0x0)" P-INDEP
-;* V76 tmp55        [V76    ] (  0,  0   )     int  ->  zero-ref    "field V34._length (fldOffset=0x8)" P-INDEP
-;  V77 tmp56        [V77,T29] (  2,  1   )   byref  ->  rdi         single-def "field V38._reference (fldOffset=0x0)" P-INDEP
-;  V78 tmp57        [V78,T32] (  2,  1   )     int  ->  rsi         "field V38._length (fldOffset=0x8)" P-INDEP
-;  V79 tmp58        [V79,T30] (  2,  1   )   byref  ->  rdi         single-def "field V41._reference (fldOffset=0x0)" P-INDEP
-;* V80 tmp59        [V80,T33] (  0,  0   )     int  ->  zero-ref    "field V41._length (fldOffset=0x8)" P-INDEP
-;* V81 tmp60        [V81    ] (  0,  0   )   byref  ->  zero-ref    "field V43._reference (fldOffset=0x0)" P-INDEP
-;* V82 tmp61        [V82    ] (  0,  0   )     int  ->  zero-ref    "field V43._length (fldOffset=0x8)" P-INDEP
-;* V83 tmp62        [V83    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V45._reference (fldOffset=0x0)" P-INDEP
-;* V84 tmp63        [V84    ] (  0,  0   )     int  ->  zero-ref    "field V45._length (fldOffset=0x8)" P-INDEP
-;* V85 tmp64        [V85    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V46._reference (fldOffset=0x0)" P-INDEP
-;* V86 tmp65        [V86    ] (  0,  0   )     int  ->  zero-ref    "field V46._length (fldOffset=0x8)" P-INDEP
-;  V87 tmp66        [V87,T18] (  2,  4   )    long  ->  rcx         "Cast away GC"
-;  V88 tmp67        [V88,T19] (  2,  4   )    long  ->   r8         "Cast away GC"
-;  V89 cse0         [V89,T21] (  4,  3   )     ref  ->  [rbp-0xB0]  spill-single-def "CSE #01: moderate"
+;  V11 loc5         [V11,T22] (  3,  1.50)     int  ->  rax        
+;  V12 loc6         [V12,T13] (  4,  5.50)     int  ->  rdx        
+;  V13 loc7         [V13,T16] (  3,  5   )     int  ->  rdi        
+;  V14 loc8         [V14,T07] (  7, 17.50)     int  ->  rax        
+;  V15 loc9         [V15,T02] (  5, 84   )     int  ->  rsi        
+;  V16 loc10        [V16,T03] (  8, 75   )     int  ->  rcx        
+;  V17 loc11        [V17,T00] (  8,176   )  ushort  ->   r8        
+;  V18 loc12        [V18,T01] (  6,112   )  ushort  ->   r9        
+;* V19 loc13        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[ubyte]>
+;  V20 OutArgs      [V20    ] (  1,  1   )  struct ( 8) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V21 tmp1         [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V22 tmp2         [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;  V23 tmp3         [V23,T17] (  2,  4   )     ref  ->  rdx         class-hnd exact single-def "Inlining Arg" <System.Buffers.AsciiCharSearchValues`2[System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst]>
+;* V24 tmp4         [V24    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V25 tmp5         [V25    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V26 tmp6         [V26    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V27 tmp7         [V27    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V28 tmp8         [V28    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
+;* V29 tmp9         [V29    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;  V30 tmp10        [V30,T21] (  2,  2   )     ref  ->  rdx         class-hnd exact single-def "Inlining Arg" <System.Buffers.AsciiCharSearchValues`2[System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst]>
+;* V31 tmp11        [V31    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V32 tmp12        [V32    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V33 tmp13        [V33    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V34 tmp14        [V34    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V35 tmp15        [V35    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
+;* V36 tmp16        [V36    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V37 tmp17        [V37    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;  V38 tmp18        [V38,T10] (  5,  6   )     int  ->  rax         "Single return block return value"
+;  V39 FramesRoot   [V39,T09] ( 10,  6   )    long  ->  [rbp-0x58]  spill-single-def "Pinvoke FrameListRoot"
+;  V40 PInvokeFrame [V40    ] ( 12,  8   )  struct (64) [rbp-0x98]  do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
+;  V41 tmp21        [V41,T12] (  4,  3.50)   byref  ->  r13         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V42 tmp22        [V42,T08] (  9,  8.50)     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;  V43 tmp23        [V43,T11] (  4,  4   )   byref  ->  r14         single-def "field V02._reference (fldOffset=0x0)" P-INDEP
+;  V44 tmp24        [V44,T06] ( 10, 25   )     int  ->  rbx         single-def "field V02._length (fldOffset=0x8)" P-INDEP
+;* V45 tmp25        [V45    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
+;* V46 tmp26        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
+;* V47 tmp27        [V47    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V21._reference (fldOffset=0x0)" P-INDEP
+;* V48 tmp28        [V48    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
+;* V49 tmp29        [V49    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
+;* V50 tmp30        [V50    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
+;* V51 tmp31        [V51    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V24._reference (fldOffset=0x0)" P-INDEP
+;* V52 tmp32        [V52    ] (  0,  0   )     int  ->  zero-ref    "field V24._length (fldOffset=0x8)" P-INDEP
+;* V53 tmp33        [V53    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V25._reference (fldOffset=0x0)" P-INDEP
+;* V54 tmp34        [V54    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
+;* V55 tmp35        [V55    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V26._reference (fldOffset=0x0)" P-INDEP
+;* V56 tmp36        [V56    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
+;* V57 tmp37        [V57    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V31._reference (fldOffset=0x0)" P-INDEP
+;* V58 tmp38        [V58    ] (  0,  0   )     int  ->  zero-ref    "field V31._length (fldOffset=0x8)" P-INDEP
+;* V59 tmp39        [V59    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V32._reference (fldOffset=0x0)" P-INDEP
+;* V60 tmp40        [V60    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
+;* V61 tmp41        [V61    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V33._reference (fldOffset=0x0)" P-INDEP
+;* V62 tmp42        [V62    ] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
+;* V63 tmp43        [V63    ] (  0,  0   )   byref  ->  zero-ref    "field V37._reference (fldOffset=0x0)" P-INDEP
+;* V64 tmp44        [V64    ] (  0,  0   )     int  ->  zero-ref    "field V37._length (fldOffset=0x8)" P-INDEP
+;  V65 tmp45        [V65,T18] (  2,  4   )    long  ->  rcx         "Cast away GC"
+;  V66 tmp46        [V66,T19] (  2,  4   )    long  ->   r8         "Cast away GC"
 ;
-; Lcl frame size = 152
+; Lcl frame size = 120
 
 G_M55808_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 152
+       sub      rsp, 120
        vzeroupper 
-       lea      rbp, [rsp+0xC0]
+       lea      rbp, [rsp+0xA0]
        xor      eax, eax
        mov      qword ptr [rbp-0x38], rax
        mov      qword ptr [rbp-0x40], rax
        mov      dword ptr [rbp-0x2C], r9d
        mov      r12, rdi
-       mov      r14, rsi
+       mov      r13, rsi
        mov      r15d, edx
-       mov      r13, rcx
+       mov      r14, rcx
        mov      ebx, r8d
-						;; size=57 bbWeight=1 PerfScore 12.25
+						;; size=54 bbWeight=1 PerfScore 12.25
 G_M55808_IG02:
        lea      rdi, [rbp-0x90]
        call     CORINFO_HELP_INIT_PINVOKE_FRAME
        mov      qword ptr [rbp-0x58], rax
        mov      rdx, rsp
        mov      qword ptr [rbp-0x78], rdx
        mov      rdx, rbp
        mov      qword ptr [rbp-0x68], rdx
-       mov      bword ptr [rbp-0x38], r14
-       mov      rcx, r14
-       mov      bword ptr [rbp-0x40], r13
+       mov      bword ptr [rbp-0x38], r13
+       mov      rcx, r13
+       mov      bword ptr [rbp-0x40], r14
        mov      qword ptr [rbp-0x48], rcx
-       mov      r8, r13
+       mov      r8, r14
        mov      qword ptr [rbp-0x50], r8
        mov      rdx, 0xD1FFAB1E      ; const ptr
-       mov      r9, gword ptr [rdx]
-       mov      rdx, r9
-       mov      gword ptr [rbp-0xB0], rdx
-       mov      rdi, rdx
-       lea      rdx, bword ptr [rdi+0x08]
-       mov      rdi, r13
+       mov      rdx, gword ptr [rdx]
+       add      rdx, 8
+       mov      rdi, r14
        mov      esi, ebx
        mov      r9, 0xD1FFAB1E      ; code for System.Buffers.IndexOfAnyAsciiSearcher:IndexOfAnyCore[ubyte,System.Buffers.IndexOfAnyAsciiSearcher+Negate,System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst,System.Buffers.IndexOfAnyAsciiSearcher+ContainsAnyResultMapper`1[short]](byref,int,byref):ubyte
        call     [r9]System.Buffers.IndexOfAnyAsciiSearcher:IndexOfAnyCore[ubyte,System.Buffers.IndexOfAnyAsciiSearcher+Negate,System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst,System.Buffers.IndexOfAnyAsciiSearcher+ContainsAnyResultMapper`1[short]](byref,int,byref):ubyte
        test     eax, eax
        je       G_M55808_IG09
-						;; size=108 bbWeight=1 PerfScore 18.75
+						;; size=95 bbWeight=1 PerfScore 17.00
 G_M55808_IG03:
-       mov      r13, qword ptr [rbp-0x50]
-       mov      r14, qword ptr [rbp-0x48]
+       mov      r10, qword ptr [rbp-0x50]
+       mov      r13, qword ptr [rbp-0x48]
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 G_M55808_IG04:
        cmp      byte  ptr [rbp+0x18], 0
-       je       G_M55808_IG31
-       mov      rdi, qword ptr [rbp+0x10]
-       mov      qword ptr [rsp], rdi
+       je       G_M55808_IG29
+       mov      r14, qword ptr [rbp+0x10]
+       mov      qword ptr [rsp], r14
        mov      rdi, qword ptr [r12+0x20]
-       mov      rsi, r13
+       mov      rsi, r10
        mov      edx, ebx
-       mov      rcx, r14
+       mov      rcx, r13
        mov      r8d, r15d
        mov      r9d, dword ptr [rbp-0x2C]
        mov      rax, 0xD1FFAB1E      ; function address
        mov      qword ptr [rbp-0x80], rax
        lea      rax, G_M55808_IG07
        mov      qword ptr [rbp-0x70], rax
        lea      rax, [rbp-0x90]
        mov      r15, qword ptr [rbp-0x58]
        mov      qword ptr [r15+0x08], rax
        mov      byte  ptr [r15+0x04], 0
 						;; size=83 bbWeight=0.50 PerfScore 7.88
 G_M55808_IG05:
        mov      rax, 0xD1FFAB1E      ; function address
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M55808_IG06:
        call     rax ; Interop+Globalization:IndexOf(long,ulong,int,ulong,int,int,ulong):int
 						;; size=2 bbWeight=0.50 PerfScore 1.50
 G_M55808_IG07:
        mov      byte  ptr [r15+0x04], 1
        mov      rcx, 0xD1FFAB1E      ; function address
        cmp      dword ptr [rcx], 0
        je       SHORT G_M55808_IG08
        mov      rdi, 0xD1FFAB1E
        call     [rdi]CORINFO_HELP_STOP_FOR_GC
 						;; size=32 bbWeight=0.50 PerfScore 4.25
 G_M55808_IG08:
        mov      rcx, qword ptr [rbp-0x88]
        mov      qword ptr [r15+0x08], rcx
-       jmp      G_M55808_IG36
-       align    [0 bytes for IG20]
+       jmp      G_M55808_IG34
+       align    [0 bytes for IG17]
 						;; size=16 bbWeight=0.50 PerfScore 2.00
 G_M55808_IG09:
        cmp      ebx, r15d
-       jg       G_M55808_IG30
+       jg       G_M55808_IG28
        cmp      byte  ptr [rbp+0x18], 0
        jne      SHORT G_M55808_IG10
        mov      eax, r15d
        sub      eax, ebx
        mov      edx, -1
-       cmp      eax, r15d
-       ja       G_M55808_IG37
-       mov      rdi, r14
-       mov      esi, eax
-       mov      ecx, -1
-       mov      bword ptr [rbp-0xA8], rdi
-       mov      dword ptr [rbp-0x9C], esi
+       mov      edi, -1
        jmp      SHORT G_M55808_IG11
-						;; size=59 bbWeight=0.50 PerfScore 5.50
+						;; size=32 bbWeight=0.50 PerfScore 3.62
 G_M55808_IG10:
        xor      eax, eax
        mov      edx, r15d
        sub      edx, ebx
        inc      edx
-       cmp      edx, r15d
-       ja       G_M55808_IG37
-       mov      edi, edx
-       lea      rdi, bword ptr [r14+2*rdi]
-       mov      esi, r15d
-       sub      esi, edx
-       mov      bword ptr [rbp-0xA8], rdi
-       mov      dword ptr [rbp-0x9C], esi
-       mov      ecx, 1
-						;; size=47 bbWeight=0.50 PerfScore 2.88
+       mov      edi, 1
+						;; size=14 bbWeight=0.50 PerfScore 0.62
 G_M55808_IG11:
        cmp      eax, edx
-       jne      SHORT G_M55808_IG15
-						;; size=4 bbWeight=0.50 PerfScore 0.62
+       je       G_M55808_IG27
+						;; size=8 bbWeight=0.50 PerfScore 0.62
 G_M55808_IG12:
-       mov      r13, qword ptr [rbp-0x50]
-       mov      r14, qword ptr [rbp-0x48]
-						;; size=8 bbWeight=0.25 PerfScore 0.50
-G_M55808_IG13:
-       mov      rdx, gword ptr [rbp-0xB0]
-       add      rdx, 8
-       mov      rdi, bword ptr [rbp-0xA8]
-       mov      esi, dword ptr [rbp-0x9C]
-       mov      rax, 0xD1FFAB1E      ; code for System.Buffers.IndexOfAnyAsciiSearcher:IndexOfAnyCore[ubyte,System.Buffers.IndexOfAnyAsciiSearcher+Negate,System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst,System.Buffers.IndexOfAnyAsciiSearcher+ContainsAnyResultMapper`1[short]](byref,int,byref):ubyte
-       call     [rax]System.Buffers.IndexOfAnyAsciiSearcher:IndexOfAnyCore[ubyte,System.Buffers.IndexOfAnyAsciiSearcher+Negate,System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst,System.Buffers.IndexOfAnyAsciiSearcher+ContainsAnyResultMapper`1[short]](byref,int,byref):ubyte
-       test     eax, eax
-       jne      G_M55808_IG04
-						;; size=44 bbWeight=0.50 PerfScore 3.88
-G_M55808_IG14:
-       mov      eax, -1
-       jmp      G_M55808_IG36
-						;; size=10 bbWeight=0.50 PerfScore 1.12
-G_M55808_IG15:
-       xor      r8d, r8d
-       mov      r9d, eax
+       xor      esi, esi
+       mov      ecx, eax
        test     ebx, ebx
-       jg       SHORT G_M55808_IG20
-						;; size=10 bbWeight=4 PerfScore 7.00
-G_M55808_IG16:
-       mov      r13, qword ptr [rbp-0x50]
-       mov      r14, qword ptr [rbp-0x48]
+       jg       SHORT G_M55808_IG17
+						;; size=8 bbWeight=4 PerfScore 7.00
+G_M55808_IG13:
+       mov      r10, qword ptr [rbp-0x50]
+       mov      r13, qword ptr [rbp-0x48]
 						;; size=8 bbWeight=2 PerfScore 4.00
-G_M55808_IG17:
-       cmp      r9d, r15d
-       jge      SHORT G_M55808_IG18
-       movsxd   r9, r9d
-       cmp      word  ptr [r14+2*r9], 128
+G_M55808_IG14:
+       cmp      ecx, r15d
+       jge      SHORT G_M55808_IG15
+       movsxd   rcx, ecx
+       cmp      word  ptr [r13+2*rcx], 128
        jae      G_M55808_IG04
-						;; size=21 bbWeight=0.50 PerfScore 2.75
-G_M55808_IG18:
-       mov      r13, qword ptr [rbp+0x10]
-       test     r13, r13
-       je       SHORT G_M55808_IG19
-       mov      dword ptr [r13], ebx
-						;; size=13 bbWeight=0.50 PerfScore 1.62
-G_M55808_IG19:
-       jmp      G_M55808_IG36
+						;; size=22 bbWeight=0.50 PerfScore 2.75
+G_M55808_IG15:
+       mov      r14, qword ptr [rbp+0x10]
+       test     r14, r14
+       je       SHORT G_M55808_IG16
+       mov      dword ptr [r14], ebx
+						;; size=12 bbWeight=0.50 PerfScore 1.62
+G_M55808_IG16:
+       jmp      G_M55808_IG34
 						;; size=5 bbWeight=0.50 PerfScore 1.00
-G_M55808_IG20:
-       movsxd   r10, r9d
-       mov      r14, qword ptr [rbp-0x48]
-       movzx    r10, word  ptr [r14+2*r10]
-       movsxd   r11, r8d
-       mov      r13, qword ptr [rbp-0x50]
-       movzx    r11, word  ptr [r13+2*r11]
-       cmp      r10d, 128
+G_M55808_IG17:
+       movsxd   r8, ecx
+       mov      r13, qword ptr [rbp-0x48]
+       movzx    r8, word  ptr [r13+2*r8]
+       movsxd   r9, esi
+       mov      r10, qword ptr [rbp-0x50]
+       movzx    r9, word  ptr [r10+2*r9]
+       cmp      r8d, 128
+       mov      r10, qword ptr [rbp-0x50]
        jge      G_M55808_IG04
-       mov      esi, r10d
-       mov      rdi, 0xD1FFAB1E      ; static handle
-       cmp      byte  ptr [rsi+rdi], 0
+       mov      r11d, r8d
+       mov      r14, 0xD1FFAB1E      ; static handle
+       cmp      byte  ptr [r11+r14], 0
        jne      G_M55808_IG04
-       cmp      r10d, r11d
-       je       SHORT G_M55808_IG26
-						;; size=66 bbWeight=32 PerfScore 432.00
+       cmp      r8d, r9d
+       je       SHORT G_M55808_IG23
+						;; size=71 bbWeight=32 PerfScore 464.00
+G_M55808_IG18:
+       lea      r11d, [r8-0x61]
+       cmp      r11d, 25
+       ja       SHORT G_M55808_IG20
+						;; size=10 bbWeight=16 PerfScore 28.00
+G_M55808_IG19:
+       add      r8d, -32
+       movzx    r8, r8w
+						;; size=8 bbWeight=8 PerfScore 4.00
+G_M55808_IG20:
+       lea      r11d, [r9-0x61]
+       cmp      r11d, 25
+       ja       SHORT G_M55808_IG22
+						;; size=10 bbWeight=16 PerfScore 28.00
 G_M55808_IG21:
-       lea      edi, [r10-0x61]
-       cmp      edi, 25
-       ja       SHORT G_M55808_IG23
-						;; size=9 bbWeight=16 PerfScore 28.00
+       add      r9d, -32
+       movzx    r9, r9w
+						;; size=8 bbWeight=8 PerfScore 4.00
 G_M55808_IG22:
-       add      r10d, -32
-       movzx    r10, r10w
-						;; size=8 bbWeight=8 PerfScore 4.00
-G_M55808_IG23:
-       lea      edi, [r11-0x61]
-       cmp      edi, 25
-       ja       SHORT G_M55808_IG25
-						;; size=9 bbWeight=16 PerfScore 28.00
-G_M55808_IG24:
-       add      r11d, -32
-       movzx    r11, r11w
-						;; size=8 bbWeight=8 PerfScore 4.00
-G_M55808_IG25:
-       cmp      r10d, r11d
-       jne      SHORT G_M55808_IG27
+       cmp      r8d, r9d
+       jne      SHORT G_M55808_IG24
 						;; size=5 bbWeight=16 PerfScore 20.00
-G_M55808_IG26:
-       inc      r8d
-       inc      r9d
-       cmp      r8d, ebx
-       jl       SHORT G_M55808_IG20
-       jmp      G_M55808_IG17
-						;; size=16 bbWeight=16 PerfScore 60.00
-G_M55808_IG27:
-       lea      edi, [r15-0x01]
-       cmp      r9d, edi
-       jge      SHORT G_M55808_IG29
-						;; size=9 bbWeight=4 PerfScore 7.00
-G_M55808_IG28:
-       movsxd   rdi, r9d
-       cmp      word  ptr [r14+2*rdi+0x02], 128
+G_M55808_IG23:
+       inc      esi
+       inc      ecx
+       cmp      esi, ebx
+       jl       SHORT G_M55808_IG17
+       jmp      G_M55808_IG14
+						;; size=13 bbWeight=16 PerfScore 60.00
+G_M55808_IG24:
+       lea      esi, [r15-0x01]
+       cmp      ecx, esi
+       jge      SHORT G_M55808_IG26
+						;; size=8 bbWeight=4 PerfScore 7.00
+G_M55808_IG25:
+       movsxd   rsi, ecx
+       cmp      word  ptr [r13+2*rsi+0x02], 128
        jae      G_M55808_IG04
 						;; size=17 bbWeight=2 PerfScore 8.50
-G_M55808_IG29:
-       add      eax, ecx
+G_M55808_IG26:
+       add      eax, edi
        cmp      eax, edx
-       jne      G_M55808_IG15
-       jmp      G_M55808_IG13
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M55808_IG30:
-       mov      r13, qword ptr [rbp-0x50]
-       mov      rdx, gword ptr [rbp-0xB0]
+       jne      G_M55808_IG12
+						;; size=10 bbWeight=4 PerfScore 6.00
+G_M55808_IG27:
+       mov      eax, -1
+       jmp      G_M55808_IG34
+						;; size=10 bbWeight=0.50 PerfScore 1.12
+G_M55808_IG28:
+       mov      rdx, 0xD1FFAB1E      ; const ptr
+       mov      rdx, gword ptr [rdx]
        add      rdx, 8
-       mov      rdi, r14
+       mov      rdi, r13
        mov      esi, r15d
        mov      rax, 0xD1FFAB1E      ; code for System.Buffers.IndexOfAnyAsciiSearcher:IndexOfAnyCore[ubyte,System.Buffers.IndexOfAnyAsciiSearcher+Negate,System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst,System.Buffers.IndexOfAnyAsciiSearcher+ContainsAnyResultMapper`1[short]](byref,int,byref):ubyte
        call     [rax]System.Buffers.IndexOfAnyAsciiSearcher:IndexOfAnyCore[ubyte,System.Buffers.IndexOfAnyAsciiSearcher+Negate,System.Buffers.IndexOfAnyAsciiSearcher+Default,System.Buffers.SearchValues+FalseConst,System.Buffers.IndexOfAnyAsciiSearcher+ContainsAnyResultMapper`1[short]](byref,int,byref):ubyte
        test     eax, eax
-       mov      r14, qword ptr [rbp-0x48]
+       mov      r10, qword ptr [rbp-0x50]
+       mov      r13, qword ptr [rbp-0x48]
        jne      G_M55808_IG04
-       jmp      G_M55808_IG14
-						;; size=50 bbWeight=0.50 PerfScore 5.12
-G_M55808_IG31:
-       mov      rax, qword ptr [rbp+0x10]
-       mov      qword ptr [rsp], rax
+       jmp      SHORT G_M55808_IG27
+						;; size=53 bbWeight=0.50 PerfScore 5.75
+G_M55808_IG29:
+       mov      r14, qword ptr [rbp+0x10]
+       mov      qword ptr [rsp], r14
        mov      rdi, qword ptr [r12+0x20]
-       mov      rsi, r13
+       mov      rsi, r10
        mov      edx, ebx
-       mov      rcx, r14
+       mov      rcx, r13
        mov      r8d, r15d
        mov      r9d, dword ptr [rbp-0x2C]
        mov      rax, 0xD1FFAB1E      ; function address
        mov      qword ptr [rbp-0x80], rax
-       lea      rax, G_M55808_IG34
+       lea      rax, G_M55808_IG32
        mov      qword ptr [rbp-0x70], rax
        lea      rax, [rbp-0x90]
        mov      r15, qword ptr [rbp-0x58]
        mov      qword ptr [r15+0x08], rax
        mov      byte  ptr [r15+0x04], 0
 						;; size=73 bbWeight=0.50 PerfScore 6.38
-G_M55808_IG32:
+G_M55808_IG30:
        mov      rax, 0xD1FFAB1E      ; function address
 						;; size=10 bbWeight=0.50 PerfScore 0.12
-G_M55808_IG33:
+G_M55808_IG31:
        call     rax ; Interop+Globalization:LastIndexOf(long,ulong,int,ulong,int,int,ulong):int
 						;; size=2 bbWeight=0.50 PerfScore 1.50
-G_M55808_IG34:
+G_M55808_IG32:
        mov      byte  ptr [r15+0x04], 1
        mov      rcx, 0xD1FFAB1E      ; function address
        cmp      dword ptr [rcx], 0
-       je       SHORT G_M55808_IG35
+       je       SHORT G_M55808_IG33
        mov      rdi, 0xD1FFAB1E
        call     [rdi]CORINFO_HELP_STOP_FOR_GC
 						;; size=32 bbWeight=0.50 PerfScore 4.25
-G_M55808_IG35:
+G_M55808_IG33:
        mov      rdi, qword ptr [rbp-0x88]
        mov      qword ptr [r15+0x08], rdi
 						;; size=11 bbWeight=0.50 PerfScore 1.00
-G_M55808_IG36:
-       add      rsp, 152
+G_M55808_IG34:
+       add      rsp, 120
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=18 bbWeight=1 PerfScore 4.25
-G_M55808_IG37:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
-       call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
-       int3     
-						;; size=13 bbWeight=0 PerfScore 0.00
+						;; size=15 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 916, prolog size 57, PerfScore 706.75, instruction count 222, allocated bytes for code 916 (MethodHash=aa3c25ff) for method System.Globalization.CompareInfo:IndexOfOrdinalIgnoreCaseHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)
+; Total bytes of code 775, prolog size 54, PerfScore 721.12, instruction count 193, allocated bytes for code 775 (MethodHash=aa3c25ff) for method System.Globalization.CompareInfo:IndexOfOrdinalIgnoreCaseHelper(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,ulong,ubyte):int:this (FullOpts)
 ; ============================================================

@MihuBot
Copy link
Owner Author

MihuBot commented Oct 8, 2024

@MihaZupan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant