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] [hez2010] [Testing] stackalloc arrays contain gcrefs #849

Open
MihuBot opened this issue Dec 24, 2024 · 3 comments
Open

[JitDiff X64] [hez2010] [Testing] stackalloc arrays contain gcrefs #849

MihuBot opened this issue Dec 24, 2024 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Dec 24, 2024

Job completed in 18 minutes 41 seconds.
dotnet/runtime#110925

Diffs

Diffs
Found 275 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 40211783
Total bytes of diff: 40212841
Total bytes of delta: 1058 (0.00 % of base)
Total relative delta: 2.12
    diff is a regression.
    relative diff is a regression.


Top file regressions (bytes):
         359 : ILCompiler.Reflection.ReadyToRun.dasm (0.17 % of base)
         329 : System.Security.Cryptography.Xml.dasm (0.16 % of base)
         273 : System.Private.DataContractSerialization.dasm (0.03 % of base)
         233 : tieringtest.dasm (3.32 % of base)
          95 : System.Data.Common.dasm (0.01 % of base)
          73 : System.Private.CoreLib.dasm (0.00 % of base)
          42 : System.Configuration.ConfigurationManager.dasm (0.01 % of base)
          34 : System.Diagnostics.Process.dasm (0.03 % of base)
           7 : System.Private.Xml.dasm (0.00 % of base)

Top file improvements (bytes):
        -205 : System.Data.Odbc.dasm (-0.09 % of base)
        -113 : Microsoft.CSharp.dasm (-0.03 % of base)
         -53 : System.Linq.Expressions.dasm (-0.01 % of base)
         -16 : System.Net.NetworkInformation.dasm (-0.03 % of base)

13 total files with Code Size differences (4 improved, 9 regressed), 246 unchanged.

Top method regressions (bytes):
         348 (12.65 % 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)
         233 (3.32 % of base) : tieringtest.dasm - Program:Main(System.String[]):int (FullOpts)
         144 (25.99 % of base) : System.Private.DataContractSerialization.dasm - System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this (FullOpts)
         129 (13.41 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.DataContracts.DataContract:ComputeHash(ubyte[]):ubyte[] (FullOpts)
          94 (18.18 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.Arm64.UnwindInfo:.ctor(ubyte[],int):this (FullOpts)
          94 (18.18 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.LoongArch64.UnwindInfo:.ctor(ubyte[],int):this (FullOpts)
          94 (18.18 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.RiscV64.UnwindInfo:.ctor(ubyte[],int):this (FullOpts)
          77 (14.58 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.Arm.UnwindInfo:.ctor(ubyte[],int):this (FullOpts)
          72 (21.30 % of base) : System.Private.CoreLib.dasm - System.Reflection.PseudoCustomAttribute:CreatePseudoCustomAttributeHashSet():System.Collections.Generic.HashSet`1[System.RuntimeType] (FullOpts)
          63 (11.35 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Xslt.TemplateMatch:NipOffTypeNameCheck():this (FullOpts)
          47 (20.52 % of base) : System.Data.Common.dasm - System.Data.Common.SqlCharsStorage:Set(int,System.Object):this (FullOpts)
          42 (19.72 % of base) : System.Configuration.ConfigurationManager.dasm - System.Configuration.ClientConfigPaths:Validate(System.String,ubyte):System.String (FullOpts)
          41 (18.22 % of base) : System.Data.Common.dasm - System.Data.Common.SqlBytesStorage:Set(int,System.Object):this (FullOpts)
          34 (26.56 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:GetPathToOpenFile():System.String (FullOpts)
           7 (7.61 % of base) : System.Data.Common.dasm - System.Data.ExpressionParser:StartScan():this (FullOpts)
           5 (0.07 % 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)
           1 (0.20 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:InsertAtCurrentHashNode(System.Globalization.DateTimeFormatInfo+TokenHashValue[],System.String,ushort,int,int,int,int,int):this (FullOpts)

Top method improvements (bytes):
        -205 (-10.03 % of base) : System.Data.Odbc.dasm - System.Data.Odbc.OdbcDataReader:RetrieveKeyInfoFromStatistics(System.Data.Odbc.OdbcDataReader+QualifiedTableName,ubyte):int:this (FullOpts)
        -118 (-6.78 % 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)
         -53 (-0.59 % of base) : System.Linq.Expressions.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:CreateCustomUpdateDelegate(System.Reflection.MethodInfo):System.__Canon:this (FullOpts)
         -50 (-8.85 % of base) : System.Private.Xml.dasm - System.Xml.XmlSubtreeReader:AddNamespace(System.String,System.String):this (FullOpts)
         -19 (-6.79 % of base) : System.Security.Cryptography.Xml.dasm - System.Security.Cryptography.Xml.Utils:ConvertIntToByteArray(int):ubyte[] (FullOpts)
         -16 (-3.37 % of base) : System.Net.NetworkInformation.dasm - System.Net.NetworkInformation.LinuxIPv4InterfaceProperties:GetIsForwardingEnabled():ubyte:this (FullOpts)
          -2 (-0.99 % of base) : System.Private.Xml.dasm - System.Xml.Schema.NfaContentValidator:InitValidation(System.Xml.Schema.ValidationState):this (FullOpts)
          -2 (-0.31 % 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)
          -2 (-0.73 % of base) : System.Private.Xml.dasm - System.Xml.XmlWellFormedWriter+AttributeValueCache:AddItem(int,System.Object):this (FullOpts)

Top method regressions (percentages):
          34 (26.56 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:GetPathToOpenFile():System.String (FullOpts)
         144 (25.99 % of base) : System.Private.DataContractSerialization.dasm - System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this (FullOpts)
          72 (21.30 % of base) : System.Private.CoreLib.dasm - System.Reflection.PseudoCustomAttribute:CreatePseudoCustomAttributeHashSet():System.Collections.Generic.HashSet`1[System.RuntimeType] (FullOpts)
          47 (20.52 % of base) : System.Data.Common.dasm - System.Data.Common.SqlCharsStorage:Set(int,System.Object):this (FullOpts)
          42 (19.72 % of base) : System.Configuration.ConfigurationManager.dasm - System.Configuration.ClientConfigPaths:Validate(System.String,ubyte):System.String (FullOpts)
          41 (18.22 % of base) : System.Data.Common.dasm - System.Data.Common.SqlBytesStorage:Set(int,System.Object):this (FullOpts)
          94 (18.18 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.Arm64.UnwindInfo:.ctor(ubyte[],int):this (FullOpts)
          94 (18.18 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.LoongArch64.UnwindInfo:.ctor(ubyte[],int):this (FullOpts)
          94 (18.18 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.RiscV64.UnwindInfo:.ctor(ubyte[],int):this (FullOpts)
          77 (14.58 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.Arm.UnwindInfo:.ctor(ubyte[],int):this (FullOpts)
         129 (13.41 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.DataContracts.DataContract:ComputeHash(ubyte[]):ubyte[] (FullOpts)
         348 (12.65 % 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)
          63 (11.35 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Xslt.TemplateMatch:NipOffTypeNameCheck():this (FullOpts)
           7 (7.61 % of base) : System.Data.Common.dasm - System.Data.ExpressionParser:StartScan():this (FullOpts)
         233 (3.32 % of base) : tieringtest.dasm - Program:Main(System.String[]):int (FullOpts)
           1 (0.20 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:InsertAtCurrentHashNode(System.Globalization.DateTimeFormatInfo+TokenHashValue[],System.String,ushort,int,int,int,int,int):this (FullOpts)
           5 (0.07 % 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)

Top method improvements (percentages):
        -205 (-10.03 % of base) : System.Data.Odbc.dasm - System.Data.Odbc.OdbcDataReader:RetrieveKeyInfoFromStatistics(System.Data.Odbc.OdbcDataReader+QualifiedTableName,ubyte):int:this (FullOpts)
         -50 (-8.85 % of base) : System.Private.Xml.dasm - System.Xml.XmlSubtreeReader:AddNamespace(System.String,System.String):this (FullOpts)
         -19 (-6.79 % of base) : System.Security.Cryptography.Xml.dasm - System.Security.Cryptography.Xml.Utils:ConvertIntToByteArray(int):ubyte[] (FullOpts)
        -118 (-6.78 % 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)
         -16 (-3.37 % of base) : System.Net.NetworkInformation.dasm - System.Net.NetworkInformation.LinuxIPv4InterfaceProperties:GetIsForwardingEnabled():ubyte:this (FullOpts)
          -2 (-0.99 % of base) : System.Private.Xml.dasm - System.Xml.Schema.NfaContentValidator:InitValidation(System.Xml.Schema.ValidationState):this (FullOpts)
          -2 (-0.73 % of base) : System.Private.Xml.dasm - System.Xml.XmlWellFormedWriter+AttributeValueCache:AddItem(int,System.Object):this (FullOpts)
         -53 (-0.59 % of base) : System.Linq.Expressions.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:CreateCustomUpdateDelegate(System.Reflection.MethodInfo):System.__Canon:this (FullOpts)
          -2 (-0.31 % 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)

26 total methods with Code Size differences (9 improved, 17 regressed), 232944 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Dec 24, 2024

Top method regressions

144 (25.99 % 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   )     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   )     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[]>
-;  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] 
+;  V02 arg2         [V02,T13] (  4, 10   )     int  ->  r14         single-def
+;* V03 loc0         [V03    ] (  0,  0   )   byref  ->  zero-ref    class-hnd exact <ubyte[][]>
+;  V04 loc1         [V04,T04] (  9, 47   )     ref  ->  [rbp-0x158]  class-hnd <ubyte[]>
+;  V05 loc2         [V05,T10] (  4, 17   )     int  ->  r13        
+;  V06 loc3         [V06,T09] (  4, 18   )     int  ->  [rbp-0x2C] 
+;  V07 loc4         [V07,T07] (  6, 27   )     int  ->  [rbp-0x30] 
+;  V08 loc5         [V08,T12] (  6, 15   )     int  ->  rbx        
+;  V09 loc6         [V09,T00] ( 11,112   )     int  ->  r12        
 ;  V10 loc7         [V10,T03] (  4, 48   )     int  ->  rax        
-;* V11 loc8         [V11,T17] (  0,  0   )     int  ->  zero-ref   
+;* V11 loc8         [V11,T16] (  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  ->  r12         "impSpillLclRefs"
 ;* V16 tmp4         [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <ubyte[]>
-;  V17 tmp5         [V17    ] (  2,  0   )     int  ->  [rbp-0x40]  do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
+;  V17 tmp5         [V17    ] (  2,  0   )     int  ->  [rbp-0x38]  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,T18] (  2,  0   )     ref  ->  rsi         "argument with side effect"
-;  V21 tmp9         [V21,T19] (  2,  0   )     ref  ->  r15         "argument with side effect"
-;  V22 tmp10        [V22,T20] (  2,  0   )     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    ] ( 12, 41   )  struct (272) [rbp-0x148]  do-not-enreg[XSF] addr-exposed "stack allocated array temp"
+;  V21 tmp9         [V21,T17] (  2,  0   )     ref  ->  rsi         "argument with side effect"
+;  V22 tmp10        [V22,T18] (  2,  0   )     ref  ->  r15         "argument with side effect"
+;  V23 tmp11        [V23,T19] (  2,  0   )     ref  ->  rdx         "argument with side effect"
+;  V24 tmp12        [V24,T11] (  2, 16   )     ref  ->  rdi         "argument with side effect"
+;  V25 cse0         [V25,T02] (  6, 56   )     int  ->  [rbp-0x14C]  spill-single-def "CSE #01: aggressive"
+;  V26 cse1         [V26,T14] (  5,  8   )     int  ->  r13         "CSE #08: moderate"
+;  V27 cse2         [V27,T15] (  2,  8   )     int  ->  rdi         "CSE #06: moderate"
+;  V28 rat0         [V28,T06] (  9, 33   )    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]
        mov      rbx, rdi
        mov      r15d, esi
        mov      r14d, edx
-						;; size=28 bbWeight=1 PerfScore 7.50
+						;; size=34 bbWeight=1 PerfScore 7.50
 G_M31414_IG02:
-       mov      rdi, 0xD1FFAB1E      ; ubyte[][]
-       mov      esi, 32
-       call     CORINFO_HELP_NEWARR_1_OBJ
-       mov      r13, rax
-       mov      r12d, 384
+       vxorps   ymm0, ymm0, ymm0
+       vmovdqu32 zmmword ptr [rbp-0x148], zmm0
+       vmovdqu32 zmmword ptr [rbp-0x108], zmm0
+       vmovdqu32 zmmword ptr [rbp-0xC8], zmm0
+       vmovdqu32 zmmword ptr [rbp-0x88], zmm0
+       vmovdqu  xmmword ptr [rbp-0x48], xmm0
+       mov      rsi, 0xD1FFAB1E      ; ubyte[][]
+       mov      qword ptr [rbp-0x148], rsi
+       mov      dword ptr [rbp-0x140], 32
+       mov      r13d, 384
+       xor      r12d, r12d
        xor      eax, eax
-       mov      dword ptr [rbp-0x2C], eax
-       xor      ecx, ecx
-       mov      dword ptr [rbp-0x30], ecx
+       mov      dword ptr [rbp-0x30], eax
        jmp      SHORT G_M31414_IG04
-						;; size=41 bbWeight=1 PerfScore 6.50
+						;; size=92 bbWeight=1 PerfScore 11.33
 G_M31414_IG03:
-       add      r12d, r12d
-       mov      dword ptr [rbp-0x30], ecx
-						;; size=6 bbWeight=4 PerfScore 5.00
+       add      r13d, r13d
+       mov      dword ptr [rbp-0x30], eax
+       mov      r12d, dword ptr [rbp-0x2C]
+						;; size=10 bbWeight=4 PerfScore 9.00
 G_M31414_IG04:
-       movsxd   rsi, r12d
+       movsxd   rsi, r13d
        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
-       jae      G_M31414_IG18
-       lea      rdi, bword ptr [r13+8*rdi+0x10]
-       mov      gword ptr [rbp-0x50], rax
+       lea      edi, [r12+0x01]
+       mov      dword ptr [rbp-0x2C], edi
+       cmp      r12d, dword ptr [rbp-0x140]
+       jae      G_M31414_IG17
+       lea      rdi, bword ptr [rbp-0x148]
+       mov      esi, r12d
+       lea      rdi, bword ptr [rdi+8*rsi+0x10]
+       mov      gword ptr [rbp-0x158], 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
+       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       xor      r12d, r12d
+       mov      rax, gword ptr [rbp-0x158]
+       mov      r8d, dword ptr [rax+0x08]
+       mov      dword ptr [rbp-0x14C], r8d
+       test     r8d, r8d
        jg       SHORT G_M31414_IG07
-						;; size=72 bbWeight=8 PerfScore 120.00
+						;; size=95 bbWeight=8 PerfScore 124.00
 G_M31414_IG05:
-       mov      dword ptr [rbp-0x34], eax
-       jmp      SHORT G_M31414_IG12
-						;; size=5 bbWeight=4 PerfScore 12.00
+       jmp      SHORT G_M31414_IG11
+						;; size=2 bbWeight=4 PerfScore 8.00
 G_M31414_IG06:
-       mov      eax, esi
-       mov      r9d, edi
-						;; size=5 bbWeight=8 PerfScore 4.00
+       mov      r8d, 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, r8d
+       sub      ecx, r12d
        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-0x158], rax
+       mov      rsi, rax
+       mov      edx, r12d
+       mov      r9, qword ptr [rbx]
+       mov      r9, qword ptr [r9+0x88]
+       call     [r9+0x30]System.Xml.XmlReader:ReadContentAsBinHex(ubyte[],int,int):int:this
        jmp      SHORT G_M31414_IG10
-						;; size=36 bbWeight=8 PerfScore 98.00
+						;; size=38 bbWeight=8 PerfScore 90.00
 G_M31414_IG09:
-       mov      ecx, r9d
-       sub      ecx, eax
+       mov      ecx, r8d
+       sub      ecx, r12d
        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-0x158], rax
+       mov      rsi, rax
+       mov      edx, r12d
+       mov      r9, qword ptr [rbx]
+       mov      r9, qword ptr [r9+0x88]
+       call     [r9+0x20]System.Xml.XmlReader:ReadContentAsBase64(ubyte[],int,int):int:this
+						;; size=36 bbWeight=8 PerfScore 74.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]
+       je       SHORT G_M31414_IG11
+       add      r12d, eax
+       mov      esi, dword ptr [rbp-0x14C]
+       cmp      esi, r12d
+       mov      rax, gword ptr [rbp-0x158]
        jg       SHORT G_M31414_IG06
-						;; size=20 bbWeight=16 PerfScore 92.00
+						;; size=25 bbWeight=16 PerfScore 76.00
 G_M31414_IG11:
-       mov      dword ptr [rbp-0x34], esi
-						;; size=3 bbWeight=8 PerfScore 8.00
-G_M31414_IG12:
-       mov      esi, dword ptr [rbp-0x34]
-       mov      eax, r14d
-       sub      eax, esi
-       mov      ecx, dword ptr [rbp-0x30]
-       cmp      eax, ecx
-       jl       G_M31414_IG17
-       add      ecx, esi
-       cmp      dword ptr [rbp-0x44], esi
+       mov      edi, r14d
+       sub      edi, r12d
+       mov      eax, dword ptr [rbp-0x30]
+       cmp      edi, eax
+       jl       G_M31414_IG16
+       add      eax, r12d
+       cmp      dword ptr [rbp-0x14C], r12d
        jle      G_M31414_IG03
-						;; size=30 bbWeight=8 PerfScore 56.00
-G_M31414_IG13:
-       mov      dword ptr [rbp-0x30], ecx
-       movsxd   rsi, ecx
+						;; size=33 bbWeight=8 PerfScore 48.00
+G_M31414_IG12:
+       mov      dword ptr [rbp-0x30], eax
+       movsxd   rsi, eax
        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
+       lea      r13d, [r12-0x01]
+       test     r13d, r13d
+       jle      SHORT G_M31414_IG14
+						;; size=43 bbWeight=1 PerfScore 6.00
+G_M31414_IG13:
+       mov      edi, dword ptr [rbp-0x140]
+       cmp      r15d, edi
+       jae      G_M31414_IG17
+       lea      rdi, bword ptr [rbp-0x148]
+       mov      rdi, gword ptr [rdi+8*r15+0x10]
+       lea      r8, bword ptr [rbp-0x148]
+       mov      r8, gword ptr [r8+8*r15+0x10]
        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]
+       cmp      r15d, dword ptr [rbp-0x140]
+       jae      G_M31414_IG17
+       lea      rdi, bword ptr [rbp-0x148]
+       mov      rdi, gword ptr [rdi+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]
+       cmp      r15d, r13d
+       jl       SHORT G_M31414_IG13
+						;; size=98 bbWeight=4 PerfScore 93.00
+G_M31414_IG14:
+       cmp      r13d, dword ptr [rbp-0x140]
+       jae      G_M31414_IG17
+       lea      rdi, bword ptr [rbp-0x148]
+       mov      r8d, r13d
+       mov      rdi, gword ptr [rdi+8*r8+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
+						;; size=60 bbWeight=1 PerfScore 11.50
+G_M31414_IG15:
+       add      rsp, 312
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
-G_M31414_IG17:
-       mov      dword ptr [rbp-0x40], r14d
+						;; size=18 bbWeight=1 PerfScore 4.25
+G_M31414_IG16:
+       mov      dword ptr [rbp-0x38], 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]
+       lea      rdi, [rbp-0x38]
        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 PerfScore 0.00
-G_M31414_IG18:
+G_M31414_IG17:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 554, prolog size 28, PerfScore 594.25, 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 698, prolog size 34, PerfScore 584.58, instruction count 163, allocated bytes for code 698 (MethodHash=25c48549) for method System.Xml.XmlDictionaryReader:ReadContentAsBytes(ubyte,int):ubyte[]:this (FullOpts)
 ; ============================================================
129 (13.41 % of base) - System.Runtime.Serialization.DataContracts.DataContract:ComputeHash(ubyte[]):ubyte[]
 ; Assembly listing for method System.Runtime.Serialization.DataContracts.DataContract:ComputeHash(ubyte[]):ubyte[] (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; 5 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T23] (  6, 23   )     ref  ->  rbx         class-hnd single-def <ubyte[]>
-;  V01 loc0         [V01,T26] (  2, 16.84)     ref  ->  r15         class-hnd exact single-def <int[]>
-;  V02 loc1         [V02,T27] (  2, 16.84)     ref  ->  [rbp-0x50]  class-hnd exact spill-single-def <uint[]>
-;  V03 loc2         [V03,T33] (  5, 12   )     int  ->  [rbp-0x2C]  spill-single-def
-;  V04 loc3         [V04,T31] (  8, 14   )     int  ->  [rbp-0x30] 
-;  V05 loc4         [V05,T32] (  6, 12   )     int  ->  [rbp-0x34] 
-;  V06 loc5         [V06,T38] (  4,  6   )     int  ->  [rbp-0x38] 
-;  V07 loc6         [V07,T39] (  4,  6   )     int  ->  [rbp-0x3C] 
-;  V08 loc7         [V08,T25] (  7, 23   )     int  ->  [rbp-0x40] 
-;  V09 loc8         [V09,T08] ( 12, 63.68)     ref  ->  r10         class-hnd <ubyte[]>
-;  V10 loc9         [V10,T11] ( 12, 51   )     int  ->  [rbp-0x44] 
-;  V11 loc10        [V11,T16] (  4, 36.68)     int  ->  registers  
-;  V12 loc11        [V12,T01] ( 14,155.48)     int  ->  registers  
-;  V13 loc12        [V13,T04] (  9, 82.20)     int  ->  registers  
-;  V14 loc13        [V14,T06] (  9, 74.28)     int  ->  registers  
-;  V15 loc14        [V15,T12] (  5, 47.52)     int  ->  r12        
-;  V16 loc15        [V16,T02] ( 10, 95.04)     int  ->  rax        
+;* V01 loc0         [V01    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact <int[]>
+;* V02 loc1         [V02    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact <uint[]>
+;  V03 loc2         [V03,T31] (  5, 12   )     int  ->  [rbp-0x2C]  spill-single-def
+;  V04 loc3         [V04,T29] (  8, 14   )     int  ->  r13        
+;  V05 loc4         [V05,T30] (  6, 12   )     int  ->  [rbp-0x30] 
+;  V06 loc5         [V06,T36] (  4,  6   )     int  ->  [rbp-0x34] 
+;  V07 loc6         [V07,T37] (  4,  6   )     int  ->  [rbp-0x38] 
+;  V08 loc7         [V08,T25] (  7, 23   )     int  ->  [rbp-0x3C] 
+;  V09 loc8         [V09,T07] ( 12, 64   )     ref  ->   r8         class-hnd <ubyte[]>
+;  V10 loc9         [V10,T12] ( 12, 51.16)     int  ->  [rbp-0x40] 
+;  V11 loc10        [V11,T16] (  4, 37   )     int  ->  registers  
+;  V12 loc11        [V12,T01] ( 14,157   )     int  ->  registers  
+;  V13 loc12        [V13,T04] (  9, 83   )     int  ->  registers  
+;  V14 loc13        [V14,T06] (  9, 75   )     int  ->  registers  
+;  V15 loc14        [V15,T13] (  5, 48   )     int  ->  rax        
+;  V16 loc15        [V16,T02] ( 10, 96   )     int  ->  r14        
 ;  V17 loc16        [V17,T05] ( 12, 82.16)     int  ->  rsi        
-;* V18 loc17        [V18,T44] (  0,  0   )     int  ->  zero-ref   
+;* V18 loc17        [V18,T40] (  0,  0   )     int  ->  zero-ref   
 ;# V19 OutArgs      [V19    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V20 tmp1         [V20,T40] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "NewArr temp" <int[]>
-;  V21 tmp2         [V21,T41] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "NewArr temp" <uint[]>
-;  V22 tmp3         [V22,T09] (  2, 63.36)     int  ->   r8         "impSpillLclRefs"
-;  V23 tmp4         [V23,T10] (  2, 63.36)     int  ->  rdi         "impAppendStmt"
+;* V20 tmp1         [V20    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
+;* V21 tmp2         [V21    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "NewArr temp" <uint[]>
+;  V22 tmp3         [V22,T09] (  2, 64   )     int  ->  r11         "impSpillLclRefs"
+;  V23 tmp4         [V23,T10] (  2, 64   )     int  ->  rdi         "impAppendStmt"
 ;* V24 tmp5         [V24    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ubyte]>
 ;* V25 tmp6         [V25    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
 ;* V26 tmp7         [V26    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <ubyte[]>
-;  V27 tmp8         [V27,T07] (  4, 64   )     int  ->  rax         "Strict ordering of exceptions for Array store"
-;  V28 tmp9         [V28,T34] (  2,  8   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
-;  V29 tmp10        [V29,T35] (  2,  8   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
-;  V30 tmp11        [V30,T36] (  2,  8   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
-;  V31 tmp12        [V31,T37] (  2,  8   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
-;  V32 tmp13        [V32,T28] (  8, 16   )     ref  ->  rax         class-hnd exact single-def "NewArr temp" <ubyte[]>
+;  V27 tmp8         [V27,T08] (  4, 64   )     int  ->  rax         "Strict ordering of exceptions for Array store"
+;  V28 tmp9         [V28,T32] (  2,  8   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
+;  V29 tmp10        [V29,T33] (  2,  8   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
+;  V30 tmp11        [V30,T34] (  2,  8   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
+;  V31 tmp12        [V31,T35] (  2,  8   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
+;  V32 tmp13        [V32,T26] (  8, 16   )     ref  ->  rax         class-hnd exact single-def "NewArr temp" <ubyte[]>
 ;* V33 tmp14        [V33    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.Span`1[ubyte]>
 ;* V34 tmp15        [V34    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
 ;* V35 tmp16        [V35    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
-;  V36 tmp17        [V36,T20] (  2, 31.68)   byref  ->  r14         "Inlining Arg"
-;  V37 tmp18        [V37,T21] (  2, 31.68)     int  ->  r12         "Inlining Arg"
+;  V36 tmp17        [V36,T20] (  2, 32   )   byref  ->  r12         "Inlining Arg"
+;  V37 tmp18        [V37,T21] (  2, 32   )     int  ->  rax         "Inlining Arg"
 ;* V38 tmp19        [V38    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
 ;* V39 tmp20        [V39    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V40 tmp21        [V40    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V41 tmp22        [V41    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V42 tmp23        [V42    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V43 tmp24        [V43    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V44 tmp25        [V44    ] (  0,  0   )   byref  ->  zero-ref    "field V24._reference (fldOffset=0x0)" P-INDEP
-;* V45 tmp26        [V45    ] (  0,  0   )     int  ->  zero-ref    "field V24._length (fldOffset=0x8)" P-INDEP
-;* V46 tmp27        [V46    ] (  0,  0   )   byref  ->  zero-ref    "field V25._reference (fldOffset=0x0)" P-INDEP
-;* V47 tmp28        [V47    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
-;  V48 tmp29        [V48,T18] (  3, 31.68)   byref  ->  registers   "field V33._reference (fldOffset=0x0)" P-INDEP
-;  V49 tmp30        [V49,T19] (  3, 31.68)     int  ->  r12         "field V33._length (fldOffset=0x8)" P-INDEP
-;  V50 tmp31        [V50,T29] (  2, 15.84)   byref  ->  r14         "field V34._reference (fldOffset=0x0)" P-INDEP
-;  V51 tmp32        [V51,T30] (  2, 15.84)     int  ->  r12         "field V34._length (fldOffset=0x8)" P-INDEP
-;* V52 tmp33        [V52    ] (  0,  0   )   byref  ->  zero-ref    "field V35._reference (fldOffset=0x0)" P-INDEP
-;* V53 tmp34        [V53    ] (  0,  0   )     int  ->  zero-ref    "field V35._length (fldOffset=0x8)" P-INDEP
-;* V54 tmp35        [V54    ] (  0,  0   )   byref  ->  zero-ref    "field V38._reference (fldOffset=0x0)" P-INDEP
-;* V55 tmp36        [V55    ] (  0,  0   )     int  ->  zero-ref    "field V38._length (fldOffset=0x8)" P-INDEP
-;* V56 tmp37        [V56    ] (  0,  0   )   byref  ->  zero-ref    "field V39._reference (fldOffset=0x0)" P-INDEP
-;* V57 tmp38        [V57    ] (  0,  0   )     int  ->  zero-ref    "field V39._length (fldOffset=0x8)" P-INDEP
-;* V58 tmp39        [V58    ] (  0,  0   )   byref  ->  zero-ref    "field V42._reference (fldOffset=0x0)" P-INDEP
-;* V59 tmp40        [V59    ] (  0,  0   )     int  ->  zero-ref    "field V42._length (fldOffset=0x8)" P-INDEP
-;* V60 tmp41        [V60    ] (  0,  0   )   byref  ->  zero-ref    "field V43._reference (fldOffset=0x0)" P-INDEP
-;* V61 tmp42        [V61    ] (  0,  0   )     int  ->  zero-ref    "field V43._length (fldOffset=0x8)" P-INDEP
-;  V62 tmp43        [V62,T03] (  3, 95.04)     int  ->  rax         "index expr"
-;* V63 tmp44        [V63,T22] (  0,  0   )     int  ->  zero-ref    "index expr"
-;  V64 cse0         [V64,T13] (  3, 47.52)     int  ->  rax         "CSE #13: moderate"
-;  V65 cse1         [V65,T14] (  2, 31.68)     int  ->  rax         "CSE #10: moderate"
-;  V66 cse2         [V66,T42] (  3,  6   )     int  ->  rsi         "CSE #04: conservative"
-;  V67 cse3         [V67,T17] ( 12, 36   )     int  ->  r13         "CSE #01: moderate"
-;  V68 cse4         [V68,T15] (  3, 47.52)     int  ->  rcx         "CSE #02: moderate"
-;  V69 cse5         [V69,T24] (  3, 23.76)     int  ->  r12         "CSE #06: moderate"
-;  V70 rat0         [V70,T00] ( 15,167.32)    long  ->  rcx         "Widened IV V18"
-;  V71 rat1         [V71,T43] (  3,  6   )     int  ->  r12         "ReplaceWithLclVar is creating a new local variable"
+;  V44 tmp25        [V44    ] (  7, 52   )  struct (80) [rbp-0x90]  do-not-enreg[XSF] addr-exposed "stack allocated array temp"
+;  V45 tmp26        [V45    ] (  6, 36   )  struct (272) [rbp-0x1A0]  do-not-enreg[XSF] addr-exposed "stack allocated array temp"
+;* V46 tmp27        [V46    ] (  0,  0   )   byref  ->  zero-ref    "field V24._reference (fldOffset=0x0)" P-INDEP
+;* V47 tmp28        [V47    ] (  0,  0   )     int  ->  zero-ref    "field V24._length (fldOffset=0x8)" P-INDEP
+;* V48 tmp29        [V48    ] (  0,  0   )   byref  ->  zero-ref    "field V25._reference (fldOffset=0x0)" P-INDEP
+;* V49 tmp30        [V49    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
+;  V50 tmp31        [V50,T18] (  3, 32   )   byref  ->  registers   "field V33._reference (fldOffset=0x0)" P-INDEP
+;  V51 tmp32        [V51,T19] (  3, 32   )     int  ->  registers   "field V33._length (fldOffset=0x8)" P-INDEP
+;  V52 tmp33        [V52,T27] (  2, 16   )   byref  ->  r12         "field V34._reference (fldOffset=0x0)" P-INDEP
+;  V53 tmp34        [V53,T28] (  2, 16   )     int  ->  rax         "field V34._length (fldOffset=0x8)" P-INDEP
+;* V54 tmp35        [V54    ] (  0,  0   )   byref  ->  zero-ref    "field V35._reference (fldOffset=0x0)" P-INDEP
+;* V55 tmp36        [V55    ] (  0,  0   )     int  ->  zero-ref    "field V35._length (fldOffset=0x8)" P-INDEP
+;* V56 tmp37        [V56    ] (  0,  0   )   byref  ->  zero-ref    "field V38._reference (fldOffset=0x0)" P-INDEP
+;* V57 tmp38        [V57    ] (  0,  0   )     int  ->  zero-ref    "field V38._length (fldOffset=0x8)" P-INDEP
+;* V58 tmp39        [V58    ] (  0,  0   )   byref  ->  zero-ref    "field V39._reference (fldOffset=0x0)" P-INDEP
+;* V59 tmp40        [V59    ] (  0,  0   )     int  ->  zero-ref    "field V39._length (fldOffset=0x8)" P-INDEP
+;* V60 tmp41        [V60    ] (  0,  0   )   byref  ->  zero-ref    "field V42._reference (fldOffset=0x0)" P-INDEP
+;* V61 tmp42        [V61    ] (  0,  0   )     int  ->  zero-ref    "field V42._length (fldOffset=0x8)" P-INDEP
+;* V62 tmp43        [V62    ] (  0,  0   )   byref  ->  zero-ref    "field V43._reference (fldOffset=0x0)" P-INDEP
+;* V63 tmp44        [V63    ] (  0,  0   )     int  ->  zero-ref    "field V43._length (fldOffset=0x8)" P-INDEP
+;  V64 tmp45        [V64,T03] (  3, 96   )     int  ->  r14         "index expr"
+;  V65 tmp46        [V65,T11] (  2, 64   )     int  ->  rax         "index expr"
+;  V66 cse0         [V66,T14] (  3, 48   )     int  ->  rax         "CSE #10: moderate"
+;  V67 cse1         [V67,T38] (  3,  6   )     int  ->  rsi         "CSE #04: conservative"
+;  V68 cse2         [V68,T17] ( 12, 36   )     int  ->  r15         "CSE #01: moderate"
+;  V69 cse3         [V69,T22] (  2, 32   )     int  ->  r12         "CSE #11: moderate"
+;  V70 cse4         [V70,T15] (  3, 47.52)     int  ->  rcx         "CSE #02: moderate"
+;  V71 cse5         [V71,T24] (  3, 24   )     int  ->  rax         "CSE #06: moderate"
+;  V72 rat0         [V72,T00] ( 16,185   )    long  ->  rcx         "Widened IV V18"
+;  V73 rat1         [V73,T39] (  3,  6   )     int  ->  r14         "ReplaceWithLclVar is creating a new local variable"
 ;
-; Lcl frame size = 40
+; Lcl frame size = 376
 
 G_M24152_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 40
-       lea      rbp, [rsp+0x50]
+       sub      rsp, 376
+       lea      rbp, [rsp+0x1A0]
        mov      rbx, rdi
-						;; size=22 bbWeight=1 PerfScore 7.00
+						;; size=28 bbWeight=1 PerfScore 7.00
 G_M24152_IG02:
+       vxorps   ymm0, ymm0, ymm0
+       vmovdqu32 zmmword ptr [rbp-0x90], zmm0
+       vmovdqu  xmmword ptr [rbp-0x50], xmm0
        mov      rdi, 0xD1FFAB1E      ; int[]
-       mov      esi, 16
-       call     CORINFO_HELP_NEWARR_1_VC
-       mov      r15, rax
+       mov      qword ptr [rbp-0x90], rdi
+       mov      dword ptr [rbp-0x88], 16
        mov      rdi, 0xD1FFAB1E      ; const ptr
        vmovdqu32 zmm0, zmmword ptr [rdi]
-       vmovdqu32 zmmword ptr [r15+0x10], zmm0
+       vmovdqu32 zmmword ptr [rbp-0x80], zmm0
+		  ;; NOP compensation instructions of 3 bytes.
+       vxorps   ymm0, ymm0, ymm0
+       vmovdqu32 zmmword ptr [rbp-0x1A0], zmm0
+       vmovdqu32 zmmword ptr [rbp-0x160], zmm0
+       vmovdqu32 zmmword ptr [rbp-0x120], zmm0
+       vmovdqu32 zmmword ptr [rbp-0xE0], zmm0
+       vmovdqu  xmmword ptr [rbp-0xA0], xmm0
        mov      rdi, 0xD1FFAB1E      ; uint[]
-       mov      esi, 64
-       call     CORINFO_HELP_NEWARR_1_VC
-       mov      r14, rax
+       mov      qword ptr [rbp-0x1A0], rdi
+       mov      dword ptr [rbp-0x198], 64
        mov      rdi, 0xD1FFAB1E      ; const ptr
        vmovdqu32 zmm0, zmmword ptr [rdi]
-       vmovdqu32 zmmword ptr [r14+0x10], zmm0
+       vmovdqu32 zmmword ptr [rbp-0x190], zmm0
        vmovdqu32 zmm0, zmmword ptr [rdi+0x40]
-       vmovdqu32 zmmword ptr [r14+0x50], zmm0
+       vmovdqu32 zmmword ptr [rbp-0x150], zmm0
        vmovdqu32 zmm0, zmmword ptr [rdi+0x80]
-       vmovdqu32 zmmword ptr [r14+0x90], zmm0
+       vmovdqu32 zmmword ptr [rbp-0x110], zmm0
        vmovdqu32 zmm0, zmmword ptr [rdi+0xC0]
-       vmovdqu32 zmmword ptr [r14+0xD0], zmm0
-       mov      gword ptr [rbp-0x50], r14
-       mov      r13d, dword ptr [rbx+0x08]
-       lea      r12d, [r13+0x08]
-       mov      eax, r12d
-       sar      eax, 31
-       and      eax, 63
-       add      r12d, eax
-       sar      r12d, 6
-       inc      r12d
-       mov      dword ptr [rbp-0x2C], r12d
-       mov      dword ptr [rbp-0x30], 0xD1FFAB1E
+       vmovdqu32 zmmword ptr [rbp-0xD0], zmm0
+       mov      r15d, dword ptr [rbx+0x08]
+       lea      r14d, [r15+0x08]
+       mov      r13d, r14d
+       sar      r13d, 31
+       and      r13d, 63
+       add      r14d, r13d
+       sar      r14d, 6
+       inc      r14d
+       mov      dword ptr [rbp-0x2C], r14d
+       mov      r13d, 0xD1FFAB1E
+       mov      r12d, 0xD1FFAB1E
        mov      dword ptr [rbp-0x34], 0xD1FFAB1E
        mov      dword ptr [rbp-0x38], 0xD1FFAB1E
-       mov      dword ptr [rbp-0x3C], 0xD1FFAB1E
-       xor      r9d, r9d
-       test     r12d, r12d
+       xor      edx, edx
+       test     r14d, r14d
        jle      G_M24152_IG24
-						;; size=224 bbWeight=1 PerfScore 46.00
+						;; size=298 bbWeight=1 PerfScore 47.17
 G_M24152_IG03:
-       mov      r10, rbx
+       mov      r8, rbx
+       mov      dword ptr [rbp-0x3C], edx
+       mov      r9d, edx
+       shl      r9d, 6
        mov      dword ptr [rbp-0x40], r9d
-       mov      r11d, r9d
-       shl      r11d, 6
-       mov      dword ptr [rbp-0x44], r11d
-       lea      edi, [r11+0x40]
-       cmp      r13d, edi
+       lea      edi, [r9+0x40]
+       cmp      r15d, edi
        jge      G_M24152_IG10
-						;; size=31 bbWeight=4 PerfScore 19.00
+						;; size=30 bbWeight=4 PerfScore 19.00
 G_M24152_IG04:
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 64
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      r10, rax
-       mov      edi, dword ptr [rbp-0x44]
+       mov      r8, rax
+       mov      edi, dword ptr [rbp-0x40]
        mov      esi, edi
-       cmp      r13d, edi
+       cmp      r15d, edi
        jle      SHORT G_M24152_IG07
 						;; size=33 bbWeight=2 PerfScore 8.50
 G_M24152_IG05:
        test     edi, edi
        jl       G_M24152_IG13
-       align    [2 bytes for IG06]
-						;; size=10 bbWeight=1 PerfScore 1.50
+       align    [3 bytes for IG06]
+						;; size=11 bbWeight=1 PerfScore 1.50
 G_M24152_IG06:
        mov      eax, esi
        movzx    rax, byte  ptr [rbx+rax+0x10]
        mov      ecx, esi
        sub      ecx, edi
        cmp      ecx, 64
        jae      G_M24152_IG28
-       mov      byte  ptr [r10+rcx+0x10], al
+       mov      byte  ptr [r8+rcx+0x10], al
        inc      esi
-       cmp      r13d, esi
+       cmp      r15d, esi
        jg       SHORT G_M24152_IG06
 						;; size=32 bbWeight=15.84 PerfScore 102.96
 G_M24152_IG07:
-       cmp      r13d, edi
+       cmp      r15d, edi
        jl       SHORT G_M24152_IG08
-       mov      esi, r13d
+       mov      esi, r15d
        sub      esi, edi
        cmp      esi, 64
        jae      G_M24152_IG28
        mov      edi, esi
-       mov      byte  ptr [r10+rdi+0x10], 128
+       mov      byte  ptr [r8+rdi+0x10], 128
 						;; size=27 bbWeight=2 PerfScore 8.50
 G_M24152_IG08:
-       lea      edi, [r12-0x01]
-       mov      esi, dword ptr [rbp-0x40]
+       lea      edi, [r14-0x01]
+       mov      esi, dword ptr [rbp-0x3C]
        cmp      esi, edi
        jne      SHORT G_M24152_IG09
-       lea      edi, [8*r13]
+       lea      edi, [8*r15]
        movzx    rdi, dil
-       mov      byte  ptr [r10+0x48], dil
-       mov      edi, r13d
+       mov      byte  ptr [r8+0x48], dil
+       mov      edi, r15d
        sar      edi, 5
        movzx    rdi, dil
-       mov      byte  ptr [r10+0x49], dil
-       mov      edi, r13d
+       mov      byte  ptr [r8+0x49], dil
+       mov      edi, r15d
        sar      edi, 13
        movzx    rdi, dil
-       mov      byte  ptr [r10+0x4A], dil
-       mov      edi, r13d
+       mov      byte  ptr [r8+0x4A], dil
+       mov      edi, r15d
        sar      edi, 21
        movzx    rdi, dil
-       mov      byte  ptr [r10+0x4B], dil
-						;; size=70 bbWeight=2 PerfScore 21.00
+       mov      byte  ptr [r8+0x4B], dil
+						;; size=69 bbWeight=2 PerfScore 21.00
 G_M24152_IG09:
        xor      edi, edi
-       mov      dword ptr [rbp-0x44], edi
-       mov      dword ptr [rbp-0x40], esi
-       mov      r12d, dword ptr [rbp-0x2C]
+       mov      dword ptr [rbp-0x40], edi
+       mov      dword ptr [rbp-0x3C], esi
+       mov      r14d, dword ptr [rbp-0x2C]
 						;; size=12 bbWeight=2 PerfScore 6.50
 G_M24152_IG10:
-       mov      eax, dword ptr [rbp-0x30]
-       mov      edi, eax
-       mov      ecx, dword ptr [rbp-0x34]
-       mov      esi, ecx
-       mov      edx, dword ptr [rbp-0x38]
-       mov      r8d, dword ptr [rbp-0x3C]
+       mov      edi, r13d
+       mov      dword ptr [rbp-0x30], r12d
+       mov      esi, r12d
+       mov      eax, dword ptr [rbp-0x34]
+       mov      r10d, eax
+       mov      ecx, dword ptr [rbp-0x38]
+       mov      r11d, ecx
        xor      ecx, ecx
        align    [0 bytes for IG11]
-						;; size=19 bbWeight=1 PerfScore 4.75
+						;; size=24 bbWeight=1 PerfScore 4.25
 G_M24152_IG11:
        cmp      ecx, 16
        jge      SHORT G_M24152_IG14
-						;; size=5 bbWeight=15.84 PerfScore 19.80
+						;; size=5 bbWeight=16 PerfScore 20.00
 G_M24152_IG12:
-       mov      r12d, esi
-       and      r12d, edx
-       andn     eax, esi, r8d
-       or       r12d, eax
-       mov      eax, ecx
+       mov      eax, esi
+       and      eax, r10d
+       andn     r14d, esi, r11d
+       or       eax, r14d
+       mov      r14d, ecx
        jmp      SHORT G_M24152_IG17
-						;; size=18 bbWeight=7.92 PerfScore 27.72
+						;; size=18 bbWeight=8 PerfScore 28.00
 G_M24152_IG13:
        mov      eax, esi
        movzx    rax, byte  ptr [rbx+rax+0x10]
        mov      ecx, esi
        sub      ecx, edi
        cmp      ecx, 64
        jae      G_M24152_IG28
        mov      ecx, esi
        sub      ecx, edi
-       mov      byte  ptr [r10+rcx+0x10], al
+       mov      byte  ptr [r8+rcx+0x10], al
        inc      esi
-       cmp      r13d, esi
+       cmp      r15d, esi
        jg       SHORT G_M24152_IG13
        jmp      G_M24152_IG07
 						;; size=41 bbWeight=0.16 PerfScore 1.44
 G_M24152_IG14:
        cmp      ecx, 32
        jl       SHORT G_M24152_IG16
        cmp      ecx, 48
        jl       SHORT G_M24152_IG15
-       mov      r12d, r8d
-       not      r12d
-       or       r12d, esi
-       xor      r12d, edx
-       lea      eax, [8*rcx]
-       sub      eax, ecx
+       mov      eax, r11d
+       not      eax
+       or       eax, esi
+       xor      eax, r10d
+       lea      r14d, [8*rcx]
+       sub      r14d, ecx
        jmp      SHORT G_M24152_IG17
-						;; size=33 bbWeight=7.92 PerfScore 49.50
+						;; size=33 bbWeight=8 PerfScore 50.00
 G_M24152_IG15:
-       mov      r12d, esi
-       xor      r12d, edx
-       xor      r12d, r8d
-       lea      eax, [rcx+2*rcx]
-       add      eax, 5
+       mov      eax, esi
+       xor      eax, r10d
+       xor      eax, r11d
+       lea      r14d, [rcx+2*rcx]
+       add      r14d, 5
        jmp      SHORT G_M24152_IG17
-						;; size=17 bbWeight=7.92 PerfScore 27.72
+						;; size=18 bbWeight=8 PerfScore 28.00
 G_M24152_IG16:
-       mov      r12d, esi
-       and      r12d, r8d
-       andn     eax, r8d, edx
-       or       r12d, eax
-       lea      eax, [rcx+4*rcx]
-       inc      eax
-						;; size=19 bbWeight=7.92 PerfScore 15.84
+       mov      eax, esi
+       and      eax, r11d
+       andn     r14d, r11d, r10d
+       or       eax, r14d
+       lea      r14d, [rcx+4*rcx]
+       inc      r14d
+						;; size=20 bbWeight=8 PerfScore 16.00
 G_M24152_IG17:
-       and      eax, 15
-       mov      r11d, dword ptr [rbp-0x44]
-       lea      eax, [r11+4*rax]
-       add      edi, r12d
-       add      edi, dword ptr [r14+4*rcx+0x10]
-       test     r10, r10
+       and      r14d, 15
+       mov      r9d, dword ptr [rbp-0x40]
+       lea      r14d, [r9+4*r14]
+       add      edi, eax
+       cmp      ecx, dword ptr [rbp-0x198]
+       jae      G_M24152_IG28
+       lea      rax, [rbp-0x1A0]
+       add      edi, dword ptr [rax+4*rcx+0x10]
+       test     r8, r8
        je       SHORT G_M24152_IG19
-						;; size=24 bbWeight=15.84 PerfScore 99.00
+						;; size=42 bbWeight=16 PerfScore 156.00
 G_M24152_IG18:
-       mov      r12d, dword ptr [r10+0x08]
-       cmp      r12d, eax
+       mov      eax, dword ptr [r8+0x08]
+       cmp      eax, r14d
        jb       G_M24152_IG27
+       mov      r12d, r14d
+       lea      r12, bword ptr [r8+r12+0x10]
+       sub      eax, r14d
        mov      r14d, eax
-       lea      r14, bword ptr [r10+r14+0x10]
-       sub      r12d, eax
-       mov      rax, r14
+       mov      rax, r12
        jmp      SHORT G_M24152_IG20
-						;; size=29 bbWeight=7.92 PerfScore 55.44
+						;; size=32 bbWeight=8 PerfScore 58.00
 G_M24152_IG19:
-       test     eax, eax
+       test     r14d, r14d
        jne      G_M24152_IG27
        xor      rax, rax
-       xor      r12d, r12d
-						;; size=13 bbWeight=7.92 PerfScore 13.86
+       xor      r14d, r14d
+						;; size=14 bbWeight=8 PerfScore 14.00
 G_M24152_IG20:
-       cmp      r12d, 4
+       cmp      r14d, 4
        jl       G_M24152_IG26
        add      edi, dword ptr [rax]
        mov      eax, ecx
        and      eax, 3
-       mov      r12d, ecx
-       sar      r12d, 2
-       and      r12d, -4
-       or       eax, r12d
-       cmp      eax, 16
+       mov      r14d, ecx
+       sar      r14d, 2
+       and      r14d, -4
+       or       eax, r14d
+       mov      r14d, eax
+       mov      r12d, dword ptr [rbp-0x88]
+       cmp      r14d, r12d
        jae      G_M24152_IG28
-       mov      eax, dword ptr [r15+4*rax+0x10]
-       shlx     r12d, edi, eax
+       lea      r12, [rbp-0x90]
+       mov      r14d, dword ptr [r12+4*r14+0x10]
+       shlx     r14d, edi, r14d
+       lea      r12, [rbp-0x90]
+       mov      eax, dword ptr [r12+4*rax+0x10]
        neg      eax
        add      eax, 32
        shrx     edi, edi, eax
-       or       edi, r12d
+       or       edi, r14d
        add      edi, esi
        inc      ecx
        cmp      ecx, 64
-       mov      dword ptr [rbp-0x44], r11d
-       mov      eax, edx
-       mov      edx, esi
+       mov      dword ptr [rbp-0x40], r9d
+       mov      eax, esi
        mov      esi, edi
-       mov      edi, r8d
-       mov      r8d, eax
-       mov      r12d, dword ptr [rbp-0x2C]
-       mov      r14, gword ptr [rbp-0x50]
+       mov      edi, r11d
+       mov      r11d, r10d
+       mov      r10d, eax
+       mov      r14d, dword ptr [rbp-0x2C]
        jl       G_M24152_IG11
-						;; size=100 bbWeight=15.84 PerfScore 269.28
+						;; size=126 bbWeight=16 PerfScore 324.00
 G_M24152_IG21:
-       mov      eax, edi
-       add      eax, dword ptr [rbp-0x30]
-       mov      dword ptr [rbp-0x30], eax
-       mov      ecx, esi
-       add      ecx, dword ptr [rbp-0x34]
-       mov      dword ptr [rbp-0x34], ecx
-       lea      edi, [r12-0x01]
-       mov      r9d, dword ptr [rbp-0x40]
-       cmp      r9d, edi
+       add      r13d, edi
+       mov      r12d, esi
+       add      r12d, dword ptr [rbp-0x30]
+       lea      edi, [r14-0x01]
+       mov      edx, dword ptr [rbp-0x3C]
+       cmp      edx, edi
        jge      SHORT G_M24152_IG23
-						;; size=30 bbWeight=4 PerfScore 37.00
+						;; size=21 bbWeight=4 PerfScore 21.00
 G_M24152_IG22:
-       add      edx, dword ptr [rbp-0x38]
-       mov      edi, edx
-       add      r8d, dword ptr [rbp-0x3C]
-       mov      esi, r8d
+       mov      eax, r10d
+       add      eax, dword ptr [rbp-0x34]
+       mov      ecx, r11d
+       add      ecx, dword ptr [rbp-0x38]
+       mov      edi, ecx
+       mov      dword ptr [rbp-0x34], eax
        mov      dword ptr [rbp-0x38], edi
-       mov      dword ptr [rbp-0x3C], esi
-						;; size=18 bbWeight=2 PerfScore 13.00
+						;; size=20 bbWeight=2 PerfScore 13.50
 G_M24152_IG23:
-       inc      r9d
-       cmp      r9d, r12d
+       inc      edx
+       cmp      edx, r14d
        jl       G_M24152_IG03
-						;; size=12 bbWeight=4 PerfScore 6.00
+						;; size=11 bbWeight=4 PerfScore 6.00
 G_M24152_IG24:
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 6
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      ebx, dword ptr [rbp-0x30]
-       mov      byte  ptr [rax+0x10], bl
-       mov      edi, ebx
+       mov      byte  ptr [rax+0x10], r13b
+       mov      edi, r13d
        shr      edi, 8
        mov      byte  ptr [rax+0x11], dil
-       mov      edi, ebx
+       mov      edi, r13d
        shr      edi, 16
        mov      byte  ptr [rax+0x12], dil
-       mov      edi, ebx
+       mov      edi, r13d
        shr      edi, 24
        mov      byte  ptr [rax+0x13], dil
-       mov      ebx, dword ptr [rbp-0x34]
-       mov      byte  ptr [rax+0x14], bl
-       mov      edi, ebx
+       mov      byte  ptr [rax+0x14], r12b
+       mov      edi, r12d
        shr      edi, 8
        mov      byte  ptr [rax+0x15], dil
-						;; size=68 bbWeight=1 PerfScore 12.50
+						;; size=68 bbWeight=1 PerfScore 10.50
 G_M24152_IG25:
        vzeroupper 
-       add      rsp, 40
+       add      rsp, 376
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=18 bbWeight=1 PerfScore 5.25
+						;; size=21 bbWeight=1 PerfScore 5.25
 G_M24152_IG26:
        mov      edi, 40
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
        int3     
 						;; size=18 bbWeight=0 PerfScore 0.00
 G_M24152_IG27:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M24152_IG28:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 962, prolog size 22, PerfScore 879.06, instruction count 262, allocated bytes for code 962 (MethodHash=ada3a1a7) for method System.Runtime.Serialization.DataContracts.DataContract:ComputeHash(ubyte[]):ubyte[] (FullOpts)
+; Total bytes of code 1091, prolog size 28, PerfScore 978.07, instruction count 273, allocated bytes for code 1091 (MethodHash=ada3a1a7) for method System.Runtime.Serialization.DataContracts.DataContract:ComputeHash(ubyte[]):ubyte[] (FullOpts)
 ; ============================================================
47 (20.52 % of base) - System.Data.Common.SqlCharsStorage:Set(int,System.Object):this
 ; Assembly listing for method System.Data.Common.SqlCharsStorage:Set(int,System.Object):this (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 this         [V00,T03] (  4,  2.75)     ref  ->  r14         this class-hnd single-def <System.Data.Common.SqlCharsStorage>
-;  V01 arg1         [V01,T01] (  6,  4   )     int  ->  rbx         single-def
-;  V02 arg2         [V02,T02] (  6,  3.75)     ref  ->  r15         class-hnd single-def <System.Object>
+;  V00 this         [V00,T02] (  4,  2.75)     ref  ->  r14         this class-hnd single-def <System.Data.Common.SqlCharsStorage>
+;  V01 arg1         [V01,T00] (  6,  4   )     int  ->  rbx         single-def
+;  V02 arg2         [V02,T01] (  6,  3.75)     ref  ->  r15         class-hnd single-def <System.Object>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V04 tmp1         [V04,T04] (  3,  3   )     ref  ->  r15         class-hnd exact single-def "impAppendStmt" <System.Data.SqlTypes.SqlChars[]>
-;* V05 tmp2         [V05    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Strict ordering of exceptions for Array store" <System.Data.SqlTypes.SqlChars>
-;  V06 tmp3         [V06,T05] (  3,  2.50)     ref  ->  rdi         class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Data.SqlTypes.SqlChars[]>
-;  V07 tmp4         [V07,T07] (  2,  2   )     ref  ->  rsi         class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Data.SqlTypes.SqlChars>
-;  V08 tmp5         [V08,T00] (  7,  7   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlChars>
-;  V09 rat0         [V09,T06] (  3,  2   )     ref  ->  rsi         "replacement local"
-;  V10 rat1         [V10,T08] (  3,  1   )    long  ->  rax         "CSE for expectedClsNode"
+;  V04 tmp1         [V04,T03] (  3,  3   )    long  ->  rax         class-hnd exact "impAppendStmt" <System.Data.SqlTypes.SqlChars[]>
+;* V05 tmp2         [V05    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Strict ordering of exceptions for Array store" <System.Data.SqlTypes.SqlChars>
+;  V06 tmp3         [V06,T04] (  3,  2.50)     ref  ->  rdi         class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Data.SqlTypes.SqlChars[]>
+;  V07 tmp4         [V07,T06] (  2,  2   )     ref  ->  rsi         class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Data.SqlTypes.SqlChars>
+;* V08 tmp5         [V08    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "NewObj constructor temp" <System.Data.SqlTypes.SqlChars>
+;  V09 tmp6         [V09    ] ( 11,  5.50)  struct (48) [rbp-0x48]  do-not-enreg[XSF] must-init addr-exposed "stack allocated ref class temp" <System.Data.SqlTypes.SqlChars>
+;  V10 rat0         [V10,T05] (  3,  2   )     ref  ->  rsi         "replacement local"
+;  V11 rat1         [V11,T07] (  3,  1   )    long  ->  rax         "CSE for expectedClsNode"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 56
 
 G_M46868_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
-       push     rax
-       lea      rbp, [rsp+0x20]
+       sub      rsp, 56
+       lea      rbp, [rsp+0x50]
+       xor      eax, eax
+       mov      qword ptr [rbp-0x48], rax
+       vxorps   xmm8, xmm8, xmm8
+       vmovdqu  ymmword ptr [rbp-0x40], ymm8
+       mov      qword ptr [rbp-0x20], rax
        mov      r14, rdi
        mov      ebx, esi
        mov      r15, rdx
-						;; size=20 bbWeight=1 PerfScore 6.25
+						;; size=43 bbWeight=1 PerfScore 10.08
 G_M46868_IG02:
        mov      rdi, 0xD1FFAB1E      ; global ptr
        test     byte  ptr [rdi], 1
-       je       G_M46868_IG13
+       je       G_M46868_IG12
 						;; size=19 bbWeight=1 PerfScore 4.25
 G_M46868_IG03:
        mov      rdi, 0xD1FFAB1E      ; data for System.DBNull:Value
        cmp      r15, gword ptr [rdi]
        je       SHORT G_M46868_IG05
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M46868_IG04:
        test     r15, r15
-       jne      SHORT G_M46868_IG11
+       jne      SHORT G_M46868_IG07
 						;; size=5 bbWeight=0.50 PerfScore 0.62
 G_M46868_IG05:
-       mov      r15, gword ptr [r14+0x40]
-       mov      rdi, 0xD1FFAB1E      ; System.Data.SqlTypes.SqlChars
-       call     CORINFO_HELP_NEWSFAST
-       xor      rdi, rdi
-       mov      gword ptr [rax+0x08], rdi
-						;; size=25 bbWeight=0.50 PerfScore 2.25
+       mov      rax, gword ptr [r14+0x40]
+       mov      rcx, 0xD1FFAB1E      ; System.Data.SqlTypes.SqlChars
+       mov      qword ptr [rbp-0x48], rcx
+       xor      rcx, rcx
+       mov      gword ptr [rbp-0x40], rcx
+						;; size=24 bbWeight=0.50 PerfScore 2.25
 G_M46868_IG06:
-       mov      gword ptr [rax+0x10], rdi
-						;; size=4 bbWeight=0.50 PerfScore 0.50
+       mov      gword ptr [rbp-0x38], rcx
+       cmp      gword ptr [rbp-0x40], 0
+       jne      SHORT G_M46868_IG09
+       xor      ecx, ecx
+       mov      dword ptr [rbp-0x20], ecx
+       mov      qword ptr [rbp-0x28], -1
+       jmp      SHORT G_M46868_IG10
+						;; size=26 bbWeight=0.50 PerfScore 4.12
 G_M46868_IG07:
-       mov      dword ptr [rax+0x28], edi
-       mov      qword ptr [rax+0x20], -1
-						;; size=11 bbWeight=0.50 PerfScore 1.00
+       mov      rdi, gword ptr [r14+0x40]
+       mov      rsi, r15
+       mov      rax, 0xD1FFAB1E      ; System.Data.SqlTypes.SqlChars
+       cmp      qword ptr [rsi], rax
+       jne      SHORT G_M46868_IG13
+						;; size=22 bbWeight=0.25 PerfScore 1.62
 G_M46868_IG08:
-       mov      gword ptr [rax+0x18], rdi
-       cmp      ebx, dword ptr [r15+0x08]
-       jae      SHORT G_M46868_IG15
-       mov      edi, ebx
-       lea      rdi, bword ptr [r15+8*rdi+0x10]
-       mov      rsi, rax
+       cmp      ebx, dword ptr [rdi+0x08]
+       jae      SHORT G_M46868_IG14
+       mov      eax, ebx
+       lea      rdi, bword ptr [rdi+8*rax+0x10]
        call     CORINFO_HELP_ASSIGN_REF
-						;; size=25 bbWeight=0.50 PerfScore 3.75
+       jmp      SHORT G_M46868_IG11
+						;; size=19 bbWeight=0.50 PerfScore 4.12
 G_M46868_IG09:
-       nop      
-						;; size=1 bbWeight=1 PerfScore 0.25
+       mov      dword ptr [rbp-0x20], 1
+       mov      rcx, gword ptr [rbp-0x40]
+       mov      ecx, dword ptr [rcx+0x08]
+       mov      qword ptr [rbp-0x28], rcx
+						;; size=18 bbWeight=0.50 PerfScore 2.50
 G_M46868_IG10:
-       add      rsp, 8
+       xor      rcx, rcx
+       mov      gword ptr [rbp-0x30], rcx
+       cmp      ebx, dword ptr [rax+0x08]
+       jae      SHORT G_M46868_IG14
+       mov      ecx, ebx
+       lea      rdx, [rbp-0x48]
+       mov      gword ptr [rax+8*rcx+0x10], rdx
+						;; size=22 bbWeight=0.50 PerfScore 3.50
+G_M46868_IG11:
+       add      rsp, 56
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M46868_IG11:
-       mov      rdi, gword ptr [r14+0x40]
-       mov      rsi, r15
-       mov      rax, 0xD1FFAB1E      ; System.Data.SqlTypes.SqlChars
-       cmp      qword ptr [rsi], rax
-       jne      SHORT G_M46868_IG14
-						;; size=22 bbWeight=0.25 PerfScore 1.62
 G_M46868_IG12:
-       cmp      ebx, dword ptr [rdi+0x08]
-       jae      SHORT G_M46868_IG15
-       mov      eax, ebx
-       lea      rdi, bword ptr [rdi+8*rax+0x10]
-       call     CORINFO_HELP_ASSIGN_REF
-       jmp      SHORT G_M46868_IG09
-						;; size=19 bbWeight=0.50 PerfScore 4.12
-G_M46868_IG13:
        mov      rdi, 0xD1FFAB1E      ; System.DBNull
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_GET_GCSTATIC_BASE
        call     [rax]CORINFO_HELP_GET_GCSTATIC_BASE
        jmp      G_M46868_IG03
 						;; size=27 bbWeight=0 PerfScore 0.00
-G_M46868_IG14:
+G_M46868_IG13:
        mov      rsi, r15
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
        call     [rax]CORINFO_HELP_CHKCASTCLASS
        int3     
 						;; size=19 bbWeight=0 PerfScore 0.00
-G_M46868_IG15:
+G_M46868_IG14:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 229, prolog size 12, PerfScore 32.12, instruction count 61, allocated bytes for code 229 (MethodHash=900c48eb) for method System.Data.Common.SqlCharsStorage:Set(int,System.Object):this (FullOpts)
+; Total bytes of code 276, prolog size 35, PerfScore 40.58, instruction count 73, allocated bytes for code 276 (MethodHash=900c48eb) for method System.Data.Common.SqlCharsStorage:Set(int,System.Object):this (FullOpts)
 ; ============================================================
7 (7.61 % of base) - System.Data.ExpressionParser:StartScan():this
 ; Assembly listing for method System.Data.ExpressionParser:StartScan():this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  8,  8   )     ref  ->  rdi         this class-hnd single-def <System.Data.ExpressionParser>
-;  V01 loc0         [V01,T03] (  4,  4   )     int  ->  r15        
+;  V01 loc0         [V01,T02] (  4,  4   )     int  ->  rcx        
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V03 tmp1         [V03,T02] (  3,  6   )     ref  ->  rbx         class-hnd exact single-def "impAppendStmt" <System.Data.OperatorInfo[]>
-;  V04 tmp2         [V04,T01] (  4,  8   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Data.OperatorInfo>
+;  V03 tmp1         [V03,T01] (  3,  6   )    long  ->  rax         class-hnd exact "impAppendStmt" <System.Data.OperatorInfo[]>
+;* V04 tmp2         [V04    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "NewObj constructor temp" <System.Data.OperatorInfo>
+;  V05 tmp3         [V05    ] (  6,  6   )  struct (24) [rsp+0x00]  do-not-enreg[XSF] addr-exposed "stack allocated ref class temp" <System.Data.OperatorInfo>
 ;
-; Lcl frame size = 8
+; Lcl frame size = 24
 
 G_M54786_IG01:
-       push     r15
-       push     rbx
-       push     rax
-						;; size=4 bbWeight=1 PerfScore 3.00
+       sub      rsp, 24
+						;; size=4 bbWeight=1 PerfScore 0.25
 G_M54786_IG02:
        xor      eax, eax
        mov      dword ptr [rdi+0x3C], eax
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M54786_IG03:
        mov      qword ptr [rdi+0x30], rax
 						;; size=4 bbWeight=1 PerfScore 1.00
 G_M54786_IG04:
        mov      dword ptr [rdi+0x40], eax
-       mov      rbx, gword ptr [rdi+0x10]
-       mov      r15d, dword ptr [rdi+0x40]
-       lea      eax, [r15+0x01]
-       mov      dword ptr [rdi+0x40], eax
-       mov      rdi, 0xD1FFAB1E      ; System.Data.OperatorInfo
-       call     CORINFO_HELP_NEWSFAST
-       xor      edi, edi
-       mov      qword ptr [rax+0x08], rdi
-						;; size=39 bbWeight=1 PerfScore 9.00
+       mov      rax, gword ptr [rdi+0x10]
+       mov      ecx, dword ptr [rdi+0x40]
+       lea      edx, [rcx+0x01]
+       mov      dword ptr [rdi+0x40], edx
+       vxorps   xmm0, xmm0, xmm0
+       vmovdqu  xmmword ptr [rsp], xmm0
+       vmovdqu  xmmword ptr [rsp+0x04], xmm0
+       mov      rdx, 0xD1FFAB1E      ; System.Data.OperatorInfo
+       mov      qword ptr [rsp], rdx
+       xor      edx, edx
+       mov      dword ptr [rsp+0x08], edx
+						;; size=51 bbWeight=1 PerfScore 11.33
 G_M54786_IG05:
-       mov      dword ptr [rax+0x10], edi
-       cmp      r15d, dword ptr [rbx+0x08]
-       jae      SHORT G_M54786_IG07
-       mov      edi, r15d
-       lea      rdi, bword ptr [rbx+8*rdi+0x10]
-       mov      rsi, rax
-       call     CORINFO_HELP_ASSIGN_REF
-       nop      
-						;; size=26 bbWeight=1 PerfScore 7.75
+       mov      dword ptr [rsp+0x0C], edx
+						;; size=4 bbWeight=1 PerfScore 1.00
 G_M54786_IG06:
-       add      rsp, 8
-       pop      rbx
-       pop      r15
-       ret      
-						;; size=8 bbWeight=1 PerfScore 2.25
+       mov      dword ptr [rsp+0x10], edx
+       cmp      ecx, dword ptr [rax+0x08]
+       jae      SHORT G_M54786_IG08
+       mov      ecx, ecx
+       lea      rdx, [rsp]
+       mov      gword ptr [rax+8*rcx+0x10], rdx
+						;; size=20 bbWeight=1 PerfScore 6.75
 G_M54786_IG07:
+       add      rsp, 24
+       ret      
+						;; size=5 bbWeight=1 PerfScore 1.25
+G_M54786_IG08:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 92, prolog size 4, PerfScore 24.25, instruction count 29, allocated bytes for code 92 (MethodHash=2c2a29fd) for method System.Data.ExpressionParser:StartScan():this (FullOpts)
+; Total bytes of code 99, prolog size 4, PerfScore 22.83, instruction count 27, allocated bytes for code 99 (MethodHash=2c2a29fd) for method System.Data.ExpressionParser:StartScan():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/5ed402c680a86a4da29103d3dad1bc92

@MihuBot
Copy link
Owner Author

MihuBot commented Dec 24, 2024

Top method improvements

-205 (-10.03 % of base) - System.Data.Odbc.OdbcDataReader:RetrieveKeyInfoFromStatistics(System.Data.Odbc.OdbcDataReader+QualifiedTableName,ubyte):int:this
 ; Assembly listing for method System.Data.Odbc.OdbcDataReader:RetrieveKeyInfoFromStatistics(System.Data.Odbc.OdbcDataReader+QualifiedTableName,ubyte):int: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; 61 single block inlinees; 10 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T09] ( 14, 28.29)     ref  ->  rbx         this class-hnd single-def <System.Data.Odbc.OdbcDataReader>
-;  V01 arg1         [V01,T12] (  9, 24   )     ref  ->  r15         class-hnd single-def <System.Data.Odbc.OdbcDataReader+QualifiedTableName>
-;  V02 arg2         [V02,T39] (  3,  3   )   ubyte  ->  r14         single-def
+;  V00 this         [V00,T06] ( 13, 32   )     ref  ->  rbx         this class-hnd single-def <System.Data.Odbc.OdbcDataReader>
+;  V01 arg1         [V01,T10] (  8, 24   )     ref  ->  r15         class-hnd single-def <System.Data.Odbc.OdbcDataReader+QualifiedTableName>
+;  V02 arg2         [V02,T33] (  3,  3   )   ubyte  ->  rdx         single-def
 ;* V03 loc0         [V03    ] (  0,  0   )   short  ->  zero-ref   
-;  V04 loc1         [V04,T17] (  6, 23   )     ref  ->  r13         class-hnd <System.String>
-;  V05 loc2         [V05,T13] (  6, 26   )     ref  ->  r14         class-hnd exact <System.String>
-;  V06 loc3         [V06,T14] (  6, 25   )     ref  ->  registers   class-hnd <System.String>
-;  V07 loc4         [V07,T03] (  7, 73   )     ref  ->  [rbp-0x88]  class-hnd exact spill-single-def <int[]>
-;  V08 loc5         [V08,T04] (  7, 69.29)     ref  ->  [rbp-0x90]  class-hnd exact spill-single-def <int[]>
-;  V09 loc6         [V09,T07] ( 20, 45.72)     int  ->  [rbp-0x2C] 
-;  V10 loc7         [V10,T06] ( 13, 52.50)     int  ->  [rbp-0x30] 
-;  V11 loc8         [V11,T10] (  6, 29.50)   ubyte  ->  [rbp-0x34] 
-;  V12 loc9         [V12,T08] (  8, 44   )     int  ->  [rbp-0x38] 
-;  V13 loc10        [V13,T26] (  6, 12   )     int  ->  rdx        
-;  V14 loc11        [V14,T31] (  3,  8   )    long  ->  [rbp-0x40]  spill-single-def
-;  V15 loc12        [V15,T32] (  3,  8   )    long  ->  r14        
-;  V16 loc13        [V16,T29] (  6,  9.50)     int  ->  [rbp-0x44] 
+;  V04 loc1         [V04,T16] (  5, 23   )     ref  ->  r14         class-hnd <System.String>
+;  V05 loc2         [V05,T11] (  6, 26   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def <System.String>
+;  V06 loc3         [V06,T12] (  6, 25   )     ref  ->  [rbp-0x138]  class-hnd <System.String>
+;* V07 loc4         [V07    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact <int[]>
+;* V08 loc5         [V08    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact <int[]>
+;  V09 loc6         [V09,T03] ( 14,108   )     int  ->  r12        
+;  V10 loc7         [V10,T04] ( 13, 52.50)     int  ->  [rbp-0x2C] 
+;  V11 loc8         [V11,T07] (  6, 29.50)   ubyte  ->  [rbp-0x30] 
+;  V12 loc9         [V12,T05] (  8, 44   )     int  ->  [rbp-0x34] 
+;  V13 loc10        [V13,T22] (  3, 12   )     int  ->  rdi        
+;  V14 loc11        [V14,T25] (  3,  8   )    long  ->  [rbp-0x40]  spill-single-def
+;  V15 loc12        [V15,T26] (  3,  8   )    long  ->  [rbp-0x48]  spill-single-def
+;  V16 loc13        [V16,T23] (  4,  9.50)     int  ->  [rbp-0x4C] 
 ;* V17 loc14        [V17    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def <System.String>
-;  V18 loc15        [V18,T18] ( 14, 20.50)     ref  ->  [rbp-0x98]  class-hnd exact EH-live spill-single-def <System.Data.Odbc.CNativeBuffer>
-;  V19 loc16        [V19    ] (  4,  1.50)   ubyte  ->  [rbp-0x50]  do-not-enreg[X] must-init addr-exposed ld-addr-op
+;  V18 loc15        [V18,T17] ( 14, 20.50)     ref  ->  [rbp-0x140]  class-hnd exact EH-live spill-single-def <System.Data.Odbc.CNativeBuffer>
+;  V19 loc16        [V19    ] (  4,  1.50)   ubyte  ->  [rbp-0x58]  do-not-enreg[X] must-init addr-exposed ld-addr-op
 ;* V20 loc17        [V20    ] (  0,  0   )  struct (16) zero-ref    <System.Runtime.InteropServices.HandleRef>
 ;* V21 loc18        [V21    ] (  0,  0   )  struct (16) zero-ref    <System.Runtime.InteropServices.HandleRef>
 ;* V22 loc19        [V22    ] (  0,  0   )  struct (16) zero-ref    <System.Runtime.InteropServices.HandleRef>
 ;* V23 loc20        [V23    ] (  0,  0   )    long  ->  zero-ref    single-def
 ;* V24 loc21        [V24    ] (  0,  0   )    long  ->  zero-ref    single-def
 ;* V25 loc22        [V25    ] (  0,  0   )    long  ->  zero-ref    single-def
 ;* V26 loc23        [V26    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Runtime.InteropServices.HandleRef>
-;  V27 loc24        [V27,T28] (  7, 11.84)     int  ->  rcx        
-;  V28 loc25        [V28,T59] (  7,  0.74)     int  ->  rdi        
-;  V29 loc26        [V29,T60] (  6,  0.70)     int  ->  r14        
-;  V30 loc27        [V30,T20] ( 12, 20   )     ref  ->  registers   class-hnd <System.Data.Odbc.OdbcDataReader+MetaData>
+;  V27 loc24        [V27,T00] (  7,392   )     int  ->   r8        
+;* V28 loc25        [V28,T55] (  0,  0   )     int  ->  zero-ref   
+;* V29 loc26        [V29,T56] (  0,  0   )     int  ->  zero-ref   
+;  V30 loc27        [V30,T19] (  6, 20   )     ref  ->  rcx         class-hnd <System.Data.Odbc.OdbcDataReader+MetaData>
 ;  V31 OutArgs      [V31    ] (  1,  1   )  struct ( 8) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V32 tmp1         [V32    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
-;* V33 tmp2         [V33    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
+;* V32 tmp1         [V32    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
+;* V33 tmp2         [V33    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
 ;* V34 tmp3         [V34    ] (  0,  0   )     int  ->  zero-ref    "dup spill"
 ;* V35 tmp4         [V35    ] (  0,  0   )     int  ->  zero-ref    "impSpillLclRefs"
-;  V36 tmp5         [V36,T01] (  4,256   )     int  ->  rdi         "Strict ordering of exceptions for Array store"
-;  V37 tmp6         [V37,T27] (  3, 12   )     int  ->  rcx         "impSpillLclRefs"
-;  V38 tmp7         [V38,T22] (  4, 16   )     int  ->  rax         "Strict ordering of exceptions for Array store"
-;  V39 tmp8         [V39,T47] (  3,  2   )     ref  ->  rcx         class-hnd "Inline return value spill temp" <System.String>
+;  V36 tmp5         [V36,T01] (  2,256   )     int  ->  rdx         "Strict ordering of exceptions for Array store"
+;  V37 tmp6         [V37,T20] (  4, 16   )     int  ->  rcx         "impSpillLclRefs"
+;  V38 tmp7         [V38,T21] (  2, 16   )     int  ->  rsi         "Strict ordering of exceptions for Array store"
+;  V39 tmp8         [V39,T41] (  3,  2   )     ref  ->  rcx         class-hnd "Inline return value spill temp" <System.String>
 ;* V40 tmp9         [V40    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Data.Odbc.CMDWrapper>
-;  V41 tmp10        [V41,T38] (  3,  6   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
-;  V42 tmp11        [V42,T49] (  2,  1   )    long  ->  rax         single-def "Inline stloc first use temp"
+;  V41 tmp10        [V41,T32] (  3,  6   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
+;  V42 tmp11        [V42,T43] (  2,  1   )    long  ->  rcx         single-def "Inline stloc first use temp"
 ;* V43 tmp12        [V43    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.HandleRef>
 ;* V44 tmp13        [V44    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V45 tmp14        [V45,T50] (  2,  1   )    long  ->   r8         single-def "Inline stloc first use temp"
+;  V45 tmp14        [V45,T44] (  2,  1   )    long  ->   r9         single-def "Inline stloc first use temp"
 ;* V46 tmp15        [V46    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.HandleRef>
 ;* V47 tmp16        [V47    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V48 tmp17        [V48,T51] (  2,  1   )    long  ->   r9         single-def "Inline stloc first use temp"
+;  V48 tmp17        [V48,T45] (  2,  1   )    long  ->  r10         single-def "Inline stloc first use temp"
 ;* V49 tmp18        [V49    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.HandleRef>
 ;* V50 tmp19        [V50    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V51 tmp20        [V51,T52] (  2,  1   )    long  ->  [rbp-0x58]  spill-single-def "Inline stloc first use temp"
+;  V51 tmp20        [V51,T46] (  2,  1   )    long  ->  [rbp-0x60]  spill-single-def "Inline stloc first use temp"
 ;* V52 tmp21        [V52    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.HandleRef>
 ;* V53 tmp22        [V53    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V54 tmp23        [V54,T53] (  2,  1   )    long  ->  [rbp-0x60]  spill-single-def "Inline stloc first use temp"
+;  V54 tmp23        [V54,T47] (  2,  1   )    long  ->  [rbp-0x68]  spill-single-def "Inline stloc first use temp"
 ;* V55 tmp24        [V55    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.HandleRef>
 ;* V56 tmp25        [V56    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V57 tmp26        [V57,T54] (  2,  1   )    long  ->  [rbp-0x68]  spill-single-def "Inline stloc first use temp"
+;  V57 tmp26        [V57,T48] (  2,  1   )    long  ->  [rbp-0x70]  spill-single-def "Inline stloc first use temp"
 ;* V58 tmp27        [V58    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.HandleRef>
 ;* V59 tmp28        [V59    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V60 tmp29        [V60    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Data.Odbc.CMDWrapper>
-;  V61 tmp30        [V61,T44] (  3,  3   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
+;  V61 tmp30        [V61,T38] (  3,  3   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
 ;* V62 tmp31        [V62    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Data.Odbc.CMDWrapper>
-;  V63 tmp32        [V63,T45] (  3,  3   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
+;  V63 tmp32        [V63,T39] (  3,  3   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
 ;* V64 tmp33        [V64    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Data.Odbc.CMDWrapper>
-;  V65 tmp34        [V65,T46] (  3,  3   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
+;  V65 tmp34        [V65,T40] (  3,  3   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
 ;* V66 tmp35        [V66    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;* V67 tmp36        [V67,T48] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;  V68 tmp37        [V68,T41] (  2,  4   )   ubyte  ->  rax         "Inline return value spill temp"
-;  V69 tmp38        [V69,T33] (  2,  8   )   byref  ->  rdi         "impAppendStmt"
+;* V67 tmp36        [V67,T42] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V68 tmp37        [V68,T35] (  2,  4   )   ubyte  ->  rax         "Inline return value spill temp"
+;  V69 tmp38        [V69,T27] (  2,  8   )   byref  ->  rdi         "impAppendStmt"
 ;* V70 tmp39        [V70    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Data.Odbc.CMDWrapper>
-;  V71 tmp40        [V71,T11] (  6, 27   )     ref  ->  rdi         class-hnd exact "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
-;* V72 tmp41        [V72    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V20._wrapper (fldOffset=0x0)" P-INDEP
-;* V73 tmp42        [V73    ] (  0,  0   )    long  ->  zero-ref    single-def "field V20._handle (fldOffset=0x8)" P-INDEP
-;* V74 tmp43        [V74    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V21._wrapper (fldOffset=0x0)" P-INDEP
-;* V75 tmp44        [V75    ] (  0,  0   )    long  ->  zero-ref    single-def "field V21._handle (fldOffset=0x8)" P-INDEP
-;* V76 tmp45        [V76    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V22._wrapper (fldOffset=0x0)" P-INDEP
-;* V77 tmp46        [V77    ] (  0,  0   )    long  ->  zero-ref    single-def "field V22._handle (fldOffset=0x8)" P-INDEP
-;* V78 tmp47        [V78    ] (  0,  0   )     ref  ->  zero-ref    "field V26._wrapper (fldOffset=0x0)" P-INDEP
-;* V79 tmp48        [V79    ] (  0,  0   )    long  ->  zero-ref    "field V26._handle (fldOffset=0x8)" P-INDEP
-;  V80 tmp49        [V80,T40] (  6,  3   )     ref  ->  [rbp-0xA0]  spill-single-def "field V43._wrapper (fldOffset=0x0)" P-INDEP
-;  V81 tmp50        [V81,T55] (  2,  1   )    long  ->  [rbp-0x70]  spill-single-def "field V43._handle (fldOffset=0x8)" P-INDEP
-;* V82 tmp51        [V82,T61] (  0,  0   )     ref  ->  zero-ref    single-def "field V46._wrapper (fldOffset=0x0)" P-INDEP
-;  V83 tmp52        [V83,T56] (  2,  1   )    long  ->  [rbp-0x78]  spill-single-def "field V46._handle (fldOffset=0x8)" P-INDEP
-;* V84 tmp53        [V84,T62] (  0,  0   )     ref  ->  zero-ref    single-def "field V49._wrapper (fldOffset=0x0)" P-INDEP
-;  V85 tmp54        [V85,T57] (  2,  1   )    long  ->  [rbp-0x80]  spill-single-def "field V49._handle (fldOffset=0x8)" P-INDEP
-;* V86 tmp55        [V86    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V52._wrapper (fldOffset=0x0)" P-INDEP
-;* V87 tmp56        [V87    ] (  0,  0   )    long  ->  zero-ref    single-def "field V52._handle (fldOffset=0x8)" P-INDEP
-;* V88 tmp57        [V88    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V55._wrapper (fldOffset=0x0)" P-INDEP
-;* V89 tmp58        [V89    ] (  0,  0   )    long  ->  zero-ref    single-def "field V55._handle (fldOffset=0x8)" P-INDEP
-;* V90 tmp59        [V90    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V58._wrapper (fldOffset=0x0)" P-INDEP
-;* V91 tmp60        [V91    ] (  0,  0   )    long  ->  zero-ref    single-def "field V58._handle (fldOffset=0x8)" P-INDEP
-;  V92 tmp61        [V92,T15] (  6, 24   )     ref  ->   r9         "arr expr"
-;* V93 tmp62        [V93,T34] (  0,  0   )     ref  ->  zero-ref    "arr expr"
-;* V94 tmp63        [V94,T35] (  0,  0   )     ref  ->  zero-ref    "arr expr"
-;* V95 tmp64        [V95,T36] (  0,  0   )     ref  ->  zero-ref    "arr expr"
-;* V96 tmp65        [V96,T37] (  0,  0   )     ref  ->  zero-ref    "arr expr"
-;  V97 PSPSym       [V97,T58] (  1,  1   )    long  ->  [rbp-0xC8]  do-not-enreg[V] "PSPSym"
-;  V98 cse0         [V98,T16] (  6, 23.76)     ref  ->  [rbp-0xA8]  spill-single-def "CSE #15: moderate"
-;  V99 cse1         [V99,T63] (  6,  0.24)     ref  ->  [rbp-0xB0]  spill-single-def "CSE #18: conservative"
-;  V100 cse2        [V100,T19] (  4,  4.29)     ref  ->  registers   hoist multi-def "CSE #11: moderate"
-;  V101 cse3        [V101,T42] (  7,  3.50)     int  ->  rsi         "CSE #03: moderate"
-;  V102 cse4        [V102,T43] (  7,  3.50)    long  ->  r14         "CSE #04: moderate"
-;  V103 cse5        [V103,T30] (  4,  8   )     int  ->  rdx         "CSE #05: moderate"
-;* V104 cse6        [V104,T05] (  0,  0   )    long  ->  zero-ref    "CSE #07: aggressive"
-;  V105 rat0        [V105,T00] (  5,257.44)    long  ->  rcx         "Strength reduced derived IV"
-;  V106 rat1        [V106,T02] (  4,194.08)     int  ->  rdx         "Trip count IV"
-;  V107 rat2        [V107,T21] (  5, 16.09)    long  ->  rdi         "Strength reduced derived IV"
-;  V108 rat3        [V108,T24] (  4, 12.13)     int  ->  rsi         "Trip count IV"
-;  V109 rat4        [V109,T23] (  4, 12.13)   byref  ->  [rbp-0xB8]  "Strength reduced derived IV"
-;  V110 rat5        [V110,T25] (  4, 12.13)     int  ->  r12         "Trip count IV"
+;  V71 tmp40        [V71,T09] (  6, 27   )     ref  ->  rdi         class-hnd exact "Inlining Arg" <System.Data.Odbc.OdbcStatementHandle>
+;  V72 tmp41        [V72    ] (  9,144   )  struct (80) [rbp-0xC0]  do-not-enreg[XSF] must-init addr-exposed "stack allocated array temp"
+;  V73 tmp42        [V73    ] (  8,146   )  struct (80) [rbp-0x110]  do-not-enreg[XSF] must-init addr-exposed "stack allocated array temp"
+;* V74 tmp43        [V74    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V20._wrapper (fldOffset=0x0)" P-INDEP
+;* V75 tmp44        [V75    ] (  0,  0   )    long  ->  zero-ref    single-def "field V20._handle (fldOffset=0x8)" P-INDEP
+;* V76 tmp45        [V76    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V21._wrapper (fldOffset=0x0)" P-INDEP
+;* V77 tmp46        [V77    ] (  0,  0   )    long  ->  zero-ref    single-def "field V21._handle (fldOffset=0x8)" P-INDEP
+;* V78 tmp47        [V78    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V22._wrapper (fldOffset=0x0)" P-INDEP
+;* V79 tmp48        [V79    ] (  0,  0   )    long  ->  zero-ref    single-def "field V22._handle (fldOffset=0x8)" P-INDEP
+;* V80 tmp49        [V80    ] (  0,  0   )     ref  ->  zero-ref    "field V26._wrapper (fldOffset=0x0)" P-INDEP
+;* V81 tmp50        [V81    ] (  0,  0   )    long  ->  zero-ref    "field V26._handle (fldOffset=0x8)" P-INDEP
+;  V82 tmp51        [V82,T34] (  6,  3   )     ref  ->  [rbp-0x148]  spill-single-def "field V43._wrapper (fldOffset=0x0)" P-INDEP
+;  V83 tmp52        [V83,T49] (  2,  1   )    long  ->  [rbp-0x118]  spill-single-def "field V43._handle (fldOffset=0x8)" P-INDEP
+;* V84 tmp53        [V84,T53] (  0,  0   )     ref  ->  zero-ref    single-def "field V46._wrapper (fldOffset=0x0)" P-INDEP
+;  V85 tmp54        [V85,T50] (  2,  1   )    long  ->  [rbp-0x120]  spill-single-def "field V46._handle (fldOffset=0x8)" P-INDEP
+;* V86 tmp55        [V86,T54] (  0,  0   )     ref  ->  zero-ref    single-def "field V49._wrapper (fldOffset=0x0)" P-INDEP
+;  V87 tmp56        [V87,T51] (  2,  1   )    long  ->  [rbp-0x128]  spill-single-def "field V49._handle (fldOffset=0x8)" P-INDEP
+;* V88 tmp57        [V88    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V52._wrapper (fldOffset=0x0)" P-INDEP
+;* V89 tmp58        [V89    ] (  0,  0   )    long  ->  zero-ref    single-def "field V52._handle (fldOffset=0x8)" P-INDEP
+;* V90 tmp59        [V90    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V55._wrapper (fldOffset=0x0)" P-INDEP
+;* V91 tmp60        [V91    ] (  0,  0   )    long  ->  zero-ref    single-def "field V55._handle (fldOffset=0x8)" P-INDEP
+;* V92 tmp61        [V92    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V58._wrapper (fldOffset=0x0)" P-INDEP
+;* V93 tmp62        [V93    ] (  0,  0   )    long  ->  zero-ref    single-def "field V58._handle (fldOffset=0x8)" P-INDEP
+;  V94 tmp63        [V94,T15] (  3, 24   )     ref  ->  rsi         "arr expr"
+;* V95 tmp64        [V95,T28] (  0,  0   )     ref  ->  zero-ref    "arr expr"
+;* V96 tmp65        [V96,T29] (  0,  0   )     ref  ->  zero-ref    "arr expr"
+;* V97 tmp66        [V97,T30] (  0,  0   )     ref  ->  zero-ref    "arr expr"
+;* V98 tmp67        [V98,T31] (  0,  0   )     ref  ->  zero-ref    "arr expr"
+;  V99 PSPSym       [V99,T52] (  1,  1   )    long  ->  [rbp-0x168]  do-not-enreg[V] "PSPSym"
+;  V100 cse0        [V100,T13] (  6, 24   )     ref  ->  [rbp-0x150]  spill-single-def "CSE #13: moderate"
+;  V101 cse1        [V101,T14] (  2,  8   )     ref  ->  rsi         "CSE #09: moderate"
+;  V102 cse2        [V102,T36] (  7,  3.50)     int  ->  rsi         "CSE #03: conservative"
+;  V103 cse3        [V103,T37] (  7,  3.50)    long  ->  rax         "CSE #04: conservative"
+;  V104 cse4        [V104,T24] (  4,  8   )     int  ->  rdx         "CSE #05: moderate"
+;  V105 cse5        [V105,T02] (  3,192   )    long  ->  rdi         "CSE #07: aggressive"
+;  V106 rat0        [V106,T08] (  8, 28.50)    long  ->  rdi         "Widened IV V28"
+;  V107 rat1        [V107,T18] (  6, 20.50)    long  ->  r13         "Widened IV V29"
+;  TEMP_02                                     ref  ->  [rbp-0x158]
+;  TEMP_01                                    long  ->  [rbp-0x160]
 ;
-; Lcl frame size = 168
+; Lcl frame size = 328
 
 G_M30047_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 168
-       lea      rbp, [rsp+0xD0]
+       sub      rsp, 328
+       lea      rbp, [rsp+0x170]
        xor      eax, eax
-       mov      qword ptr [rbp-0x50], rax
-       mov      qword ptr [rbp-0xC8], rsp
+       mov      qword ptr [rbp-0x158], rax
+       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
+       mov      qword ptr [rbp-0x168], rsp
        mov      rbx, rdi
        mov      r15, rsi
-       mov      r14d, edx
-						;; size=47 bbWeight=1 PerfScore 9.75
+						;; size=92 bbWeight=1 PerfScore 17.83
 G_M30047_IG02:
+       mov      r14, 0xD1FFAB1E      ; ''
        mov      r13, 0xD1FFAB1E      ; ''
-       mov      r12, 0xD1FFAB1E      ; ''
        mov      rdi, 0xD1FFAB1E      ; int[]
-       mov      esi, 16
-       call     CORINFO_HELP_NEWARR_1_VC
-       mov      gword ptr [rbp-0x88], rax
-       mov      rdi, 0xD1FFAB1E      ; int[]
-       mov      esi, 16
-       call     CORINFO_HELP_NEWARR_1_VC
-       mov      gword ptr [rbp-0x90], rax
+       mov      qword ptr [rbp-0xC0], rdi
+       mov      dword ptr [rbp-0xB8], 16
+       mov      qword ptr [rbp-0x110], rdi
+       mov      dword ptr [rbp-0x108], 16
+       xor      r12d, r12d
+       xor      eax, eax
+       mov      dword ptr [rbp-0x2C], eax
        xor      r10d, r10d
-       mov      dword ptr [rbp-0x2C], r10d
+       mov      dword ptr [rbp-0x30], r10d
        xor      r11d, r11d
-       mov      dword ptr [rbp-0x30], r11d
-       xor      r9d, r9d
-       mov      dword ptr [rbp-0x34], r9d
-       xor      r8d, r8d
-       mov      dword ptr [rbp-0x44], r8d
+       mov      dword ptr [rbp-0x4C], r11d
        cmp      byte  ptr [r15], r15b
-       test     r14b, r14b
+       test     dl, dl
        je       SHORT G_M30047_IG04
-						;; size=110 bbWeight=1 PerfScore 14.75
+						;; size=93 bbWeight=1 PerfScore 13.00
 G_M30047_IG03:
        mov      rcx, gword ptr [r15+0x20]
        jmp      SHORT G_M30047_IG05
-						;; size=6 bbWeight=0.50 PerfScore 2.00
+       align    [3 bytes for IG14]
+						;; size=9 bbWeight=0.50 PerfScore 2.00
 G_M30047_IG04:
        mov      rcx, gword ptr [r15+0x18]
 						;; size=4 bbWeight=0.50 PerfScore 1.00
 G_M30047_IG05:
        mov      rdi, gword ptr [rbx+0x38]
        mov      rdi, gword ptr [rdi+0x10]
        cmp      byte  ptr [rdi], dil
+       mov      gword ptr [rbp-0x158], rcx
        xor      rsi, rsi
        xor      rdx, rdx
        xor      r8d, r8d
        mov      r9d, 1
-       mov      r14, 0xD1FFAB1E      ; code for System.Data.Odbc.OdbcStatementHandle:Statistics(System.String,System.String,System.String,short,short):short:this
-       call     [r14]System.Data.Odbc.OdbcStatementHandle:Statistics(System.String,System.String,System.String,short,short):short:this
+       mov      rcx, 0xD1FFAB1E      ; code for System.Data.Odbc.OdbcStatementHandle:Statistics(System.String,System.String,System.String,short,short):short:this
+       mov      qword ptr [rbp-0x160], rcx
+       mov      rcx, gword ptr [rbp-0x158]
+       mov      r11, qword ptr [rbp-0x160]
+       call     [r11]System.Data.Odbc.OdbcStatementHandle:Statistics(System.String,System.String,System.String,short,short):short:this
        test     eax, eax
        jne      SHORT G_M30047_IG07
-						;; size=41 bbWeight=1 PerfScore 12.50
+						;; size=69 bbWeight=1 PerfScore 16.50
 G_M30047_IG06:
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Data.Odbc.OdbcDataReader:get_Buffer():System.Data.Odbc.CNativeBuffer:this
        call     [rax]System.Data.Odbc.OdbcDataReader:get_Buffer():System.Data.Odbc.CNativeBuffer:this
-       mov      gword ptr [rbp-0x98], rax
+       mov      gword ptr [rbp-0x140], rax
        xor      esi, esi
-       mov      dword ptr [rbp-0x50], esi
+       mov      dword ptr [rbp-0x58], esi
        jmp      SHORT G_M30047_IG09
 						;; size=29 bbWeight=0.50 PerfScore 3.88
 G_M30047_IG07:
        xor      eax, eax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M30047_IG08:
-       add      rsp, 168
+       add      rsp, 328
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=18 bbWeight=0.50 PerfScore 2.12
 G_M30047_IG09:
-       lea      rsi, [rbp-0x50]
+       lea      rsi, [rbp-0x58]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Runtime.InteropServices.SafeHandle:DangerousAddRef(byref):this
        cmp      dword ptr [rdi], edi
        call     [rcx]System.Runtime.InteropServices.SafeHandle:DangerousAddRef(byref):this
-       mov      rdi, gword ptr [rbp-0x98]
+       mov      rdi, gword ptr [rbp-0x140]
        mov      esi, dword ptr [rdi+0x18]
        cmp      esi, 256
-       jl       G_M30047_IG57
-       mov      r14, qword ptr [rdi+0x08]
-       mov      rax, r14
-       mov      rcx, rdi
-       mov      gword ptr [rbp-0xA0], rcx
-       mov      qword ptr [rbp-0x70], rax
+       jl       G_M30047_IG47
+       mov      rax, qword ptr [rdi+0x08]
+       mov      rcx, rax
+       mov      r8, rdi
+       mov      gword ptr [rbp-0x148], r8
+       mov      qword ptr [rbp-0x118], rcx
        cmp      esi, 512
-       jl       G_M30047_IG57
-       lea      r8, [r14+0x100]
-       mov      qword ptr [rbp-0x78], r8
+       jl       G_M30047_IG47
+       lea      r9, [rax+0x100]
+       mov      qword ptr [rbp-0x120], r9
        cmp      esi, 516
-       jl       G_M30047_IG57
-       lea      r9, [r14+0x200]
-       mov      qword ptr [rbp-0x80], r9
+       jl       G_M30047_IG47
+       lea      r10, [rax+0x200]
+       mov      qword ptr [rbp-0x128], r10
        cmp      esi, 528
-       jl       G_M30047_IG57
-       lea      r10, [r14+0x208]
-       mov      qword ptr [rbp-0x58], r10
-       cmp      esi, 536
-       jl       G_M30047_IG57
-       lea      r11, [r14+0x210]
+       jl       G_M30047_IG47
+       lea      r11, [rax+0x208]
        mov      qword ptr [rbp-0x60], r11
+       cmp      esi, 536
+       jl       G_M30047_IG47
+       lea      rdx, [rax+0x210]
+       mov      qword ptr [rbp-0x68], rdx
        cmp      esi, 544
-       jl       G_M30047_IG57
-       add      r14, 536
-       mov      qword ptr [rbp-0x68], r14
-       mov      rdi, rcx
+       jl       G_M30047_IG47
+       add      rax, 536
+       mov      qword ptr [rbp-0x70], rax
+       mov      rdi, r8
        mov      esi, 256
        xor      edx, edx
-       mov      r14, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:WriteInt16(int,short):this
-       call     [r14]System.Data.ProviderBase.DbBuffer:WriteInt16(int,short):this
+       mov      rax, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:WriteInt16(int,short):this
+       call     [rax]System.Data.ProviderBase.DbBuffer:WriteInt16(int,short):this
        mov      rcx, gword ptr [rbx+0x38]
        mov      rdi, gword ptr [rcx+0x10]
        cmp      byte  ptr [rdi], dil
-       mov      r14, qword ptr [rbp-0x60]
-       mov      qword ptr [rsp], r14
-       mov      rcx, gword ptr [rbp-0xA0]
-       mov      r8, qword ptr [rbp-0x78]
-						;; size=232 bbWeight=0.50 PerfScore 22.12
+       mov      rcx, qword ptr [rbp-0x68]
+       mov      qword ptr [rsp], rcx
+       mov      rcx, gword ptr [rbp-0x148]
+       mov      r8, qword ptr [rbp-0x120]
+						;; size=242 bbWeight=0.50 PerfScore 22.12
 G_M30047_IG10:
        mov      esi, 6
        mov      edx, -8
        mov      r9d, 256
        mov      rax, 0xD1FFAB1E      ; code for Interop+Odbc:SQLBindCol(System.Data.Odbc.OdbcStatementHandle,ushort,short,System.Runtime.InteropServices.HandleRef,long,long):short
        call     [rax]Interop+Odbc:SQLBindCol(System.Data.Odbc.OdbcStatementHandle,ushort,short,System.Runtime.InteropServices.HandleRef,long,long):short
        mov      rcx, gword ptr [rbx+0x38]
        mov      rdi, gword ptr [rcx+0x10]
        cmp      byte  ptr [rdi], dil
-       mov      r14, qword ptr [rbp-0x68]
-       mov      qword ptr [rsp], r14
-       mov      rcx, gword ptr [rbp-0xA0]
-       mov      r8, qword ptr [rbp-0x80]
+       mov      rcx, qword ptr [rbp-0x70]
+       mov      qword ptr [rsp], rcx
+       mov      rcx, gword ptr [rbp-0x148]
+       mov      r8, qword ptr [rbp-0x128]
        mov      esi, 8
        mov      edx, -15
        mov      r9d, 4
        mov      rax, 0xD1FFAB1E      ; code for Interop+Odbc:SQLBindCol(System.Data.Odbc.OdbcStatementHandle,ushort,short,System.Runtime.InteropServices.HandleRef,long,long):short
        call     [rax]Interop+Odbc:SQLBindCol(System.Data.Odbc.OdbcStatementHandle,ushort,short,System.Runtime.InteropServices.HandleRef,long,long):short
-       mov      rdi, gword ptr [rbp-0xA0]
+       mov      rdi, gword ptr [rbp-0x148]
        mov      esi, 512
        xor      edx, edx
        mov      rax, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:WriteInt16(int,short):this
        call     [rax]System.Data.ProviderBase.DbBuffer:WriteInt16(int,short):this
        mov      rcx, gword ptr [rbx+0x38]
        mov      rdi, gword ptr [rcx+0x10]
        cmp      byte  ptr [rdi], dil
-       mov      r14, qword ptr [rbp-0x58]
-       mov      qword ptr [rsp], r14
-       mov      rcx, gword ptr [rbp-0xA0]
-       mov      r8, qword ptr [rbp-0x70]
+       mov      rcx, qword ptr [rbp-0x60]
+       mov      qword ptr [rsp], rcx
+       mov      rcx, gword ptr [rbp-0x148]
+       mov      r8, qword ptr [rbp-0x118]
        mov      esi, 9
        mov      edx, -8
        mov      r9d, 256
        mov      rax, 0xD1FFAB1E      ; code for Interop+Odbc:SQLBindCol(System.Data.Odbc.OdbcStatementHandle,ushort,short,System.Runtime.InteropServices.HandleRef,long,long):short
        call     [rax]Interop+Odbc:SQLBindCol(System.Data.Odbc.OdbcStatementHandle,ushort,short,System.Runtime.InteropServices.HandleRef,long,long):short
        mov      rdi, gword ptr [rbx+0x38]
        mov      rdi, gword ptr [rdi+0x10]
        cmp      byte  ptr [rdi], dil
        mov      rax, 0xD1FFAB1E      ; code for Interop+Odbc:SQLFetch(System.Data.Odbc.OdbcStatementHandle):short
        call     [rax]Interop+Odbc:SQLFetch(System.Data.Odbc.OdbcStatementHandle):short
        test     eax, eax
        je       G_M30047_IG45
-						;; size=201 bbWeight=0.50 PerfScore 25.12
+						;; size=207 bbWeight=0.50 PerfScore 25.12
 G_M30047_IG11:
-       mov      r12d, dword ptr [rbp-0x2C]
+       mov      r13d, dword ptr [rbp-0x2C]
 						;; size=4 bbWeight=0.25 PerfScore 0.25
 G_M30047_IG12:
-       cmp      dword ptr [rbp-0x34], 0
-       jne      G_M30047_IG47
-       mov      r14d, dword ptr [rbp-0x30]
-       test     r14d, r14d
-       je       G_M30047_IG48
+       cmp      dword ptr [rbp-0x30], 0
+       jne      SHORT G_M30047_IG15
+       test     r13d, r13d
+       je       SHORT G_M30047_IG15
        test     r12d, r12d
        je       SHORT G_M30047_IG13
-       cmp      r12d, r14d
-       jle      G_M30047_IG49
-						;; size=37 bbWeight=0.50 PerfScore 3.88
+       cmp      r12d, r13d
+       jle      SHORT G_M30047_IG15
+						;; size=21 bbWeight=0.50 PerfScore 3.38
 G_M30047_IG13:
-       mov      r12d, r14d
+       mov      r12d, r13d
        xor      edi, edi
        test     r12d, r12d
-       jle      G_M30047_IG50
-						;; size=14 bbWeight=0.50 PerfScore 0.88
+       jle      SHORT G_M30047_IG15
+						;; size=10 bbWeight=0.50 PerfScore 0.88
 G_M30047_IG14:
-       cmp      r12d, 16
-       jg       G_M30047_IG51
-       mov      edi, 16
-       mov      esi, r12d
-       jmp      SHORT G_M30047_IG15
-       align    [0 bytes for IG18]
-						;; size=20 bbWeight=0.25 PerfScore 0.94
+       cmp      edi, dword ptr [rbp-0xB8]
+       jae      G_M30047_IG48
+       lea      rsi, [rbp-0xC0]
+       mov      esi, dword ptr [rsi+4*rdi+0x10]
+       cmp      edi, dword ptr [rbp-0x108]
+       jae      G_M30047_IG48
+       lea      rax, [rbp-0x110]
+       mov      dword ptr [rax+4*rdi+0x10], esi
+       inc      edi
+       cmp      edi, r12d
+       jl       SHORT G_M30047_IG14
+						;; size=53 bbWeight=4 PerfScore 46.00
 G_M30047_IG15:
-       mov      r14, gword ptr [rbp-0x88]
-       mov      eax, dword ptr [r14+rdi]
-       mov      rcx, gword ptr [rbp-0x90]
-       mov      dword ptr [rcx+rdi], eax
-       add      rdi, 4
-       dec      esi
-       jne      SHORT G_M30047_IG15
-						;; size=29 bbWeight=3.96 PerfScore 25.74
-G_M30047_IG16:
        test     r12d, r12d
-       je       G_M30047_IG23
-       xor      r14d, r14d
+       je       G_M30047_IG21
+       xor      r13d, r13d
        test     r12d, r12d
-       jle      G_M30047_IG23
+       jle      G_M30047_IG21
+       align    [0 bytes for IG16]
 						;; size=21 bbWeight=0.50 PerfScore 1.38
+G_M30047_IG16:
+       cmp      r13d, dword ptr [rbp-0x108]
+       jae      G_M30047_IG48
+       lea      rdi, [rbp-0x110]
+       mov      edi, dword ptr [rdi+4*r13+0x10]
+       mov      r11d, dword ptr [rbp-0x4C]
+       inc      r11d
+       mov      dword ptr [rbp-0x4C], r11d
+       mov      rsi, gword ptr [rbx+0x20]
+       cmp      edi, dword ptr [rsi+0x08]
+       jae      G_M30047_IG48
+       mov      rax, gword ptr [rsi+8*rdi+0x10]
+       mov      gword ptr [rbp-0x150], rax
+       mov      byte  ptr [rax+0x3C], 1
+       mov      byte  ptr [rax+0x39], 0
+       mov      byte  ptr [rax+0x37], 1
+       mov      rcx, rax
+       cmp      gword ptr [rcx+0x20], 0
+       jne      SHORT G_M30047_IG18
+						;; size=83 bbWeight=4 PerfScore 96.00
 G_M30047_IG17:
-       cmp      r12d, 16
-       jg       G_M30047_IG52
-       mov      r14, gword ptr [rbx+0x20]
-       lea      rax, bword ptr [rcx+0x10]
-						;; size=18 bbWeight=0.25 PerfScore 0.94
-G_M30047_IG18:
-       mov      bword ptr [rbp-0xB8], rax
-       mov      edx, dword ptr [rax]
-       mov      r8d, dword ptr [rbp-0x44]
-       inc      r8d
-       mov      dword ptr [rbp-0x44], r8d
-       mov      r9, r14
-       cmp      edx, dword ptr [r9+0x08]
-       jae      G_M30047_IG58
-       mov      edi, edx
-       mov      r10, gword ptr [r9+8*rdi+0x10]
-       mov      gword ptr [rbp-0xA8], r10
-       mov      byte  ptr [r10+0x3C], 1
-       mov      byte  ptr [r10+0x39], 0
-       mov      byte  ptr [r10+0x37], 1
-       mov      r11, r10
-       cmp      gword ptr [r11+0x20], 0
-       jne      SHORT G_M30047_IG20
-						;; size=72 bbWeight=3.96 PerfScore 79.20
-G_M30047_IG19:
        mov      rsi, gword ptr [r15+0x18]
-       lea      rdi, bword ptr [r11+0x20]
+       lea      rdi, bword ptr [rcx+0x20]
        call     CORINFO_HELP_ASSIGN_REF
-						;; size=13 bbWeight=1.98 PerfScore 6.93
+						;; size=13 bbWeight=2 PerfScore 7.00
+G_M30047_IG18:
+       mov      rax, gword ptr [rbp-0x150]
+       mov      rcx, rax
+       cmp      gword ptr [rcx+0x28], 0
+       jne      SHORT G_M30047_IG20
+						;; size=17 bbWeight=4 PerfScore 21.00
+G_M30047_IG19:
+       lea      rdi, bword ptr [rcx+0x28]
+       mov      rsi, r14
+       call     CORINFO_HELP_ASSIGN_REF
+						;; size=12 bbWeight=2 PerfScore 3.50
 G_M30047_IG20:
-       mov      r10, gword ptr [rbp-0xA8]
-       mov      r11, r10
-       cmp      gword ptr [r11+0x28], 0
-       jne      SHORT G_M30047_IG22
-						;; size=17 bbWeight=3.96 PerfScore 20.79
+       inc      r13d
+       cmp      r13d, r12d
+       jl       G_M30047_IG16
+						;; size=12 bbWeight=4 PerfScore 6.00
 G_M30047_IG21:
-       lea      rdi, bword ptr [r11+0x28]
-       mov      rsi, r13
-       call     CORINFO_HELP_ASSIGN_REF
-						;; size=12 bbWeight=1.98 PerfScore 3.46
-G_M30047_IG22:
-       mov      rax, bword ptr [rbp-0xB8]
-       add      rax, 4
-       dec      r12d
-       jne      G_M30047_IG18
-						;; size=20 bbWeight=3.96 PerfScore 9.90
-G_M30047_IG23:
        mov      rdi, gword ptr [rbx+0x38]
        mov      esi, 2
        mov      rax, 0xD1FFAB1E      ; code for System.Data.Odbc.CMDWrapper:FreeKeyInfoStatementHandle(short):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Data.Odbc.CMDWrapper:FreeKeyInfoStatementHandle(short):this
-       jmp      G_M30047_IG59
-       align    [11 bytes for IG32]
-						;; size=39 bbWeight=0.50 PerfScore 5.25
-G_M30047_IG24:
+       jmp      G_M30047_IG49
+       align    [1 bytes for IG32]
+						;; size=29 bbWeight=0.50 PerfScore 5.25
+G_M30047_IG22:
+       mov      r14, qword ptr [rbp-0x48]
        mov      edx, r14d
        shr      edx, 31
        add      edx, r14d
        sar      edx, 1
-       mov      rdi, gword ptr [rbp-0x98]
+       mov      rdi, gword ptr [rbp-0x140]
        xor      esi, esi
        mov      rax, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:PtrToStringUni(int,int):System.String:this
        call     [rax]System.Data.ProviderBase.DbBuffer:PtrToStringUni(int,int):System.String:this
-       mov      r13, rax
-       mov      r14, qword ptr [rbp-0x40]
-       mov      edx, r14d
-       shr      edx, 31
-       add      edx, r14d
+       mov      r14, rax
+       mov      rdx, qword ptr [rbp-0x40]
+       mov      edi, edx
+       shr      edi, 31
+       add      edx, edi
        sar      edx, 1
-       mov      rdi, gword ptr [rbp-0x98]
+       mov      rdi, gword ptr [rbp-0x140]
        mov      esi, 256
        mov      rax, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:PtrToStringUni(int,int):System.String:this
        call     [rax]System.Data.ProviderBase.DbBuffer:PtrToStringUni(int,int):System.String:this
-       mov      r14, rax
-       mov      rdi, gword ptr [rbp-0x98]
+       mov      gword ptr [rbp-0x130], rax
+       mov      rdi, gword ptr [rbp-0x140]
        mov      esi, 512
-       mov      rax, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:ReadInt16(int):short:this
-       call     [rax]System.Data.ProviderBase.DbBuffer:ReadInt16(int):short:this
-       mov      dword ptr [rbp-0x38], eax
-       test     r12, r12
-       je       SHORT G_M30047_IG26
-       mov      edx, dword ptr [r12+0x08]
-       test     edx, edx
-       je       SHORT G_M30047_IG26
-       cmp      r12, r14
-       je       SHORT G_M30047_IG25
-       test     r14, r14
-       je       SHORT G_M30047_IG26
-       cmp      dword ptr [r14+0x08], edx
-       jne      SHORT G_M30047_IG26
-       lea      rdi, bword ptr [r12+0x0C]
-       add      edx, edx
-       lea      rsi, bword ptr [r14+0x0C]
-       mov      rcx, 0xD1FFAB1E      ; code for System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
-       call     [rcx]System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
-       test     eax, eax
-       je       SHORT G_M30047_IG26
-						;; size=161 bbWeight=2 PerfScore 71.50
-G_M30047_IG25:
-       mov      ecx, dword ptr [rbp-0x30]
-       lea      edx, [rcx+0x01]
-       cmp      dword ptr [rbp-0x38], edx
-       mov      dword ptr [rbp-0x30], ecx
-       je       G_M30047_IG36
-						;; size=18 bbWeight=2 PerfScore 11.00
-G_M30047_IG26:
-       cmp      dword ptr [rbp-0x34], 0
+       mov      rcx, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:ReadInt16(int):short:this
+       call     [rcx]System.Data.ProviderBase.DbBuffer:ReadInt16(int):short:this
+       mov      dword ptr [rbp-0x34], eax
+       test     r13, r13
        je       SHORT G_M30047_IG29
-						;; size=6 bbWeight=2 PerfScore 6.00
-G_M30047_IG27:
-       mov      r12d, dword ptr [rbp-0x2C]
-       jmp      SHORT G_M30047_IG33
-						;; size=6 bbWeight=1 PerfScore 3.00
-G_M30047_IG28:
-       mov      r12d, dword ptr [rbp-0x2C]
-       jmp      SHORT G_M30047_IG33
-						;; size=6 bbWeight=4 PerfScore 12.00
-G_M30047_IG29:
-       mov      ecx, dword ptr [rbp-0x30]
-       test     ecx, ecx
+       mov      edx, dword ptr [r13+0x08]
+       test     edx, edx
+       je       SHORT G_M30047_IG29
+       mov      rcx, gword ptr [rbp-0x130]
+       cmp      r13, rcx
        je       SHORT G_M30047_IG28
-       mov      r12d, dword ptr [rbp-0x2C]
-       test     r12d, r12d
-       je       SHORT G_M30047_IG30
-       cmp      r12d, ecx
-       jle      SHORT G_M30047_IG33
-						;; size=21 bbWeight=8 PerfScore 46.00
+       test     rcx, rcx
+       jne      SHORT G_M30047_IG24
+						;; size=140 bbWeight=2 PerfScore 57.50
+G_M30047_IG23:
+       jmp      SHORT G_M30047_IG29
+						;; size=2 bbWeight=1 PerfScore 2.00
+G_M30047_IG24:
+       cmp      dword ptr [rcx+0x08], edx
+       je       SHORT G_M30047_IG26
+						;; size=5 bbWeight=2 PerfScore 8.00
+G_M30047_IG25:
+       jmp      SHORT G_M30047_IG29
+						;; size=2 bbWeight=1 PerfScore 2.00
+G_M30047_IG26:
+       lea      rdi, bword ptr [r13+0x0C]
+       add      edx, edx
+       lea      rsi, bword ptr [rcx+0x0C]
+       mov      r8, 0xD1FFAB1E      ; code for System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
+       call     [r8]System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
+       test     eax, eax
+       je       SHORT G_M30047_IG29
+						;; size=27 bbWeight=2 PerfScore 11.50
+G_M30047_IG27:
+       mov      rcx, gword ptr [rbp-0x130]
+						;; size=7 bbWeight=1 PerfScore 1.00
+G_M30047_IG28:
+       mov      r8d, dword ptr [rbp-0x2C]
+       lea      edx, [r8+0x01]
+       cmp      dword ptr [rbp-0x34], edx
+       mov      dword ptr [rbp-0x2C], r8d
+       je       G_M30047_IG36
+						;; size=21 bbWeight=2 PerfScore 11.00
+G_M30047_IG29:
+       cmp      dword ptr [rbp-0x30], 0
+       jne      SHORT G_M30047_IG33
+						;; size=6 bbWeight=2 PerfScore 6.00
 G_M30047_IG30:
-       mov      r12d, ecx
-       xor      ecx, ecx
+       mov      r8d, dword ptr [rbp-0x2C]
+       test     r8d, r8d
+       je       SHORT G_M30047_IG33
+       test     r12d, r12d
+       je       SHORT G_M30047_IG31
+       cmp      r12d, r8d
+       jle      SHORT G_M30047_IG33
+						;; size=19 bbWeight=8 PerfScore 38.00
+G_M30047_IG31:
+       mov      r12d, r8d
+       xor      r8d, r8d
        test     r12d, r12d
        jle      SHORT G_M30047_IG33
-						;; size=10 bbWeight=8 PerfScore 14.00
-G_M30047_IG31:
-       cmp      r12d, 16
-       jg       SHORT G_M30047_IG35
-       mov      ecx, 16
-       mov      edx, r12d
-						;; size=14 bbWeight=4 PerfScore 7.00
+						;; size=11 bbWeight=8 PerfScore 14.00
 G_M30047_IG32:
-       mov      r8, gword ptr [rbp-0x88]
-       mov      edi, dword ptr [r8+rcx]
-       mov      r9, gword ptr [rbp-0x90]
-       mov      dword ptr [r9+rcx], edi
-       add      rcx, 4
-       dec      edx
-       jne      SHORT G_M30047_IG32
-						;; size=30 bbWeight=63.36 PerfScore 411.84
+       cmp      r8d, dword ptr [rbp-0xB8]
+       jae      G_M30047_IG48
+       lea      rdx, [rbp-0xC0]
+       mov      edi, r8d
+       mov      edx, dword ptr [rdx+4*rdi+0x10]
+       cmp      r8d, dword ptr [rbp-0x108]
+       jae      G_M30047_IG48
+       lea      rsi, [rbp-0x110]
+       mov      dword ptr [rsi+4*rdi+0x10], edx
+       inc      r8d
+       cmp      r8d, r12d
+       jl       SHORT G_M30047_IG32
+						;; size=59 bbWeight=64 PerfScore 752.00
 G_M30047_IG33:
-       xor      ecx, ecx
-       mov      dword ptr [rbp-0x30], ecx
-       xor      edx, edx
-       mov      dword ptr [rbp-0x34], edx
+       xor      r8d, r8d
+       xor      r13d, r13d
+       mov      rcx, gword ptr [rbp-0x130]
+       mov      gword ptr [rbp-0x138], rcx
+						;; size=20 bbWeight=16 PerfScore 40.00
+G_M30047_IG34:
+       mov      dword ptr [rbp-0x30], r8d
        mov      rdx, gword ptr [r15+0x18]
        mov      rdi, rbx
-       mov      rsi, r13
+       mov      rsi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Data.Odbc.OdbcDataReader:GetOrdinalFromBaseColName(System.String,System.String):int:this
        call     [rax]System.Data.Odbc.OdbcDataReader:GetOrdinalFromBaseColName(System.String,System.String):int:this
        cmp      eax, -1
        je       G_M30047_IG42
-						;; size=41 bbWeight=16 PerfScore 152.00
-G_M30047_IG34:
-       mov      dword ptr [rbp-0x30], 1
-       mov      r8, gword ptr [rbp-0x88]
-       mov      dword ptr [r8+0x10], eax
-       jmp      G_M30047_IG43
-						;; size=23 bbWeight=2 PerfScore 10.00
+						;; size=35 bbWeight=16 PerfScore 128.00
 G_M30047_IG35:
-       cmp      ecx, 16
-       jae      G_M30047_IG58
-       mov      edi, ecx
-       mov      r8, gword ptr [rbp-0x88]
-       mov      edi, dword ptr [r8+4*rdi+0x10]
-       mov      edx, ecx
-       mov      r9, gword ptr [rbp-0x90]
-       mov      dword ptr [r9+4*rdx+0x10], edi
-       inc      ecx
-       cmp      ecx, r12d
-       jl       SHORT G_M30047_IG35
-       jmp      SHORT G_M30047_IG33
-						;; size=46 bbWeight=0.64 PerfScore 6.56
+       mov      r13d, 1
+       mov      dword ptr [rbp-0xB0], eax
+       jmp      G_M30047_IG43
+						;; size=17 bbWeight=2 PerfScore 6.50
 G_M30047_IG36:
-       mov      r14d, dword ptr [rbp-0x34]
-       test     r14d, r14d
+       cmp      dword ptr [rbp-0x30], 0
        je       SHORT G_M30047_IG38
-						;; size=9 bbWeight=2 PerfScore 4.50
+						;; size=6 bbWeight=2 PerfScore 6.00
 G_M30047_IG37:
-       mov      dword ptr [rbp-0x34], r14d
-       mov      r14, r12
-       mov      r12d, dword ptr [rbp-0x2C]
+       mov      gword ptr [rbp-0x138], r13
+       mov      r13d, dword ptr [rbp-0x2C]
        jmp      SHORT G_M30047_IG43
-						;; size=13 bbWeight=1 PerfScore 4.25
+						;; size=13 bbWeight=1 PerfScore 4.00
 G_M30047_IG38:
        mov      rdx, gword ptr [r15+0x18]
        mov      rdi, rbx
-       mov      rsi, r13
+       mov      rsi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Data.Odbc.OdbcDataReader:GetOrdinalFromBaseColName(System.String,System.String):int:this
        call     [rax]System.Data.Odbc.OdbcDataReader:GetOrdinalFromBaseColName(System.String,System.String):int:this
        mov      edi, eax
        cmp      edi, -1
        je       SHORT G_M30047_IG41
-       mov      eax, dword ptr [rbp-0x30]
+       mov      eax, dword ptr [rbp-0x2C]
        cmp      eax, 16
        jl       SHORT G_M30047_IG40
 						;; size=37 bbWeight=2 PerfScore 19.00
 G_M30047_IG39:
-       mov      dword ptr [rbp-0x30], eax
-       mov      r14, r12
-       mov      r12d, dword ptr [rbp-0x2C]
+       mov      gword ptr [rbp-0x138], r13
+       mov      r13d, eax
        jmp      SHORT G_M30047_IG42
-						;; size=12 bbWeight=1 PerfScore 4.25
+						;; size=12 bbWeight=1 PerfScore 3.25
 G_M30047_IG40:
        mov      ecx, eax
        lea      eax, [rcx+0x01]
-       mov      dword ptr [rbp-0x30], eax
-       mov      rdx, gword ptr [rbp-0x88]
+       cmp      ecx, dword ptr [rbp-0xB8]
+       jae      G_M30047_IG48
+       lea      rdx, [rbp-0xC0]
        mov      dword ptr [rdx+4*rcx+0x10], edi
-       mov      dword ptr [rbp-0x34], r14d
-       mov      r14, r12
-       mov      r12d, dword ptr [rbp-0x2C]
+       mov      gword ptr [rbp-0x138], r13
+       mov      r13d, eax
        jmp      SHORT G_M30047_IG43
-						;; size=32 bbWeight=2 PerfScore 16.00
+						;; size=40 bbWeight=2 PerfScore 17.00
 G_M30047_IG41:
-       mov      r14, r12
-       mov      r12d, dword ptr [rbp-0x2C]
-						;; size=7 bbWeight=1 PerfScore 1.25
+       mov      gword ptr [rbp-0x138], r13
+       mov      r13d, dword ptr [rbp-0x2C]
+						;; size=11 bbWeight=1 PerfScore 2.00
 G_M30047_IG42:
-       mov      dword ptr [rbp-0x34], 1
+       mov      dword ptr [rbp-0x30], 1
 						;; size=7 bbWeight=8 PerfScore 8.00
 G_M30047_IG43:
        mov      rdi, gword ptr [rbx+0x38]
        mov      rdi, gword ptr [rdi+0x10]
        cmp      byte  ptr [rdi], dil
-       mov      rsi, 0xD1FFAB1E      ; code for Interop+Odbc:SQLFetch(System.Data.Odbc.OdbcStatementHandle):short
-       call     [rsi]Interop+Odbc:SQLFetch(System.Data.Odbc.OdbcStatementHandle):short
+       mov      rcx, 0xD1FFAB1E      ; code for Interop+Odbc:SQLFetch(System.Data.Odbc.OdbcStatementHandle):short
+       call     [rcx]Interop+Odbc:SQLFetch(System.Data.Odbc.OdbcStatementHandle):short
        test     eax, eax
        jne      G_M30047_IG12
 						;; size=31 bbWeight=4 PerfScore 46.00
 G_M30047_IG44:
-       mov      dword ptr [rbp-0x2C], r12d
-       mov      r12, r14
-						;; size=7 bbWeight=2 PerfScore 2.50
+       mov      dword ptr [rbp-0x2C], r13d
+       mov      r13, gword ptr [rbp-0x138]
+						;; size=11 bbWeight=2 PerfScore 4.00
 G_M30047_IG45:
-       mov      rdi, gword ptr [rbp-0x98]
+       mov      rdi, gword ptr [rbp-0x140]
        mov      esi, 520
        mov      rax, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:ReadIntPtr(int):long:this
        call     [rax]System.Data.ProviderBase.DbBuffer:ReadIntPtr(int):long:this
-       mov      r14, rax
-       mov      rdi, gword ptr [rbp-0x98]
+       mov      qword ptr [rbp-0x48], rax
+       mov      rdi, gword ptr [rbp-0x140]
        mov      esi, 528
        mov      rax, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:ReadIntPtr(int):long:this
        call     [rax]System.Data.ProviderBase.DbBuffer:ReadIntPtr(int):long:this
        mov      qword ptr [rbp-0x40], rax
-       mov      rdi, gword ptr [rbp-0x98]
+       mov      rdi, gword ptr [rbp-0x140]
        mov      esi, 256
        mov      rax, 0xD1FFAB1E      ; code for System.Data.ProviderBase.DbBuffer:ReadInt16(int):short:this
        call     [rax]System.Data.ProviderBase.DbBuffer:ReadInt16(int):short:this
        test     eax, eax
-       jne      G_M30047_IG24
-						;; size=87 bbWeight=4 PerfScore 64.00
+       jne      G_M30047_IG22
+						;; size=88 bbWeight=4 PerfScore 67.00
 G_M30047_IG46:
-       mov      r14, r12
-       mov      r12d, dword ptr [rbp-0x2C]
+       mov      gword ptr [rbp-0x138], r13
+       mov      r13d, dword ptr [rbp-0x2C]
        jmp      G_M30047_IG43
-						;; size=12 bbWeight=2 PerfScore 6.50
+						;; size=16 bbWeight=2 PerfScore 8.00
 G_M30047_IG47:
-       mov      rcx, gword ptr [rbp-0x90]
-       jmp      G_M30047_IG16
-						;; size=12 bbWeight=0.25 PerfScore 0.75
-G_M30047_IG48:
-       mov      rcx, gword ptr [rbp-0x90]
-       jmp      G_M30047_IG16
-						;; size=12 bbWeight=0.25 PerfScore 0.75
-G_M30047_IG49:
-       mov      rcx, gword ptr [rbp-0x90]
-       jmp      G_M30047_IG16
-						;; size=12 bbWeight=0.25 PerfScore 0.75
-G_M30047_IG50:
-       mov      rcx, gword ptr [rbp-0x90]
-       jmp      G_M30047_IG16
-						;; size=12 bbWeight=0.25 PerfScore 0.75
-G_M30047_IG51:
-       cmp      edi, 16
-       jae      G_M30047_IG58
-       mov      eax, edi
-       mov      r14, gword ptr [rbp-0x88]
-       mov      eax, dword ptr [r14+4*rax+0x10]
-       mov      esi, edi
-       mov      rcx, gword ptr [rbp-0x90]
-       mov      dword ptr [rcx+4*rsi+0x10], eax
-       inc      edi
-       cmp      edi, r12d
-       jl       SHORT G_M30047_IG51
-       jmp      G_M30047_IG16
-						;; size=48 bbWeight=0.04 PerfScore 0.41
-G_M30047_IG52:
-       cmp      r14d, 16
-       jae      G_M30047_IG58
-       mov      edi, r14d
-       mov      edx, dword ptr [rcx+4*rdi+0x10]
-       mov      r8d, dword ptr [rbp-0x44]
-       inc      r8d
-       mov      dword ptr [rbp-0x44], r8d
-       mov      rdi, gword ptr [rbx+0x20]
-       mov      r9, rdi
-       cmp      edx, dword ptr [r9+0x08]
-       jae      G_M30047_IG58
-       mov      edi, edx
-       mov      rax, gword ptr [r9+8*rdi+0x10]
-       mov      r11, rax
-       mov      gword ptr [rbp-0xB0], r11
-       mov      byte  ptr [r11+0x3C], 1
-       mov      byte  ptr [r11+0x39], 0
-       mov      byte  ptr [r11+0x37], 1
-       mov      rax, r11
-       cmp      gword ptr [rax+0x20], 0
-       jne      SHORT G_M30047_IG54
-						;; size=87 bbWeight=0.04 PerfScore 0.91
-G_M30047_IG53:
-       mov      rsi, gword ptr [r15+0x18]
-       lea      rdi, bword ptr [rax+0x20]
-       call     CORINFO_HELP_ASSIGN_REF
-						;; size=13 bbWeight=0.02 PerfScore 0.07
-G_M30047_IG54:
-       mov      r11, gword ptr [rbp-0xB0]
-       cmp      gword ptr [r11+0x28], 0
-       jne      SHORT G_M30047_IG56
-						;; size=14 bbWeight=0.04 PerfScore 0.20
-G_M30047_IG55:
-       lea      rdi, bword ptr [r11+0x28]
-       mov      rsi, r13
-       call     CORINFO_HELP_ASSIGN_REF
-						;; size=12 bbWeight=0.02 PerfScore 0.04
-G_M30047_IG56:
-       inc      r14d
-       cmp      r14d, r12d
-       mov      rcx, gword ptr [rbp-0x90]
-       jl       G_M30047_IG52
-       jmp      G_M30047_IG23
-						;; size=24 bbWeight=0.04 PerfScore 0.18
-G_M30047_IG57:
        mov      edi, 30
        mov      rax, 0xD1FFAB1E      ; code for System.Data.Common.ADP:InternalError(int):System.Exception
        call     [rax]System.Data.Common.ADP:InternalError(int):System.Exception
        mov      rdi, rax
        call     CORINFO_HELP_THROW
        int3     
 						;; size=26 bbWeight=0 PerfScore 0.00
-G_M30047_IG58:
+G_M30047_IG48:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
-G_M30047_IG59:
-       cmp      byte  ptr [rbp-0x50], 0
-       je       SHORT G_M30047_IG60
-       mov      rdi, gword ptr [rbp-0x98]
+G_M30047_IG49:
+       cmp      byte  ptr [rbp-0x58], 0
+       je       SHORT G_M30047_IG50
+       mov      rdi, gword ptr [rbp-0x140]
        xor      esi, esi
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.InteropServices.SafeHandle:InternalRelease(ubyte):this
        call     [rax]System.Runtime.InteropServices.SafeHandle:InternalRelease(ubyte):this
 						;; size=27 bbWeight=0.50 PerfScore 3.75
-G_M30047_IG60:
-       mov      eax, dword ptr [rbp-0x44]
+G_M30047_IG50:
+       mov      eax, dword ptr [rbp-0x4C]
 						;; size=3 bbWeight=0.50 PerfScore 0.50
-G_M30047_IG61:
-       add      rsp, 168
+G_M30047_IG51:
+       add      rsp, 328
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=18 bbWeight=0.50 PerfScore 2.12
-G_M30047_IG62:
+G_M30047_IG52:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 24
        mov      rbp, qword ptr [rdi+0x08]
        mov      qword ptr [rsp+0x08], rbp
-       lea      rbp, [rbp+0xD0]
+       lea      rbp, [rbp+0x170]
 						;; size=30 bbWeight=0 PerfScore 0.00
-G_M30047_IG63:
-       cmp      byte  ptr [rbp-0x50], 0
-       je       SHORT G_M30047_IG64
-       mov      rdi, gword ptr [rbp-0x98]
+G_M30047_IG53:
+       cmp      byte  ptr [rbp-0x58], 0
+       je       SHORT G_M30047_IG54
+       mov      rdi, gword ptr [rbp-0x140]
        cmp      byte  ptr [rdi], dil
        xor      esi, esi
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.InteropServices.SafeHandle:InternalRelease(ubyte):this
        call     [rax]System.Runtime.InteropServices.SafeHandle:InternalRelease(ubyte):this
 						;; size=30 bbWeight=0 PerfScore 0.00
-G_M30047_IG64:
+G_M30047_IG54:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
-G_M30047_IG65:
+G_M30047_IG55:
        add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 2044, prolog size 47, PerfScore 1191.23, instruction count 495, allocated bytes for code 2044 (MethodHash=95e48aa0) for method System.Data.Odbc.OdbcDataReader:RetrieveKeyInfoFromStatistics(System.Data.Odbc.OdbcDataReader+QualifiedTableName,ubyte):int:this (FullOpts)
+; Total bytes of code 1839, prolog size 92, PerfScore 1562.46, instruction count 425, allocated bytes for code 1839 (MethodHash=95e48aa0) for method System.Data.Odbc.OdbcDataReader:RetrieveKeyInfoFromStatistics(System.Data.Odbc.OdbcDataReader+QualifiedTableName,ubyte):int: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/7c81d96378739677d98f0c17e95f6296

@MihuBot
Copy link
Owner Author

MihuBot commented Dec 24, 2024

@hez2010

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