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] [AndyAyersMS] Gc arrays #930

Open
MihuBot opened this issue Jan 23, 2025 · 3 comments
Open

[JitDiff X64] [AndyAyersMS] Gc arrays #930

MihuBot opened this issue Jan 23, 2025 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jan 23, 2025

Job completed in 14 minutes 44 seconds.
dotnet/runtime#111686

Diffs

Found 273 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 40347013
Total bytes of diff: 40347374
Total bytes of delta: 361 (0.00 % of base)
Total relative delta: 0.68
    diff is a regression.
    relative diff is a regression.


Top file regressions (bytes):
         106 : Microsoft.CSharp.dasm (0.03 % of base)
          90 : System.Private.DataContractSerialization.dasm (0.01 % of base)
          52 : System.Private.CoreLib.dasm (0.00 % of base)
          40 : System.Security.Cryptography.Xml.dasm (0.02 % of base)
          37 : System.Diagnostics.Process.dasm (0.04 % of base)
          27 : System.Private.Xml.dasm (0.00 % of base)
          22 : System.Linq.Expressions.dasm (0.00 % of base)

Top file improvements (bytes):
          -8 : tieringtest.dasm (-0.11 % of base)
          -5 : System.Net.NetworkInformation.dasm (-0.01 % of base)

9 total files with Code Size differences (2 improved, 7 regressed), 250 unchanged.

Top method regressions (bytes):
          90 (16.25 % of base) : System.Private.DataContractSerialization.dasm - System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this (FullOpts)
          88 (1.17 % of base) : Microsoft.CSharp.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder:bindUserDefinedConversion(Microsoft.CSharp.RuntimeBinder.Semantics.Expr,Microsoft.CSharp.RuntimeBinder.Semantics.CType,Microsoft.CSharp.RuntimeBinder.Semantics.CType,ubyte,byref,ubyte):ubyte:this (FullOpts)
          52 (15.38 % of base) : System.Private.CoreLib.dasm - System.Reflection.PseudoCustomAttribute:CreatePseudoCustomAttributeHashSet():System.Collections.Generic.HashSet`1[System.RuntimeType] (FullOpts)
          40 (1.45 % of base) : System.Security.Cryptography.Xml.dasm - System.Security.Cryptography.Xml.Utils:BuildBagOfCerts(System.Security.Cryptography.Xml.KeyInfoX509Data,int):System.Security.Cryptography.X509Certificates.X509Certificate2Collection (FullOpts)
          37 (28.91 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:GetPathToOpenFile():System.String (FullOpts)
          22 (0.24 % of base) : System.Linq.Expressions.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:CreateCustomUpdateDelegate(System.Reflection.MethodInfo):System.__Canon:this (FullOpts)
          21 (3.78 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Xslt.TemplateMatch:NipOffTypeNameCheck():this (FullOpts)
          18 (1.03 % of base) : Microsoft.CSharp.dasm - Microsoft.CSharp.RuntimeBinder.RuntimeBinder:BindCall(Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder,Microsoft.CSharp.RuntimeBinder.Semantics.Expr,Microsoft.CSharp.RuntimeBinder.ArgumentObject[],Microsoft.CSharp.RuntimeBinder.Semantics.LocalVariableSymbol[]):Microsoft.CSharp.RuntimeBinder.Semantics.ExprWithArgs:this (FullOpts)
           6 (0.92 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlReflectionImporter:GetChoiceIdentifierType(System.Xml.Serialization.XmlChoiceIdentifierAttribute,System.Xml.Serialization.StructModel,ubyte,System.String):System.Type (FullOpts)

Top method improvements (bytes):
          -8 (-0.11 % of base) : tieringtest.dasm - Program:Main(System.String[]):int (FullOpts)
          -5 (-1.08 % of base) : System.Net.NetworkInformation.dasm - System.Net.NetworkInformation.LinuxIPv4InterfaceProperties:GetIsForwardingEnabled():ubyte:this (FullOpts)

Top method regressions (percentages):
          37 (28.91 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:GetPathToOpenFile():System.String (FullOpts)
          90 (16.25 % of base) : System.Private.DataContractSerialization.dasm - System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this (FullOpts)
          52 (15.38 % of base) : System.Private.CoreLib.dasm - System.Reflection.PseudoCustomAttribute:CreatePseudoCustomAttributeHashSet():System.Collections.Generic.HashSet`1[System.RuntimeType] (FullOpts)
          21 (3.78 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Xslt.TemplateMatch:NipOffTypeNameCheck():this (FullOpts)
          40 (1.45 % of base) : System.Security.Cryptography.Xml.dasm - System.Security.Cryptography.Xml.Utils:BuildBagOfCerts(System.Security.Cryptography.Xml.KeyInfoX509Data,int):System.Security.Cryptography.X509Certificates.X509Certificate2Collection (FullOpts)
          88 (1.17 % of base) : Microsoft.CSharp.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder:bindUserDefinedConversion(Microsoft.CSharp.RuntimeBinder.Semantics.Expr,Microsoft.CSharp.RuntimeBinder.Semantics.CType,Microsoft.CSharp.RuntimeBinder.Semantics.CType,ubyte,byref,ubyte):ubyte:this (FullOpts)
          18 (1.03 % of base) : Microsoft.CSharp.dasm - Microsoft.CSharp.RuntimeBinder.RuntimeBinder:BindCall(Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder,Microsoft.CSharp.RuntimeBinder.Semantics.Expr,Microsoft.CSharp.RuntimeBinder.ArgumentObject[],Microsoft.CSharp.RuntimeBinder.Semantics.LocalVariableSymbol[]):Microsoft.CSharp.RuntimeBinder.Semantics.ExprWithArgs:this (FullOpts)
           6 (0.92 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlReflectionImporter:GetChoiceIdentifierType(System.Xml.Serialization.XmlChoiceIdentifierAttribute,System.Xml.Serialization.StructModel,ubyte,System.String):System.Type (FullOpts)
          22 (0.24 % of base) : System.Linq.Expressions.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:CreateCustomUpdateDelegate(System.Reflection.MethodInfo):System.__Canon:this (FullOpts)

Top method improvements (percentages):
          -5 (-1.08 % of base) : System.Net.NetworkInformation.dasm - System.Net.NetworkInformation.LinuxIPv4InterfaceProperties:GetIsForwardingEnabled():ubyte:this (FullOpts)
          -8 (-0.11 % of base) : tieringtest.dasm - Program:Main(System.String[]):int (FullOpts)

11 total methods with Code Size differences (2 improved, 9 regressed), 235383 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 23, 2025

Top method regressions

90 (16.25 % of base) - System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this
 ; Assembly listing for method System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this (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; 4 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T05] (  7, 34.50)     ref  ->  rbx         this class-hnd single-def <System.Xml.XmlDictionaryReader>
 ;  V01 arg1         [V01,T08] (  3, 18   )   ubyte  ->  r15         single-def
 ;  V02 arg2         [V02,T14] (  4, 10.50)     int  ->  r14         single-def
-;  V03 loc0         [V03,T09] (  5, 18   )     ref  ->  r13         class-hnd exact single-def <ubyte[][]>
-;  V04 loc1         [V04,T04] (  9, 47   )     ref  ->  [rbp-0x50]  class-hnd <ubyte[]>
+;  V03 loc0         [V03,T09] (  5, 18   )    long  ->  r13         class-hnd exact <ubyte[][]>
+;  V04 loc1         [V04,T04] (  9, 47   )     ref  ->  [rbp-0x160]  class-hnd <ubyte[]>
 ;  V05 loc2         [V05,T11] (  4, 17   )     int  ->  r12        
 ;  V06 loc3         [V06,T10] (  4, 18   )     int  ->  [rbp-0x2C] 
 ;  V07 loc4         [V07,T06] (  6, 27   )     int  ->  [rbp-0x30] 
 ;  V08 loc5         [V08,T13] (  6, 15   )     int  ->  rbx        
 ;  V09 loc6         [V09,T00] ( 11,112   )     int  ->  [rbp-0x34] 
 ;  V10 loc7         [V10,T03] (  4, 48   )     int  ->  rax        
 ;* V11 loc8         [V11,T20] (  0,  0   )     int  ->  zero-ref   
 ;# V12 OutArgs      [V12    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V13 tmp1         [V13    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <ubyte[][]>
+;* V13 tmp1         [V13    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "NewArr temp" <ubyte[][]>
 ;* V14 tmp2         [V14    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <ubyte[]>
-;  V15 tmp3         [V15,T01] (  4, 64   )     int  ->  rdi         "impSpillLclRefs"
+;  V15 tmp3         [V15,T01] (  4, 64   )     int  ->  rcx         "impSpillLclRefs"
 ;* V16 tmp4         [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <ubyte[]>
 ;  V17 tmp5         [V17    ] (  2,  2   )     int  ->  [rbp-0x40]  do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
 ;* V18 tmp6         [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "impAppendStmt" <System.String>
 ;* V19 tmp7         [V19    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.String>
-;  V20 tmp8         [V20,T17] (  2,  2   )     ref  ->  rsi         "argument with side effect"
-;  V21 tmp9         [V21,T18] (  2,  2   )     ref  ->  r15         "argument with side effect"
-;  V22 tmp10        [V22,T19] (  2,  2   )     ref  ->  rdx         "argument with side effect"
-;  V23 tmp11        [V23,T12] (  2, 16   )     ref  ->  rdi         "argument with side effect"
-;  V24 cse0         [V24,T15] (  3, 12   )     ref  ->   r8         "CSE #08: moderate"
-;  V25 cse1         [V25,T02] (  6, 56   )     int  ->  [rbp-0x44]  spill-single-def "CSE #01: aggressive"
-;  V26 cse2         [V26,T16] (  5,  8   )     int  ->  r12         "CSE #09: moderate"
-;  V27 rat0         [V27,T07] (  7, 25   )    long  ->  r15         "Widened IV V11"
+;  V20 tmp8         [V20    ] (  3,  3   )  struct (272) [rbp-0x150]  do-not-enreg[XS] must-init addr-exposed "stack allocated array temp" <ubyte[][]>
+;  V21 tmp9         [V21,T17] (  2,  2   )     ref  ->  rsi         "argument with side effect"
+;  V22 tmp10        [V22,T18] (  2,  2   )     ref  ->  r15         "argument with side effect"
+;  V23 tmp11        [V23,T19] (  2,  2   )     ref  ->  rdx         "argument with side effect"
+;  V24 tmp12        [V24,T12] (  2, 16   )     ref  ->  rdi         "argument with side effect"
+;  V25 cse0         [V25,T15] (  3, 12   )     ref  ->   r8         "CSE #08: moderate"
+;  V26 cse1         [V26,T02] (  6, 56   )     int  ->  [rbp-0x154]  spill-single-def "CSE #01: aggressive"
+;  V27 cse2         [V27,T16] (  5,  8   )     int  ->  r12         "CSE #09: moderate"
+;  V28 rat0         [V28,T07] (  7, 25   )    long  ->  r15         "Widened IV V11"
 ;
-; Lcl frame size = 40
+; Lcl frame size = 312
 
 G_M31414_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 40
-       lea      rbp, [rsp+0x50]
+       sub      rsp, 312
+       lea      rbp, [rsp+0x160]
+       vxorps   xmm8, xmm8, xmm8
+       vmovdqu32 zmmword ptr [rbp-0x150], zmm8
+       vmovdqu32 zmmword ptr [rbp-0x110], zmm8
+       vmovdqu32 zmmword ptr [rbp-0xD0], zmm8
+       vmovdqu32 zmmword ptr [rbp-0x90], zmm8
+       vmovdqa  xmmword ptr [rbp-0x50], xmm8
        mov      rbx, rdi
        mov      r15d, esi
        mov      r14d, edx
-						;; size=28 bbWeight=1 PerfScore 7.50
+						;; size=84 bbWeight=1 PerfScore 17.83
 G_M31414_IG02:
-       mov      rdi, 0xD1FFAB1E      ; ubyte[][]
-       mov      esi, 32
-       call     CORINFO_HELP_NEWARR_1_OBJ
-       mov      r13, rax
+       mov      rsi, 0xD1FFAB1E      ; ubyte[][]
+       mov      qword ptr [rbp-0x150], rsi
+       lea      rsi, [rbp-0x150]
+       mov      dword ptr [rsi+0x08], 32
+       lea      r13, [rbp-0x150]
        mov      r12d, 384
        xor      eax, eax
        mov      dword ptr [rbp-0x2C], eax
        xor      ecx, ecx
        mov      dword ptr [rbp-0x30], ecx
        jmp      SHORT G_M31414_IG04
-						;; size=41 bbWeight=1 PerfScore 6.50
+						;; size=56 bbWeight=1 PerfScore 8.00
 G_M31414_IG03:
        add      r12d, r12d
        mov      dword ptr [rbp-0x30], ecx
 						;; size=6 bbWeight=4 PerfScore 5.00
 G_M31414_IG04:
        movsxd   rsi, r12d
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      edi, dword ptr [rbp-0x2C]
-       lea      esi, [rdi+0x01]
-       mov      dword ptr [rbp-0x2C], esi
-       cmp      edi, 32
+       mov      ecx, dword ptr [rbp-0x2C]
+       lea      edi, [rcx+0x01]
+       mov      dword ptr [rbp-0x2C], edi
+       cmp      ecx, 32
        jae      G_M31414_IG18
-       lea      rdi, bword ptr [r13+8*rdi+0x10]
-       mov      gword ptr [rbp-0x50], rax
-       mov      rsi, rax
-       call     CORINFO_HELP_ASSIGN_REF
-       xor      eax, eax
-       mov      r8, gword ptr [rbp-0x50]
-       mov      r9d, dword ptr [r8+0x08]
-       mov      dword ptr [rbp-0x44], r9d
-       test     r9d, r9d
+       mov      gword ptr [r13+8*rcx+0x10], rax
+       xor      r9d, r9d
+       mov      r10d, dword ptr [rax+0x08]
+       mov      dword ptr [rbp-0x154], r10d
+       test     r10d, r10d
        jg       SHORT G_M31414_IG07
-						;; size=72 bbWeight=8 PerfScore 120.00
+						;; size=60 bbWeight=8 PerfScore 86.00
 G_M31414_IG05:
-       mov      dword ptr [rbp-0x34], eax
+       mov      dword ptr [rbp-0x34], r9d
        jmp      SHORT G_M31414_IG12
-						;; size=5 bbWeight=4 PerfScore 12.00
+						;; size=6 bbWeight=4 PerfScore 12.00
 G_M31414_IG06:
-       mov      eax, esi
-       mov      r9d, edi
-						;; size=5 bbWeight=8 PerfScore 4.00
+       mov      r10d, esi
+						;; size=3 bbWeight=8 PerfScore 2.00
 G_M31414_IG07:
        test     r15b, r15b
        jne      SHORT G_M31414_IG09
 						;; size=5 bbWeight=16 PerfScore 20.00
 G_M31414_IG08:
-       mov      ecx, r9d
-       sub      ecx, eax
+       mov      ecx, r10d
+       sub      ecx, r9d
        mov      rdi, rbx
-       mov      gword ptr [rbp-0x50], r8
-       mov      rsi, r8
-       mov      dword ptr [rbp-0x34], eax
-       mov      edx, eax
-       mov      r10, qword ptr [rbx]
-       mov      r10, qword ptr [r10+0x88]
-       call     [r10+0x30]System.Xml.XmlReader:ReadContentAsBinHex(ubyte[],int,int):int:this
+       mov      gword ptr [rbp-0x160], rax
+       mov      rsi, rax
+       mov      dword ptr [rbp-0x34], r9d
+       mov      edx, r9d
+       mov      r11, qword ptr [rbx]
+       mov      r11, qword ptr [r11+0x88]
+       call     [r11+0x30]System.Xml.XmlReader:ReadContentAsBinHex(ubyte[],int,int):int:this
        jmp      SHORT G_M31414_IG10
-						;; size=36 bbWeight=8 PerfScore 98.00
+						;; size=42 bbWeight=8 PerfScore 98.00
 G_M31414_IG09:
-       mov      ecx, r9d
-       sub      ecx, eax
+       mov      ecx, r10d
+       sub      ecx, r9d
        mov      rdi, rbx
-       mov      gword ptr [rbp-0x50], r8
-       mov      rsi, r8
-       mov      dword ptr [rbp-0x34], eax
-       mov      edx, eax
-       mov      r10, qword ptr [rbx]
-       mov      r10, qword ptr [r10+0x88]
-       call     [r10+0x20]System.Xml.XmlReader:ReadContentAsBase64(ubyte[],int,int):int:this
-						;; size=34 bbWeight=8 PerfScore 82.00
+       mov      gword ptr [rbp-0x160], rax
+       mov      rsi, rax
+       mov      dword ptr [rbp-0x34], r9d
+       mov      edx, r9d
+       mov      r11, qword ptr [rbx]
+       mov      r11, qword ptr [r11+0x88]
+       call     [r11+0x20]System.Xml.XmlReader:ReadContentAsBase64(ubyte[],int,int):int:this
+						;; size=40 bbWeight=8 PerfScore 82.00
 G_M31414_IG10:
        test     eax, eax
        je       SHORT G_M31414_IG12
-       mov      esi, dword ptr [rbp-0x34]
-       add      esi, eax
-       mov      edi, dword ptr [rbp-0x44]
-       cmp      edi, esi
-       mov      r8, gword ptr [rbp-0x50]
+       mov      r9d, dword ptr [rbp-0x34]
+       add      r9d, eax
+       mov      esi, dword ptr [rbp-0x154]
+       cmp      esi, r9d
+       mov      rax, gword ptr [rbp-0x160]
        jg       SHORT G_M31414_IG06
-						;; size=20 bbWeight=16 PerfScore 92.00
+						;; size=29 bbWeight=16 PerfScore 92.00
 G_M31414_IG11:
-       mov      dword ptr [rbp-0x34], esi
-						;; size=3 bbWeight=8 PerfScore 8.00
+       mov      dword ptr [rbp-0x34], r9d
+						;; size=4 bbWeight=8 PerfScore 8.00
 G_M31414_IG12:
-       mov      esi, dword ptr [rbp-0x34]
-       mov      eax, r14d
-       sub      eax, esi
+       mov      r9d, dword ptr [rbp-0x34]
+       mov      edi, r14d
+       sub      edi, r9d
        mov      ecx, dword ptr [rbp-0x30]
-       cmp      eax, ecx
+       cmp      edi, ecx
        jl       G_M31414_IG17
-       add      ecx, esi
-       cmp      dword ptr [rbp-0x44], esi
+       add      ecx, r9d
+       cmp      dword ptr [rbp-0x154], r9d
        jle      G_M31414_IG03
-						;; size=30 bbWeight=8 PerfScore 56.00
+						;; size=37 bbWeight=8 PerfScore 56.00
 G_M31414_IG13:
        mov      dword ptr [rbp-0x30], ecx
        movsxd   rsi, ecx
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        xor      ebx, ebx
        xor      r15d, r15d
        mov      r12d, dword ptr [rbp-0x2C]
        dec      r12d
        test     r12d, r12d
        jle      SHORT G_M31414_IG15
 						;; size=41 bbWeight=1 PerfScore 5.75
 G_M31414_IG14:
        cmp      r15d, 32
        jae      G_M31414_IG18
        mov      r8, gword ptr [r13+8*r15+0x10]
        mov      rdi, r8
        mov      r8d, dword ptr [r8+0x08]
        mov      rdx, r14
        mov      ecx, ebx
        xor      esi, esi
        mov      rax, 0xD1FFAB1E      ; code for System.Buffer:BlockCopy(System.Array,int,System.Array,int,int)
        call     [rax]System.Buffer:BlockCopy(System.Array,int,System.Array,int,int)
        mov      rdi, gword ptr [r13+8*r15+0x10]
        add      ebx, dword ptr [rdi+0x08]
        inc      r15d
        cmp      r15d, r12d
        jl       SHORT G_M31414_IG14
 						;; size=57 bbWeight=4 PerfScore 64.00
 G_M31414_IG15:
        cmp      r12d, 32
        jae      G_M31414_IG18
        mov      edi, r12d
        mov      rdi, gword ptr [r13+8*rdi+0x10]
        mov      r15d, dword ptr [rbp-0x30]
        mov      r8d, r15d
        sub      r8d, ebx
        mov      rdx, r14
        mov      ecx, ebx
        xor      esi, esi
        mov      rax, 0xD1FFAB1E      ; code for System.Buffer:BlockCopy(System.Array,int,System.Array,int,int)
        call     [rax]System.Buffer:BlockCopy(System.Array,int,System.Array,int,int)
        mov      rax, r14
 						;; size=50 bbWeight=1 PerfScore 9.25
 G_M31414_IG16:
-       add      rsp, 40
+       add      rsp, 312
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
+						;; size=18 bbWeight=1 PerfScore 4.25
 G_M31414_IG17:
        mov      dword ptr [rbp-0x40], r14d
        mov      edi, 0x2F13
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:GetResourceString(System.String):System.String
        call     [rax]System.SR:GetResourceString(System.String):System.String
        mov      r15, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo
        call     [rax]System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo
        mov      rsi, rax
        lea      rdi, [rbp-0x40]
        mov      rax, 0xD1FFAB1E      ; code for System.Int32:ToString(System.IFormatProvider):System.String:this
        call     [rax]System.Int32:ToString(System.IFormatProvider):System.String:this
        mov      rdx, rax
        mov      rsi, r15
        mov      rdi, rbx
        xor      rcx, rcx
        xor      r8, r8
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.XmlExceptionHelper:ThrowXmlException(System.Xml.XmlDictionaryReader,System.String,System.String,System.String,System.String)
        call     [rax]System.Xml.XmlExceptionHelper:ThrowXmlException(System.Xml.XmlDictionaryReader,System.String,System.String,System.String,System.String)
        int3     
 						;; size=100 bbWeight=0.50 PerfScore 9.12
 G_M31414_IG18:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 554, prolog size 28, PerfScore 603.38, instruction count 157, allocated bytes for code 554 (MethodHash=25c48549) for method System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this (FullOpts)
+; Total bytes of code 644, prolog size 84, PerfScore 579.21, instruction count 159, allocated bytes for code 644 (MethodHash=25c48549) for method System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this (FullOpts)
 ; ============================================================
52 (15.38 % of base) - System.Reflection.PseudoCustomAttribute:CreatePseudoCustomAttributeHashSet():System.Collections.Generic.HashSet`1[System.RuntimeType]
 ; Assembly listing for method System.Reflection.PseudoCustomAttribute:CreatePseudoCustomAttributeHashSet():System.Collections.Generic.HashSet`1[System.RuntimeType] (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 loc0         [V00,T07] (  3,  5.25)     ref  ->  r15         class-hnd exact single-def <System.Collections.Generic.HashSet`1[System.RuntimeType]>
-;  V01 loc1         [V01,T09] (  2,  0.50)     ref  ->  rbx         class-hnd exact single-def <System.Type[]>
+;  V01 loc1         [V01,T09] (  2,  0.50)    long  ->  rbx         class-hnd exact <System.Type[]>
 ;* V02 loc2         [V02,T11] (  0,  0   )     int  ->  zero-ref   
 ;  V03 loc3         [V03,T05] (  2,  8   )     ref  ->  rsi         class-hnd exact <System.RuntimeType>
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V05 tmp1         [V05,T06] ( 13,  6.50)     ref  ->  rbx         class-hnd exact single-def "NewArr temp" <System.Type[]>
+;  V05 tmp1         [V05,T06] ( 13,  6.50)    long  ->  rbx         class-hnd exact "NewArr temp" <System.Type[]>
 ;* V06 tmp2         [V06    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V07 tmp3         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V08 tmp4         [V08    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V09 tmp5         [V09    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V10 tmp6         [V10    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V11 tmp7         [V11    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V12 tmp8         [V12    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V13 tmp9         [V13    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V14 tmp10        [V14    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V15 tmp11        [V15    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;* V16 tmp12        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType>
 ;  V17 tmp13        [V17,T08] (  4,  2   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.HashSet`1[System.RuntimeType]>
 ;* V18 tmp14        [V18,T10] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V19 tmp15        [V19    ] (  1,  4   )     int  ->  [rbp-0x20]  do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V20 rat0         [V20,T02] (  4, 12.25)   byref  ->  rbx         "Strength reduced derived IV"
-;  V21 rat1         [V21,T03] (  4, 12.25)     int  ->  r14         "Trip count IV"
-;  V22 rat2         [V22,T01] (  3, 16   )     ref  ->  rsi         "Spilling to split statement for tree"
-;  V23 rat3         [V23,T00] (  4, 28   )     ref  ->  rax         "replacement local"
-;  V24 rat4         [V24,T04] (  3,  8   )    long  ->  rdi         "CSE for expectedClsNode"
+;  V20 tmp16        [V20    ] (  3,  0.75)  struct (104) [rbp-0x88]  do-not-enreg[XS] must-init addr-exposed "stack allocated array temp" <System.Type[]>
+;  V21 rat0         [V21,T02] (  4, 12.25)    long  ->  rbx         "Strength reduced derived IV"
+;  V22 rat1         [V22,T03] (  4, 12.25)     int  ->  r14         "Trip count IV"
+;  V23 rat2         [V23,T01] (  3, 16   )     ref  ->  rsi         "Spilling to split statement for tree"
+;  V24 rat3         [V24,T00] (  4, 28   )     ref  ->  rax         "replacement local"
+;  V25 rat4         [V25,T04] (  3,  8   )    long  ->  rdi         "CSE for expectedClsNode"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 120
 
 G_M46714_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
-       push     rax
-       lea      rbp, [rsp+0x20]
-						;; size=12 bbWeight=0.25 PerfScore 1.38
+       sub      rsp, 120
+       lea      rbp, [rsp+0x90]
+       xor      eax, eax
+       mov      qword ptr [rbp-0x88], rax
+       vxorps   xmm8, xmm8, xmm8
+       vmovdqu32 zmmword ptr [rbp-0x80], zmm8
+       vmovdqa  xmmword ptr [rbp-0x40], xmm8
+       vmovdqa  xmmword ptr [rbp-0x30], xmm8
+						;; size=49 bbWeight=0.25 PerfScore 3.08
 G_M46714_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Type[]
-       mov      esi, 11
-       call     CORINFO_HELP_NEWARR_1_OBJ
-       mov      rbx, rax
+       mov      qword ptr [rbp-0x88], rdi
+       lea      rdi, [rbp-0x88]
+       mov      dword ptr [rdi+0x08], 11
+       lea      rbx, [rbp-0x88]
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.InteropServices.FieldOffsetAttribute'
        mov      gword ptr [rbx+0x10], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.SerializableAttribute'
        mov      gword ptr [rbx+0x18], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.InteropServices.MarshalAsAttribute'
        mov      gword ptr [rbx+0x20], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.InteropServices.ComImportAttribute'
        mov      gword ptr [rbx+0x28], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.NonSerializedAttribute'
        mov      gword ptr [rbx+0x30], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.InteropServices.InAttribute'
        mov      gword ptr [rbx+0x38], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.InteropServices.OutAttribute'
        mov      gword ptr [rbx+0x40], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.InteropServices.OptionalAttribute'
        mov      gword ptr [rbx+0x48], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.InteropServices.DllImportAttribute'
        mov      gword ptr [rbx+0x50], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.InteropServices.PreserveSigAttribute'
        mov      gword ptr [rbx+0x58], rdi
        mov      rdi, 0xD1FFAB1E      ; 'System.Runtime.CompilerServices.TypeForwardedToAttribute'
        mov      gword ptr [rbx+0x60], rdi
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.HashSet`1[System.RuntimeType]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rdi, r15
        xor      rsi, rsi
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.HashSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this
        call     [rax]System.Collections.Generic.HashSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this
        mov      rdi, r15
        mov      esi, 11
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.HashSet`1[System.__Canon]:Initialize(int):int:this
        call     [rax]System.Collections.Generic.HashSet`1[System.__Canon]:Initialize(int):int:this
        add      rbx, 16
        mov      r14d, 11
-						;; size=242 bbWeight=0.25 PerfScore 6.25
+						;; size=257 bbWeight=0.25 PerfScore 6.62
 G_M46714_IG03:
        mov      rsi, gword ptr [rbx]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M46714_IG05
 						;; size=11 bbWeight=4 PerfScore 14.00
 G_M46714_IG04:
        mov      rdi, 0xD1FFAB1E      ; System.RuntimeType
        cmp      qword ptr [rax], rdi
        jne      SHORT G_M46714_IG08
 						;; size=15 bbWeight=2 PerfScore 8.50
 G_M46714_IG05:
        mov      rsi, rax
        lea      rdx, [rbp-0x20]
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.HashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this
        call     [rax]System.Collections.Generic.HashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this
        add      rbx, 8
        dec      r14d
        jne      SHORT G_M46714_IG03
 						;; size=31 bbWeight=4 PerfScore 23.00
 G_M46714_IG06:
        mov      rax, r15
 						;; size=3 bbWeight=1 PerfScore 0.25
 G_M46714_IG07:
-       add      rsp, 8
+       add      rsp, 120
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
 G_M46714_IG08:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
        call     [rax]CORINFO_HELP_CHKCASTCLASS
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 338, prolog size 12, PerfScore 56.62, instruction count 70, allocated bytes for code 338 (MethodHash=084f4985) for method System.Reflection.PseudoCustomAttribute:CreatePseudoCustomAttributeHashSet():System.Collections.Generic.HashSet`1[System.RuntimeType] (FullOpts)
+; Total bytes of code 390, prolog size 49, PerfScore 58.71, instruction count 77, allocated bytes for code 390 (MethodHash=084f4985) for method System.Reflection.PseudoCustomAttribute:CreatePseudoCustomAttributeHashSet():System.Collections.Generic.HashSet`1[System.RuntimeType] (FullOpts)
 ; ============================================================
37 (28.91 % of base) - System.Diagnostics.Process:GetPathToOpenFile():System.String
 ; Assembly listing for method System.Diagnostics.Process:GetPathToOpenFile():System.String (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 loc0         [V00,T05] (  2,  0.50)     ref  ->  rax         class-hnd exact single-def <System.String[]>
+;  V00 loc0         [V00,T05] (  2,  0.50)    long  ->  rbx         class-hnd exact <System.String[]>
 ;* V01 loc1         [V01,T06] (  0,  0   )     int  ->  zero-ref   
 ;  V02 loc2         [V02,T02] (  4, 10.50)     ref  ->  rax         class-hnd exact <System.String>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V04 tmp1         [V04,T03] (  5,  2.50)     ref  ->  rax         class-hnd exact single-def "NewArr temp" <System.String[]>
+;  V04 tmp1         [V04,T03] (  5,  2.50)    long  ->  rbx         class-hnd exact "NewArr temp" <System.String[]>
 ;* V05 tmp2         [V05,T04] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;  V06 rat0         [V06,T00] (  4, 12.25)   byref  ->  rbx         "Strength reduced derived IV"
-;  V07 rat1         [V07,T01] (  4, 12.25)     int  ->  r15         "Trip count IV"
+;  V06 tmp3         [V06    ] (  3,  0.75)  struct (40) [rbp-0x38]  do-not-enreg[XS] must-init addr-exposed "stack allocated array temp" <System.String[]>
+;  V07 rat0         [V07,T00] (  4, 12.25)    long  ->  rbx         "Strength reduced derived IV"
+;  V08 rat1         [V08,T01] (  4, 12.25)     int  ->  r15         "Trip count IV"
 ;
-; Lcl frame size = 0
+; Lcl frame size = 48
 
 G_M24781_IG01:
        push     rbp
        push     r15
        push     rbx
-       lea      rbp, [rsp+0x10]
-						;; size=9 bbWeight=0.25 PerfScore 0.88
+       sub      rsp, 48
+       lea      rbp, [rsp+0x40]
+       xor      eax, eax
+       mov      qword ptr [rbp-0x38], rax
+       vxorps   xmm8, xmm8, xmm8
+       vmovdqu  ymmword ptr [rbp-0x30], ymm8
+						;; size=29 bbWeight=0.25 PerfScore 1.83
 G_M24781_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.String[]
-       mov      esi, 3
-       call     CORINFO_HELP_NEWARR_1_OBJ
+       mov      qword ptr [rbp-0x38], rdi
+       lea      rdi, [rbp-0x38]
+       mov      dword ptr [rdi+0x08], 3
+       lea      rbx, [rbp-0x38]
        mov      rdi, 0xD1FFAB1E      ; 'xdg-open'
-       mov      gword ptr [rax+0x10], rdi
+       mov      gword ptr [rbx+0x10], rdi
        mov      rdi, 0xD1FFAB1E      ; 'gnome-open'
-       mov      gword ptr [rax+0x18], rdi
+       mov      gword ptr [rbx+0x18], rdi
        mov      rdi, 0xD1FFAB1E      ; 'kfmclient'
-       mov      gword ptr [rax+0x20], rdi
-       lea      rbx, bword ptr [rax+0x10]
+       mov      gword ptr [rbx+0x20], rdi
+       add      rbx, 16
        mov      r15d, 3
-						;; size=72 bbWeight=0.25 PerfScore 1.50
+						;; size=81 bbWeight=0.25 PerfScore 1.88
 G_M24781_IG03:
        mov      rdi, gword ptr [rbx]
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Process:FindProgramInPath(System.String):System.String
        call     [rax]System.Diagnostics.Process:FindProgramInPath(System.String):System.String
        test     rax, rax
        je       SHORT G_M24781_IG05
 						;; size=20 bbWeight=4 PerfScore 26.00
 G_M24781_IG04:
        cmp      dword ptr [rax+0x08], 0
        jne      SHORT G_M24781_IG08
 						;; size=6 bbWeight=2 PerfScore 8.00
 G_M24781_IG05:
        add      rbx, 8
        dec      r15d
        jne      SHORT G_M24781_IG03
 						;; size=9 bbWeight=4 PerfScore 6.00
 G_M24781_IG06:
        xor      rax, rax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M24781_IG07:
+       add      rsp, 48
        pop      rbx
        pop      r15
        pop      rbp
        ret      
-						;; size=5 bbWeight=0.50 PerfScore 1.25
+						;; size=9 bbWeight=0.50 PerfScore 1.38
 G_M24781_IG08:
+       add      rsp, 48
        pop      rbx
        pop      r15
        pop      rbp
        ret      
-						;; size=5 bbWeight=0.50 PerfScore 1.25
+						;; size=9 bbWeight=0.50 PerfScore 1.38
 
-; Total bytes of code 128, prolog size 9, PerfScore 45.00, instruction count 34, allocated bytes for code 128 (MethodHash=2b949f32) for method System.Diagnostics.Process:GetPathToOpenFile():System.String (FullOpts)
+; Total bytes of code 165, prolog size 29, PerfScore 46.58, instruction count 43, allocated bytes for code 165 (MethodHash=2b949f32) for method System.Diagnostics.Process:GetPathToOpenFile():System.String (FullOpts)
 ; ============================================================
21 (3.78 % of base) - System.Xml.Xsl.Xslt.TemplateMatch:NipOffTypeNameCheck():this
 ; Assembly listing for method System.Xml.Xsl.Xslt.TemplateMatch:NipOffTypeNameCheck():this (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; 21 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T05] ( 11,  8   )     ref  ->  rbx         this class-hnd single-def <System.Xml.Xsl.Xslt.TemplateMatch>
-;  V01 loc0         [V01,T08] (  5,  6.50)     ref  ->  r15         class-hnd exact single-def <System.Xml.Xsl.Qil.QilBinary[]>
+;  V01 loc0         [V01,T08] (  5,  6.50)    long  ->  r15         class-hnd exact <System.Xml.Xsl.Qil.QilBinary[]>
 ;  V02 loc1         [V02,T04] (  9, 15.50)     int  ->  r14        
 ;  V03 loc2         [V03,T02] (  9, 16.38)     ref  ->  rsi         class-hnd <System.Xml.Xsl.Qil.QilNode>
 ;  V04 loc3         [V04,T21] (  3,  1.50)     ref  ->  r13         class-hnd single-def <System.Xml.Xsl.Qil.QilBinary>
 ;  V05 loc4         [V05,T16] (  4,  2   )     int  ->  rax        
 ;  V06 loc5         [V06,T22] (  3,  1.50)     ref  ->  rsi         class-hnd single-def <System.Xml.Xsl.Qil.QilBinary>
 ;  V07 loc6         [V07,T15] (  4,  2   )     ref  ->  r13         class-hnd single-def <System.Xml.Xsl.Qil.QilBinary>
 ;  V08 loc7         [V08,T23] (  3,  1.50)     ref  ->  r15         class-hnd single-def <System.Xml.Xsl.Qil.QilBinary>
 ;* V09 loc8         [V09    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <System.Xml.Xsl.Qil.QilBinary>
 ;  V10 loc9         [V10,T24] (  3,  1.50)     ref  ->  r13         class-hnd single-def <System.Xml.Xsl.Qil.QilBinary>
 ;# V11 OutArgs      [V11    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V12 tmp1         [V12    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <System.Xml.Xsl.Qil.QilBinary[]>
+;* V12 tmp1         [V12    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "NewArr temp" <System.Xml.Xsl.Qil.QilBinary[]>
 ;  V13 tmp2         [V13,T03] (  2, 16   )     int  ->  r14         "dup spill"
 ;  V14 tmp3         [V14,T01] (  3, 24   )     ref  ->  r13         class-hnd "dup spill" <System.Xml.Xsl.Qil.QilBinary>
 ;* V15 tmp4         [V15    ] (  0,  0   )     int  ->  zero-ref    "dup spill"
 ;* V16 tmp5         [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Xml.Xsl.Qil.QilNode>
 ;* V17 tmp6         [V17,T36] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V18 tmp7         [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Xml.Xsl.Qil.QilNode>
 ;* V19 tmp8         [V19    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Xml.Xsl.Qil.QilNode>
 ;* V20 tmp9         [V20    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Xml.Xsl.Qil.QilUnary>
 ;* V21 tmp10        [V21    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Xml.Xsl.Qil.QilNode>
 ;  V22 tmp11        [V22,T19] (  2,  2   )     ref  ->  r13         class-hnd single-def "Inlining Arg" <System.Xml.Xsl.Qil.QilLiteral>
 ;* V23 tmp12        [V23    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Xml.Xsl.Qil.QilNode>
-;  V24 tmp13        [V24,T10] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
-;  V25 tmp14        [V25,T11] (  3,  3   )     ref  ->  rax         single-def "argument with side effect"
-;  V26 tmp15        [V26,T20] (  2,  2   )     int  ->  rdi         "index expr"
-;  V27 cse0         [V27,T25] (  3,  1.50)     ref  ->  rdi         "CSE #02: moderate"
-;  V28 cse1         [V28,T26] (  4,  1.38)     ref  ->  rsi         "CSE #04: moderate"
-;  V29 cse2         [V29,T28] (  4,  1.25)     ref  ->  rsi         "CSE #05: moderate"
-;  V30 cse3         [V30,T27] (  4,  1.38)     ref  ->  rsi         "CSE #06: moderate"
-;  V31 cse4         [V31,T07] (  2,  8   )     int  ->  rdi         "CSE #01: aggressive"
-;  V32 cse5         [V32,T34] (  2,  1   )     int  ->  rsi         "CSE #03: moderate"
-;  V33 cse6         [V33,T35] (  2,  1   )     int  ->  rdi         "CSE #07: moderate"
-;  V34 rat0         [V34,T00] (  5, 30   )     ref  ->  r13         "replacement local"
-;  V35 rat1         [V35,T06] (  3, 10   )    long  ->  rdi         "CSE for expectedClsNode"
-;  V36 rat2         [V36,T12] (  4,  2.25)     ref  ->  r13         "replacement local"
-;  V37 rat3         [V37,T29] (  3,  1.25)    long  ->  rdi         "CSE for expectedClsNode"
-;  V38 rat4         [V38,T13] (  4,  2.25)     ref  ->  r13         "replacement local"
-;  V39 rat5         [V39,T30] (  3,  1.25)    long  ->  rdi         "CSE for expectedClsNode"
-;  V40 rat6         [V40,T17] (  3,  2   )     ref  ->  rdi         "replacement local"
-;  V41 rat7         [V41,T32] (  3,  1   )    long  ->  rax         "CSE for expectedClsNode"
-;  V42 rat8         [V42,T14] (  4,  2.25)     ref  ->  r13         "replacement local"
-;  V43 rat9         [V43,T31] (  3,  1.25)    long  ->  rdi         "CSE for expectedClsNode"
-;  V44 rat10        [V44,T18] (  3,  2   )     ref  ->  rsi         "Spilling to split statement for tree"
-;  V45 rat11        [V45,T09] (  4,  3.50)     ref  ->  rax         "replacement local"
-;  V46 rat12        [V46,T33] (  3,  1   )    long  ->  rdi         "CSE for expectedClsNode"
+;  V24 tmp13        [V24    ] (  3,  3   )  struct (48) [rbp-0x50]  do-not-enreg[XS] must-init addr-exposed "stack allocated array temp" <System.Xml.Xsl.Qil.QilBinary[]>
+;  V25 tmp14        [V25,T10] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
+;  V26 tmp15        [V26,T11] (  3,  3   )     ref  ->  rax         single-def "argument with side effect"
+;  V27 tmp16        [V27,T20] (  2,  2   )     int  ->  rdi         "index expr"
+;  V28 cse0         [V28,T25] (  3,  1.50)     ref  ->  rdi         "CSE #02: moderate"
+;  V29 cse1         [V29,T26] (  4,  1.38)     ref  ->  rsi         "CSE #04: moderate"
+;  V30 cse2         [V30,T28] (  4,  1.25)     ref  ->  rsi         "CSE #05: moderate"
+;  V31 cse3         [V31,T27] (  4,  1.38)     ref  ->  rsi         "CSE #06: moderate"
+;  V32 cse4         [V32,T07] (  2,  8   )     int  ->  rsi         "CSE #01: aggressive"
+;  V33 cse5         [V33,T34] (  2,  1   )     int  ->  rsi         "CSE #03: moderate"
+;  V34 cse6         [V34,T35] (  2,  1   )     int  ->  rdi         "CSE #07: moderate"
+;  V35 rat0         [V35,T00] (  5, 30   )     ref  ->  r13         "replacement local"
+;  V36 rat1         [V36,T06] (  3, 10   )    long  ->  rdi         "CSE for expectedClsNode"
+;  V37 rat2         [V37,T12] (  4,  2.25)     ref  ->  r13         "replacement local"
+;  V38 rat3         [V38,T29] (  3,  1.25)    long  ->  rdi         "CSE for expectedClsNode"
+;  V39 rat4         [V39,T13] (  4,  2.25)     ref  ->  r13         "replacement local"
+;  V40 rat5         [V40,T30] (  3,  1.25)    long  ->  rdi         "CSE for expectedClsNode"
+;  V41 rat6         [V41,T17] (  3,  2   )     ref  ->  rdi         "replacement local"
+;  V42 rat7         [V42,T32] (  3,  1   )    long  ->  rax         "CSE for expectedClsNode"
+;  V43 rat8         [V43,T14] (  4,  2.25)     ref  ->  r13         "replacement local"
+;  V44 rat9         [V44,T31] (  3,  1.25)    long  ->  rdi         "CSE for expectedClsNode"
+;  V45 rat10        [V45,T18] (  3,  2   )     ref  ->  rsi         "Spilling to split statement for tree"
+;  V46 rat11        [V46,T09] (  4,  3.50)     ref  ->  rax         "replacement local"
+;  V47 rat12        [V47,T33] (  3,  1   )    long  ->  rdi         "CSE for expectedClsNode"
 ;
-; Lcl frame size = 0
+; Lcl frame size = 48
 
 G_M471_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
-       lea      rbp, [rsp+0x20]
+       sub      rsp, 48
+       lea      rbp, [rsp+0x50]
+       vxorps   xmm8, xmm8, xmm8
+       vmovdqu  ymmword ptr [rbp-0x50], ymm8
+       vmovdqa  xmmword ptr [rbp-0x30], xmm8
        mov      rbx, rdi
-						;; size=16 bbWeight=1 PerfScore 5.75
+						;; size=35 bbWeight=1 PerfScore 10.33
 G_M471_IG02:
-       mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilBinary[]
-       mov      esi, 4
-       call     CORINFO_HELP_NEWARR_1_OBJ
-       mov      r15, rax
+       mov      rsi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilBinary[]
+       mov      qword ptr [rbp-0x50], rsi
+       lea      rsi, [rbp-0x50]
+       mov      dword ptr [rsi+0x08], 4
+       lea      r15, [rbp-0x50]
        mov      r14d, -1
        mov      rsi, gword ptr [rbx+0x20]
        xor      edi, edi
        mov      dword ptr [rbx+0x30], edi
-						;; size=38 bbWeight=1 PerfScore 5.25
+						;; size=44 bbWeight=1 PerfScore 6.75
 G_M471_IG03:
        mov      gword ptr [rbx+0x10], rdi
        cmp      dword ptr [rsi+0x20], 28
        jne      SHORT G_M471_IG08
 						;; size=10 bbWeight=1 PerfScore 5.00
 G_M471_IG04:
        inc      r14d
        mov      r13, rsi
        test     r13, r13
        je       SHORT G_M471_IG07
 						;; size=11 bbWeight=4 PerfScore 7.00
 G_M471_IG05:
        mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilBinary
        cmp      qword ptr [r13], rdi
        je       SHORT G_M471_IG07
 						;; size=16 bbWeight=2 PerfScore 8.50
 G_M471_IG06:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS_SPECIAL
        call     [rax]CORINFO_HELP_CHKCASTCLASS_SPECIAL
        mov      r13, rax
 						;; size=15 bbWeight=1 PerfScore 3.50
 G_M471_IG07:
-       mov      edi, r14d
-       and      edi, 3
-       lea      rdi, bword ptr [r15+8*rdi+0x10]
-       mov      rsi, r13
-       call     CORINFO_HELP_ASSIGN_REF
+       mov      esi, r14d
+       and      esi, 3
+       mov      gword ptr [r15+8*rsi+0x10], r13
        mov      rsi, gword ptr [r13+0x28]
        cmp      dword ptr [rsi+0x20], 28
        je       SHORT G_M471_IG04
-						;; size=29 bbWeight=4 PerfScore 35.00
+						;; size=21 bbWeight=4 PerfScore 30.00
 G_M471_IG08:
        cmp      dword ptr [rsi+0x20], 95
        jne      G_M471_IG23
 						;; size=10 bbWeight=1 PerfScore 4.00
 G_M471_IG09:
        mov      r13, rsi
        mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilBinary
        cmp      qword ptr [r13], rdi
        je       SHORT G_M471_IG11
 						;; size=19 bbWeight=0.25 PerfScore 1.12
 G_M471_IG10:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS_SPECIAL
        call     [rax]CORINFO_HELP_CHKCASTCLASS_SPECIAL
        mov      r13, rax
 						;; size=15 bbWeight=0.12 PerfScore 0.44
 G_M471_IG11:
        mov      rdi, gword ptr [r13+0x28]
        cmp      rdi, gword ptr [rbx+0x18]
        jne      G_M471_IG23
        mov      rdi, gword ptr [r13+0x30]
        cmp      dword ptr [rdi+0x20], 26
        jne      G_M471_IG23
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Xml.Xsl.Qil.QilNode:get_XmlType():System.Xml.Xsl.XmlQueryType:this
        mov      rdi, rax
        mov      rax, qword ptr [rax]
        mov      rax, qword ptr [rax+0x60]
        call     [rax+0x18]System.Xml.Xsl.XmlQueryType:get_NodeKinds():int:this
        blsr     esi, eax
        jne      G_M471_IG23
        test     eax, eax
        je       G_M471_IG23
        mov      dword ptr [rbx+0x30], eax
        mov      esi, r14d
        and      esi, 3
        mov      rsi, gword ptr [r15+8*rsi+0x10]
        test     rsi, rsi
        je       G_M471_IG22
        mov      rsi, gword ptr [rsi+0x30]
        cmp      dword ptr [rsi+0x20], 52
        jne      G_M471_IG22
 						;; size=107 bbWeight=0.50 PerfScore 19.88
 G_M471_IG12:
        mov      r13, rsi
        mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilBinary
        cmp      qword ptr [r13], rdi
        je       SHORT G_M471_IG14
 						;; size=19 bbWeight=0.25 PerfScore 1.12
 G_M471_IG13:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS_SPECIAL
        call     [rax]CORINFO_HELP_CHKCASTCLASS_SPECIAL
        mov      r13, rax
 						;; size=15 bbWeight=0.12 PerfScore 0.44
 G_M471_IG14:
        mov      rsi, gword ptr [r13+0x28]
        cmp      dword ptr [rsi+0x20], 90
        jne      SHORT G_M471_IG22
 						;; size=10 bbWeight=0.50 PerfScore 3.00
 G_M471_IG15:
        mov      rdi, rsi
        mov      rax, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilUnary
        cmp      qword ptr [rdi], rax
        jne      G_M471_IG27
 						;; size=22 bbWeight=0.25 PerfScore 1.12
 G_M471_IG16:
        mov      rsi, gword ptr [rdi+0x28]
        cmp      rsi, gword ptr [rbx+0x18]
        jne      SHORT G_M471_IG22
        mov      rsi, gword ptr [r13+0x30]
        cmp      dword ptr [rsi+0x20], 25
        jne      SHORT G_M471_IG22
 						;; size=20 bbWeight=0.50 PerfScore 6.00
 G_M471_IG17:
        mov      r13, rsi
        mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilLiteral
        cmp      qword ptr [r13], rdi
        je       SHORT G_M471_IG19
 						;; size=19 bbWeight=0.25 PerfScore 1.12
 G_M471_IG18:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS_SPECIAL
        call     [rax]CORINFO_HELP_CHKCASTCLASS_SPECIAL
        mov      r13, rax
 						;; size=15 bbWeight=0.12 PerfScore 0.44
 G_M471_IG19:
        mov      rsi, gword ptr [r13+0x28]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M471_IG21
 						;; size=12 bbWeight=0.50 PerfScore 1.75
 G_M471_IG20:
        mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilName
        cmp      qword ptr [rax], rdi
        jne      SHORT G_M471_IG26
 						;; size=15 bbWeight=0.25 PerfScore 1.06
 G_M471_IG21:
        lea      rdi, bword ptr [rbx+0x10]
        mov      rsi, rax
        call     CORINFO_HELP_ASSIGN_REF
        dec      r14d
 						;; size=15 bbWeight=0.50 PerfScore 1.00
 G_M471_IG22:
        mov      edi, r14d
        and      edi, 3
        mov      r13, gword ptr [r15+8*rdi+0x10]
        lea      edi, [r14-0x01]
        and      edi, 3
        mov      r15, gword ptr [r15+8*rdi+0x10]
        test     r15, r15
        jne      SHORT G_M471_IG25
        test     r13, r13
        jne      SHORT G_M471_IG24
        xor      rdi, rdi
        mov      gword ptr [rbx+0x20], rdi
 						;; size=39 bbWeight=0.50 PerfScore 4.50
 G_M471_IG23:
+       add      rsp, 48
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=9 bbWeight=1 PerfScore 3.50
+						;; size=13 bbWeight=1 PerfScore 3.75
 G_M471_IG24:
        mov      rsi, gword ptr [r13+0x30]
        lea      rdi, bword ptr [rbx+0x20]
        call     CORINFO_HELP_ASSIGN_REF
        jmp      SHORT G_M471_IG23
 						;; size=15 bbWeight=0.50 PerfScore 2.75
 G_M471_IG25:
        mov      rsi, gword ptr [r13+0x30]
        lea      rdi, bword ptr [r15+0x28]
        call     CORINFO_HELP_ASSIGN_REF
        jmp      SHORT G_M471_IG23
 						;; size=15 bbWeight=0.50 PerfScore 2.75
 G_M471_IG26:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
        call     [rax]CORINFO_HELP_CHKCASTCLASS
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M471_IG27:
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
        call     [rax]CORINFO_HELP_CHKCASTCLASS
        int3     
 						;; size=16 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 555, prolog size 16, PerfScore 126.00, instruction count 142, allocated bytes for code 555 (MethodHash=e25ffe28) for method System.Xml.Xsl.Xslt.TemplateMatch:NipOffTypeNameCheck():this (FullOpts)
+; Total bytes of code 576, prolog size 35, PerfScore 127.33, instruction count 146, allocated bytes for code 576 (MethodHash=e25ffe28) for method System.Xml.Xsl.Xslt.TemplateMatch:NipOffTypeNameCheck():this (FullOpts)
 ; ============================================================

Note: some changes were skipped as they were too large to fit into a comment.

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 23, 2025

Top method improvements

-5 (-1.08 % of base) - System.Net.NetworkInformation.LinuxIPv4InterfaceProperties:GetIsForwardingEnabled():ubyte:this
 ; Assembly listing for method System.Net.NetworkInformation.LinuxIPv4InterfaceProperties:GetIsForwardingEnabled():ubyte:this (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; 31 single block inlinees; 28 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T02] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <System.Net.NetworkInformation.LinuxIPv4InterfaceProperties>
-;  V01 loc0         [V01,T19] (  2,  1   )     ref  ->  [rbp-0x20]  class-hnd exact EH-live single-def <System.String[]>
+;  V00 this         [V00,T02] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Net.NetworkInformation.LinuxIPv4InterfaceProperties>
+;  V01 loc0         [V01,T19] (  2,  1.50)    long  ->  [rbp-0x10]  do-not-enreg[Z] class-hnd exact EH-live <System.String[]>
 ;  V02 loc1         [V02,T18] (  5,  1.50)     int  ->  [rbp-0x14]  do-not-enreg[Z] EH-live
 ;  V03 loc2         [V03,T15] (  2,  2   )   ubyte  ->  rax        
 ;* V04 loc3         [V04    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <System.Net.NetworkInformation.NetworkInformationException>
 ;  V05 loc4         [V05,T27] (  3,  0   )     ref  ->  rbx         class-hnd <System.Exception>
 ;  V06 loc5         [V06,T29] (  3,  0   )   ubyte  ->  rax        
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V08 tmp1         [V08,T01] (  4,  5   )     ref  ->  r15         class-hnd exact single-def "NewArr temp" <System.String[]>
+;  V08 tmp1         [V08,T01] (  4,  5   )    long  ->  rbx         class-hnd exact "NewArr temp" <System.String[]>
 ;  V09 tmp2         [V09,T03] (  3,  5   )     ref  ->  rax         class-hnd exact "Strict ordering of exceptions for Array store" <System.String>
 ;  V10 tmp3         [V10,T31] (  2,  0   )     ref  ->  rsi         class-hnd "impSpillSpecialSideEff" <System.Object>
 ;  V11 tmp4         [V11,T28] (  3,  0   )     ref  ->  rax         class-hnd "dup spill" <System.Net.NetworkInformation.NetworkInformationException>
 ;* V12 tmp5         [V12    ] (  0,  0   )     ref  ->  zero-ref   
 ;  V13 tmp6         [V13,T30] (  3,  0   )     int  ->  rax        
 ;* V14 tmp7         [V14    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "impSpillSpecialSideEff" <System.Object>
 ;* V15 tmp8         [V15    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Net.NetworkInformation.LinuxNetworkInterface>
 ;  V16 tmp9         [V16,T00] (  4,  8   )     ref  ->  rdx         class-hnd exact single-def "Inlining Arg" <System.String>
 ;* V17 tmp10        [V17    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V18 tmp11        [V18    ] (  0,  0   )  struct (16) zero-ref    multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V19 tmp12        [V19    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
 ;* V20 tmp13        [V20    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V21 tmp14        [V21    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline return value spill temp" <System.String>
 ;* V22 tmp15        [V22    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V23 tmp16        [V23    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
 ;* V24 tmp17        [V24    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "dup spill" <System.String>
 ;* V25 tmp18        [V25    ] (  0,  0   )     ref  ->  zero-ref   
 ;* V26 tmp19        [V26    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V27 tmp20        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V28 tmp21        [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V29 tmp22        [V29    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
 ;* V30 tmp23        [V30    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V31 tmp24        [V31    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V32 tmp25        [V32    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
 ;* V33 tmp26        [V33    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V34 tmp27        [V34    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V35 tmp28        [V35    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline return value spill temp" <System.String>
 ;* V36 tmp29        [V36    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V37 tmp30        [V37    ] (  0,  0   )     int  ->  zero-ref    "Span.get_Item index"
 ;* V38 tmp31        [V38    ] (  0,  0   )     int  ->  zero-ref   
 ;* V39 tmp32        [V39    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V40 tmp33        [V40    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V41 tmp34        [V41    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
 ;* V42 tmp35        [V42    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V43 tmp36        [V43    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V44 tmp37        [V44    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
 ;* V45 tmp38        [V45    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V46 tmp39        [V46    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V47 tmp40        [V47,T20] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V48 tmp41        [V48    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "Inline return value spill temp" <System.String>
 ;* V49 tmp42        [V49    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V50 tmp43        [V50    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
 ;* V51 tmp44        [V51    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "dup spill" <System.String>
 ;* V52 tmp45        [V52    ] (  0,  0   )     ref  ->  zero-ref   
 ;* V53 tmp46        [V53    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V54 tmp47        [V54    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V55 tmp48        [V55    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V56 tmp49        [V56    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V57 tmp50        [V57    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
 ;* V58 tmp51        [V58    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V59 tmp52        [V59    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V60 tmp53        [V60,T07] (  2,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.String>
 ;* V61 tmp54        [V61    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V62 tmp55        [V62    ] (  0,  0   )     int  ->  zero-ref    "Span.get_Item index"
 ;* V63 tmp56        [V63,T21] (  0,  0   )     int  ->  zero-ref   
 ;* V64 tmp57        [V64    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V65 tmp58        [V65    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V66 tmp59        [V66    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
 ;* V67 tmp60        [V67    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V68 tmp61        [V68    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V69 tmp62        [V69    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
 ;* V70 tmp63        [V70    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V71 tmp64        [V71    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V72 tmp65        [V72    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V73 tmp66        [V73    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline return value spill temp" <System.String>
 ;* V74 tmp67        [V74    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V75 tmp68        [V75    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
 ;* V76 tmp69        [V76    ] (  0,  0   )     ref  ->  zero-ref   
 ;* V77 tmp70        [V77    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V78 tmp71        [V78    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V79 tmp72        [V79    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V80 tmp73        [V80    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V81 tmp74        [V81    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
 ;* V82 tmp75        [V82    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V83 tmp76        [V83    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
 ;* V84 tmp77        [V84    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V85 tmp78        [V85    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V86 tmp79        [V86    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline return value spill temp" <System.String>
 ;* V87 tmp80        [V87    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V88 tmp81        [V88    ] (  0,  0   )     int  ->  zero-ref    "Span.get_Item index"
 ;* V89 tmp82        [V89    ] (  0,  0   )     int  ->  zero-ref   
 ;* V90 tmp83        [V90    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V91 tmp84        [V91    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V92 tmp85        [V92    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
 ;* V93 tmp86        [V93    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V94 tmp87        [V94    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V95 tmp88        [V95    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
 ;* V96 tmp89        [V96    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V97 tmp90        [V97    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V98 tmp91        [V98    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V99 tmp92        [V99    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V100 tmp93       [V100    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V101 tmp94       [V101    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
 ;  V102 tmp95       [V102,T04] (  2,  4   )   byref  ->  rdx         single-def "Inlining Arg"
 ;  V103 tmp96       [V103,T05] (  2,  4   )     int  ->  rcx         "Inlining Arg"
 ;* V104 tmp97       [V104    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
 ;* V105 tmp98       [V105    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V106 tmp99       [V106    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V107 tmp100      [V107    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V17._reference (fldOffset=0x0)" P-INDEP
-;* V108 tmp101      [V108    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
-;  V109 tmp102      [V109,T08] (  2,  2   )   byref  ->  rdx         "field V18._reference (fldOffset=0x0)" P-INDEP
-;  V110 tmp103      [V110,T16] (  2,  2   )     int  ->  rcx         "field V18._length (fldOffset=0x8)" P-INDEP
-;* V111 tmp104      [V111    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
-;* V112 tmp105      [V112    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
-;* V113 tmp106      [V113    ] (  0,  0   )   byref  ->  zero-ref    "field V22._reference (fldOffset=0x0)" P-INDEP
-;* V114 tmp107      [V114    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
-;* V115 tmp108      [V115    ] (  0,  0   )   byref  ->  zero-ref    "field V23._reference (fldOffset=0x0)" P-INDEP
-;* V116 tmp109      [V116    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
-;* V117 tmp110      [V117    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
-;* V118 tmp111      [V118    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
-;* V119 tmp112      [V119    ] (  0,  0   )   byref  ->  zero-ref    "field V29._reference (fldOffset=0x0)" P-INDEP
-;* V120 tmp113      [V120    ] (  0,  0   )     int  ->  zero-ref    "field V29._length (fldOffset=0x8)" P-INDEP
-;* V121 tmp114      [V121    ] (  0,  0   )   byref  ->  zero-ref    "field V32._reference (fldOffset=0x0)" P-INDEP
-;* V122 tmp115      [V122    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
-;* V123 tmp116      [V123    ] (  0,  0   )   byref  ->  zero-ref    "field V33._reference (fldOffset=0x0)" P-INDEP
-;* V124 tmp117      [V124    ] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
-;* V125 tmp118      [V125    ] (  0,  0   )   byref  ->  zero-ref    "field V36._reference (fldOffset=0x0)" P-INDEP
-;* V126 tmp119      [V126    ] (  0,  0   )     int  ->  zero-ref    "field V36._length (fldOffset=0x8)" P-INDEP
-;* V127 tmp120      [V127    ] (  0,  0   )   byref  ->  zero-ref    "field V39._reference (fldOffset=0x0)" P-INDEP
-;* V128 tmp121      [V128    ] (  0,  0   )     int  ->  zero-ref    "field V39._length (fldOffset=0x8)" P-INDEP
-;* V129 tmp122      [V129    ] (  0,  0   )   byref  ->  zero-ref    "field V40._reference (fldOffset=0x0)" P-INDEP
-;* V130 tmp123      [V130    ] (  0,  0   )     int  ->  zero-ref    "field V40._length (fldOffset=0x8)" P-INDEP
-;* V131 tmp124      [V131    ] (  0,  0   )   byref  ->  zero-ref    "field V41._reference (fldOffset=0x0)" P-INDEP
-;* V132 tmp125      [V132    ] (  0,  0   )     int  ->  zero-ref    "field V41._length (fldOffset=0x8)" P-INDEP
-;* V133 tmp126      [V133    ] (  0,  0   )   byref  ->  zero-ref    "field V44._reference (fldOffset=0x0)" P-INDEP
-;* V134 tmp127      [V134    ] (  0,  0   )     int  ->  zero-ref    "field V44._length (fldOffset=0x8)" P-INDEP
-;* V135 tmp128      [V135    ] (  0,  0   )   byref  ->  zero-ref    "field V45._reference (fldOffset=0x0)" P-INDEP
-;* V136 tmp129      [V136    ] (  0,  0   )     int  ->  zero-ref    "field V45._length (fldOffset=0x8)" P-INDEP
-;* V137 tmp130      [V137    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V49._reference (fldOffset=0x0)" P-INDEP
-;* V138 tmp131      [V138    ] (  0,  0   )     int  ->  zero-ref    "field V49._length (fldOffset=0x8)" P-INDEP
-;* V139 tmp132      [V139    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V50._reference (fldOffset=0x0)" P-INDEP
-;* V140 tmp133      [V140    ] (  0,  0   )     int  ->  zero-ref    "field V50._length (fldOffset=0x8)" P-INDEP
-;  V141 tmp134      [V141,T09] (  2,  2   )   byref  ->  rdi         single-def "field V55._reference (fldOffset=0x0)" P-INDEP
-;* V142 tmp135      [V142,T22] (  0,  0   )     int  ->  zero-ref    "field V55._length (fldOffset=0x8)" P-INDEP
-;* V143 tmp136      [V143    ] (  0,  0   )   byref  ->  zero-ref    "field V57._reference (fldOffset=0x0)" P-INDEP
-;* V144 tmp137      [V144    ] (  0,  0   )     int  ->  zero-ref    "field V57._length (fldOffset=0x8)" P-INDEP
-;  V145 tmp138      [V145,T10] (  2,  2   )   byref  ->   r8         single-def "field V58._reference (fldOffset=0x0)" P-INDEP
-;* V146 tmp139      [V146,T23] (  0,  0   )     int  ->  zero-ref    "field V58._length (fldOffset=0x8)" P-INDEP
-;* V147 tmp140      [V147    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V61._reference (fldOffset=0x0)" P-INDEP
-;* V148 tmp141      [V148    ] (  0,  0   )     int  ->  zero-ref    "field V61._length (fldOffset=0x8)" P-INDEP
-;* V149 tmp142      [V149    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V64._reference (fldOffset=0x0)" P-INDEP
-;* V150 tmp143      [V150    ] (  0,  0   )     int  ->  zero-ref    "field V64._length (fldOffset=0x8)" P-INDEP
-;* V151 tmp144      [V151    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V65._reference (fldOffset=0x0)" P-INDEP
-;* V152 tmp145      [V152    ] (  0,  0   )     int  ->  zero-ref    "field V65._length (fldOffset=0x8)" P-INDEP
-;* V153 tmp146      [V153    ] (  0,  0   )   byref  ->  zero-ref    "field V66._reference (fldOffset=0x0)" P-INDEP
-;* V154 tmp147      [V154    ] (  0,  0   )     int  ->  zero-ref    "field V66._length (fldOffset=0x8)" P-INDEP
-;* V155 tmp148      [V155    ] (  0,  0   )   byref  ->  zero-ref    "field V69._reference (fldOffset=0x0)" P-INDEP
-;* V156 tmp149      [V156    ] (  0,  0   )     int  ->  zero-ref    "field V69._length (fldOffset=0x8)" P-INDEP
-;  V157 tmp150      [V157,T11] (  2,  2   )   byref  ->  rdx         single-def "field V70._reference (fldOffset=0x0)" P-INDEP
-;* V158 tmp151      [V158,T24] (  0,  0   )     int  ->  zero-ref    "field V70._length (fldOffset=0x8)" P-INDEP
-;* V159 tmp152      [V159    ] (  0,  0   )   byref  ->  zero-ref    "field V74._reference (fldOffset=0x0)" P-INDEP
-;* V160 tmp153      [V160    ] (  0,  0   )     int  ->  zero-ref    "field V74._length (fldOffset=0x8)" P-INDEP
-;* V161 tmp154      [V161    ] (  0,  0   )   byref  ->  zero-ref    "field V75._reference (fldOffset=0x0)" P-INDEP
-;* V162 tmp155      [V162    ] (  0,  0   )     int  ->  zero-ref    "field V75._length (fldOffset=0x8)" P-INDEP
-;* V163 tmp156      [V163    ] (  0,  0   )   byref  ->  zero-ref    "field V79._reference (fldOffset=0x0)" P-INDEP
-;* V164 tmp157      [V164    ] (  0,  0   )     int  ->  zero-ref    "field V79._length (fldOffset=0x8)" P-INDEP
-;* V165 tmp158      [V165    ] (  0,  0   )   byref  ->  zero-ref    "field V81._reference (fldOffset=0x0)" P-INDEP
-;* V166 tmp159      [V166    ] (  0,  0   )     int  ->  zero-ref    "field V81._length (fldOffset=0x8)" P-INDEP
-;* V167 tmp160      [V167    ] (  0,  0   )   byref  ->  zero-ref    "field V82._reference (fldOffset=0x0)" P-INDEP
-;* V168 tmp161      [V168    ] (  0,  0   )     int  ->  zero-ref    "field V82._length (fldOffset=0x8)" P-INDEP
-;* V169 tmp162      [V169    ] (  0,  0   )   byref  ->  zero-ref    "field V83._reference (fldOffset=0x0)" P-INDEP
-;* V170 tmp163      [V170    ] (  0,  0   )     int  ->  zero-ref    "field V83._length (fldOffset=0x8)" P-INDEP
-;* V171 tmp164      [V171    ] (  0,  0   )   byref  ->  zero-ref    "field V87._reference (fldOffset=0x0)" P-INDEP
-;* V172 tmp165      [V172    ] (  0,  0   )     int  ->  zero-ref    "field V87._length (fldOffset=0x8)" P-INDEP
-;* V173 tmp166      [V173    ] (  0,  0   )   byref  ->  zero-ref    "field V90._reference (fldOffset=0x0)" P-INDEP
-;* V174 tmp167      [V174    ] (  0,  0   )     int  ->  zero-ref    "field V90._length (fldOffset=0x8)" P-INDEP
-;* V175 tmp168      [V175    ] (  0,  0   )   byref  ->  zero-ref    "field V91._reference (fldOffset=0x0)" P-INDEP
-;* V176 tmp169      [V176    ] (  0,  0   )     int  ->  zero-ref    "field V91._length (fldOffset=0x8)" P-INDEP
-;* V177 tmp170      [V177    ] (  0,  0   )   byref  ->  zero-ref    "field V92._reference (fldOffset=0x0)" P-INDEP
-;* V178 tmp171      [V178    ] (  0,  0   )     int  ->  zero-ref    "field V92._length (fldOffset=0x8)" P-INDEP
-;* V179 tmp172      [V179    ] (  0,  0   )   byref  ->  zero-ref    "field V95._reference (fldOffset=0x0)" P-INDEP
-;* V180 tmp173      [V180    ] (  0,  0   )     int  ->  zero-ref    "field V95._length (fldOffset=0x8)" P-INDEP
-;* V181 tmp174      [V181    ] (  0,  0   )   byref  ->  zero-ref    "field V96._reference (fldOffset=0x0)" P-INDEP
-;* V182 tmp175      [V182    ] (  0,  0   )     int  ->  zero-ref    "field V96._length (fldOffset=0x8)" P-INDEP
-;  V183 tmp176      [V183,T12] (  2,  2   )   byref  ->  rdi         single-def "field V98._reference (fldOffset=0x0)" P-INDEP
-;* V184 tmp177      [V184,T25] (  0,  0   )     int  ->  zero-ref    "field V98._length (fldOffset=0x8)" P-INDEP
-;  V185 tmp178      [V185,T13] (  2,  2   )   byref  ->  rdx         single-def "field V100._reference (fldOffset=0x0)" P-INDEP
-;  V186 tmp179      [V186,T17] (  2,  2   )     int  ->  rcx         "field V100._length (fldOffset=0x8)" P-INDEP
-;* V187 tmp180      [V187    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V101._reference (fldOffset=0x0)" P-INDEP
-;* V188 tmp181      [V188    ] (  0,  0   )     int  ->  zero-ref    "field V101._length (fldOffset=0x8)" P-INDEP
-;* V189 tmp182      [V189    ] (  0,  0   )   byref  ->  zero-ref    "field V104._reference (fldOffset=0x0)" P-INDEP
-;* V190 tmp183      [V190    ] (  0,  0   )     int  ->  zero-ref    "field V104._length (fldOffset=0x8)" P-INDEP
-;  V191 tmp184      [V191,T14] (  2,  2   )   byref  ->   r8         single-def "field V105._reference (fldOffset=0x0)" P-INDEP
-;* V192 tmp185      [V192,T26] (  0,  0   )     int  ->  zero-ref    "field V105._length (fldOffset=0x8)" P-INDEP
-;  V193 cse0        [V193,T06] (  3,  3   )     int  ->  rcx         "CSE #03: moderate"
-;  V194 rat0        [V194    ] (  1,  1   )    long  ->  [rbp-0x30]  do-not-enreg[V] "PSPSym"
+;  V107 tmp100      [V107    ] (  3,  3   )  struct (32) [rbp-0x38]  do-not-enreg[XS] must-init addr-exposed "stack allocated array temp" <System.String[]>
+;* V108 tmp101      [V108    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V17._reference (fldOffset=0x0)" P-INDEP
+;* V109 tmp102      [V109    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
+;  V110 tmp103      [V110,T08] (  2,  2   )   byref  ->  rdx         "field V18._reference (fldOffset=0x0)" P-INDEP
+;  V111 tmp104      [V111,T16] (  2,  2   )     int  ->  rcx         "field V18._length (fldOffset=0x8)" P-INDEP
+;* V112 tmp105      [V112    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
+;* V113 tmp106      [V113    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
+;* V114 tmp107      [V114    ] (  0,  0   )   byref  ->  zero-ref    "field V22._reference (fldOffset=0x0)" P-INDEP
+;* V115 tmp108      [V115    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
+;* V116 tmp109      [V116    ] (  0,  0   )   byref  ->  zero-ref    "field V23._reference (fldOffset=0x0)" P-INDEP
+;* V117 tmp110      [V117    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
+;* V118 tmp111      [V118    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
+;* V119 tmp112      [V119    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
+;* V120 tmp113      [V120    ] (  0,  0   )   byref  ->  zero-ref    "field V29._reference (fldOffset=0x0)" P-INDEP
+;* V121 tmp114      [V121    ] (  0,  0   )     int  ->  zero-ref    "field V29._length (fldOffset=0x8)" P-INDEP
+;* V122 tmp115      [V122    ] (  0,  0   )   byref  ->  zero-ref    "field V32._reference (fldOffset=0x0)" P-INDEP
+;* V123 tmp116      [V123    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
+;* V124 tmp117      [V124    ] (  0,  0   )   byref  ->  zero-ref    "field V33._reference (fldOffset=0x0)" P-INDEP
+;* V125 tmp118      [V125    ] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
+;* V126 tmp119      [V126    ] (  0,  0   )   byref  ->  zero-ref    "field V36._reference (fldOffset=0x0)" P-INDEP
+;* V127 tmp120      [V127    ] (  0,  0   )     int  ->  zero-ref    "field V36._length (fldOffset=0x8)" P-INDEP
+;* V128 tmp121      [V128    ] (  0,  0   )   byref  ->  zero-ref    "field V39._reference (fldOffset=0x0)" P-INDEP
+;* V129 tmp122      [V129    ] (  0,  0   )     int  ->  zero-ref    "field V39._length (fldOffset=0x8)" P-INDEP
+;* V130 tmp123      [V130    ] (  0,  0   )   byref  ->  zero-ref    "field V40._reference (fldOffset=0x0)" P-INDEP
+;* V131 tmp124      [V131    ] (  0,  0   )     int  ->  zero-ref    "field V40._length (fldOffset=0x8)" P-INDEP
+;* V132 tmp125      [V132    ] (  0,  0   )   byref  ->  zero-ref    "field V41._reference (fldOffset=0x0)" P-INDEP
+;* V133 tmp126      [V133    ] (  0,  0   )     int  ->  zero-ref    "field V41._length (fldOffset=0x8)" P-INDEP
+;* V134 tmp127      [V134    ] (  0,  0   )   byref  ->  zero-ref    "field V44._reference (fldOffset=0x0)" P-INDEP
+;* V135 tmp128      [V135    ] (  0,  0   )     int  ->  zero-ref    "field V44._length (fldOffset=0x8)" P-INDEP
+;* V136 tmp129      [V136    ] (  0,  0   )   byref  ->  zero-ref    "field V45._reference (fldOffset=0x0)" P-INDEP
+;* V137 tmp130      [V137    ] (  0,  0   )     int  ->  zero-ref    "field V45._length (fldOffset=0x8)" P-INDEP
+;* V138 tmp131      [V138    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V49._reference (fldOffset=0x0)" P-INDEP
+;* V139 tmp132      [V139    ] (  0,  0   )     int  ->  zero-ref    "field V49._length (fldOffset=0x8)" P-INDEP
+;* V140 tmp133      [V140    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V50._reference (fldOffset=0x0)" P-INDEP
+;* V141 tmp134      [V141    ] (  0,  0   )     int  ->  zero-ref    "field V50._length (fldOffset=0x8)" P-INDEP
+;  V142 tmp135      [V142,T09] (  2,  2   )   byref  ->  rdi         single-def "field V55._reference (fldOffset=0x0)" P-INDEP
+;* V143 tmp136      [V143,T22] (  0,  0   )     int  ->  zero-ref    "field V55._length (fldOffset=0x8)" P-INDEP
+;* V144 tmp137      [V144    ] (  0,  0   )   byref  ->  zero-ref    "field V57._reference (fldOffset=0x0)" P-INDEP
+;* V145 tmp138      [V145    ] (  0,  0   )     int  ->  zero-ref    "field V57._length (fldOffset=0x8)" P-INDEP
+;  V146 tmp139      [V146,T10] (  2,  2   )   byref  ->   r8         single-def "field V58._reference (fldOffset=0x0)" P-INDEP
+;* V147 tmp140      [V147,T23] (  0,  0   )     int  ->  zero-ref    "field V58._length (fldOffset=0x8)" P-INDEP
+;* V148 tmp141      [V148    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V61._reference (fldOffset=0x0)" P-INDEP
+;* V149 tmp142      [V149    ] (  0,  0   )     int  ->  zero-ref    "field V61._length (fldOffset=0x8)" P-INDEP
+;* V150 tmp143      [V150    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V64._reference (fldOffset=0x0)" P-INDEP
+;* V151 tmp144      [V151    ] (  0,  0   )     int  ->  zero-ref    "field V64._length (fldOffset=0x8)" P-INDEP
+;* V152 tmp145      [V152    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V65._reference (fldOffset=0x0)" P-INDEP
+;* V153 tmp146      [V153    ] (  0,  0   )     int  ->  zero-ref    "field V65._length (fldOffset=0x8)" P-INDEP
+;* V154 tmp147      [V154    ] (  0,  0   )   byref  ->  zero-ref    "field V66._reference (fldOffset=0x0)" P-INDEP
+;* V155 tmp148      [V155    ] (  0,  0   )     int  ->  zero-ref    "field V66._length (fldOffset=0x8)" P-INDEP
+;* V156 tmp149      [V156    ] (  0,  0   )   byref  ->  zero-ref    "field V69._reference (fldOffset=0x0)" P-INDEP
+;* V157 tmp150      [V157    ] (  0,  0   )     int  ->  zero-ref    "field V69._length (fldOffset=0x8)" P-INDEP
+;  V158 tmp151      [V158,T11] (  2,  2   )   byref  ->  rdx         single-def "field V70._reference (fldOffset=0x0)" P-INDEP
+;* V159 tmp152      [V159,T24] (  0,  0   )     int  ->  zero-ref    "field V70._length (fldOffset=0x8)" P-INDEP
+;* V160 tmp153      [V160    ] (  0,  0   )   byref  ->  zero-ref    "field V74._reference (fldOffset=0x0)" P-INDEP
+;* V161 tmp154      [V161    ] (  0,  0   )     int  ->  zero-ref    "field V74._length (fldOffset=0x8)" P-INDEP
+;* V162 tmp155      [V162    ] (  0,  0   )   byref  ->  zero-ref    "field V75._reference (fldOffset=0x0)" P-INDEP
+;* V163 tmp156      [V163    ] (  0,  0   )     int  ->  zero-ref    "field V75._length (fldOffset=0x8)" P-INDEP
+;* V164 tmp157      [V164    ] (  0,  0   )   byref  ->  zero-ref    "field V79._reference (fldOffset=0x0)" P-INDEP
+;* V165 tmp158      [V165    ] (  0,  0   )     int  ->  zero-ref    "field V79._length (fldOffset=0x8)" P-INDEP
+;* V166 tmp159      [V166    ] (  0,  0   )   byref  ->  zero-ref    "field V81._reference (fldOffset=0x0)" P-INDEP
+;* V167 tmp160      [V167    ] (  0,  0   )     int  ->  zero-ref    "field V81._length (fldOffset=0x8)" P-INDEP
+;* V168 tmp161      [V168    ] (  0,  0   )   byref  ->  zero-ref    "field V82._reference (fldOffset=0x0)" P-INDEP
+;* V169 tmp162      [V169    ] (  0,  0   )     int  ->  zero-ref    "field V82._length (fldOffset=0x8)" P-INDEP
+;* V170 tmp163      [V170    ] (  0,  0   )   byref  ->  zero-ref    "field V83._reference (fldOffset=0x0)" P-INDEP
+;* V171 tmp164      [V171    ] (  0,  0   )     int  ->  zero-ref    "field V83._length (fldOffset=0x8)" P-INDEP
+;* V172 tmp165      [V172    ] (  0,  0   )   byref  ->  zero-ref    "field V87._reference (fldOffset=0x0)" P-INDEP
+;* V173 tmp166      [V173    ] (  0,  0   )     int  ->  zero-ref    "field V87._length (fldOffset=0x8)" P-INDEP
+;* V174 tmp167      [V174    ] (  0,  0   )   byref  ->  zero-ref    "field V90._reference (fldOffset=0x0)" P-INDEP
+;* V175 tmp168      [V175    ] (  0,  0   )     int  ->  zero-ref    "field V90._length (fldOffset=0x8)" P-INDEP
+;* V176 tmp169      [V176    ] (  0,  0   )   byref  ->  zero-ref    "field V91._reference (fldOffset=0x0)" P-INDEP
+;* V177 tmp170      [V177    ] (  0,  0   )     int  ->  zero-ref    "field V91._length (fldOffset=0x8)" P-INDEP
+;* V178 tmp171      [V178    ] (  0,  0   )   byref  ->  zero-ref    "field V92._reference (fldOffset=0x0)" P-INDEP
+;* V179 tmp172      [V179    ] (  0,  0   )     int  ->  zero-ref    "field V92._length (fldOffset=0x8)" P-INDEP
+;* V180 tmp173      [V180    ] (  0,  0   )   byref  ->  zero-ref    "field V95._reference (fldOffset=0x0)" P-INDEP
+;* V181 tmp174      [V181    ] (  0,  0   )     int  ->  zero-ref    "field V95._length (fldOffset=0x8)" P-INDEP
+;* V182 tmp175      [V182    ] (  0,  0   )   byref  ->  zero-ref    "field V96._reference (fldOffset=0x0)" P-INDEP
+;* V183 tmp176      [V183    ] (  0,  0   )     int  ->  zero-ref    "field V96._length (fldOffset=0x8)" P-INDEP
+;  V184 tmp177      [V184,T12] (  2,  2   )   byref  ->  rdi         single-def "field V98._reference (fldOffset=0x0)" P-INDEP
+;* V185 tmp178      [V185,T25] (  0,  0   )     int  ->  zero-ref    "field V98._length (fldOffset=0x8)" P-INDEP
+;  V186 tmp179      [V186,T13] (  2,  2   )   byref  ->  rdx         single-def "field V100._reference (fldOffset=0x0)" P-INDEP
+;  V187 tmp180      [V187,T17] (  2,  2   )     int  ->  rcx         "field V100._length (fldOffset=0x8)" P-INDEP
+;* V188 tmp181      [V188    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V101._reference (fldOffset=0x0)" P-INDEP
+;* V189 tmp182      [V189    ] (  0,  0   )     int  ->  zero-ref    "field V101._length (fldOffset=0x8)" P-INDEP
+;* V190 tmp183      [V190    ] (  0,  0   )   byref  ->  zero-ref    "field V104._reference (fldOffset=0x0)" P-INDEP
+;* V191 tmp184      [V191    ] (  0,  0   )     int  ->  zero-ref    "field V104._length (fldOffset=0x8)" P-INDEP
+;  V192 tmp185      [V192,T14] (  2,  2   )   byref  ->   r8         single-def "field V105._reference (fldOffset=0x0)" P-INDEP
+;* V193 tmp186      [V193,T26] (  0,  0   )     int  ->  zero-ref    "field V105._length (fldOffset=0x8)" P-INDEP
+;  V194 cse0        [V194,T06] (  3,  3   )     int  ->  rcx         "CSE #03: moderate"
+;  V195 rat0        [V195    ] (  1,  1   )    long  ->  [rbp-0x40]  do-not-enreg[V] "PSPSym"
 ;
-; Lcl frame size = 32
+; Lcl frame size = 56
 
 G_M16213_IG01:
        push     rbp
-       push     r15
        push     rbx
-       sub      rsp, 32
-       lea      rbp, [rsp+0x30]
-       mov      qword ptr [rbp-0x30], rsp
-       mov      rbx, rdi
-						;; size=20 bbWeight=1 PerfScore 5.00
+       sub      rsp, 56
+       lea      rbp, [rsp+0x40]
+       xor      eax, eax
+       mov      qword ptr [rbp-0x38], rax
+       vxorps   xmm8, xmm8, xmm8
+       vmovdqa  xmmword ptr [rbp-0x30], xmm8
+       mov      qword ptr [rbp-0x20], rax
+       mov      qword ptr [rbp-0x40], rsp
+						;; size=35 bbWeight=1 PerfScore 8.33
 G_M16213_IG02:
-       mov      rdi, 0xD1FFAB1E      ; System.String[]
-       mov      esi, 2
-       call     CORINFO_HELP_NEWARR_1_OBJ
-       mov      r15, rax
-       mov      rdi, gword ptr [rbx+0x10]
+       mov      rsi, 0xD1FFAB1E      ; System.String[]
+       mov      qword ptr [rbp-0x38], rsi
+       lea      rsi, [rbp-0x38]
+       mov      dword ptr [rsi+0x08], 2
+       lea      rbx, [rbp-0x38]
+       mov      rdi, gword ptr [rdi+0x10]
        mov      rdx, gword ptr [rdi+0x08]
        test     rdx, rdx
        je       SHORT G_M16213_IG03
        mov      ecx, dword ptr [rdx+0x08]
        test     ecx, ecx
        je       SHORT G_M16213_IG03
        mov      rdi, 0xD1FFAB1E
        add      rdx, 12
        mov      r8, 0xD1FFAB1E
        mov      esi, 23
        mov      r9d, 10
        mov      rax, 0xD1FFAB1E      ; code for System.IO.Path:JoinInternal(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String
        call     [rax]System.IO.Path:JoinInternal(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String
        jmp      SHORT G_M16213_IG04
-						;; size=92 bbWeight=1 PerfScore 16.75
+						;; size=98 bbWeight=1 PerfScore 18.25
 G_M16213_IG03:
        mov      rdi, 0xD1FFAB1E
        mov      r8, 0xD1FFAB1E
        mov      rdx, 0xD1FFAB1E
        mov      esi, 23
        mov      ecx, 1
        mov      r9d, 10
        mov      rax, 0xD1FFAB1E      ; code for System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String
        call     [rax]System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String
 						;; size=58 bbWeight=1 PerfScore 4.75
 G_M16213_IG04:
-       lea      rdi, bword ptr [r15+0x10]
-       mov      rsi, rax
-       call     CORINFO_HELP_ASSIGN_REF
+       mov      gword ptr [rbx+0x10], rax
        mov      rdi, 0xD1FFAB1E      ; '/proc/sys/net/ipv4/ip_forward'
-       mov      gword ptr [r15+0x18], rdi
-       mov      gword ptr [rbp-0x20], r15
+       mov      gword ptr [rbx+0x18], rdi
+       mov      qword ptr [rbp-0x10], rbx
        xor      edi, edi
        mov      dword ptr [rbp-0x14], edi
-						;; size=35 bbWeight=0.50 PerfScore 2.62
+						;; size=27 bbWeight=0.50 PerfScore 2.25
 G_M16213_IG05:
-       mov      edi, dword ptr [rbp-0x14]
-       mov      rdi, gword ptr [r15+8*rdi+0x10]
+       mov      rdi, qword ptr [rbp-0x10]
+       mov      eax, dword ptr [rbp-0x14]
+       mov      rdi, gword ptr [rdi+8*rax+0x10]
        mov      rax, 0xD1FFAB1E      ; code for System.Net.NetworkInformation.StringParsingHelpers:ParseRawIntFile(System.String):int
        call     [rax]System.Net.NetworkInformation.StringParsingHelpers:ParseRawIntFile(System.String):int
        cmp      eax, 1
        sete     al
        movzx    rax, al
-						;; size=29 bbWeight=1 PerfScore 7.75
+						;; size=33 bbWeight=1 PerfScore 8.75
 G_M16213_IG06:
-       add      rsp, 32
+       add      rsp, 56
        pop      rbx
-       pop      r15
        pop      rbp
        ret      
-						;; size=9 bbWeight=1 PerfScore 2.75
+						;; size=7 bbWeight=1 PerfScore 2.25
 G_M16213_IG07:
        mov      eax, dword ptr [rbp-0x14]
        inc      eax
        mov      dword ptr [rbp-0x14], eax
        cmp      dword ptr [rbp-0x14], 2
-       mov      r15, gword ptr [rbp-0x20]
        jl       SHORT G_M16213_IG05
        xor      eax, eax
-						;; size=20 bbWeight=0 PerfScore 0.00
+						;; size=16 bbWeight=0 PerfScore 0.00
 G_M16213_IG08:
-       add      rsp, 32
+       add      rsp, 56
        pop      rbx
-       pop      r15
        pop      rbp
        ret      
-						;; size=9 bbWeight=0 PerfScore 0.00
+						;; size=7 bbWeight=0 PerfScore 0.00
 G_M16213_IG09:
        push     rbp
-       push     r15
        push     rbx
-       sub      rsp, 16
+       push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
-       lea      rbp, [rbp+0x30]
-						;; size=19 bbWeight=0 PerfScore 0.00
+       lea      rbp, [rbp+0x40]
+						;; size=14 bbWeight=0 PerfScore 0.00
 G_M16213_IG10:
        mov      rdi, 0xD1FFAB1E      ; System.Net.NetworkInformation.NetworkInformationException
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_ISINSTANCEOFCLASS
        call     [rax]CORINFO_HELP_ISINSTANCEOFCLASS
        test     rax, rax
        jne      SHORT G_M16213_IG11
        xor      eax, eax
        jmp      SHORT G_M16213_IG15
 						;; size=31 bbWeight=0 PerfScore 0.00
 G_M16213_IG11:
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Exception:get_InnerException():System.Exception:this
        call     [rax]System.Exception:get_InnerException():System.Exception:this
        mov      rbx, rax
        mov      rsi, rbx
        mov      rdi, 0xD1FFAB1E      ; System.IO.IOException
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_ISINSTANCEOFCLASS
        call     [rax]CORINFO_HELP_ISINSTANCEOFCLASS
        test     rax, rax
        jne      SHORT G_M16213_IG12
        mov      rsi, rbx
        mov      rdi, 0xD1FFAB1E      ; System.UnauthorizedAccessException
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_ISINSTANCEOFCLASS
        call     [rax]CORINFO_HELP_ISINSTANCEOFCLASS
        test     rax, rax
        je       SHORT G_M16213_IG13
 						;; size=78 bbWeight=0 PerfScore 0.00
 G_M16213_IG12:
        mov      eax, 1
        jmp      SHORT G_M16213_IG14
 						;; size=7 bbWeight=0 PerfScore 0.00
 G_M16213_IG13:
        xor      eax, eax
 						;; size=2 bbWeight=0 PerfScore 0.00
 G_M16213_IG14:
        test     eax, eax
        setne    al
        movzx    rax, al
 						;; size=8 bbWeight=0 PerfScore 0.00
 G_M16213_IG15:
-       add      rsp, 16
+       add      rsp, 8
        pop      rbx
-       pop      r15
        pop      rbp
        ret      
-						;; size=9 bbWeight=0 PerfScore 0.00
+						;; size=7 bbWeight=0 PerfScore 0.00
 G_M16213_IG16:
        push     rbp
-       push     r15
        push     rbx
-       sub      rsp, 16
+       push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
-       lea      rbp, [rbp+0x30]
-						;; size=19 bbWeight=0 PerfScore 0.00
+       lea      rbp, [rbp+0x40]
+						;; size=14 bbWeight=0 PerfScore 0.00
 G_M16213_IG17:
        lea      rax, G_M16213_IG07
 						;; size=7 bbWeight=0 PerfScore 0.00
 G_M16213_IG18:
-       add      rsp, 16
+       add      rsp, 8
        pop      rbx
-       pop      r15
        pop      rbp
        ret      
-						;; size=9 bbWeight=0 PerfScore 0.00
+						;; size=7 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 461, prolog size 20, PerfScore 39.62, instruction count 120, allocated bytes for code 461 (MethodHash=1605c0aa) for method System.Net.NetworkInformation.LinuxIPv4InterfaceProperties:GetIsForwardingEnabled():ubyte:this (FullOpts)
+; Total bytes of code 456, prolog size 35, PerfScore 44.58, instruction count 116, allocated bytes for code 456 (MethodHash=1605c0aa) for method System.Net.NetworkInformation.LinuxIPv4InterfaceProperties:GetIsForwardingEnabled():ubyte:this (FullOpts)
 ; ============================================================

Note: some changes were skipped as they were too large to fit into a comment.

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 23, 2025

@AndyAyersMS

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