Skip to content

[JitDiff X64] xtqqczze/dotnet-runtime/string-GetPinnableReference-SystemText #1346

Open

Description

@MihuBot

Job completed in 16 minutes 48 seconds (remote runner delay: 48 seconds).

Using arguments: -NoPRLink

Diffs

Diffs
Found 95 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 41151157
Total bytes of diff: 41150756
Total bytes of delta: -401 (-0.00 % of base)
Total relative delta: -1.34
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
        -395 : System.Private.CoreLib.dasm (-0.01 % of base)
          -6 : System.Net.Security.dasm (-0.00 % of base)

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

Top method improvements (bytes):
         -29 (-10.90 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetChars(byte[],int,int):char[]:this (FullOpts)
         -28 (-10.57 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
         -22 (-7.83 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -16 (-8.16 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetString(byte[],int,int):System.String:this (FullOpts)
         -16 (-8.16 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
         -13 (-7.14 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetString(byte[]):System.String:this (FullOpts)
         -13 (-2.75 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -13 (-2.75 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -13 (-2.75 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -12 (-3.52 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -12 (-3.52 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -12 (-3.52 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -12 (-3.30 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -12 (-3.29 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -12 (-5.31 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding+UTF8EncodingSealed:GetStringForSmallInput(byte[]):System.String:this (FullOpts)
         -11 (-2.34 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -11 (-2.34 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -11 (-2.34 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
          -9 (-3.10 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetCharCount(byte[],int,int):int:this (FullOpts)
          -9 (-3.06 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetString(byte[],int,int):System.String:this (FullOpts)
          -9 (-3.10 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetCharCount(byte[],int,int):int:this (FullOpts)
          -9 (-3.04 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetCharCount(byte[],int,int):int:this (FullOpts)
          -9 (-3.06 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
          -7 (-2.42 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -7 (-2.42 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -7 (-1.75 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
          -7 (-2.37 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -6 (-0.25 % of base) : System.Net.Security.dasm - System.Net.NegotiateAuthenticationPal+ManagedNtlmNegotiateAuthenticationPal:ProcessChallenge(System.ReadOnlySpan`1[byte],byref):byte[]:this (FullOpts)
          -6 (-1.97 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -6 (-1.79 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetBytes(System.String,int,int,byte[],int):int:this (FullOpts)
          -6 (-2.14 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetCharCount(byte[],int,int):int:this (FullOpts)
          -6 (-2.46 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -6 (-1.79 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetBytes(System.String,int,int,byte[],int):int:this (FullOpts)
          -6 (-2.38 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetChars(byte[]):char[]:this (FullOpts)
          -6 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -6 (-1.68 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetBytes(System.String,int,int,byte[],int):int:this (FullOpts)
          -6 (-2.30 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetCharCount(byte[],int,int):int:this (FullOpts)

Top method improvements (percentages):
         -29 (-10.90 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetChars(byte[],int,int):char[]:this (FullOpts)
         -28 (-10.57 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
         -16 (-8.16 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetString(byte[],int,int):System.String:this (FullOpts)
         -16 (-8.16 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
         -22 (-7.83 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -13 (-7.14 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetString(byte[]):System.String:this (FullOpts)
         -12 (-5.31 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding+UTF8EncodingSealed:GetStringForSmallInput(byte[]):System.String:this (FullOpts)
         -12 (-3.52 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -12 (-3.52 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -12 (-3.52 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -12 (-3.30 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -12 (-3.29 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
          -9 (-3.10 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetCharCount(byte[],int,int):int:this (FullOpts)
          -9 (-3.10 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetCharCount(byte[],int,int):int:this (FullOpts)
          -9 (-3.06 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetString(byte[],int,int):System.String:this (FullOpts)
          -9 (-3.06 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
          -9 (-3.04 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetCharCount(byte[],int,int):int:this (FullOpts)
         -13 (-2.75 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -13 (-2.75 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
         -13 (-2.75 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
          -6 (-2.46 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -7 (-2.42 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -7 (-2.42 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -6 (-2.38 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetChars(byte[]):char[]:this (FullOpts)
          -7 (-2.37 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetByteCount(char[],int,int):int:this (FullOpts)
         -11 (-2.34 % of base) : System.Private.CoreLib.dasm - System.Text.UnicodeEncoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -11 (-2.34 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
         -11 (-2.34 % of base) : System.Private.CoreLib.dasm - System.Text.UTF7Encoding:GetBytes(char[],int,int,byte[],int):int:this (FullOpts)
          -6 (-2.30 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetCharCount(byte[],int,int):int:this (FullOpts)
          -6 (-2.14 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetCharCount(byte[],int,int):int:this (FullOpts)
          -6 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -6 (-1.97 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetByteCount(char[],int,int):int:this (FullOpts)
          -6 (-1.79 % of base) : System.Private.CoreLib.dasm - System.Text.ASCIIEncoding:GetBytes(System.String,int,int,byte[],int):int:this (FullOpts)
          -6 (-1.79 % of base) : System.Private.CoreLib.dasm - System.Text.Latin1Encoding:GetBytes(System.String,int,int,byte[],int):int:this (FullOpts)
          -7 (-1.75 % of base) : System.Private.CoreLib.dasm - System.Text.UTF32Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
          -6 (-1.68 % of base) : System.Private.CoreLib.dasm - System.Text.UTF8Encoding:GetBytes(System.String,int,int,byte[],int):int:this (FullOpts)
          -6 (-0.25 % of base) : System.Net.Security.dasm - System.Net.NegotiateAuthenticationPal+ManagedNtlmNegotiateAuthenticationPal:ProcessChallenge(System.ReadOnlySpan`1[byte],byref):byte[]:this (FullOpts)

37 total methods with Code Size differences (37 improved, 0 regressed), 248839 unchanged.

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

Artifacts:

Activity

  1. MihuBot commented on Aug 4, 2025

    @MihuBot
    OwnerAuthor

    Top method improvements

    -29 (-10.90 % of base) - System.Text.Latin1Encoding:GetChars(byte[],int,int):char[]:this
     ; Assembly listing for method System.Text.Latin1Encoding:GetChars(byte[],int,int):char[]:this (FullOpts)
     ; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; partially interruptible
     ; No PGO data
     ; 0 inlinees with PGO data; 0 single block inlinees; 2 inlinees without PGO data
     ; Final local variable assignments
     ;
     ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.Text.Latin1Encoding>
    -;  V01 arg1         [V01,T01] (  6,  5.50)     ref  ->  r15         class-hnd single-def <byte[]>
    -;  V02 arg2         [V02,T02] (  6,  5   )     int  ->  r14         single-def
    +;  V01 arg1         [V01,T02] (  5,  5   )     ref  ->  r14         class-hnd single-def <byte[]>
    +;  V02 arg2         [V02,T01] (  6,  5   )     int  ->  r15         single-def
     ;  V03 arg3         [V03,T00] (  6,  6   )     int  ->  rbx         single-def
    -;  V04 loc0         [V04,T03] (  5,  5   )     ref  ->  r12         class-hnd exact single-def <char[]>
    -;  V05 loc1         [V05,T07] (  3,  2   )    long  ->  rdi        
    -;  V06 loc2         [V06    ] (  2,  2   )     ref  ->  [rbp-0x30]  must-init pinned class-hnd <byte[]>
    -;  V07 loc3         [V07,T06] (  3,  2.50)    long  ->  rsi        
    -;  V08 loc4         [V08    ] (  2,  2   )     ref  ->  [rbp-0x38]  must-init pinned class-hnd <char[]>
    +;  V04 loc0         [V04,T05] (  3,  3   )     ref  ->  r13         class-hnd exact single-def <char[]>
    +;* V05 loc1         [V05    ] (  0,  0   )    long  ->  zero-ref   
    +;  V06 loc2         [V06    ] (  3,  3   )   byref  ->  [rbp-0x28]  must-init pinned
    +;* V07 loc3         [V07    ] (  0,  0   )    long  ->  zero-ref   
    +;  V08 loc4         [V08    ] (  3,  3   )   byref  ->  [rbp-0x30]  must-init pinned
     ;# V09 OutArgs      [V09    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
     ;* V10 tmp1         [V10    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <char[]>
    -;  V11 tmp2         [V11,T10] (  2,  0   )     int  ->  rdi        
    +;  V11 tmp2         [V11,T06] (  2,  0   )     int  ->  rdi        
     ;* V12 tmp3         [V12    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
     ;* V13 tmp4         [V13    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
     ;* V14 tmp5         [V14    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
     ;* V15 tmp6         [V15    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    -;  V16 tmp7         [V16,T08] (  2,  2   )    long  ->  r15         "Cast away GC"
    +;  V16 tmp7         [V16,T03] (  2,  4   )    long  ->  rdi         "Cast away GC"
     ;  V17 tmp8         [V17,T04] (  2,  4   )    long  ->  rsi         "Cast away GC"
    -;  V18 cse0         [V18,T05] (  3,  3   )     int  ->  r13         "CSE #01: aggressive"
    -;  V19 cse1         [V19,T09] (  2,  2   )     int  ->  rdx         "CSE #02: moderate"
     ;
    -; Lcl frame size = 24
    +; Lcl frame size = 16
     
     G_M29692_IG01:
            push     rbp
            push     r15
            push     r14
            push     r13
    -       push     r12
            push     rbx
    -       sub      rsp, 24
    -       lea      rbp, [rsp+0x40]
    +       sub      rsp, 16
    +       lea      rbp, [rsp+0x30]
            xor      eax, eax
    +       mov      qword ptr [rbp-0x28], rax
            mov      qword ptr [rbp-0x30], rax
    -       mov      qword ptr [rbp-0x38], rax
    -       mov      r15, rsi
    -       mov      r14d, edx
    +       mov      r14, rsi
    +       mov      r15d, edx
            mov      ebx, ecx
    -						;; size=37 bbWeight=1 PerfScore 9.75
    +						;; size=35 bbWeight=1 PerfScore 8.75
     G_M29692_IG02:
    -       test     r15, r15
    -       je       G_M29692_IG10
    -       mov      esi, r14d
    +       test     r14, r14
    +       je       SHORT G_M29692_IG05
    +       mov      esi, r15d
            or       esi, ebx
    -       jl       G_M29692_IG11
    -       mov      r13d, dword ptr [r15+0x08]
    -       mov      esi, r13d
    -       sub      esi, r14d
    +       jl       G_M29692_IG06
    +       mov      esi, dword ptr [r14+0x08]
    +       sub      esi, r15d
            cmp      esi, ebx
    -       jl       G_M29692_IG12
    +       jl       G_M29692_IG07
            movsxd   rsi, ebx
            mov      rdi, 0xD1FFAB1E      ; char[]
            call     CORINFO_HELP_NEWARR_1_VC
    -       mov      r12, rax
    -       mov      gword ptr [rbp-0x30], r15
    -       test     r13d, r13d
    -       je       SHORT G_M29692_IG04
    -						;; size=68 bbWeight=1 PerfScore 10.50
    -G_M29692_IG03:
    -       add      r15, 16
    -       mov      rdi, r15
    -       jmp      SHORT G_M29692_IG05
    -						;; size=9 bbWeight=0.50 PerfScore 1.25
    -G_M29692_IG04:
    -       xor      edi, edi
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M29692_IG05:
    -       mov      gword ptr [rbp-0x38], r12
    -       mov      edx, dword ptr [r12+0x08]
    -       test     edx, edx
    -       je       SHORT G_M29692_IG09
    -       lea      rsi, bword ptr [r12+0x10]
    -						;; size=18 bbWeight=1 PerfScore 4.75
    -G_M29692_IG06:
    -       movsxd   rdx, r14d
    +       mov      r13, rax
    +       add      r14, 16
    +       mov      bword ptr [rbp-0x28], r14
    +       mov      rdi, bword ptr [rbp-0x28]
    +       lea      rdx, bword ptr [r13+0x10]
    +       mov      bword ptr [rbp-0x30], rdx
    +       mov      rsi, bword ptr [rbp-0x30]
    +       movsxd   rdx, r15d
            add      rdi, rdx
            mov      edx, ebx
            mov      rax, 0xD1FFAB1E      ; code for System.Text.Latin1Utility:WidenLatin1ToUtf16_Sse2(ptr,ptr,nuint)
            call     [rax]System.Text.Latin1Utility:WidenLatin1ToUtf16_Sse2(ptr,ptr,nuint)
    -       xor      rax, rax
    -       mov      gword ptr [rbp-0x38], rax
    -						;; size=26 bbWeight=1 PerfScore 5.25
    -G_M29692_IG07:
    -       mov      gword ptr [rbp-0x30], rax
    -       mov      rax, r12
    +       xor      eax, eax
    +       mov      bword ptr [rbp-0x30], rax
    +						;; size=102 bbWeight=1 PerfScore 18.00
    +G_M29692_IG03:
    +       mov      bword ptr [rbp-0x28], rax
    +       mov      rax, r13
     						;; size=7 bbWeight=1 PerfScore 1.25
    -G_M29692_IG08:
    -       add      rsp, 24
    +G_M29692_IG04:
    +       add      rsp, 16
            pop      rbx
    -       pop      r12
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
    -						;; size=15 bbWeight=1 PerfScore 4.25
    -G_M29692_IG09:
    -       xor      esi, esi
    -       jmp      SHORT G_M29692_IG06
    -						;; size=4 bbWeight=0.50 PerfScore 1.12
    -G_M29692_IG10:
    +						;; size=13 bbWeight=1 PerfScore 3.75
    +G_M29692_IG05:
            mov      edi, 10
            mov      esi, 49
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentNullException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
    -G_M29692_IG11:
    +G_M29692_IG06:
            mov      edi, 21
            mov      esi, 27
    -       test     r14d, r14d
    +       test     r15d, r15d
            cmovge   edi, esi
            mov      esi, 13
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=34 bbWeight=0 PerfScore 0.00
    -G_M29692_IG12:
    +G_M29692_IG07:
            mov      edi, 10
            mov      esi, 3
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
     
    -; Total bytes of code 266, prolog size 29, PerfScore 38.25, instruction count 77, allocated bytes for code 266 (MethodHash=15c58c03) for method System.Text.Latin1Encoding:GetChars(byte[],int,int):char[]:this (FullOpts)
    +; Total bytes of code 237, prolog size 27, PerfScore 31.75, instruction count 66, allocated bytes for code 237 (MethodHash=15c58c03) for method System.Text.Latin1Encoding:GetChars(byte[],int,int):char[]:this (FullOpts)
     ; ============================================================
    -28 (-10.57 % of base) - System.Text.Latin1Encoding:GetString(byte[],int,int):System.String:this
     ; Assembly listing for method System.Text.Latin1Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
     ; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; partially interruptible
     ; No PGO data
     ; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
     ; Final local variable assignments
     ;
     ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.Text.Latin1Encoding>
    -;  V01 arg1         [V01,T01] (  6,  5.50)     ref  ->  r15         class-hnd single-def <byte[]>
    -;  V02 arg2         [V02,T02] (  6,  5   )     int  ->  r14         single-def
    +;  V01 arg1         [V01,T03] (  5,  5   )     ref  ->  r14         class-hnd single-def <byte[]>
    +;  V02 arg2         [V02,T02] (  6,  5   )     int  ->  r15         single-def
     ;  V03 arg3         [V03,T00] (  6,  6   )     int  ->  rbx         single-def
    -;  V04 loc0         [V04,T06] (  3,  2   )    long  ->  rdi        
    -;  V05 loc1         [V05    ] (  2,  2   )     ref  ->  [rbp-0x30]  must-init pinned class-hnd <byte[]>
    +;* V04 loc0         [V04    ] (  0,  0   )    long  ->  zero-ref   
    +;  V05 loc1         [V05    ] (  3,  3   )   byref  ->  [rbp-0x28]  must-init pinned
     ;* V06 loc2         [V06    ] (  0,  0   )    long  ->  zero-ref   
    -;  V07 loc3         [V07    ] (  3,  2   )   byref  ->  [rbp-0x38]  must-init pinned
    +;  V07 loc3         [V07    ] (  3,  3   )   byref  ->  [rbp-0x30]  must-init pinned
     ;# V08 OutArgs      [V08    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;  V09 tmp1         [V09,T03] (  4,  6   )     ref  ->  r12         class-hnd exact single-def "Spill before store to pinned local" <System.String>
    -;* V10 tmp2         [V10    ] (  0,  0   )     ref  ->  zero-ref    single-def
    -;* V11 tmp3         [V11    ] (  0,  0   )     ref  ->  zero-ref    single-def
    -;* V12 tmp4         [V12    ] (  0,  0   )     ref  ->  zero-ref    single-def
    -;* V13 tmp5         [V13    ] (  0,  0   )     ref  ->  zero-ref    single-def
    -;  V14 tmp6         [V14,T05] (  3,  2   )     ref  ->  r12        
    -;  V15 tmp7         [V15,T07] (  3,  2   )    long  ->  rsi        
    -;  V16 tmp8         [V16,T10] (  2,  0   )     int  ->  rdi        
    -;* V17 tmp9         [V17    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.String>
    -;* V18 tmp10        [V18    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    -;* V19 tmp11        [V19    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    -;* V20 tmp12        [V20    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    -;  V21 tmp13        [V21,T08] (  2,  2   )    long  ->  r15         "Cast away GC"
    -;  V22 tmp14        [V22,T09] (  2,  2   )    long  ->  rsi         "Cast away GC"
    -;  V23 cse0         [V23,T04] (  3,  3   )     int  ->  r13         "CSE #01: aggressive"
    +;  V09 tmp1         [V09,T01] (  4,  8   )     ref  ->  r13         class-hnd exact single-def "impAppendStmt" <System.String>
    +;  V10 tmp2         [V10,T07] (  2,  0   )     int  ->  rdi        
    +;* V11 tmp3         [V11    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    +;* V12 tmp4         [V12    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    +;* V13 tmp5         [V13    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    +;  V14 tmp6         [V14,T04] (  2,  4   )    long  ->  rdi         "Cast away GC"
    +;  V15 tmp7         [V15,T05] (  2,  4   )    long  ->  rsi         "Cast away GC"
    +;  V16 tmp8         [V16,T06] (  2,  4   )    long  ->  rsi         "argument with side effect"
     ;
    -; Lcl frame size = 24
    +; Lcl frame size = 16
     
     G_M31170_IG01:
            push     rbp
            push     r15
            push     r14
            push     r13
    -       push     r12
            push     rbx
    -       sub      rsp, 24
    -       lea      rbp, [rsp+0x40]
    +       sub      rsp, 16
    +       lea      rbp, [rsp+0x30]
            xor      eax, eax
    +       mov      qword ptr [rbp-0x28], rax
            mov      qword ptr [rbp-0x30], rax
    -       mov      qword ptr [rbp-0x38], rax
    -       mov      r15, rsi
    -       mov      r14d, edx
    +       mov      r14, rsi
    +       mov      r15d, edx
            mov      ebx, ecx
    -						;; size=37 bbWeight=1 PerfScore 9.75
    +						;; size=35 bbWeight=1 PerfScore 8.75
     G_M31170_IG02:
    -       test     r15, r15
    -       je       G_M31170_IG11
    -       mov      edi, r14d
    +       test     r14, r14
    +       je       SHORT G_M31170_IG05
    +       mov      edi, r15d
            or       edi, ebx
    -       jl       G_M31170_IG12
    -       mov      r13d, dword ptr [r15+0x08]
    -       mov      edi, r13d
    -       sub      edi, r14d
    +       jl       G_M31170_IG06
    +       mov      edi, dword ptr [r14+0x08]
    +       sub      edi, r15d
            cmp      edi, ebx
    -       jl       G_M31170_IG13
    +       jl       G_M31170_IG07
            mov      edi, ebx
            mov      rax, 0xD1FFAB1E      ; code for System.String:FastAllocateString(int):System.String
            call     [rax]System.String:FastAllocateString(int):System.String
    -       mov      r12, rax
    -       mov      gword ptr [rbp-0x30], r15
    -       test     r13d, r13d
    -       je       SHORT G_M31170_IG04
    -						;; size=64 bbWeight=1 PerfScore 12.50
    -G_M31170_IG03:
    -       add      r15, 16
    -       mov      rdi, r15
    -       jmp      SHORT G_M31170_IG05
    -						;; size=9 bbWeight=0.50 PerfScore 1.25
    -G_M31170_IG04:
    -       xor      edi, edi
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M31170_IG05:
    -       test     r12, r12
    -       je       SHORT G_M31170_IG07
    -						;; size=5 bbWeight=1 PerfScore 1.25
    -G_M31170_IG06:
    -       lea      rdx, bword ptr [r12+0x0C]
    -       mov      bword ptr [rbp-0x38], rdx
    -       mov      rsi, bword ptr [rbp-0x38]
    -       jmp      SHORT G_M31170_IG08
    -						;; size=15 bbWeight=0.50 PerfScore 2.25
    -G_M31170_IG07:
    -       xor      r12, r12
    -       xor      esi, esi
    -						;; size=5 bbWeight=0.50 PerfScore 0.25
    -G_M31170_IG08:
    -       movsxd   rdx, r14d
    +       mov      r13, rax
    +       add      r14, 16
    +       mov      bword ptr [rbp-0x28], r14
    +       mov      rdi, bword ptr [rbp-0x28]
    +       cmp      byte  ptr [r13], r13b
    +       lea      rsi, bword ptr [r13+0x0C]
    +       mov      bword ptr [rbp-0x30], rsi
    +       mov      rsi, bword ptr [rbp-0x30]
    +       movsxd   rdx, r15d
            add      rdi, rdx
            mov      edx, ebx
            mov      rax, 0xD1FFAB1E      ; code for System.Text.Latin1Utility:WidenLatin1ToUtf16_Sse2(ptr,ptr,nuint)
            call     [rax]System.Text.Latin1Utility:WidenLatin1ToUtf16_Sse2(ptr,ptr,nuint)
            xor      eax, eax
    -       mov      bword ptr [rbp-0x38], rax
    -						;; size=26 bbWeight=1 PerfScore 5.25
    -G_M31170_IG09:
    -       mov      gword ptr [rbp-0x30], rax
    -       mov      rax, r12
    +       mov      bword ptr [rbp-0x30], rax
    +						;; size=102 bbWeight=1 PerfScore 23.00
    +G_M31170_IG03:
    +       mov      bword ptr [rbp-0x28], rax
    +       mov      rax, r13
     						;; size=7 bbWeight=1 PerfScore 1.25
    -G_M31170_IG10:
    -       add      rsp, 24
    +G_M31170_IG04:
    +       add      rsp, 16
            pop      rbx
    -       pop      r12
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
    -						;; size=15 bbWeight=1 PerfScore 4.25
    -G_M31170_IG11:
    +						;; size=13 bbWeight=1 PerfScore 3.75
    +G_M31170_IG05:
            mov      edi, 10
            mov      esi, 49
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentNullException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
    -G_M31170_IG12:
    +G_M31170_IG06:
            mov      edi, 21
            mov      esi, 27
    -       test     r14d, r14d
    +       test     r15d, r15d
            cmovge   edi, esi
            mov      esi, 13
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=34 bbWeight=0 PerfScore 0.00
    -G_M31170_IG13:
    +G_M31170_IG07:
            mov      edi, 10
            mov      esi, 3
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
     
    -; Total bytes of code 265, prolog size 29, PerfScore 38.12, instruction count 78, allocated bytes for code 265 (MethodHash=fdd8863d) for method System.Text.Latin1Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
    +; Total bytes of code 237, prolog size 27, PerfScore 36.75, instruction count 67, allocated bytes for code 237 (MethodHash=fdd8863d) for method System.Text.Latin1Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
     ; ============================================================
    -22 (-7.83 % of base) - System.Text.Latin1Encoding:GetChars(byte[],int,int,char[],int):int:this
     ; Assembly listing for method System.Text.Latin1Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
     ; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; partially interruptible
     ; No PGO data
     ; 0 inlinees with PGO data; 0 single block inlinees; 2 inlinees without PGO data
     ; Final local variable assignments
     ;
    -;  V00 this         [V00,T06] (  3,  2   )     ref  ->  rdi         this class-hnd single-def <System.Text.Latin1Encoding>
    -;  V01 arg1         [V01,T01] (  6,  5.50)     ref  ->  rsi         class-hnd single-def <byte[]>
    -;  V02 arg2         [V02,T03] (  6,  5   )     int  ->  rdx         single-def
    +;  V00 this         [V00,T05] (  3,  2   )     ref  ->  rdi         this class-hnd single-def <System.Text.Latin1Encoding>
    +;  V01 arg1         [V01,T02] (  5,  5   )     ref  ->  rsi         class-hnd single-def <byte[]>
    +;  V02 arg2         [V02,T01] (  6,  5   )     int  ->  rdx         single-def
     ;  V03 arg3         [V03,T00] (  7,  7   )     int  ->  rbx         single-def
    -;  V04 arg4         [V04,T02] (  6,  5.50)     ref  ->   r8         class-hnd single-def <char[]>
    +;  V04 arg4         [V04,T03] (  5,  5   )     ref  ->   r8         class-hnd single-def <char[]>
     ;  V05 arg5         [V05,T04] (  5,  5   )     int  ->   r9         single-def
    -;  V06 loc0         [V06,T08] (  3,  2   )    long  ->  rax        
    -;  V07 loc1         [V07    ] (  1,  1   )     ref  ->  [rbp-0x10]  must-init pinned class-hnd single-def <byte[]>
    -;  V08 loc2         [V08,T09] (  3,  2   )    long  ->   r8        
    -;  V09 loc3         [V09    ] (  1,  1   )     ref  ->  [rbp-0x18]  must-init pinned class-hnd single-def <char[]>
    +;* V06 loc0         [V06    ] (  0,  0   )    long  ->  zero-ref   
    +;  V07 loc1         [V07    ] (  2,  2   )   byref  ->  [rbp-0x10]  must-init pinned single-def
    +;* V08 loc2         [V08    ] (  0,  0   )    long  ->  zero-ref   
    +;  V09 loc3         [V09    ] (  2,  2   )   byref  ->  [rbp-0x18]  must-init pinned single-def
     ;# V10 OutArgs      [V10    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;  V11 tmp1         [V11,T12] (  3,  0   )     int  ->  rdi        
    -;  V12 tmp2         [V12,T13] (  2,  0   )     int  ->  rdi        
    +;  V11 tmp1         [V11,T09] (  3,  0   )     int  ->  rdi        
    +;  V12 tmp2         [V12,T10] (  2,  0   )     int  ->  rdi        
     ;* V13 tmp3         [V13    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
     ;* V14 tmp4         [V14    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
     ;* V15 tmp5         [V15    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
     ;* V16 tmp6         [V16    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
     ;* V17 tmp7         [V17    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
     ;* V18 tmp8         [V18    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    -;  V19 tmp9         [V19,T10] (  2,  2   )    long  ->  rax         "Cast away GC"
    -;  V20 tmp10        [V20,T11] (  2,  2   )    long  ->   r8         "Cast away GC"
    -;  V21 cse0         [V21,T05] (  4,  4   )     int  ->  rcx         "CSE #02: aggressive"
    -;  V22 cse1         [V22,T07] (  3,  3   )     int  ->  rax         "CSE #01: aggressive"
    +;  V19 tmp9         [V19,T06] (  2,  4   )    long  ->  rcx         "Cast away GC"
    +;  V20 tmp10        [V20,T07] (  2,  4   )    long  ->  rsi         "Cast away GC"
    +;  V21 cse0         [V21,T08] (  3,  3   )     int  ->  rax         "CSE #01: aggressive"
     ;
     ; Lcl frame size = 24
     
     G_M38396_IG01:
            push     rbp
            push     rbx
            sub      rsp, 24
            lea      rbp, [rsp+0x20]
            xor      eax, eax
            mov      qword ptr [rbp-0x10], rax
            mov      qword ptr [rbp-0x18], rax
            mov      ebx, ecx
     						;; size=23 bbWeight=1 PerfScore 5.25
     G_M38396_IG02:
            test     rsi, rsi
    -       je       G_M38396_IG10
    +       je       SHORT G_M38396_IG04
            test     r8, r8
    -       je       G_M38396_IG11
    +       je       SHORT G_M38396_IG05
            mov      eax, edx
            or       eax, ebx
    -       jl       G_M38396_IG13
    +       jl       G_M38396_IG07
            mov      eax, dword ptr [rsi+0x08]
    -       mov      ecx, eax
    -       sub      ecx, edx
    -       cmp      ecx, ebx
    -       jl       G_M38396_IG14
    -       mov      ecx, dword ptr [r8+0x08]
    -       cmp      ecx, r9d
    -       jb       G_M38396_IG15
    -       mov      gword ptr [rbp-0x10], rsi
    -       test     eax, eax
    -       je       SHORT G_M38396_IG04
    -						;; size=64 bbWeight=1 PerfScore 13.25
    -G_M38396_IG03:
    +       sub      eax, edx
    +       cmp      eax, ebx
    +       jl       G_M38396_IG08
    +       mov      eax, dword ptr [r8+0x08]
    +       cmp      eax, r9d
    +       jb       G_M38396_IG09
            add      rsi, 16
    -       mov      rax, rsi
    -       jmp      SHORT G_M38396_IG05
    -						;; size=9 bbWeight=0.50 PerfScore 1.25
    -G_M38396_IG04:
    -       xor      eax, eax
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M38396_IG05:
    -       mov      gword ptr [rbp-0x18], r8
    -       test     ecx, ecx
    -       je       SHORT G_M38396_IG07
    -						;; size=8 bbWeight=1 PerfScore 2.25
    -G_M38396_IG06:
    +       mov      bword ptr [rbp-0x10], rsi
    +       mov      rcx, bword ptr [rbp-0x10]
            add      r8, 16
    -       jmp      SHORT G_M38396_IG08
    -						;; size=6 bbWeight=0.50 PerfScore 1.12
    -G_M38396_IG07:
    -       xor      r8d, r8d
    -						;; size=3 bbWeight=0.50 PerfScore 0.12
    -G_M38396_IG08:
    -       sub      ecx, r9d
    -       cmp      ecx, ebx
    -       jl       G_M38396_IG16
    -       movsxd   rsi, r9d
    -       lea      rsi, [r8+2*rsi]
    +       mov      bword ptr [rbp-0x18], r8
    +       mov      rsi, bword ptr [rbp-0x18]
    +       sub      eax, r9d
    +       cmp      eax, ebx
    +       jl       G_M38396_IG10
    +       movsxd   rdi, r9d
    +       lea      rsi, [rsi+2*rdi]
            movsxd   rdi, edx
    -       add      rdi, rax
    +       add      rdi, rcx
            mov      edx, ebx
            mov      rax, 0xD1FFAB1E      ; code for System.Text.Latin1Utility:WidenLatin1ToUtf16_Sse2(ptr,ptr,nuint)
            call     [rax]System.Text.Latin1Utility:WidenLatin1ToUtf16_Sse2(ptr,ptr,nuint)
            mov      eax, ebx
    -						;; size=40 bbWeight=1 PerfScore 6.50
    -G_M38396_IG09:
    +						;; size=110 bbWeight=1 PerfScore 21.75
    +G_M38396_IG03:
            add      rsp, 24
            pop      rbx
            pop      rbp
            ret      
     						;; size=7 bbWeight=1 PerfScore 2.25
    -G_M38396_IG10:
    +G_M38396_IG04:
            mov      edi, 10
    -       jmp      SHORT G_M38396_IG12
    +       jmp      SHORT G_M38396_IG06
     						;; size=7 bbWeight=0 PerfScore 0.00
    -G_M38396_IG11:
    +G_M38396_IG05:
            mov      edi, 14
     						;; size=5 bbWeight=0 PerfScore 0.00
    -G_M38396_IG12:
    +G_M38396_IG06:
            mov      esi, 49
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentNullException(int,int)
            int3     
     						;; size=18 bbWeight=0 PerfScore 0.00
    -G_M38396_IG13:
    +G_M38396_IG07:
            mov      edi, 11
            mov      esi, 12
            test     edx, edx
            cmovge   edi, esi
            mov      esi, 13
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=33 bbWeight=0 PerfScore 0.00
    -G_M38396_IG14:
    +G_M38396_IG08:
            mov      edi, 10
            mov      esi, 3
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
    -G_M38396_IG15:
    +G_M38396_IG09:
            mov      edi, 15
            xor      esi, esi
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=20 bbWeight=0 PerfScore 0.00
    -G_M38396_IG16:
    +G_M38396_IG10:
            mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowCharsOverflow():this
            call     [rax]System.Text.Encoding:ThrowCharsOverflow():this
            int3     
     						;; size=13 bbWeight=0 PerfScore 0.00
     
    -; Total bytes of code 281, prolog size 21, PerfScore 32.12, instruction count 79, allocated bytes for code 281 (MethodHash=1d816a03) for method System.Text.Latin1Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
    +; Total bytes of code 259, prolog size 21, PerfScore 29.25, instruction count 71, allocated bytes for code 259 (MethodHash=1d816a03) for method System.Text.Latin1Encoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
     ; ============================================================
    -16 (-8.16 % of base) - System.Text.ASCIIEncoding:GetString(byte[],int,int):System.String:this
     ; Assembly listing for method System.Text.ASCIIEncoding:GetString(byte[],int,int):System.String:this (FullOpts)
     ; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; partially interruptible
     ; No PGO data
     ; Final local variable assignments
     ;
     ;  V00 this         [V00,T03] (  3,  2.50)     ref  ->  rax         this class-hnd single-def <System.Text.ASCIIEncoding>
    -;  V01 arg1         [V01,T01] (  6,  5   )     ref  ->  rsi         class-hnd single-def <byte[]>
    -;  V02 arg2         [V02,T02] (  6,  4.50)     int  ->  rdx         single-def
    +;  V01 arg1         [V01,T02] (  5,  4.50)     ref  ->  rsi         class-hnd single-def <byte[]>
    +;  V02 arg2         [V02,T01] (  6,  4.50)     int  ->  rdx         single-def
     ;  V03 arg3         [V03,T00] (  6,  5.50)     int  ->  rcx         single-def
    -;  V04 loc0         [V04,T06] (  3,  1.50)    long  ->  rdi        
    -;  V05 loc1         [V05    ] (  1,  0.50)     ref  ->  [rbp-0x08]  must-init pinned class-hnd single-def <byte[]>
    -;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;  V07 tmp1         [V07,T07] (  2,  0   )     int  ->  rdi        
    -;  V08 tmp2         [V08,T05] (  2,  2   )    long  ->  rsi         "Cast away GC"
    -;  V09 cse0         [V09,T04] (  3,  2.50)     int  ->  rdi         "CSE #01: aggressive"
    +;  V04 loc0         [V04    ] (  2,  1   )   byref  ->  [rbp-0x08]  must-init pinned single-def
    +;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    +;  V06 tmp1         [V06,T06] (  2,  0   )     int  ->  rdi        
    +;  V07 tmp2         [V07,T04] (  2,  2   )    long  ->  rdi         "Cast away GC"
    +;  V08 tmp3         [V08,T05] (  2,  2   )    long  ->  rdi         "argument with side effect"
     ;
     ; Lcl frame size = 16
     
     G_M37020_IG01:
            push     rbp
            sub      rsp, 16
            lea      rbp, [rsp+0x10]
            xor      eax, eax
            mov      qword ptr [rbp-0x08], rax
            mov      rax, rdi
     						;; size=19 bbWeight=1 PerfScore 3.25
     G_M37020_IG02:
            test     rsi, rsi
    -       je       SHORT G_M37020_IG09
    +       je       SHORT G_M37020_IG07
            mov      edi, edx
            or       edi, ecx
    -       jl       SHORT G_M37020_IG10
    +       jl       SHORT G_M37020_IG08
            mov      edi, dword ptr [rsi+0x08]
    -       mov      r8d, edi
    -       sub      r8d, edx
    -       cmp      r8d, ecx
    -       jl       G_M37020_IG11
    +       sub      edi, edx
    +       cmp      edi, ecx
    +       jl       SHORT G_M37020_IG09
            test     ecx, ecx
    -       je       SHORT G_M37020_IG07
    -						;; size=33 bbWeight=1 PerfScore 7.75
    +       je       SHORT G_M37020_IG05
    +						;; size=24 bbWeight=1 PerfScore 7.50
     G_M37020_IG03:
    -       mov      gword ptr [rbp-0x08], rsi
    -       test     edi, edi
    -       je       SHORT G_M37020_IG04
            add      rsi, 16
    -       mov      rdi, rsi
    -       jmp      SHORT G_M37020_IG05
    -						;; size=17 bbWeight=0.50 PerfScore 2.38
    -G_M37020_IG04:
    -       xor      edi, edi
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M37020_IG05:
    +       mov      bword ptr [rbp-0x08], rsi
    +       mov      rdi, bword ptr [rbp-0x08]
            movsxd   rsi, edx
            add      rdi, rsi
            mov      esi, ecx
            mov      rdx, rax
            mov      rax, 0xD1FFAB1E      ; code for System.String:CreateStringFromEncoding(ptr,int,System.Text.Encoding):System.String
            call     [rax]System.String:CreateStringFromEncoding(ptr,int,System.Text.Encoding):System.String
            nop      
    -						;; size=24 bbWeight=0.50 PerfScore 2.25
    +						;; size=36 bbWeight=0.50 PerfScore 3.38
    +G_M37020_IG04:
    +       add      rsp, 16
    +       pop      rbp
    +       ret      
    +						;; size=6 bbWeight=0.50 PerfScore 0.88
    +G_M37020_IG05:
    +       mov      rax, 0xD1FFAB1E      ; ''
    +						;; size=10 bbWeight=0.50 PerfScore 0.12
     G_M37020_IG06:
            add      rsp, 16
            pop      rbp
            ret      
     						;; size=6 bbWeight=0.50 PerfScore 0.88
     G_M37020_IG07:
    -       mov      rax, 0xD1FFAB1E      ; ''
    -						;; size=10 bbWeight=0.50 PerfScore 0.12
    -G_M37020_IG08:
    -       add      rsp, 16
    -       pop      rbp
    -       ret      
    -						;; size=6 bbWeight=0.50 PerfScore 0.88
    -G_M37020_IG09:
            mov      edi, 10
            mov      esi, 49
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentNullException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
    -G_M37020_IG10:
    +G_M37020_IG08:
            mov      edi, 11
            mov      esi, 12
            test     edx, edx
            cmovge   edi, esi
            mov      esi, 13
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=33 bbWeight=0 PerfScore 0.00
    -G_M37020_IG11:
    +G_M37020_IG09:
            mov      edi, 10
            mov      esi, 3
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
     
    -; Total bytes of code 196, prolog size 16, PerfScore 17.62, instruction count 57, allocated bytes for code 196 (MethodHash=b22b6f63) for method System.Text.ASCIIEncoding:GetString(byte[],int,int):System.String:this (FullOpts)
    +; Total bytes of code 180, prolog size 16, PerfScore 16.00, instruction count 52, allocated bytes for code 180 (MethodHash=b22b6f63) for method System.Text.ASCIIEncoding:GetString(byte[],int,int):System.String:this (FullOpts)
     ; ============================================================
    -16 (-8.16 % of base) - System.Text.UTF8Encoding:GetString(byte[],int,int):System.String:this
     ; Assembly listing for method System.Text.UTF8Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
     ; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; partially interruptible
     ; No PGO data
     ; Final local variable assignments
     ;
     ;  V00 this         [V00,T03] (  3,  2.50)     ref  ->  rax         this class-hnd single-def <System.Text.UTF8Encoding>
    -;  V01 arg1         [V01,T01] (  6,  5   )     ref  ->  rsi         class-hnd single-def <byte[]>
    -;  V02 arg2         [V02,T02] (  6,  4.50)     int  ->  rdx         single-def
    +;  V01 arg1         [V01,T02] (  5,  4.50)     ref  ->  rsi         class-hnd single-def <byte[]>
    +;  V02 arg2         [V02,T01] (  6,  4.50)     int  ->  rdx         single-def
     ;  V03 arg3         [V03,T00] (  6,  5.50)     int  ->  rcx         single-def
    -;  V04 loc0         [V04,T06] (  3,  1.50)    long  ->  rdi        
    -;  V05 loc1         [V05    ] (  1,  0.50)     ref  ->  [rbp-0x08]  must-init pinned class-hnd single-def <byte[]>
    -;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;  V07 tmp1         [V07,T07] (  2,  0   )     int  ->  rdi        
    -;  V08 tmp2         [V08,T05] (  2,  2   )    long  ->  rsi         "Cast away GC"
    -;  V09 cse0         [V09,T04] (  3,  2.50)     int  ->  rdi         "CSE #01: aggressive"
    +;  V04 loc0         [V04    ] (  2,  1   )   byref  ->  [rbp-0x08]  must-init pinned single-def
    +;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    +;  V06 tmp1         [V06,T06] (  2,  0   )     int  ->  rdi        
    +;  V07 tmp2         [V07,T04] (  2,  2   )    long  ->  rdi         "Cast away GC"
    +;  V08 tmp3         [V08,T05] (  2,  2   )    long  ->  rdi         "argument with side effect"
     ;
     ; Lcl frame size = 16
     
     G_M34354_IG01:
            push     rbp
            sub      rsp, 16
            lea      rbp, [rsp+0x10]
            xor      eax, eax
            mov      qword ptr [rbp-0x08], rax
            mov      rax, rdi
     						;; size=19 bbWeight=1 PerfScore 3.25
     G_M34354_IG02:
            test     rsi, rsi
    -       je       SHORT G_M34354_IG09
    +       je       SHORT G_M34354_IG07
            mov      edi, edx
            or       edi, ecx
    -       jl       SHORT G_M34354_IG10
    +       jl       SHORT G_M34354_IG08
            mov      edi, dword ptr [rsi+0x08]
    -       mov      r8d, edi
    -       sub      r8d, edx
    -       cmp      r8d, ecx
    -       jl       G_M34354_IG11
    +       sub      edi, edx
    +       cmp      edi, ecx
    +       jl       SHORT G_M34354_IG09
            test     ecx, ecx
    -       je       SHORT G_M34354_IG07
    -						;; size=33 bbWeight=1 PerfScore 7.75
    +       je       SHORT G_M34354_IG05
    +						;; size=24 bbWeight=1 PerfScore 7.50
     G_M34354_IG03:
    -       mov      gword ptr [rbp-0x08], rsi
    -       test     edi, edi
    -       je       SHORT G_M34354_IG04
            add      rsi, 16
    -       mov      rdi, rsi
    -       jmp      SHORT G_M34354_IG05
    -						;; size=17 bbWeight=0.50 PerfScore 2.38
    -G_M34354_IG04:
    -       xor      edi, edi
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M34354_IG05:
    +       mov      bword ptr [rbp-0x08], rsi
    +       mov      rdi, bword ptr [rbp-0x08]
            movsxd   rsi, edx
            add      rdi, rsi
            mov      esi, ecx
            mov      rdx, rax
            mov      rax, 0xD1FFAB1E      ; code for System.String:CreateStringFromEncoding(ptr,int,System.Text.Encoding):System.String
            call     [rax]System.String:CreateStringFromEncoding(ptr,int,System.Text.Encoding):System.String
            nop      
    -						;; size=24 bbWeight=0.50 PerfScore 2.25
    +						;; size=36 bbWeight=0.50 PerfScore 3.38
    +G_M34354_IG04:
    +       add      rsp, 16
    +       pop      rbp
    +       ret      
    +						;; size=6 bbWeight=0.50 PerfScore 0.88
    +G_M34354_IG05:
    +       mov      rax, 0xD1FFAB1E      ; ''
    +						;; size=10 bbWeight=0.50 PerfScore 0.12
     G_M34354_IG06:
            add      rsp, 16
            pop      rbp
            ret      
     						;; size=6 bbWeight=0.50 PerfScore 0.88
     G_M34354_IG07:
    -       mov      rax, 0xD1FFAB1E      ; ''
    -						;; size=10 bbWeight=0.50 PerfScore 0.12
    -G_M34354_IG08:
    -       add      rsp, 16
    -       pop      rbp
    -       ret      
    -						;; size=6 bbWeight=0.50 PerfScore 0.88
    -G_M34354_IG09:
            mov      edi, 10
            mov      esi, 49
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentNullException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
    -G_M34354_IG10:
    +G_M34354_IG08:
            mov      edi, 21
            mov      esi, 27
            test     edx, edx
            cmovge   edi, esi
            mov      esi, 13
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=33 bbWeight=0 PerfScore 0.00
    -G_M34354_IG11:
    +G_M34354_IG09:
            mov      edi, 10
            mov      esi, 3
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
            int3     
     						;; size=23 bbWeight=0 PerfScore 0.00
     
    -; Total bytes of code 196, prolog size 16, PerfScore 17.62, instruction count 57, allocated bytes for code 196 (MethodHash=b47c79cd) for method System.Text.UTF8Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
    +; Total bytes of code 180, prolog size 16, PerfScore 16.00, instruction count 52, allocated bytes for code 180 (MethodHash=b47c79cd) for method System.Text.UTF8Encoding:GetString(byte[],int,int):System.String:this (FullOpts)
     ; ============================================================
    -13 (-7.14 % of base) - System.Text.Latin1Encoding:GetString(byte[]):System.String:this
     ; Assembly listing for method System.Text.Latin1Encoding:GetString(byte[]):System.String:this (FullOpts)
     ; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; partially interruptible
     ; No PGO data
     ; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
     ; Final local variable assignments
     ;
    -;  V00 this         [V00,T04] (  3,  2   )     ref  ->  r15         this class-hnd single-def <System.Text.Latin1Encoding>
    -;  V01 arg1         [V01,T00] (  6,  5.50)     ref  ->  rbx         class-hnd single-def <byte[]>
    -;  V02 loc0         [V02,T02] (  5,  4.50)     ref  ->  r13         class-hnd exact single-def <System.String>
    -;  V03 loc1         [V03,T05] (  3,  2   )    long  ->  rdi        
    -;  V04 loc2         [V04    ] (  2,  2   )     ref  ->  [rbp-0x28]  must-init pinned class-hnd <byte[]>
    +;  V00 this         [V00,T03] (  3,  2   )     ref  ->  r15         this class-hnd single-def <System.Text.Latin1Encoding>
    +;  V01 arg1         [V01,T00] (  5,  5   )     ref  ->  rbx         class-hnd single-def <byte[]>
    +;  V02 loc0         [V02,T02] (  5,  5   )     ref  ->  r13         class-hnd exact single-def <System.String>
    +;* V03 loc1         [V03    ] (  0,  0   )    long  ->  zero-ref   
    +;  V04 loc2         [V04    ] (  3,  3   )   byref  ->  [rbp-0x28]  must-init pinned
     ;* V05 loc3         [V05    ] (  0,  0   )    long  ->  zero-ref   
    -;  V06 loc4         [V06    ] (  3,  2   )   byref  ->  [rbp-0x30]  must-init pinned
    +;  V06 loc4         [V06    ] (  3,  3   )   byref  ->  [rbp-0x30]  must-init pinned
     ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;  V08 tmp1         [V08,T06] (  3,  2   )    long  ->  rsi        
    -;  V09 tmp2         [V09,T01] (  3,  6   )     int  ->  r14         "Inlining Arg"
    -;* V10 tmp3         [V10    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V11 tmp4         [V11    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    -;  V12 tmp5         [V12,T07] (  2,  2   )    long  ->  rdi         "Cast away GC"
    -;  V13 tmp6         [V13,T08] (  2,  2   )    long  ->  rsi         "Cast away GC"
    -;  V14 cse0         [V14,T03] (  4,  4   )     int  ->  r14         "CSE #01: aggressive"
    +;  V08 tmp1         [V08,T01] (  3,  6   )     int  ->  r14         "Inlining Arg"
    +;* V09 tmp2         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V10 tmp3         [V10    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
    +;  V11 tmp4         [V11,T04] (  2,  4   )    long  ->  rdi         "Cast away GC"
    +;  V12 tmp5         [V12,T05] (  2,  4   )    long  ->  rsi         "Cast away GC"
    +;  V13 cse0         [V13,T06] (  3,  3   )     int  ->  r14         "CSE #01: aggressive"
     ;
     ; Lcl frame size = 16
     
     G_M32962_IG01:
            push     rbp
            push     r15
            push     r14
            push     r13
            push     rbx
            sub      rsp, 16
            lea      rbp, [rsp+0x30]
            xor      eax, eax
            mov      qword ptr [rbp-0x28], rax
            mov      qword ptr [rbp-0x30], rax
            mov      r15, rdi
            mov      rbx, rsi
     						;; size=33 bbWeight=1 PerfScore 8.50
     G_M32962_IG02:
            test     rbx, rbx
    -       je       SHORT G_M32962_IG11
    +       je       SHORT G_M32962_IG05
            mov      r14d, dword ptr [rbx+0x08]
            mov      edi, r14d
            mov      rax, 0xD1FFAB1E      ; code for System.String:FastAllocateString(int):System.String
            call     [rax]System.String:FastAllocateString(int):System.String
            mov      r13, rax
    -       mov      gword ptr [rbp-0x28], rbx
    -       test     r14d, r14d
    -       je       SHORT G_M32962_IG04
    -						;; size=36 bbWeight=1 PerfScore 9.25
    -G_M32962_IG03:
            add      rbx, 16
    -       mov      rdi, rbx
    -       jmp      SHORT G_M32962_IG05
    -						;; size=9 bbWeight=0.50 PerfScore 1.25
    -G_M32962_IG04:
    -       xor      edi, edi
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M32962_IG05:
    -       test     r13, r13
    -       je       SHORT G_M32962_IG07
    -						;; size=5 bbWeight=1 PerfScore 1.25
    -G_M32962_IG06:
    +       mov      bword ptr [rbp-0x28], rbx
    +       mov      rdi, bword ptr [rbp-0x28]
    +       cmp      byte  ptr [r13], r13b
            lea      rdx, bword ptr [r13+0x0C]
            mov      bword ptr [rbp-0x30], rdx
            mov      rsi, bword ptr [rbp-0x30]
    -       jmp      SHORT G_M32962_IG08
    -						;; size=14 bbWeight=0.50 PerfScore 2.25
    -G_M32962_IG07:
    -       xor      esi, esi
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M32962_IG08:
            cmp      dword ptr [r13+0x08], r14d
    -       jl       SHORT G_M32962_IG12
    +       jl       SHORT G_M32962_IG06
            mov      edx, r14d
            mov      rax, 0xD1FFAB1E      ; code for System.Text.Latin1Utility:WidenLatin1ToUtf16_Sse2(ptr,ptr,nuint)
            call     [rax]System.Text.Latin1Utility:WidenLatin1ToUtf16_Sse2(ptr,ptr,nuint)
            xor      eax, eax
            mov      bword ptr [rbp-0x30], rax
    -						;; size=27 bbWeight=1 PerfScore 8.75
    -G_M32962_IG09:
    -       mov      gword ptr [rbp-0x28], rax
    +						;; size=82 bbWeight=1 PerfScore 23.50
    +G_M32962_IG03:
    +       mov      bword ptr [rbp-0x28], rax
            mov      rax, r13
     						;; size=7 bbWeight=1 PerfScore 1.25
    -G_M32962_IG10:
    +G_M32962_IG04:
            add      rsp, 16
            pop      rbx
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=13 bbWeight=1 PerfScore 3.75
    -G_M32962_IG11:
    +G_M32962_IG05:
            mov      edi, 10
            mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
            call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
            int3     
     						;; size=18 bbWeight=0 PerfScore 0.00
    -G_M32962_IG12:
    +G_M32962_IG06:
            mov      rdi, r15
            mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowCharsOverflow():this
            call     [rax]System.Text.Encoding:ThrowCharsOverflow():this
            int3     
     						;; size=16 bbWeight=0 PerfScore 0.00
     
    -; Total bytes of code 182, prolog size 27, PerfScore 36.50, instruction count 57, allocated bytes for code 182 (MethodHash=2beb7f3d) for method System.Text.Latin1Encoding:GetString(byte[]):System.String:this (FullOpts)
    +; Total bytes of code 169, prolog size 27, PerfScore 37.00, instruction count 50, allocated bytes for code 169 (MethodHash=2beb7f3d) for method System.Text.Latin1Encoding:GetString(byte[]):System.String:this (FullOpts)
     ; ============================================================
    -13 (-2.75 % of base) - System.Text.UnicodeEncoding:GetChars(byte[],int,int,char[],int):int:this
     ; Assembly listing for method System.Text.UnicodeEncoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
     ; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; partially interruptible
     ; No PGO data
     ; Final local variable assignments
     ;
     ;  V00 this         [V00,T05] (  3,  2.50)     ref  ->  [rbp-0x40]  this class-hnd single-def <System.Text.UnicodeEncoding>
    -;  V01 arg1         [V01,T01] (  6,  5   )     ref  ->  r15         class-hnd single-def <byte[]>
    +;  V01 arg1         [V01,T02] (  5,  4.50)     ref  ->  r14         class-hnd single-def <byte[]>
     ;  V02 arg2         [V02,T04] (  5,  4.50)     int  ->  r12         single-def
     ;  V03 arg3         [V03,T00] (  6,  5.50)     int  ->  rbx         single-def
     ;  V04 arg4         [V04,T03] (  5,  4.50)     ref  ->  r13         class-hnd single-def <char[]>
    -;  V05 arg5         [V05,T02] (  6,  5   )     int  ->  r14         single-def
    -;  V06 loc0         [V06,T12] (  2,  1   )     int  ->   r8        
    -;  V07 loc1         [V07,T11] (  3,  1.50)    long  ->  rsi        
    -;  V08 loc2         [V08    ] (  1,  0.50)     ref  ->  [rbp-0x30]  must-init pinned class-hnd single-def <byte[]>
    +;  V05 arg5         [V05,T01] (  6,  5   )     int  ->  r15         single-def
    +;  V06 loc0         [V06,T10] (  2,  1   )     int  ->   r8        
    +;* V07 loc1         [V07    ] (  0,  0   )    long  ->  zero-ref   
    +;  V08 loc2         [V08    ] (  2,  1   )   byref  ->  [rbp-0x30]  must-init pinned single-def
     ;* V09 loc3         [V09    ] (  0,  0   )    long  ->  zero-ref   
     ;  V10 loc4         [V10    ] (  2,  1   )   byref  ->  [rbp-0x38]  must-init pinned single-def
     ;# V11 OutArgs      [V11    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;  V12 tmp1         [V12,T13] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
    -;  V13 tmp2         [V13,T14] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
    -;  V14 tmp3         [V14,T08] (  2,  2   )    long  ->  r15         "Cast away GC"
    -;  V15 tmp4         [V15,T09] (  2,  2   )    long  ->  rcx         "Cast away GC"
    -;  V16 tmp5         [V16,T10] (  2,  2   )    long  ->  rcx         "argument with side effect"
    -;  V17 tmp6         [V17,T15] (  2,  0   )     ref  ->  r15         single-def "argument with side effect"
    -;  V18 tmp7         [V18,T16] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
    -;  V19 tmp8         [V19,T17] (  2,  0   )     ref  ->  r15         single-def "argument with side effect"
    -;  V20 tmp9         [V20,T18] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
    -;  V21 cse0         [V21,T06] (  3,  2.50)     int  ->  rcx         "CSE #03: aggressive"
    -;  V22 cse1         [V22,T07] (  3,  2.50)     int  ->   r8         "CSE #02: moderate"
    +;  V12 tmp1         [V12,T11] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
    +;  V13 tmp2         [V13,T12] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
    +;  V14 tmp3         [V14,T07] (  2,  2   )    long  ->  rsi         "Cast away GC"
    +;  V15 tmp4         [V15,T08] (  2,  2   )    long  ->  rcx         "Cast away GC"
    +;  V16 tmp5         [V16,T09] (  2,  2   )    long  ->  rcx         "argument with side effect"
    +;  V17 tmp6         [V17,T13] (  2,  0   )     ref  ->  r15         single-def "argument with side effect"
    +;  V18 tmp7         [V18,T14] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
    +;  V19 tmp8         [V19,T15] (  2,  0   )     ref  ->  r15         single-def "argument with side effect"
    +;  V20 tmp9         [V20,T16] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
    +;  V21 cse0         [V21,T06] (  3,  2.50)     int  ->   r8         "CSE #02: moderate"
     ;
     ; Lcl frame size = 24
     
     G_M42444_IG01:
            push     rbp
            push     r15
            push     r14
            push     r13
            push     r12
            push     rbx
            sub      rsp, 24
            lea      rbp, [rsp+0x40]
            xor      eax, eax
            mov      qword ptr [rbp-0x30], rax
            mov      qword ptr [rbp-0x38], rax
            mov      gword ptr [rbp-0x40], rdi
    -       mov      r15, rsi
    +       mov      r14, rsi
            mov      r12d, edx
            mov      ebx, ecx
            mov      r13, r8
    -       mov      r14d, r9d
    +       mov      r15d, r9d
     						;; size=47 bbWeight=1 PerfScore 11.25
     G_M42444_IG02:
    -       mov      rdi, r15
    +       mov      rdi, r14
            mov      rsi, 0xD1FFAB1E      ; 'bytes'
            mov      rcx, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
            call     [rcx]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
            mov      rdi, r13
            mov      rsi, 0xD1FFAB1E      ; 'chars'
            mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
            call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
            mov      edi, r12d
            mov      rsi, 0xD1FFAB1E      ; 'byteIndex'
            mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:ThrowIfNegative[int](int,System.String)
            call     [rax]System.ArgumentOutOfRangeException:ThrowIfNegative[int](int,System.String)
            mov      edi, ebx
            mov      rsi, 0xD1FFAB1E      ; 'byteCount'
            mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:ThrowIfNegative[int](int,System.String)
            call     [rax]System.ArgumentOutOfRangeException:ThrowIfNegative[int](int,System.String)
    -       mov      ecx, dword ptr [r15+0x08]
    -       mov      esi, ecx
    -       sub      esi, r12d
    -       cmp      esi, ebx
    -       jl       G_M42444_IG09
    -       test     r14d, r14d
    -       jl       G_M42444_IG10
    +       mov      ecx, dword ptr [r14+0x08]
    +       sub      ecx, r12d
    +       cmp      ecx, ebx
    +       jl       SHORT G_M42444_IG07
    +       test     r15d, r15d
    +       jl       G_M42444_IG08
            mov      r8d, dword ptr [r13+0x08]
    -       cmp      r8d, r14d
    -       jl       G_M42444_IG10
    +       cmp      r8d, r15d
    +       jl       G_M42444_IG08
            test     ebx, ebx
    -       je       SHORT G_M42444_IG07
    -						;; size=142 bbWeight=1 PerfScore 24.50
    +       je       SHORT G_M42444_IG05
    +						;; size=136 bbWeight=1 PerfScore 24.25
     G_M42444_IG03:
    -       sub      r8d, r14d
    -       mov      gword ptr [rbp-0x30], r15
    -       test     ecx, ecx
    -       je       SHORT G_M42444_IG04
    -       add      r15, 16
    -       mov      rsi, r15
    -       jmp      SHORT G_M42444_IG05
    -						;; size=20 bbWeight=0.50 PerfScore 2.50
    -G_M42444_IG04:
    -       xor      esi, esi
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M42444_IG05:
    +       sub      r8d, r15d
    +       add      r14, 16
    +       mov      bword ptr [rbp-0x30], r14
    +       mov      rsi, bword ptr [rbp-0x30]
            add      r13, 16
            mov      bword ptr [rbp-0x38], r13
            mov      rcx, bword ptr [rbp-0x38]
    -       mov      edx, r14d
    +       mov      edx, r15d
            lea      rcx, [rcx+2*rdx]
            movsxd   rdx, r12d
            add      rsi, rdx
            mov      edx, ebx
            mov      rdi, gword ptr [rbp-0x40]
            xor      r9, r9
            mov      rax, 0xD1FFAB1E      ; code for System.Text.UnicodeEncoding:GetChars(ptr,int,ptr,int,System.Text.DecoderNLS):int:this
            cmp      dword ptr [rdi], edi
            call     [rax]System.Text.UnicodeEncoding:GetChars(ptr,int,ptr,int,System.Text.DecoderNLS):int:this
            nop      
    -						;; size=49 bbWeight=0.50 PerfScore 5.75
    +						;; size=64 bbWeight=0.50 PerfScore 7.00
    +G_M42444_IG04:
    +       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_M42444_IG05:
    +       xor      eax, eax
    +						;; size=2 bbWeight=0.50 PerfScore 0.12
     G_M42444_IG06:
            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_M42444_IG07:
    -       xor      eax, eax
    -						;; size=2 bbWeight=0.50 PerfScore 0.12
    -G_M42444_IG08:
    -       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_M42444_IG09:
            mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
            call     CORINFO_HELP_NEWSFAST
            mov      rbx, rax
            mov      edi, 0x13C5
            mov      rsi, 0xD1FFAB1E
            mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_STRCNS
            call     [rax]CORINFO_HELP_STRCNS
            mov      r15, rax
            mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_IndexCountBuffer():System.String
            call     [rax]System.SR:get_ArgumentOutOfRange_IndexCountBuffer():System.String
            mov      rdx, rax
            mov      rsi, r15
            mov      rdi, rbx
            mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
            call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
            mov      rdi, rbx
            call     CORINFO_HELP_THROW
            int3     
     						;; size=90 bbWeight=0 PerfScore 0.00
    -G_M42444_IG10:
    +G_M42444_IG08:
            mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
            call     CORINFO_HELP_NEWSFAST
            mov      rbx, rax
            mov      edi, 0x1379A
            mov      rsi, 0xD1FFAB1E
            mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_STRCNS
            call     [rax]CORINFO_HELP_STRCNS
            mov      r15, rax
            mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_IndexMustBeLessOrEqual():System.String
            call     [rax]System.SR:get_ArgumentOutOfRange_IndexMustBeLessOrEqual():System.String
            mov      rdx, rax
            mov      rsi, r15
            mov      rdi, rbx
            mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
            call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
            mov      rdi, rbx
            call     CORINFO_HELP_THROW
            int3     
     						;; size=90 bbWeight=0 PerfScore 0.00
     
    -; Total bytes of code 472, prolog size 29, PerfScore 48.50, instruction count 120, allocated bytes for code 472 (MethodHash=00f05a33) for method System.Text.UnicodeEncoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
    +; Total bytes of code 459, prolog size 29, PerfScore 46.88, instruction count 115, allocated bytes for code 459 (MethodHash=00f05a33) for method System.Text.UnicodeEncoding:GetChars(byte[],int,int,char[],int):int:this (FullOpts)
     ; ============================================================

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

  2. MihuBot commented on Aug 4, 2025

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions