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] Improve char.IsWhiteSpace for non-ASCII #916

Open
MihuBot opened this issue Jan 21, 2025 · 2 comments
Open

[JitDiff X64] [MihaZupan] Improve char.IsWhiteSpace for non-ASCII #916

MihuBot opened this issue Jan 21, 2025 · 2 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jan 21, 2025

Job completed in 15 minutes 27 seconds.
dotnet/runtime#111569

Diffs

Found 267 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 40340218
Total bytes of diff: 40341698
Total bytes of delta: 1480 (0.00 % of base)
Total relative delta: 12.98
    diff is a regression.
    relative diff is a regression.


Top file regressions (bytes):
        1480 : System.Private.CoreLib.dasm (0.02 % of base)

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

Top method regressions (bytes):
         166 (25.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
         109 (15.27 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:IndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
         104 (26.74 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)
          93 (17.75 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToLower(System.String):System.String (FullOpts)
          93 (17.75 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToUpper(System.String):System.String (FullOpts)
          81 (22.63 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToLower(System.ReadOnlySpan`1[ushort],System.Span`1[ushort]) (FullOpts)
          81 (22.63 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToUpper(System.ReadOnlySpan`1[ushort],System.Span`1[ushort]) (FullOpts)
          54 (135.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort (FullOpts)
          54 (135.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:ToUpper(ushort):ushort (FullOpts)
          54 (135.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToLower(ushort):ushort (FullOpts)
          54 (135.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToUpper(ushort):ushort (FullOpts)
          51 (145.71 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:GetBidiCategoryNoBoundsChecks(uint):int (FullOpts)
          51 (124.39 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:GetIsWhiteSpace(ushort):ubyte (FullOpts)
          51 (145.71 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:GetUnicodeCategoryNoBoundsChecks(uint):int (FullOpts)
          50 (10.46 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:CompareStringIgnoreCase(byref,int,byref,int):int (FullOpts)
          45 (53.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:ToLower(uint):uint (FullOpts)
          45 (53.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:ToUpper(uint):uint (FullOpts)
          43 (8.51 % of base) : System.Private.CoreLib.dasm - System.Globalization.OrdinalCasing:ToUpperOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ushort]) (FullOpts)
          43 (16.23 % of base) : System.Private.CoreLib.dasm - System.Globalization.SurrogateCasing:Equal(ushort,ushort,ushort,ushort):ubyte (FullOpts)
          40 (4.73 % of base) : System.Private.CoreLib.dasm - System.Globalization.OrdinalCasing:CompareStringIgnoreCase(byref,int,byref,int):int (FullOpts)
          35 (4.02 % of base) : System.Private.CoreLib.dasm - System.Globalization.OrdinalCasing:LastIndexOf(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
          30 (20.55 % of base) : System.Private.CoreLib.dasm - System.Globalization.SurrogateCasing:ToLower(ushort,ushort,byref,byref) (FullOpts)
          30 (20.55 % of base) : System.Private.CoreLib.dasm - System.Globalization.SurrogateCasing:ToUpper(ushort,ushort,byref,byref) (FullOpts)
          23 (2.47 % of base) : System.Private.CoreLib.dasm - System.Globalization.OrdinalCasing:IndexOf(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)

Top method regressions (percentages):
          51 (145.71 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:GetBidiCategoryNoBoundsChecks(uint):int (FullOpts)
          51 (145.71 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:GetUnicodeCategoryNoBoundsChecks(uint):int (FullOpts)
          54 (135.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort (FullOpts)
          54 (135.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:ToUpper(ushort):ushort (FullOpts)
          54 (135.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToLower(ushort):ushort (FullOpts)
          54 (135.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToUpper(ushort):ushort (FullOpts)
          51 (124.39 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:GetIsWhiteSpace(ushort):ubyte (FullOpts)
          45 (53.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:ToLower(uint):uint (FullOpts)
          45 (53.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.CharUnicodeInfo:ToUpper(uint):uint (FullOpts)
         104 (26.74 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)
         166 (25.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
          81 (22.63 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToLower(System.ReadOnlySpan`1[ushort],System.Span`1[ushort]) (FullOpts)
          81 (22.63 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToUpper(System.ReadOnlySpan`1[ushort],System.Span`1[ushort]) (FullOpts)
          30 (20.55 % of base) : System.Private.CoreLib.dasm - System.Globalization.SurrogateCasing:ToLower(ushort,ushort,byref,byref) (FullOpts)
          30 (20.55 % of base) : System.Private.CoreLib.dasm - System.Globalization.SurrogateCasing:ToUpper(ushort,ushort,byref,byref) (FullOpts)
          93 (17.75 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToLower(System.String):System.String (FullOpts)
          93 (17.75 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:ToUpper(System.String):System.String (FullOpts)
          43 (16.23 % of base) : System.Private.CoreLib.dasm - System.Globalization.SurrogateCasing:Equal(ushort,ushort,ushort,ushort):ubyte (FullOpts)
         109 (15.27 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:IndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
          50 (10.46 % of base) : System.Private.CoreLib.dasm - System.Globalization.InvariantModeCasing:CompareStringIgnoreCase(byref,int,byref,int):int (FullOpts)
          43 (8.51 % of base) : System.Private.CoreLib.dasm - System.Globalization.OrdinalCasing:ToUpperOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ushort]) (FullOpts)
          40 (4.73 % of base) : System.Private.CoreLib.dasm - System.Globalization.OrdinalCasing:CompareStringIgnoreCase(byref,int,byref,int):int (FullOpts)
          35 (4.02 % of base) : System.Private.CoreLib.dasm - System.Globalization.OrdinalCasing:LastIndexOf(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
          23 (2.47 % of base) : System.Private.CoreLib.dasm - System.Globalization.OrdinalCasing:IndexOf(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)

24 total methods with Code Size differences (0 improved, 24 regressed), 235344 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 21, 2025

Top method regressions

166 (25.00 % of base) - System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int
 ; Assembly listing for method System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 28 single block inlinees; 9 inlinees without PGO data
+; 0 inlinees with PGO data; 56 single block inlinees; 21 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 arg0         [V00    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
-;  V02 loc0         [V02,T30] (  5,  7.50)    long  ->  rbx        
+;  V02 loc0         [V02,T37] (  5,  7.50)    long  ->  rdi        
 ;  V03 loc1         [V03    ] (  1,  1   )   byref  ->  [rbp-0x30]  must-init pinned single-def
-;  V04 loc2         [V04,T28] (  4, 10   )    long  ->  r15        
+;  V04 loc2         [V04,T35] (  4, 10   )    long  ->  rdx        
 ;  V05 loc3         [V05    ] (  1,  1   )   byref  ->  [rbp-0x38]  must-init pinned single-def
-;  V06 loc4         [V06,T09] (  5, 33   )    long  ->  r14        
-;  V07 loc5         [V07,T19] (  7, 18.50)    long  ->  r13        
-;  V08 loc6         [V08,T00] ( 12,104   )    long  ->  r12        
-;  V09 loc7         [V09,T01] ( 11, 84   )    long  ->  [rbp-0x40] 
+;  V06 loc4         [V06,T12] (  5, 33   )    long  ->  rax        
+;  V07 loc5         [V07,T26] (  7, 18.50)    long  ->  rbx        
+;  V08 loc6         [V08,T02] ( 12,104   )    long  ->  rcx        
+;  V09 loc7         [V09,T05] ( 10, 76   )    long  ->  rsi        
 ;# V10 OutArgs      [V10    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V11 tmp1         [V11,T10] (  2, 32   )     int  ->  [rbp-0x44]  spill-single-def "impAppendStmt"
+;  V11 tmp1         [V11,T17] (  2, 32   )     int  ->   r8         "impAppendStmt"
 ;* V12 tmp2         [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V13 tmp3         [V13    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V14 tmp4         [V14    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
-;  V15 tmp5         [V15,T07] (  3, 48   )  ushort  ->  [rbp-0x48]  spill-single-def "Inlining Arg"
+;  V15 tmp5         [V15,T03] (  5, 80   )  ushort  ->   r8         "Inlining Arg"
 ;* V16 tmp6         [V16    ] (  0,  0   )  ushort  ->  zero-ref    "Inline return value spill temp"
-;  V17 tmp7         [V17,T20] (  2, 16   )    long  ->  rax         "Inline stloc first use temp"
+;  V17 tmp7         [V17,T27] (  2, 16   )    long  ->  r10         "Inline stloc first use temp"
 ;* V18 tmp8         [V18    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
 ;* V19 tmp9         [V19    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
-;* V20 tmp10        [V20    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V21 tmp11        [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;  V22 tmp12        [V22,T08] (  3, 48   )  ushort  ->  [rbp-0x4C]  spill-single-def "Inlining Arg"
-;* V23 tmp13        [V23    ] (  0,  0   )  ushort  ->  zero-ref    "Inline return value spill temp"
-;  V24 tmp14        [V24,T21] (  2, 16   )    long  ->  rax         "Inline stloc first use temp"
+;* V20 tmp10        [V20    ] (  0,  0   )    long  ->  zero-ref    "Inline return value spill temp"
+;* V21 tmp11        [V21    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;  V22 tmp12        [V22,T13] (  4, 32   )     int  ->  r10         "Inline stloc first use temp"
+;* V23 tmp13        [V23    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V24 tmp14        [V24    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
 ;* V25 tmp15        [V25    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V26 tmp16        [V26    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
-;* V27 tmp17        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V28 tmp18        [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V29 tmp19        [V29    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
-;* V30 tmp20        [V30    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
-;* V31 tmp21        [V31    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
-;* V32 tmp22        [V32,T29] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;  V33 tmp23        [V33,T11] (  2, 32   )  ushort  ->  rcx         "Inlining Arg"
-;  V34 tmp24        [V34,T12] (  2, 32   )  ushort  ->  rdx         "Inlining Arg"
-;  V35 tmp25        [V35,T22] (  2, 16   )  ushort  ->  [rbp-0x50]  ld-addr-op spill-single-def "Inline ldloca(s) first use temp"
-;  V36 tmp26        [V36,T23] (  2, 16   )  ushort  ->  [rbp-0x54]  ld-addr-op spill-single-def "Inline ldloca(s) first use temp"
-;  V37 tmp27        [V37,T13] (  2, 32   )  ushort  ->  [rbp-0x58]  spill-single-def "Inlining Arg"
-;  V38 tmp28        [V38,T14] (  2, 32   )  ushort  ->  [rbp-0x5C]  spill-single-def "Inlining Arg"
-;  V39 tmp29        [V39,T24] (  2, 16   )  ushort  ->  rax         ld-addr-op "Inline ldloca(s) first use temp"
-;  V40 tmp30        [V40,T25] (  2, 16   )  ushort  ->  rdi         ld-addr-op "Inline ldloca(s) first use temp"
-;  V41 tmp31        [V41,T15] (  3, 24   )     int  ->  rdi         "Inline return value spill temp"
-;  V42 tmp32        [V42,T02] (  5, 80   )     int  ->  [rbp-0x60]  spill-single-def "Inlining Arg"
-;  V43 tmp33        [V43,T26] (  2, 16   )    long  ->  rax         "Inline stloc first use temp"
+;* V26 tmp16        [V26    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V27 tmp17        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V28 tmp18        [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V29 tmp19        [V29    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V30 tmp20        [V30    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V31 tmp21        [V31    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V32 tmp22        [V32    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V33 tmp23        [V33    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;  V34 tmp24        [V34,T04] (  5, 80   )  ushort  ->   r9         "Inlining Arg"
+;* V35 tmp25        [V35    ] (  0,  0   )  ushort  ->  zero-ref    "Inline return value spill temp"
+;  V36 tmp26        [V36,T28] (  2, 16   )    long  ->  r10         "Inline stloc first use temp"
+;* V37 tmp27        [V37    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V38 tmp28        [V38    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
+;* V39 tmp29        [V39    ] (  0,  0   )    long  ->  zero-ref    "Inline return value spill temp"
+;* V40 tmp30        [V40    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;  V41 tmp31        [V41,T14] (  4, 32   )     int  ->  r10         "Inline stloc first use temp"
+;* V42 tmp32        [V42    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V43 tmp33        [V43    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
 ;* V44 tmp34        [V44    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V45 tmp35        [V45    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
-;* V46 tmp36        [V46    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
+;* V45 tmp35        [V45    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V46 tmp36        [V46    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V47 tmp37        [V47    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V48 tmp38        [V48    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;  V49 tmp39        [V49,T16] (  3, 24   )     int  ->  rdi         "Inline return value spill temp"
-;  V50 tmp40        [V50,T03] (  5, 80   )     int  ->  [rbp-0x64]  spill-single-def "Inlining Arg"
-;  V51 tmp41        [V51,T27] (  2, 16   )    long  ->  rax         "Inline stloc first use temp"
-;* V52 tmp42        [V52    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V53 tmp43        [V53    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
-;* V54 tmp44        [V54    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V55 tmp45        [V55    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V56 tmp46        [V56    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;  V57 tmp47        [V57,T31] (  3,  3   )   byref  ->  rdi         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
-;  V58 tmp48        [V58,T34] (  2,  2   )     int  ->  rsi         single-def "field V00._length (fldOffset=0x8)" P-INDEP
-;  V59 tmp49        [V59,T32] (  3,  3   )   byref  ->  rdx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V60 tmp50        [V60,T33] (  3,  3   )     int  ->  rcx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;* V61 tmp51        [V61    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V62 tmp52        [V62    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
-;* V63 tmp53        [V63    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V13._reference (fldOffset=0x0)" P-INDEP
-;* V64 tmp54        [V64    ] (  0,  0   )     int  ->  zero-ref    "field V13._length (fldOffset=0x8)" P-INDEP
-;* V65 tmp55        [V65    ] (  0,  0   )   byref  ->  zero-ref    "field V18._reference (fldOffset=0x0)" P-INDEP
-;* V66 tmp56        [V66    ] (  0,  0   )     int  ->  zero-ref    "field V18._length (fldOffset=0x8)" P-INDEP
-;* V67 tmp57        [V67    ] (  0,  0   )   byref  ->  zero-ref    "field V20._reference (fldOffset=0x0)" P-INDEP
-;* V68 tmp58        [V68    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
-;* V69 tmp59        [V69    ] (  0,  0   )   byref  ->  zero-ref    "field V21._reference (fldOffset=0x0)" P-INDEP
-;* V70 tmp60        [V70    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
-;* V71 tmp61        [V71    ] (  0,  0   )   byref  ->  zero-ref    "field V25._reference (fldOffset=0x0)" P-INDEP
-;* V72 tmp62        [V72    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
-;* V73 tmp63        [V73    ] (  0,  0   )   byref  ->  zero-ref    "field V27._reference (fldOffset=0x0)" P-INDEP
-;* V74 tmp64        [V74    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
-;* V75 tmp65        [V75    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
-;* V76 tmp66        [V76    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
-;* V77 tmp67        [V77    ] (  0,  0   )   byref  ->  zero-ref    "field V44._reference (fldOffset=0x0)" P-INDEP
-;* V78 tmp68        [V78    ] (  0,  0   )     int  ->  zero-ref    "field V44._length (fldOffset=0x8)" P-INDEP
-;* V79 tmp69        [V79    ] (  0,  0   )   byref  ->  zero-ref    "field V47._reference (fldOffset=0x0)" P-INDEP
-;* V80 tmp70        [V80    ] (  0,  0   )     int  ->  zero-ref    "field V47._length (fldOffset=0x8)" P-INDEP
-;* V81 tmp71        [V81    ] (  0,  0   )   byref  ->  zero-ref    "field V48._reference (fldOffset=0x0)" P-INDEP
-;* V82 tmp72        [V82    ] (  0,  0   )     int  ->  zero-ref    "field V48._length (fldOffset=0x8)" P-INDEP
-;* V83 tmp73        [V83    ] (  0,  0   )   byref  ->  zero-ref    "field V52._reference (fldOffset=0x0)" P-INDEP
-;* V84 tmp74        [V84    ] (  0,  0   )     int  ->  zero-ref    "field V52._length (fldOffset=0x8)" P-INDEP
-;* V85 tmp75        [V85    ] (  0,  0   )   byref  ->  zero-ref    "field V55._reference (fldOffset=0x0)" P-INDEP
-;* V86 tmp76        [V86    ] (  0,  0   )     int  ->  zero-ref    "field V55._length (fldOffset=0x8)" P-INDEP
-;* V87 tmp77        [V87    ] (  0,  0   )   byref  ->  zero-ref    "field V56._reference (fldOffset=0x0)" P-INDEP
-;* V88 tmp78        [V88    ] (  0,  0   )     int  ->  zero-ref    "field V56._length (fldOffset=0x8)" P-INDEP
-;  V89 tmp79        [V89,T35] (  2,  4   )    long  ->  rbx         "Cast away GC"
-;  V90 tmp80        [V90,T36] (  2,  4   )    long  ->  r15         "Cast away GC"
-;  V91 cse0         [V91,T17] (  3, 24   )     int  ->  rdx         "CSE #04: moderate"
-;  V92 cse1         [V92,T18] (  3, 24   )     int  ->  rsi         "CSE #05: moderate"
-;  V93 cse2         [V93,T04] (  6, 64   )     int  ->  rax         "CSE #01: aggressive"
-;  V94 cse3         [V94,T05] (  6, 48   )     int  ->  rcx         multi-def "CSE #03: aggressive"
-;  V95 cse4         [V95,T06] (  6, 48   )    long  ->  [rbp-0x70]  multi-def "CSE #02: aggressive"
-;  V96 rat0         [V96,T37] (  3,  3   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
+;* V49 tmp39        [V49    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V50 tmp40        [V50    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V51 tmp41        [V51    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V52 tmp42        [V52    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V53 tmp43        [V53    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
+;* V54 tmp44        [V54    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
+;* V55 tmp45        [V55    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
+;* V56 tmp46        [V56,T36] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V57 tmp47        [V57,T18] (  2, 32   )  ushort  ->   r9         "Inlining Arg"
+;  V58 tmp48        [V58,T19] (  2, 32   )  ushort  ->  r10         "Inlining Arg"
+;  V59 tmp49        [V59,T29] (  2, 16   )  ushort  ->  r10         ld-addr-op "Inline ldloca(s) first use temp"
+;  V60 tmp50        [V60,T30] (  2, 16   )  ushort  ->   r9         ld-addr-op "Inline ldloca(s) first use temp"
+;  V61 tmp51        [V61,T20] (  2, 32   )  ushort  ->   r8         "Inlining Arg"
+;  V62 tmp52        [V62,T21] (  2, 32   )  ushort  ->  r11         "Inlining Arg"
+;  V63 tmp53        [V63,T31] (  2, 16   )  ushort  ->  r11         ld-addr-op "Inline ldloca(s) first use temp"
+;  V64 tmp54        [V64,T32] (  2, 16   )  ushort  ->   r8         ld-addr-op "Inline ldloca(s) first use temp"
+;  V65 tmp55        [V65,T22] (  3, 24   )     int  ->   r9         "Inline return value spill temp"
+;  V66 tmp56        [V66,T00] (  7,112   )     int  ->   r9         "Inlining Arg"
+;  V67 tmp57        [V67,T33] (  2, 16   )    long  ->  r10         "Inline stloc first use temp"
+;* V68 tmp58        [V68    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V69 tmp59        [V69    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
+;* V70 tmp60        [V70    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
+;* V71 tmp61        [V71    ] (  0,  0   )    long  ->  zero-ref    "Inline return value spill temp"
+;* V72 tmp62        [V72    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;  V73 tmp63        [V73,T15] (  4, 32   )     int  ->  r10         "Inline stloc first use temp"
+;* V74 tmp64        [V74    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V75 tmp65        [V75    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
+;* V76 tmp66        [V76    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V77 tmp67        [V77    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V78 tmp68        [V78    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V79 tmp69        [V79    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V80 tmp70        [V80    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V81 tmp71        [V81    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V82 tmp72        [V82    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V83 tmp73        [V83    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V84 tmp74        [V84    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;  V85 tmp75        [V85,T23] (  3, 24   )     int  ->   r8         "Inline return value spill temp"
+;  V86 tmp76        [V86,T01] (  7,112   )     int  ->   r8         "Inlining Arg"
+;  V87 tmp77        [V87,T34] (  2, 16   )    long  ->  r11         "Inline stloc first use temp"
+;* V88 tmp78        [V88    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V89 tmp79        [V89    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
+;* V90 tmp80        [V90    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
+;* V91 tmp81        [V91    ] (  0,  0   )    long  ->  zero-ref    "Inline return value spill temp"
+;* V92 tmp82        [V92    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;  V93 tmp83        [V93,T16] (  4, 32   )     int  ->  r11         "Inline stloc first use temp"
+;* V94 tmp84        [V94    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V95 tmp85        [V95    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
+;* V96 tmp86        [V96    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V97 tmp87        [V97    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V98 tmp88        [V98    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V99 tmp89        [V99    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V100 tmp90       [V100    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V101 tmp91       [V101    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V102 tmp92       [V102    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V103 tmp93       [V103    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V104 tmp94       [V104    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;  V105 tmp95       [V105,T38] (  3,  3   )   byref  ->  rdi         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
+;  V106 tmp96       [V106,T41] (  2,  2   )     int  ->  rsi         single-def "field V00._length (fldOffset=0x8)" P-INDEP
+;  V107 tmp97       [V107,T39] (  3,  3   )   byref  ->  rdx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V108 tmp98       [V108,T40] (  3,  3   )     int  ->  rcx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V109 tmp99       [V109    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V12._reference (fldOffset=0x0)" P-INDEP
+;* V110 tmp100      [V110    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
+;* V111 tmp101      [V111    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+;* V112 tmp102      [V112    ] (  0,  0   )     int  ->  zero-ref    "field V13._length (fldOffset=0x8)" P-INDEP
+;* V113 tmp103      [V113    ] (  0,  0   )   byref  ->  zero-ref    "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V114 tmp104      [V114    ] (  0,  0   )     int  ->  zero-ref    "field V18._length (fldOffset=0x8)" P-INDEP
+;* V115 tmp105      [V115    ] (  0,  0   )   byref  ->  zero-ref    "field V21._reference (fldOffset=0x0)" P-INDEP
+;* V116 tmp106      [V116    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
+;* V117 tmp107      [V117    ] (  0,  0   )   byref  ->  zero-ref    "field V23._reference (fldOffset=0x0)" P-INDEP
+;* V118 tmp108      [V118    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
+;* V119 tmp109      [V119    ] (  0,  0   )   byref  ->  zero-ref    "field V25._reference (fldOffset=0x0)" P-INDEP
+;* V120 tmp110      [V120    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
+;* V121 tmp111      [V121    ] (  0,  0   )   byref  ->  zero-ref    "field V26._reference (fldOffset=0x0)" P-INDEP
+;* V122 tmp112      [V122    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
+;* V123 tmp113      [V123    ] (  0,  0   )   byref  ->  zero-ref    "field V27._reference (fldOffset=0x0)" P-INDEP
+;* V124 tmp114      [V124    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
+;* V125 tmp115      [V125    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
+;* V126 tmp116      [V126    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
+;* V127 tmp117      [V127    ] (  0,  0   )   byref  ->  zero-ref    "field V29._reference (fldOffset=0x0)" P-INDEP
+;* V128 tmp118      [V128    ] (  0,  0   )     int  ->  zero-ref    "field V29._length (fldOffset=0x8)" P-INDEP
+;* V129 tmp119      [V129    ] (  0,  0   )   byref  ->  zero-ref    "field V30._reference (fldOffset=0x0)" P-INDEP
+;* V130 tmp120      [V130    ] (  0,  0   )     int  ->  zero-ref    "field V30._length (fldOffset=0x8)" P-INDEP
+;* V131 tmp121      [V131    ] (  0,  0   )   byref  ->  zero-ref    "field V31._reference (fldOffset=0x0)" P-INDEP
+;* V132 tmp122      [V132    ] (  0,  0   )     int  ->  zero-ref    "field V31._length (fldOffset=0x8)" P-INDEP
+;* V133 tmp123      [V133    ] (  0,  0   )   byref  ->  zero-ref    "field V32._reference (fldOffset=0x0)" P-INDEP
+;* V134 tmp124      [V134    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
+;* V135 tmp125      [V135    ] (  0,  0   )   byref  ->  zero-ref    "field V33._reference (fldOffset=0x0)" P-INDEP
+;* V136 tmp126      [V136    ] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
+;* V137 tmp127      [V137    ] (  0,  0   )   byref  ->  zero-ref    "field V37._reference (fldOffset=0x0)" P-INDEP
+;* V138 tmp128      [V138    ] (  0,  0   )     int  ->  zero-ref    "field V37._length (fldOffset=0x8)" P-INDEP
+;* V139 tmp129      [V139    ] (  0,  0   )   byref  ->  zero-ref    "field V40._reference (fldOffset=0x0)" P-INDEP
+;* V140 tmp130      [V140    ] (  0,  0   )     int  ->  zero-ref    "field V40._length (fldOffset=0x8)" P-INDEP
+;* V141 tmp131      [V141    ] (  0,  0   )   byref  ->  zero-ref    "field V42._reference (fldOffset=0x0)" P-INDEP
+;* V142 tmp132      [V142    ] (  0,  0   )     int  ->  zero-ref    "field V42._length (fldOffset=0x8)" P-INDEP
+;* V143 tmp133      [V143    ] (  0,  0   )   byref  ->  zero-ref    "field V44._reference (fldOffset=0x0)" P-INDEP
+;* V144 tmp134      [V144    ] (  0,  0   )     int  ->  zero-ref    "field V44._length (fldOffset=0x8)" P-INDEP
+;* V145 tmp135      [V145    ] (  0,  0   )   byref  ->  zero-ref    "field V45._reference (fldOffset=0x0)" P-INDEP
+;* V146 tmp136      [V146    ] (  0,  0   )     int  ->  zero-ref    "field V45._length (fldOffset=0x8)" P-INDEP
+;* V147 tmp137      [V147    ] (  0,  0   )   byref  ->  zero-ref    "field V46._reference (fldOffset=0x0)" P-INDEP
+;* V148 tmp138      [V148    ] (  0,  0   )     int  ->  zero-ref    "field V46._length (fldOffset=0x8)" P-INDEP
+;* V149 tmp139      [V149    ] (  0,  0   )   byref  ->  zero-ref    "field V47._reference (fldOffset=0x0)" P-INDEP
+;* V150 tmp140      [V150    ] (  0,  0   )     int  ->  zero-ref    "field V47._length (fldOffset=0x8)" P-INDEP
+;* V151 tmp141      [V151    ] (  0,  0   )   byref  ->  zero-ref    "field V48._reference (fldOffset=0x0)" P-INDEP
+;* V152 tmp142      [V152    ] (  0,  0   )     int  ->  zero-ref    "field V48._length (fldOffset=0x8)" P-INDEP
+;* V153 tmp143      [V153    ] (  0,  0   )   byref  ->  zero-ref    "field V49._reference (fldOffset=0x0)" P-INDEP
+;* V154 tmp144      [V154    ] (  0,  0   )     int  ->  zero-ref    "field V49._length (fldOffset=0x8)" P-INDEP
+;* V155 tmp145      [V155    ] (  0,  0   )   byref  ->  zero-ref    "field V50._reference (fldOffset=0x0)" P-INDEP
+;* V156 tmp146      [V156    ] (  0,  0   )     int  ->  zero-ref    "field V50._length (fldOffset=0x8)" P-INDEP
+;* V157 tmp147      [V157    ] (  0,  0   )   byref  ->  zero-ref    "field V51._reference (fldOffset=0x0)" P-INDEP
+;* V158 tmp148      [V158    ] (  0,  0   )     int  ->  zero-ref    "field V51._length (fldOffset=0x8)" P-INDEP
+;* V159 tmp149      [V159    ] (  0,  0   )   byref  ->  zero-ref    "field V52._reference (fldOffset=0x0)" P-INDEP
+;* V160 tmp150      [V160    ] (  0,  0   )     int  ->  zero-ref    "field V52._length (fldOffset=0x8)" P-INDEP
+;* V161 tmp151      [V161    ] (  0,  0   )   byref  ->  zero-ref    "field V68._reference (fldOffset=0x0)" P-INDEP
+;* V162 tmp152      [V162    ] (  0,  0   )     int  ->  zero-ref    "field V68._length (fldOffset=0x8)" P-INDEP
+;* V163 tmp153      [V163    ] (  0,  0   )   byref  ->  zero-ref    "field V72._reference (fldOffset=0x0)" P-INDEP
+;* V164 tmp154      [V164    ] (  0,  0   )     int  ->  zero-ref    "field V72._length (fldOffset=0x8)" P-INDEP
+;* V165 tmp155      [V165    ] (  0,  0   )   byref  ->  zero-ref    "field V74._reference (fldOffset=0x0)" P-INDEP
+;* V166 tmp156      [V166    ] (  0,  0   )     int  ->  zero-ref    "field V74._length (fldOffset=0x8)" P-INDEP
+;* V167 tmp157      [V167    ] (  0,  0   )   byref  ->  zero-ref    "field V76._reference (fldOffset=0x0)" P-INDEP
+;* V168 tmp158      [V168    ] (  0,  0   )     int  ->  zero-ref    "field V76._length (fldOffset=0x8)" P-INDEP
+;* V169 tmp159      [V169    ] (  0,  0   )   byref  ->  zero-ref    "field V77._reference (fldOffset=0x0)" P-INDEP
+;* V170 tmp160      [V170    ] (  0,  0   )     int  ->  zero-ref    "field V77._length (fldOffset=0x8)" P-INDEP
+;* V171 tmp161      [V171    ] (  0,  0   )   byref  ->  zero-ref    "field V78._reference (fldOffset=0x0)" P-INDEP
+;* V172 tmp162      [V172    ] (  0,  0   )     int  ->  zero-ref    "field V78._length (fldOffset=0x8)" P-INDEP
+;* V173 tmp163      [V173    ] (  0,  0   )   byref  ->  zero-ref    "field V79._reference (fldOffset=0x0)" P-INDEP
+;* V174 tmp164      [V174    ] (  0,  0   )     int  ->  zero-ref    "field V79._length (fldOffset=0x8)" P-INDEP
+;* V175 tmp165      [V175    ] (  0,  0   )   byref  ->  zero-ref    "field V80._reference (fldOffset=0x0)" P-INDEP
+;* V176 tmp166      [V176    ] (  0,  0   )     int  ->  zero-ref    "field V80._length (fldOffset=0x8)" P-INDEP
+;* V177 tmp167      [V177    ] (  0,  0   )   byref  ->  zero-ref    "field V81._reference (fldOffset=0x0)" P-INDEP
+;* V178 tmp168      [V178    ] (  0,  0   )     int  ->  zero-ref    "field V81._length (fldOffset=0x8)" P-INDEP
+;* V179 tmp169      [V179    ] (  0,  0   )   byref  ->  zero-ref    "field V82._reference (fldOffset=0x0)" P-INDEP
+;* V180 tmp170      [V180    ] (  0,  0   )     int  ->  zero-ref    "field V82._length (fldOffset=0x8)" P-INDEP
+;* V181 tmp171      [V181    ] (  0,  0   )   byref  ->  zero-ref    "field V83._reference (fldOffset=0x0)" P-INDEP
+;* V182 tmp172      [V182    ] (  0,  0   )     int  ->  zero-ref    "field V83._length (fldOffset=0x8)" P-INDEP
+;* V183 tmp173      [V183    ] (  0,  0   )   byref  ->  zero-ref    "field V84._reference (fldOffset=0x0)" P-INDEP
+;* V184 tmp174      [V184    ] (  0,  0   )     int  ->  zero-ref    "field V84._length (fldOffset=0x8)" P-INDEP
+;* V185 tmp175      [V185    ] (  0,  0   )   byref  ->  zero-ref    "field V88._reference (fldOffset=0x0)" P-INDEP
+;* V186 tmp176      [V186    ] (  0,  0   )     int  ->  zero-ref    "field V88._length (fldOffset=0x8)" P-INDEP
+;* V187 tmp177      [V187    ] (  0,  0   )   byref  ->  zero-ref    "field V92._reference (fldOffset=0x0)" P-INDEP
+;* V188 tmp178      [V188    ] (  0,  0   )     int  ->  zero-ref    "field V92._length (fldOffset=0x8)" P-INDEP
+;* V189 tmp179      [V189    ] (  0,  0   )   byref  ->  zero-ref    "field V94._reference (fldOffset=0x0)" P-INDEP
+;* V190 tmp180      [V190    ] (  0,  0   )     int  ->  zero-ref    "field V94._length (fldOffset=0x8)" P-INDEP
+;* V191 tmp181      [V191    ] (  0,  0   )   byref  ->  zero-ref    "field V96._reference (fldOffset=0x0)" P-INDEP
+;* V192 tmp182      [V192    ] (  0,  0   )     int  ->  zero-ref    "field V96._length (fldOffset=0x8)" P-INDEP
+;* V193 tmp183      [V193    ] (  0,  0   )   byref  ->  zero-ref    "field V97._reference (fldOffset=0x0)" P-INDEP
+;* V194 tmp184      [V194    ] (  0,  0   )     int  ->  zero-ref    "field V97._length (fldOffset=0x8)" P-INDEP
+;* V195 tmp185      [V195    ] (  0,  0   )   byref  ->  zero-ref    "field V98._reference (fldOffset=0x0)" P-INDEP
+;* V196 tmp186      [V196    ] (  0,  0   )     int  ->  zero-ref    "field V98._length (fldOffset=0x8)" P-INDEP
+;* V197 tmp187      [V197    ] (  0,  0   )   byref  ->  zero-ref    "field V99._reference (fldOffset=0x0)" P-INDEP
+;* V198 tmp188      [V198    ] (  0,  0   )     int  ->  zero-ref    "field V99._length (fldOffset=0x8)" P-INDEP
+;* V199 tmp189      [V199    ] (  0,  0   )   byref  ->  zero-ref    "field V100._reference (fldOffset=0x0)" P-INDEP
+;* V200 tmp190      [V200    ] (  0,  0   )     int  ->  zero-ref    "field V100._length (fldOffset=0x8)" P-INDEP
+;* V201 tmp191      [V201    ] (  0,  0   )   byref  ->  zero-ref    "field V101._reference (fldOffset=0x0)" P-INDEP
+;* V202 tmp192      [V202    ] (  0,  0   )     int  ->  zero-ref    "field V101._length (fldOffset=0x8)" P-INDEP
+;* V203 tmp193      [V203    ] (  0,  0   )   byref  ->  zero-ref    "field V102._reference (fldOffset=0x0)" P-INDEP
+;* V204 tmp194      [V204    ] (  0,  0   )     int  ->  zero-ref    "field V102._length (fldOffset=0x8)" P-INDEP
+;* V205 tmp195      [V205    ] (  0,  0   )   byref  ->  zero-ref    "field V103._reference (fldOffset=0x0)" P-INDEP
+;* V206 tmp196      [V206    ] (  0,  0   )     int  ->  zero-ref    "field V103._length (fldOffset=0x8)" P-INDEP
+;* V207 tmp197      [V207    ] (  0,  0   )   byref  ->  zero-ref    "field V104._reference (fldOffset=0x0)" P-INDEP
+;* V208 tmp198      [V208    ] (  0,  0   )     int  ->  zero-ref    "field V104._length (fldOffset=0x8)" P-INDEP
+;  V209 tmp199      [V209,T42] (  2,  4   )    long  ->  rdi         "Cast away GC"
+;  V210 tmp200      [V210,T43] (  2,  4   )    long  ->  rdx         "Cast away GC"
+;  V211 cse0        [V211,T24] (  3, 24   )     int  ->  r10         "CSE #07: moderate"
+;  V212 cse1        [V212,T25] (  3, 24   )     int  ->  r11         "CSE #08: moderate"
+;  V213 cse2        [V213,T06] (  6, 64   )     int  ->   r8         "CSE #01: aggressive"
+;  V214 cse3        [V214,T07] (  7, 56   )     int  ->   r9         multi-def "CSE #02: aggressive"
+;  V215 cse4        [V215,T08] (  6, 48   )    long  ->  r15         multi-def "CSE #03: aggressive"
+;  V216 cse5        [V216,T09] (  6, 48   )    long  ->  r14         multi-def "CSE #04: aggressive"
+;  V217 cse6        [V217,T10] (  6, 48   )    long  ->  r13         multi-def "CSE #05: aggressive"
+;  V218 cse7        [V218,T11] (  6, 48   )    long  ->  r12         multi-def "CSE #06: aggressive"
+;  V219 rat0        [V219,T44] (  3,  3   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
 ;
-; Lcl frame size = 72
+; Lcl frame size = 24
 
 G_M25271_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 72
-       lea      rbp, [rsp+0x70]
+       sub      rsp, 24
+       lea      rbp, [rsp+0x40]
        xor      eax, eax
        mov      qword ptr [rbp-0x30], rax
        mov      qword ptr [rbp-0x38], rax
 						;; size=29 bbWeight=1 PerfScore 9.00
 G_M25271_IG02:
        mov      bword ptr [rbp-0x30], rdi
-       mov      rbx, rdi
        mov      bword ptr [rbp-0x38], rdx
-       mov      r15, rdx
-       mov      edi, ecx
-       lea      r14, [r15+2*rdi-0x02]
+       mov      eax, ecx
+       lea      rax, [rdx+2*rax-0x02]
        sub      esi, ecx
-       movsxd   rdi, esi
-       lea      r13, [rbx+2*rdi]
-       cmp      r13, rbx
+       movsxd   rcx, esi
+       lea      rbx, [rdi+2*rcx]
+       cmp      rbx, rdi
        jb       G_M25271_IG13
-						;; size=39 bbWeight=1 PerfScore 6.00
+						;; size=33 bbWeight=1 PerfScore 5.50
 G_M25271_IG03:
-       mov      r12, r15
-       mov      rdi, r13
-       cmp      r15, r14
+       mov      rcx, rdx
+       mov      rsi, rbx
+       cmp      rdx, rax
        ja       G_M25271_IG12
+       align    [0 bytes for IG04]
 						;; size=15 bbWeight=4 PerfScore 7.00
 G_M25271_IG04:
-       movzx    rax, word  ptr [r12]
-       lea      ecx, [rax-0xD800]
-       cmp      ecx, 0x3FF
+       movzx    r8, word  ptr [rcx]
+       lea      r9d, [r8-0xD800]
+       cmp      r9d, 0x3FF
        ja       G_M25271_IG09
-						;; size=23 bbWeight=16 PerfScore 60.00
+						;; size=24 bbWeight=16 PerfScore 60.00
 G_M25271_IG05:
-       cmp      r12, r14
+       cmp      rcx, rax
        je       G_M25271_IG09
-       movzx    rcx, word  ptr [rdi]
-       lea      edx, [rcx-0xD800]
-       cmp      edx, 0x3FF
+       movzx    r9, word  ptr [rsi]
+       lea      r10d, [r9-0xD800]
+       cmp      r10d, 0x3FF
        ja       SHORT G_M25271_IG06
-       movzx    rdx, word  ptr [rdi+0x02]
-       lea      esi, [rdx-0xDC00]
-       cmp      esi, 0x3FF
+       movzx    r10, word  ptr [rsi+0x02]
+       lea      r11d, [r10-0xDC00]
+       cmp      r11d, 0x3FF
        ja       SHORT G_M25271_IG06
-       movzx    rsi, word  ptr [r12+0x02]
-       lea      r8d, [rsi-0xDC00]
-       cmp      r8d, 0x3FF
+       movzx    r11, word  ptr [rcx+0x02]
+       lea      r15d, [r11-0xDC00]
+       cmp      r15d, 0x3FF
        jbe      SHORT G_M25271_IG07
-						;; size=66 bbWeight=8 PerfScore 100.00
+						;; size=71 bbWeight=8 PerfScore 100.00
 G_M25271_IG06:
-       cmp      eax, ecx
+       cmp      r8d, r9d
        jne      G_M25271_IG12
-       add      rdi, 2
-       mov      qword ptr [rbp-0x40], rdi
-       add      r12, 2
-       mov      rdi, qword ptr [rbp-0x40]
+       add      rsi, 2
+       add      rcx, 2
        jmp      G_M25271_IG11
-						;; size=29 bbWeight=8 PerfScore 46.00
+						;; size=22 bbWeight=8 PerfScore 30.00
 G_M25271_IG07:
-       mov      dword ptr [rbp-0x58], eax
-       mov      dword ptr [rbp-0x5C], esi
-       shl      ecx, 10
-       lea      ecx, [rcx+rdx+D1FFAB1EH]
-       mov      dword ptr [rbp-0x60], ecx
-       cmp      ecx, 0xD1FFAB1E
-       mov      qword ptr [rbp-0x40], rdi
+       shl      r9d, 10
+       lea      r9d, [r9+r10+D1FFAB1EH]
+       cmp      r9d, 0xD1FFAB1E
        ja       G_M25271_IG15
-       mov      edi, ecx
-       mov      rdx, 0xD1FFAB1E      ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       call     [rdx]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       mov      rcx, 0xD1FFAB1E      ; static handle
-       mov      qword ptr [rbp-0x70], rcx
-       movzx    rdi, word  ptr [rcx+2*rax]
-       mov      eax, dword ptr [rbp-0x60]
-       add      edi, eax
-       movzx    rdi, di
-       and      eax, -0x10000
-       or       edi, eax
-       lea      eax, [rdi+D1FFAB1EH]
-       shr      eax, 10
-       movzx    rax, ax
-       mov      dword ptr [rbp-0x50], eax
-       and      edi, 0x3FF
-       add      edi, 0xDC00
-       movzx    rdx, di
-       mov      dword ptr [rbp-0x54], edx
-       mov      edi, dword ptr [rbp-0x58]
-       shl      edi, 10
-       mov      esi, dword ptr [rbp-0x5C]
-       lea      esi, [rdi+rsi+D1FFAB1EH]
-       mov      dword ptr [rbp-0x64], esi
-       cmp      esi, 0xD1FFAB1E
+       mov      r10d, r9d
+       shr      r10d, 9
+       mov      r15, 0xD1FFAB1E      ; static handle
+       movzx    r10, byte  ptr [r10+r15]
+       shl      r10d, 6
+       mov      r14d, r9d
+       shr      r14d, 3
+       and      r14d, 62
+       add      r10d, r14d
+       mov      r14, 0xD1FFAB1E      ; static handle
+       movzx    r10, word  ptr [r10+r14]
+       shl      r10d, 4
+       mov      r13d, r9d
+       and      r13d, 15
+       add      r10d, r13d
+       mov      r13, 0xD1FFAB1E      ; static handle
+       movzx    r10, byte  ptr [r10+r13]
+       mov      r12, 0xD1FFAB1E      ; static handle
+       movzx    r10, word  ptr [r12+2*r10]
+       add      r10d, r9d
+       movzx    r10, r10w
+       and      r9d, -0x10000
+       or       r9d, r10d
+       lea      r10d, [r9+D1FFAB1EH]
+       shr      r10d, 10
+       movzx    r10, r10w
+       and      r9d, 0x3FF
+       add      r9d, 0xDC00
+       movzx    r9, r9w
+       shl      r8d, 10
+       lea      r8d, [r8+r11+D1FFAB1EH]
+       cmp      r8d, 0xD1FFAB1E
        ja       G_M25271_IG15
-       mov      edi, esi
-       mov      r8, 0xD1FFAB1E      ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       call     [r8]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       mov      rcx, qword ptr [rbp-0x70]
-       movzx    rdi, word  ptr [rcx+2*rax]
-       mov      esi, dword ptr [rbp-0x64]
-       add      edi, esi
-       movzx    rdi, di
-       and      esi, -0x10000
-       or       edi, esi
-       lea      eax, [rdi+D1FFAB1EH]
-       shr      eax, 10
-       movzx    rax, ax
-       and      edi, 0x3FF
-       add      edi, 0xDC00
-       movzx    rdi, di
-       mov      ecx, dword ptr [rbp-0x50]
-       cmp      ecx, eax
-       jne      G_M25271_IG12
-       mov      edx, dword ptr [rbp-0x54]
-       cmp      edx, edi
-						;; size=228 bbWeight=8 PerfScore 314.00
+       mov      r11d, r8d
+       shr      r11d, 9
+       movzx    r11, byte  ptr [r11+r15]
+       shl      r11d, 6
+       mov      r15d, r8d
+       shr      r15d, 3
+       and      r15d, 62
+       add      r11d, r15d
+       movzx    r11, word  ptr [r11+r14]
+       shl      r11d, 4
+       mov      r14d, r8d
+       and      r14d, 15
+       add      r11d, r14d
+       movzx    r11, byte  ptr [r11+r13]
+       movzx    r11, word  ptr [r12+2*r11]
+       add      r11d, r8d
+       movzx    r11, r11w
+       and      r8d, -0x10000
+       or       r8d, r11d
+       lea      r11d, [r8+D1FFAB1EH]
+       shr      r11d, 10
+       movzx    r11, r11w
+       and      r8d, 0x3FF
+       add      r8d, 0xDC00
+       movzx    r8, r8w
+       cmp      r10d, r11d
+						;; size=311 bbWeight=8 PerfScore 290.00
 G_M25271_IG08:
        jne      G_M25271_IG12
-       mov      rax, qword ptr [rbp-0x40]
-       add      rax, 4
-       add      r12, 4
-       mov      rdi, rax
-       jmp      SHORT G_M25271_IG11
-						;; size=23 bbWeight=8 PerfScore 38.00
+       cmp      r9d, r8d
+       jne      G_M25271_IG12
+       add      rsi, 4
+       add      rcx, 4
+       jmp      G_M25271_IG11
+						;; size=28 bbWeight=8 PerfScore 38.00
 G_M25271_IG09:
-       mov      qword ptr [rbp-0x40], rdi
-       movzx    rcx, word  ptr [rdi]
-       cmp      eax, ecx
-       je       SHORT G_M25271_IG10
-       mov      dword ptr [rbp-0x48], eax
-       mov      edi, eax
-       mov      rcx, 0xD1FFAB1E      ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       call     [rcx]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       mov      rcx, 0xD1FFAB1E      ; static handle
-       mov      qword ptr [rbp-0x70], rcx
-       movsx    rdi, word  ptr [rcx+2*rax]
-       add      edi, dword ptr [rbp-0x48]
-       movzx    rax, di
-       mov      dword ptr [rbp-0x44], eax
-       mov      rdx, qword ptr [rbp-0x40]
-       movzx    rsi, word  ptr [rdx]
-       mov      dword ptr [rbp-0x4C], esi
-       mov      edi, esi
-       mov      r8, 0xD1FFAB1E      ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       call     [r8]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       mov      rdi, qword ptr [rbp-0x70]
-       movsx    rdi, word  ptr [rdi+2*rax]
-       add      edi, dword ptr [rbp-0x4C]
-       movzx    rdi, di
-       cmp      edi, dword ptr [rbp-0x44]
+       movzx    r9, word  ptr [rsi]
+       cmp      r8d, r9d
+       je       G_M25271_IG10
+       mov      r10d, r8d
+       shr      r10d, 9
+       mov      r15, 0xD1FFAB1E      ; static handle
+       movzx    r10, byte  ptr [r10+r15]
+       shl      r10d, 6
+       mov      r11d, r8d
+       shr      r11d, 3
+       and      r11d, 62
+       add      r10d, r11d
+       mov      r14, 0xD1FFAB1E      ; static handle
+       movzx    r10, word  ptr [r10+r14]
+       shl      r10d, 4
+       mov      r11d, r8d
+       and      r11d, 15
+       add      r10d, r11d
+       mov      r13, 0xD1FFAB1E      ; static handle
+       movzx    r10, byte  ptr [r10+r13]
+       mov      r12, 0xD1FFAB1E      ; static handle
+       movsx    r10, word  ptr [r12+2*r10]
+       add      r8d, r10d
+       movzx    r8, r8w
+       mov      r10d, r9d
+       shr      r10d, 9
+       movzx    r10, byte  ptr [r10+r15]
+       shl      r10d, 6
+       mov      r11d, r9d
+       shr      r11d, 3
+       and      r11d, 62
+       add      r10d, r11d
+       movzx    r10, word  ptr [r10+r14]
+       shl      r10d, 4
+       mov      r11d, r9d
+       and      r11d, 15
+       add      r10d, r11d
+       movzx    r10, byte  ptr [r10+r13]
+       movsx    r10, word  ptr [r12+2*r10]
+       add      r9d, r10d
+       movzx    r9, r9w
+       cmp      r9d, r8d
        jne      SHORT G_M25271_IG12
-						;; size=101 bbWeight=8 PerfScore 280.00
+						;; size=190 bbWeight=8 PerfScore 272.00
 G_M25271_IG10:
-       add      r12, 2
-       mov      rdi, qword ptr [rbp-0x40]
-       add      rdi, 2
-						;; size=12 bbWeight=8 PerfScore 12.00
+       add      rcx, 2
+       add      rsi, 2
+						;; size=8 bbWeight=8 PerfScore 4.00
 G_M25271_IG11:
-       cmp      r12, r14
+       cmp      rcx, rax
        jbe      G_M25271_IG04
 						;; size=9 bbWeight=16 PerfScore 20.00
 G_M25271_IG12:
-       cmp      r12, r14
+       cmp      rcx, rax
        ja       SHORT G_M25271_IG16
-       add      r13, -2
-       cmp      r13, rbx
+       add      rbx, -2
+       cmp      rbx, rdi
        jae      G_M25271_IG03
 						;; size=18 bbWeight=4 PerfScore 11.00
 G_M25271_IG13:
        mov      eax, -1
 						;; size=5 bbWeight=0.50 PerfScore 0.12
 G_M25271_IG14:
-       add      rsp, 72
+       add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M25271_IG15:
        mov      edi, 83
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
        int3     
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 G_M25271_IG16:
-       mov      rax, r13
-       sub      rax, rbx
+       mov      rax, rbx
+       sub      rax, rdi
        mov      rcx, rax
        shr      rcx, 63
        add      rax, rcx
        sar      rax, 1
 						;; size=19 bbWeight=0.50 PerfScore 1.00
 G_M25271_IG17:
-       add      rsp, 72
+       add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 
-; Total bytes of code 664, prolog size 29, PerfScore 910.25, instruction count 175, allocated bytes for code 664 (MethodHash=c4829d48) for method System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
+; Total bytes of code 830, prolog size 29, PerfScore 853.75, instruction count 196, allocated bytes for code 830 (MethodHash=c4829d48) for method System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
 ; ============================================================
54 (135.00 % of base) - System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort
 ; Assembly listing for method System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 9 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  3,  3   )  ushort  ->  rdi         single-def
-;  V01 loc0         [V01,T02] (  2,  2   )    long  ->  rax        
+;  V00 arg0         [V00,T01] (  3,  3   )  ushort  ->  rdi         single-def
+;  V01 loc0         [V01,T03] (  2,  2   )    long  ->  rcx        
 ;* V02 loc1         [V02    ] (  0,  0   )   byref  ->  zero-ref   
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V04 tmp1         [V04    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V05 tmp2         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V07 tmp4         [V07    ] (  0,  0   )   byref  ->  zero-ref    "field V04._reference (fldOffset=0x0)" P-INDEP
-;* V08 tmp5         [V08    ] (  0,  0   )     int  ->  zero-ref    "field V04._length (fldOffset=0x8)" P-INDEP
-;* V09 tmp6         [V09    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
-;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
-;* V11 tmp8         [V11    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-;* V12 tmp9         [V12    ] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
-;  V13 cse0         [V13,T01] (  3,  3   )     int  ->  rbx         "CSE #01: aggressive"
+;* V05 tmp2         [V05    ] (  0,  0   )    long  ->  zero-ref    "Inline return value spill temp"
+;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;  V07 tmp4         [V07,T02] (  4,  4   )     int  ->  rcx         "Inline stloc first use temp"
+;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V09 tmp6         [V09    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
+;* V10 tmp7         [V10    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V11 tmp8         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V12 tmp9         [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V13 tmp10        [V13    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V14 tmp11        [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V15 tmp12        [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V16 tmp13        [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V17 tmp14        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V18 tmp15        [V18    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V19 tmp16        [V19    ] (  0,  0   )   byref  ->  zero-ref    "field V04._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp17        [V20    ] (  0,  0   )     int  ->  zero-ref    "field V04._length (fldOffset=0x8)" P-INDEP
+;* V21 tmp18        [V21    ] (  0,  0   )   byref  ->  zero-ref    "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V22 tmp19        [V22    ] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
+;* V23 tmp20        [V23    ] (  0,  0   )   byref  ->  zero-ref    "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V24 tmp21        [V24    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
+;* V25 tmp22        [V25    ] (  0,  0   )   byref  ->  zero-ref    "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V26 tmp23        [V26    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
+;* V27 tmp24        [V27    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V28 tmp25        [V28    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;* V29 tmp26        [V29    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V12._reference (fldOffset=0x0)" P-INDEP
+;* V30 tmp27        [V30    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
+;* V31 tmp28        [V31    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+;* V32 tmp29        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V13._length (fldOffset=0x8)" P-INDEP
+;* V33 tmp30        [V33    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V34 tmp31        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
+;* V35 tmp32        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
+;* V36 tmp33        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
+;* V37 tmp34        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+;* V38 tmp35        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
+;* V39 tmp36        [V39    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V17._reference (fldOffset=0x0)" P-INDEP
+;* V40 tmp37        [V40    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
+;* V41 tmp38        [V41    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V42 tmp39        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V18._length (fldOffset=0x8)" P-INDEP
+;  V43 cse0         [V43,T00] (  5,  5   )     int  ->  rax         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 
 G_M18090_IG01:
-       push     rbx
-						;; size=1 bbWeight=1 PerfScore 1.00
+						;; size=0 bbWeight=1 PerfScore 0.00
 G_M18090_IG02:
-       movzx    rbx, di
-       mov      edi, ebx
-       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       call     [rax]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
-       mov      rcx, 0xD1FFAB1E      ; static handle
-       movsx    rax, word  ptr [rcx+2*rax]
-       add      eax, ebx
+       movzx    rax, di
+       mov      ecx, eax
+       shr      ecx, 9
+       mov      rdx, 0xD1FFAB1E      ; static handle
+       movzx    rcx, byte  ptr [rcx+rdx]
+       shl      ecx, 6
+       mov      edx, eax
+       shr      edx, 3
+       and      edx, 62
+       add      ecx, edx
+       mov      rdx, 0xD1FFAB1E      ; static handle
+       movzx    rcx, word  ptr [rcx+rdx]
+       shl      ecx, 4
+       mov      edx, eax
+       and      edx, 15
+       add      ecx, edx
+       mov      rdx, 0xD1FFAB1E      ; static handle
+       movzx    rcx, byte  ptr [rcx+rdx]
+       mov      rdx, 0xD1FFAB1E      ; static handle
+       movsx    rcx, word  ptr [rdx+2*rcx]
+       add      eax, ecx
        movzx    rax, ax
-						;; size=37 bbWeight=1 PerfScore 8.50
+						;; size=93 bbWeight=1 PerfScore 15.50
 G_M18090_IG03:
-       pop      rbx
        ret      
-						;; size=2 bbWeight=1 PerfScore 1.50
+						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 40, prolog size 1, PerfScore 11.00, instruction count 11, allocated bytes for code 40 (MethodHash=1f2bb955) for method System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort (FullOpts)
+; Total bytes of code 94, prolog size 0, PerfScore 16.50, instruction count 23, allocated bytes for code 94 (MethodHash=1f2bb955) for method System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort (FullOpts)
 ; ============================================================

Larger list of diffs: https://gist.github.com/MihuBot/e1206ad081a5241c5730af92aacd99b0

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 21, 2025

@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