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

[X64] [Sergio0694] Intrinsify typeof(T).GetGenericTypeDefinition() #444

Open
MihuBot opened this issue Jun 17, 2024 · 3 comments
Open

[X64] [Sergio0694] Intrinsify typeof(T).GetGenericTypeDefinition() #444

MihuBot opened this issue Jun 17, 2024 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jun 17, 2024

Job completed in 16 minutes.
dotnet/runtime#103528

Diffs

Found 264 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 41359740
Total bytes of diff: 41359248
Total bytes of delta: -492 (-0.00 % of base)
Total relative delta: -1.51
    diff is an improvement.
    relative diff is an improvement.


Top file regressions (bytes):
          74 : System.Private.DataContractSerialization.dasm (0.01 % of base)

Top file improvements (bytes):
        -320 : System.Text.Json.dasm (-0.02 % of base)
        -214 : System.Data.Common.dasm (-0.01 % of base)
         -32 : System.Private.Xml.dasm (-0.00 % of base)

4 total files with Code Size differences (3 improved, 1 regressed), 254 unchanged.

Top method regressions (bytes):
          74 (1.39 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.DataContracts.CollectionDataContract:IsCollectionOrTryCreate(System.Type,ubyte,byref,byref,ubyte,ubyte):ubyte (FullOpts)

Top method improvements (bytes):
        -148 (-18.50 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo:CreateJsonTypeInfo[System.Numerics.Vector`1[float]](System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]] (FullOpts)
         -79 (-30.38 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:<Create>g__CreateWhenDynamicCodeSupported|1_0():System.Func`2[System.Object,System.Numerics.Vector`1[float]] (FullOpts)
         -75 (-12.71 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:NullableFieldUsingReflection(System.Object):System.Numerics.Vector`1[float] (FullOpts)
         -71 (-23.59 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this (FullOpts)
         -62 (-7.75 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo:CreateJsonTypeInfo[System.Nullable`1[int]](System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Nullable`1[int]] (FullOpts)
         -39 (-12.96 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Nullable`1[int]]():System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[int]]:this (FullOpts)
         -32 (-29.36 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.TypeScope:IsOptionalValue(System.Type):ubyte (FullOpts)
         -30 (-11.54 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Nullable`1[int]]:<Create>g__CreateWhenDynamicCodeSupported|1_0():System.Func`2[System.Object,System.Nullable`1[int]] (FullOpts)
         -30 (-5.40 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Nullable`1[int]]:NullableFieldUsingReflection(System.Object):System.Nullable`1[int] (FullOpts)

Top method regressions (percentages):
          74 (1.39 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.DataContracts.CollectionDataContract:IsCollectionOrTryCreate(System.Type,ubyte,byref,byref,ubyte,ubyte):ubyte (FullOpts)

Top method improvements (percentages):
         -79 (-30.38 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:<Create>g__CreateWhenDynamicCodeSupported|1_0():System.Func`2[System.Object,System.Numerics.Vector`1[float]] (FullOpts)
         -32 (-29.36 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.TypeScope:IsOptionalValue(System.Type):ubyte (FullOpts)
         -71 (-23.59 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this (FullOpts)
        -148 (-18.50 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo:CreateJsonTypeInfo[System.Numerics.Vector`1[float]](System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]] (FullOpts)
         -39 (-12.96 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Nullable`1[int]]():System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[int]]:this (FullOpts)
         -75 (-12.71 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:NullableFieldUsingReflection(System.Object):System.Numerics.Vector`1[float] (FullOpts)
         -30 (-11.54 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Nullable`1[int]]:<Create>g__CreateWhenDynamicCodeSupported|1_0():System.Func`2[System.Object,System.Nullable`1[int]] (FullOpts)
         -62 (-7.75 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo:CreateJsonTypeInfo[System.Nullable`1[int]](System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Nullable`1[int]] (FullOpts)
         -30 (-5.40 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Nullable`1[int]]:NullableFieldUsingReflection(System.Object):System.Nullable`1[int] (FullOpts)

10 total methods with Code Size differences (9 improved, 1 regressed), 252294 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jun 17, 2024

Top method regressions

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

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jun 17, 2024

Top method improvements

-148 (-18.50 % of base) - System.Text.Json.Serialization.Metadata.JsonTypeInfo:CreateJsonTypeInfo[System.Numerics.Vector`1[float]](System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]]
 ; Assembly listing for method System.Text.Json.Serialization.Metadata.JsonTypeInfo:CreateJsonTypeInfo[System.Numerics.Vector`1[float]](System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]] (FullOpts)
 ; Emitting BLENDED_CODE for X86 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 12 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T04] (  6,  5.50)     ref  ->  rbx         class-hnd single-def <System.Text.Json.JsonSerializerOptions>
+;  V00 arg0         [V00,T03] (  6,  5.50)     ref  ->  rbx         class-hnd single-def <System.Text.Json.JsonSerializerOptions>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V02 tmp1         [V02,T03] (  4,  8   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]]>
+;  V02 tmp1         [V02,T02] (  4,  8   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]]>
 ;* V03 tmp2         [V03    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "Inline return value spill temp" <System.Text.Json.Serialization.JsonConverter>
 ;  V04 tmp3         [V04,T01] ( 13, 10   )     ref  ->  r14         class-hnd "Inline stloc first use temp" <System.Text.Json.Serialization.JsonConverter>
 ;* V05 tmp4         [V05    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline return value spill temp" <System.Text.Json.Serialization.JsonConverter>
-;  V06 tmp5         [V06,T05] (  4,  7   )     ref  ->  r14         class-hnd "Inlining Arg" <System.Text.Json.Serialization.JsonConverter>
+;  V06 tmp5         [V06,T04] (  4,  7   )     ref  ->  r14         class-hnd "Inlining Arg" <System.Text.Json.Serialization.JsonConverter>
 ;  V07 tmp6         [V07,T07] (  6,  3   )     ref  ->  r13         class-hnd single-def "Inline stloc first use temp" <System.Text.Json.Serialization.JsonConverterFactory>
 ;* V08 tmp7         [V08    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline return value spill temp" <System.Text.Json.Serialization.JsonConverter>
-;  V09 tmp8         [V09,T11] (  4,  2   )     ref  ->  r14         class-hnd single-def "Inline stloc first use temp" <System.Text.Json.Serialization.JsonConverter>
-;  V10 tmp9         [V10,T16] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
-;  V11 tmp10        [V11,T00] ( 12, 13   )     ref  ->  r12         class-hnd single-def "Inlining Arg" <System.Type>
-;  V12 tmp11        [V12,T12] (  3,  2   )   ubyte  ->  rax         "Inline return value spill temp"
+;  V09 tmp8         [V09,T10] (  4,  2   )     ref  ->  r14         class-hnd single-def "Inline stloc first use temp" <System.Text.Json.Serialization.JsonConverter>
+;  V10 tmp9         [V10,T13] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
+;  V11 tmp10        [V11,T00] (  9, 12   )     ref  ->  r12         class-hnd single-def "Inlining Arg" <System.Type>
+;  V12 tmp11        [V12,T12] (  2,  2   )   ubyte  ->  rax         "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;  V14 tmp13        [V14,T17] (  3,  1.50)   ubyte  ->  rax         "Inline return value spill temp"
+;  V14 tmp13        [V14,T14] (  3,  1.50)   ubyte  ->  rax         "Inline return value spill temp"
 ;* V15 tmp14        [V15    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "non-inline candidate call" <System.RuntimeType>
-;* V16 tmp15        [V16,T21] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;  V17 tmp16        [V17,T20] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
+;* V16 tmp15        [V16,T17] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V17 tmp16        [V17,T16] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType>
-;  V19 tmp18        [V19,T15] (  2,  2   )     int  ->  r12         "non-inline candidate call"
-;  V20 tmp19        [V20,T18] (  3,  1.50)   ubyte  ->  rax         "Inline return value spill temp"
+;* V19 tmp18        [V19    ] (  0,  0   )     int  ->  zero-ref    "non-inline candidate call"
+;* V20 tmp19        [V20,T18] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V21 tmp20        [V21,T06] (  5,  5   )     ref  ->  r13         class-hnd single-def "Inlining Arg" <System.Type>
-;  V22 tmp21        [V22,T08] (  3,  3   )     ref  ->  rax         single-def "arr expr"
-;  V23 tmp22        [V23,T13] (  2,  2   )     ref  ->  rsi         single-def "argument with side effect"
-;  V24 tmp23        [V24,T09] (  3,  3   )     ref  ->  rax         single-def "arr expr"
-;  V25 tmp24        [V25,T14] (  2,  2   )     ref  ->  rsi         single-def "argument with side effect"
-;  V26 tmp25        [V26,T22] (  2,  0   )     ref  ->  rdi         single-def "argument with side effect"
-;  V27 cse0         [V27,T19] (  3,  1.50)    long  ->  [rbp-0x30]  "CSE #06: moderate"
-;  V28 cse1         [V28,T10] (  3,  2.50)    long  ->  r13         "CSE #08: moderate"
-;  V29 cse2         [V29,T02] ( 14,  8   )     ref  ->  r15         "CSE #01: aggressive"
+;* V22 tmp21        [V22    ] (  0,  0   )     ref  ->  zero-ref    "arr expr"
+;* V23 tmp22        [V23    ] (  0,  0   )     ref  ->  zero-ref    "argument with side effect"
+;  V24 tmp23        [V24,T08] (  3,  3   )     ref  ->  rax         single-def "arr expr"
+;  V25 tmp24        [V25,T11] (  2,  2   )     ref  ->  rsi         single-def "argument with side effect"
+;  V26 tmp25        [V26,T19] (  2,  0   )     ref  ->  rdi         single-def "argument with side effect"
+;  V27 cse0         [V27,T15] (  3,  1.50)    long  ->  [rbp-0x30]  "CSE #04: moderate"
+;  V28 cse1         [V28,T09] (  3,  2.50)    long  ->  r13         "CSE #06: moderate"
+;  V29 cse2         [V29,T05] ( 11,  6.50)     ref  ->  r15         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M50242_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        lea      rbp, [rsp+0x30]
        mov      rbx, rdi
 						;; size=19 bbWeight=1 PerfScore 7.75
 G_M50242_IG02:
        test     rbx, rbx
-       je       G_M50242_IG25
+       je       G_M50242_IG19
        mov      rdi, rbx
        mov      r15, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single]'
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.JsonSerializerOptions:GetConverterFromList(System.Type):System.Text.Json.Serialization.JsonConverter:this
        call     [rax]System.Text.Json.JsonSerializerOptions:GetConverterFromList(System.Type):System.Text.Json.Serialization.JsonConverter:this
        mov      r14, rax
        test     r14, r14
        jne      SHORT G_M50242_IG04
 						;; size=45 bbWeight=1 PerfScore 6.75
 G_M50242_IG03:
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver:GetBuiltInConverter(System.Type):System.Text.Json.Serialization.JsonConverter
        call     [rax]System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver:GetBuiltInConverter(System.Type):System.Text.Json.Serialization.JsonConverter
        mov      r14, rax
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 G_M50242_IG04:
        mov      rsi, r14
        mov      rdi, 0xD1FFAB1E      ; System.Text.Json.Serialization.JsonConverterFactory
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_ISINSTANCEOFCLASS
        call     [rax]CORINFO_HELP_ISINSTANCEOFCLASS
        mov      r13, rax
        test     r13, r13
        je       SHORT G_M50242_IG06
 						;; size=33 bbWeight=1 PerfScore 5.25
 G_M50242_IG05:
        mov      rdi, r13
        mov      rdx, rbx
        mov      rsi, r15
        mov      rax, qword ptr [r13]
        mov      rax, qword ptr [rax+0x60]
        call     [rax]System.Text.Json.Serialization.JsonConverterFactory:CreateConverter(System.Type,System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.JsonConverter:this
        mov      r14, rax
        test     r14, r14
-       je       G_M50242_IG21
+       je       G_M50242_IG15
        mov      rsi, r14
        mov      rdi, 0xD1FFAB1E      ; System.Text.Json.Serialization.JsonConverterFactory
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_ISINSTANCEOFCLASS
        call     [rax]CORINFO_HELP_ISINSTANCEOFCLASS
        test     rax, rax
-       jne      G_M50242_IG24
+       jne      G_M50242_IG18
 						;; size=65 bbWeight=0.50 PerfScore 7.12
 G_M50242_IG06:
        mov      rdi, r14
        mov      rax, qword ptr [r14]
        mov      r13, qword ptr [rax+0x40]
        call     [r13+0x20]System.Text.Json.Serialization.JsonConverter:get_Type():System.Type:this
        mov      r12, rax
-       mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       call     [rax]System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       mov      rdi, 0xD1FFAB1E      ; 'System.Nullable`1[T]'
-       cmp      rax, rdi
-       jne      SHORT G_M50242_IG08
-						;; size=47 bbWeight=1 PerfScore 12.50
-G_M50242_IG07:
-       mov      rdi, r12
-       mov      rax, 0xD1FFAB1E      ; code for System.Type:get_IsInterface():ubyte:this
-       cmp      dword ptr [rdi], edi
-       call     [rax]System.Type:get_IsInterface():ubyte:this
-       test     eax, eax
-       jne      SHORT G_M50242_IG09
-						;; size=21 bbWeight=0.50 PerfScore 3.88
-G_M50242_IG08:
        mov      rdi, r12
        mov      rsi, r15
        mov      rax, qword ptr [r12]
        mov      rax, qword ptr [rax+0xB0]
        call     [rax+0x20]System.Type:IsAssignableFrom(System.Type):ubyte:this
-       jmp      SHORT G_M50242_IG10
-						;; size=22 bbWeight=0.50 PerfScore 4.75
-G_M50242_IG09:
-       mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetGenericArguments():System.Type[]:this
-       call     [rax]System.RuntimeType:GetGenericArguments():System.Type[]:this
-       cmp      dword ptr [rax+0x08], 0
-       jbe      G_M50242_IG26
-       mov      rsi, gword ptr [rax+0x10]
-       mov      rdi, r12
-       mov      rax, qword ptr [r12]
-       mov      rax, qword ptr [rax+0xB0]
-       call     [rax+0x20]System.Type:IsAssignableFrom(System.Type):ubyte:this
-						;; size=46 bbWeight=0.50 PerfScore 8.38
-G_M50242_IG10:
        test     eax, eax
-       jne      G_M50242_IG15
-						;; size=8 bbWeight=1 PerfScore 1.25
-G_M50242_IG11:
+       jne      G_M50242_IG11
+						;; size=45 bbWeight=1 PerfScore 16.25
+G_M50242_IG07:
        mov      rdi, r12
        mov      rax, qword ptr [r12]
        mov      rax, qword ptr [rax+0x60]
        call     [rax+0x08]System.Type:get_IsGenericType():ubyte:this
        test     eax, eax
-       je       SHORT G_M50242_IG12
+       je       SHORT G_M50242_IG08
        mov      rdi, r12
        mov      rax, qword ptr [r12]
        mov      rax, qword ptr [rax+0x68]
        mov      qword ptr [rbp-0x30], rax
        call     [rax+0x18]System.Type:GetGenericTypeDefinition():System.Type:this
        mov      rdi, 0xD1FFAB1E      ; 'System.Nullable`1[T]'
        cmp      rax, rdi
-       jne      SHORT G_M50242_IG12
+       jne      SHORT G_M50242_IG08
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:get_IsInterface():ubyte:this
        call     [rax]System.RuntimeType:get_IsInterface():ubyte:this
        test     eax, eax
-       jne      SHORT G_M50242_IG13
+       jne      SHORT G_M50242_IG09
 						;; size=70 bbWeight=0.50 PerfScore 11.50
-G_M50242_IG12:
+G_M50242_IG08:
        mov      rsi, r12
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:IsAssignableFrom(System.Type):ubyte:this
        call     [rax]System.RuntimeType:IsAssignableFrom(System.Type):ubyte:this
-       jmp      SHORT G_M50242_IG14
+       jmp      SHORT G_M50242_IG10
 						;; size=20 bbWeight=0.50 PerfScore 2.88
-G_M50242_IG13:
+G_M50242_IG09:
        mov      rax, qword ptr [rbp-0x30]
        mov      rdi, r12
        call     [rax+0x28]System.Type:GetGenericArguments():System.Type[]:this
        cmp      dword ptr [rax+0x08], 0
-       jbe      G_M50242_IG26
+       jbe      G_M50242_IG20
        mov      rsi, gword ptr [rax+0x10]
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:IsAssignableFrom(System.Type):ubyte:this
        call     [rax]System.RuntimeType:IsAssignableFrom(System.Type):ubyte:this
 						;; size=39 bbWeight=0.50 PerfScore 6.88
-G_M50242_IG14:
+G_M50242_IG10:
        test     eax, eax
-       je       G_M50242_IG23
+       je       G_M50242_IG17
 						;; size=8 bbWeight=0.50 PerfScore 0.62
-G_M50242_IG15:
+G_M50242_IG11:
        cmp      byte  ptr [r14+0x17], 0
-       je       SHORT G_M50242_IG19
+       je       SHORT G_M50242_IG13
 						;; size=7 bbWeight=1 PerfScore 4.00
-G_M50242_IG16:
-       mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       call     [rax]System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       mov      rdi, 0xD1FFAB1E      ; 'System.Nullable`1[T]'
-       cmp      rax, rdi
-       sete     r12b
-       movzx    r12, r12b
+G_M50242_IG12:
        mov      rdi, r14
        call     [r13+0x20]System.Text.Json.Serialization.JsonConverter:get_Type():System.Type:this
        mov      r13, rax
        mov      rdi, r13
        mov      rax, qword ptr [r13]
        mov      rax, qword ptr [rax+0x60]
        call     [rax+0x08]System.Type:get_IsGenericType():ubyte:this
        test     eax, eax
-       jne      SHORT G_M50242_IG17
-       xor      eax, eax
-       jmp      SHORT G_M50242_IG18
-						;; size=68 bbWeight=0.50 PerfScore 9.75
-G_M50242_IG17:
+       je       SHORT G_M50242_IG13
        mov      rdi, r13
        mov      rax, qword ptr [r13]
        mov      rax, qword ptr [rax+0x68]
        call     [rax+0x18]System.Type:GetGenericTypeDefinition():System.Type:this
        mov      rdi, 0xD1FFAB1E      ; 'System.Nullable`1[T]'
        cmp      rax, rdi
-       sete     al
-       movzx    rax, al
-						;; size=33 bbWeight=0.50 PerfScore 4.50
-G_M50242_IG18:
-       xor      eax, r12d
-       jne      SHORT G_M50242_IG22
-						;; size=5 bbWeight=0.50 PerfScore 0.62
-G_M50242_IG19:
+       je       SHORT G_M50242_IG16
+						;; size=57 bbWeight=0.50 PerfScore 10.38
+G_M50242_IG13:
        mov      rdi, 0xD1FFAB1E      ; System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]]
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      rdi, r13
        mov      rcx, rbx
        mov      rdx, r14
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.Metadata.JsonTypeInfo:.ctor(System.Type,System.Text.Json.Serialization.JsonConverter,System.Text.Json.JsonSerializerOptions):this
        call     [rax]System.Text.Json.Serialization.Metadata.JsonTypeInfo:.ctor(System.Type,System.Text.Json.Serialization.JsonConverter,System.Text.Json.JsonSerializerOptions):this
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this
        call     [rax]System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this
        lea      rdi, bword ptr [r13+0x140]
        mov      rsi, rax
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, r13
 						;; size=75 bbWeight=1 PerfScore 11.25
-G_M50242_IG20:
+G_M50242_IG14:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
-G_M50242_IG21:
+G_M50242_IG15:
        mov      rdi, r13
        call     System.Object:GetType():System.Type:this
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_SerializerConverterFactoryReturnsNull(System.Type)
        call     [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_SerializerConverterFactoryReturnsNull(System.Type)
        int3     
 						;; size=24 bbWeight=0 PerfScore 0.00
-G_M50242_IG22:
+G_M50242_IG16:
        mov      rsi, r14
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_ConverterCanConvertMultipleTypes(System.Type,System.Text.Json.Serialization.JsonConverter)
        call     [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_ConverterCanConvertMultipleTypes(System.Type,System.Text.Json.Serialization.JsonConverter)
        int3     
 						;; size=19 bbWeight=0 PerfScore 0.00
-G_M50242_IG23:
+G_M50242_IG17:
        mov      rdi, r14
        call     System.Object:GetType():System.Type:this
        mov      rdi, rax
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_SerializationConverterNotCompatible(System.Type,System.Type)
        call     [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_SerializationConverterNotCompatible(System.Type,System.Type)
        int3     
 						;; size=27 bbWeight=0 PerfScore 0.00
-G_M50242_IG24:
+G_M50242_IG18:
        mov      rdi, r13
        call     System.Object:GetType():System.Type:this
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_SerializerConverterFactoryReturnsJsonConverterFactorty(System.Type)
        call     [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_SerializerConverterFactoryReturnsJsonConverterFactorty(System.Type)
        int3     
 						;; size=24 bbWeight=0 PerfScore 0.00
-G_M50242_IG25:
+G_M50242_IG19:
        mov      edi, 0x3958
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.ThrowHelper:ThrowArgumentNullException(System.String)
        call     [rax]System.Text.Json.ThrowHelper:ThrowArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M50242_IG26:
+G_M50242_IG20:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 800, prolog size 16, PerfScore 115.75, instruction count 202, allocated bytes for code 800 (MethodHash=3ef43bbd) for method System.Text.Json.Serialization.Metadata.JsonTypeInfo:CreateJsonTypeInfo[System.Numerics.Vector`1[float]](System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]] (FullOpts)
+; Total bytes of code 652, prolog size 16, PerfScore 96.75, instruction count 167, allocated bytes for code 652 (MethodHash=3ef43bbd) for method System.Text.Json.Serialization.Metadata.JsonTypeInfo:CreateJsonTypeInfo[System.Numerics.Vector`1[float]](System.Text.Json.JsonSerializerOptions):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]] (FullOpts)
-79 (-30.38 % of base) - System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:g__CreateWhenDynamicCodeSupported|1_0():System.Func`2[System.Object,System.Numerics.Vector`1[float]]
 ; Assembly listing for method System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:<Create>g__CreateWhenDynamicCodeSupported|1_0():System.Func`2[System.Object,System.Numerics.Vector`1[float]] (FullOpts)
 ; Emitting BLENDED_CODE for X86 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 OutArgs      [V00    ] (  1,  1   )  struct (16) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V01 tmp1         [V01,T00] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "dup spill" <System.Type[]>
 ;  V02 tmp2         [V02,T01] (  3,  6   )     ref  ->  rbx         class-hnd single-def "impAppendStmt" <System.Reflection.MethodInfo>
-;  V03 tmp3         [V03,T02] (  3,  4   )     ref  ->  rsi         class-hnd "Strict ordering of exceptions for Array store" <System.Type>
-;  V04 tmp4         [V04,T05] (  3,  3   )     ref  ->  rax         single-def "arr expr"
-;  V05 tmp5         [V05,T03] (  2,  4   )     ref  ->  rdi         single-def "argument with side effect"
-;  V06 cse0         [V06,T04] (  4,  3   )     ref  ->  r14         "CSE #01: aggressive"
+;* V03 tmp3         [V03,T03] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "Strict ordering of exceptions for Array store" <System.Type>
+;* V04 tmp4         [V04    ] (  0,  0   )     ref  ->  zero-ref    "arr expr"
+;  V05 tmp5         [V05,T02] (  2,  4   )     ref  ->  rdi         single-def "argument with side effect"
 ;
-; Lcl frame size = 24
+; Lcl frame size = 16
 
 G_M14670_IG01:
        push     rbp
        push     r15
-       push     r14
        push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x30]
-						;; size=15 bbWeight=1 PerfScore 4.75
+       sub      rsp, 16
+       lea      rbp, [rsp+0x20]
+						;; size=13 bbWeight=1 PerfScore 3.75
 G_M14670_IG02:
        xor      rdi, rdi
        mov      gword ptr [rsp], rdi
 						;; size=6 bbWeight=1 PerfScore 1.25
 G_M14670_IG03:
        mov      gword ptr [rsp+0x08], rdi
        mov      rdi, 0xD1FFAB1E      ; 'UnboxT`1[System.Numerics.Vector`1[System.Single]]'
        mov      rsi, 0xD1FFAB1E      ; 'NullableField'
        mov      edx, -1
        mov      ecx, 40
        xor      r8, r8
        mov      r9d, 3
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetMethodImplCommon(System.String,int,int,System.Reflection.Binder,int,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodInfo:this
        call     [rax]System.RuntimeType:GetMethodImplCommon(System.String,int,int,System.Reflection.Binder,int,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodInfo:this
        mov      rbx, rax
        mov      rdi, 0xD1FFAB1E      ; System.Type[]
        mov      esi, 1
        call     CORINFO_HELP_NEWARR_1_OBJ
        mov      r15, rax
-       mov      r14, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single]'
-       mov      rdi, r14
+       mov      rdi, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single]'
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:get_IsGenericTypeDefinition():ubyte:this
        call     [rax]System.RuntimeType:get_IsGenericTypeDefinition():ubyte:this
-       test     eax, eax
-       jne      SHORT G_M14670_IG05
-						;; size=111 bbWeight=1 PerfScore 12.75
-G_M14670_IG04:
-       mov      rdi, r14
-       mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       call     [rax]System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       mov      rdi, 0xD1FFAB1E      ; 'System.Nullable`1[T]'
-       cmp      rax, rdi
-       je       SHORT G_M14670_IG06
-						;; size=30 bbWeight=0.50 PerfScore 2.50
-G_M14670_IG05:
-       xor      rsi, rsi
-       jmp      SHORT G_M14670_IG07
-						;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M14670_IG06:
-       mov      rdi, r14
-       mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetGenericArguments():System.Type[]:this
-       call     [rax]System.RuntimeType:GetGenericArguments():System.Type[]:this
-       cmp      dword ptr [rax+0x08], 0
-       jbe      SHORT G_M14670_IG09
-       mov      rsi, gword ptr [rax+0x10]
-						;; size=25 bbWeight=0.50 PerfScore 4.75
-G_M14670_IG07:
-       lea      rdi, bword ptr [r15+0x10]
-       call     CORINFO_HELP_ASSIGN_REF
+       xor      rdi, rdi
+       mov      gword ptr [r15+0x10], rdi
        mov      rdi, rbx
        mov      rsi, r15
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x60]
        call     [rax+0x38]System.Reflection.MethodInfo:MakeGenericMethod(System.Type[]):System.Reflection.MethodInfo:this
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; System.Reflection.MethodInfo:CreateDelegate[System.Func`2[System.Object,System.Numerics.Vector`1[float]]]():System.Func`2[System.Object,System.Numerics.Vector`1[float]]:this
        mov      rax, 0xD1FFAB1E      ; code for System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this
        cmp      dword ptr [rdi], edi
-						;; size=50 bbWeight=1 PerfScore 12.75
-G_M14670_IG08:
-       add      rsp, 24
+						;; size=151 bbWeight=1 PerfScore 23.75
+G_M14670_IG04:
+       add      rsp, 16
        pop      rbx
-       pop      r14
        pop      r15
        pop      rbp
        tail.jmp [rax]System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this
-						;; size=13 bbWeight=1 PerfScore 4.25
-G_M14670_IG09:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=11 bbWeight=1 PerfScore 3.75
 
-; Total bytes of code 260, prolog size 15, PerfScore 44.12, instruction count 61, allocated bytes for code 260 (MethodHash=fe9dc6b1) for method System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:<Create>g__CreateWhenDynamicCodeSupported|1_0():System.Func`2[System.Object,System.Numerics.Vector`1[float]] (FullOpts)
+; Total bytes of code 181, prolog size 13, PerfScore 32.50, instruction count 40, allocated bytes for code 181 (MethodHash=fe9dc6b1) for method System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:<Create>g__CreateWhenDynamicCodeSupported|1_0():System.Func`2[System.Object,System.Numerics.Vector`1[float]] (FullOpts)
-75 (-12.71 % of base) - System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:NullableFieldUsingReflection(System.Object):System.Numerics.Vector`1[float]
 ; Assembly listing for method System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:NullableFieldUsingReflection(System.Object):System.Numerics.Vector`1[float] (FullOpts)
 ; Emitting BLENDED_CODE for X86 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 4 single block inlinees; 5 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 RetBuf       [V00,T01] (  8,  5   )   byref  ->  r15         single-def
 ;  V01 arg0         [V01,T00] ( 13,  7.50)     ref  ->  rbx         class-hnd <System.Object>
 ;* V02 loc0         [V02    ] (  0,  0   )  simd32  ->  zero-ref    <System.Numerics.Vector`1[float]>
-;  V03 loc1         [V03,T03] (  6,  3   )     ref  ->  r14         class-hnd exact single-def <System.RuntimeType>
+;  V03 loc1         [V03,T02] (  6,  3   )     ref  ->  r14         class-hnd exact single-def <System.RuntimeType>
 ;* V04 loc2         [V04    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def <System.Type>
 ;* V05 loc3         [V05    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <System.Type>
 ;* V06 loc4         [V06    ] (  0,  0   )  simd32  ->  zero-ref    ld-addr-op <System.Numerics.Vector`1[float]>
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V08 tmp1         [V08,T10] (  0,  0   )     ref  ->  zero-ref    class-hnd "spilling qmarkNull" <System.Numerics.Vector`1[float]>
-;  V09 tmp2         [V09,T11] (  3,  1.50)     ref  ->  r13        
+;* V08 tmp1         [V08,T07] (  0,  0   )     ref  ->  zero-ref    class-hnd "spilling qmarkNull" <System.Numerics.Vector`1[float]>
+;  V09 tmp2         [V09,T08] (  3,  1.50)     ref  ->  r13        
 ;* V10 tmp3         [V10    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V11 tmp4         [V11    ] (  0,  0   )     ref  ->  zero-ref   
-;  V12 tmp5         [V12,T12] (  3,  1.50)     ref  ->  rax        
-;  V13 tmp6         [V13,T13] (  3,  1.50)     ref  ->  rax        
-;  V14 tmp7         [V14,T02] ( 10,  5   )     ref  ->  r12         class-hnd "Inline return value spill temp" <System.Type>
+;* V12 tmp5         [V12,T12] (  0,  0   )     ref  ->  zero-ref   
+;  V13 tmp6         [V13,T09] (  3,  1.50)     ref  ->  rax        
+;* V14 tmp7         [V14,T13] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "Inline return value spill temp" <System.Type>
 ;* V15 tmp8         [V15    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "impAppendStmt" <System.RuntimeType[]>
-;  V16 tmp9         [V16,T08] (  2,  2   )     ref  ->  r13         class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
-;  V17 tmp10        [V17,T04] (  3,  3   )     ref  ->  rax         single-def "arr expr"
-;  V18 tmp11        [V18,T05] (  3,  3   )     ref  ->  r13         single-def "arr expr"
-;  V19 tmp12        [V19,T06] (  3,  3   )     int  ->  rax         "index expr"
-;  V20 cse0         [V20,T14] (  3,  1.50)    long  ->  r14         "CSE #05: moderate"
-;  V21 cse1         [V21,T07] (  4,  2   )     ref  ->  r13         "CSE #03: moderate"
-;  V22 cse2         [V22,T09] (  5,  1.75)    long  ->  rdi         multi-def "CSE #02: moderate"
-;  V23 cse3         [V23,T15] (  2,  0.50)    long  ->  rax         "CSE #01: conservative"
+;  V16 tmp9         [V16,T05] (  2,  2   )     ref  ->  r13         class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
+;* V17 tmp10        [V17    ] (  0,  0   )     ref  ->  zero-ref    "arr expr"
+;  V18 tmp11        [V18,T03] (  3,  3   )     ref  ->  r13         single-def "arr expr"
+;  V19 tmp12        [V19,T04] (  3,  3   )     int  ->  rax         "index expr"
+;  V20 cse0         [V20,T10] (  3,  1.50)    long  ->  r14         "CSE #04: moderate"
+;  V21 cse1         [V21,T06] (  5,  1.75)    long  ->  rdi         multi-def "CSE #02: moderate"
+;  V22 cse2         [V22,T11] (  2,  0.50)    long  ->  rax         "CSE #01: conservative"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 0
 
 G_M40660_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
-       push     r12
        push     rbx
-       push     rax
-       lea      rbp, [rsp+0x30]
+       lea      rbp, [rsp+0x20]
        mov      r15, rdi
        mov      rbx, rsi
-						;; size=22 bbWeight=1 PerfScore 8.00
+						;; size=19 bbWeight=1 PerfScore 6.00
 G_M40660_IG02:
        mov      rax, 0xD1FFAB1E      ; global ptr
        test     byte  ptr [rax], 1
-       je       G_M40660_IG25
+       je       G_M40660_IG20
 						;; size=19 bbWeight=1 PerfScore 4.25
 G_M40660_IG03:
        mov      rax, 0xD1FFAB1E      ; data for System.DBNull:Value
        cmp      rbx, gword ptr [rax]
-       je       G_M40660_IG23
+       je       G_M40660_IG18
 						;; size=19 bbWeight=1 PerfScore 4.25
 G_M40660_IG04:
        test     rbx, rbx
        je       SHORT G_M40660_IG08
 						;; size=5 bbWeight=0.50 PerfScore 0.62
 G_M40660_IG05:
        mov      rax, qword ptr [rbx]
        mov      rdi, 0xD1FFAB1E      ; System.Numerics.Vector`1[float]
        cmp      rax, rdi
        jne      SHORT G_M40660_IG08
 						;; size=18 bbWeight=0.25 PerfScore 0.88
 G_M40660_IG06:
        vmovups  ymm0, ymmword ptr [rbx+0x08]
        vmovups  ymmword ptr [r15], ymm0
        mov      rax, r15
 						;; size=13 bbWeight=0.50 PerfScore 3.62
 G_M40660_IG07:
        vzeroupper 
-       add      rsp, 8
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=18 bbWeight=0.50 PerfScore 2.62
+						;; size=12 bbWeight=0.50 PerfScore 2.25
 G_M40660_IG08:
        mov      rdi, rbx
        call     System.Object:GetType():System.Type:this
        mov      r14, rax
-       mov      r13, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single]'
-       mov      rdi, r13
+       mov      rdi, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single]'
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:get_IsGenericTypeDefinition():ubyte:this
        call     [rax]System.RuntimeType:get_IsGenericTypeDefinition():ubyte:this
-       test     eax, eax
-       jne      SHORT G_M40660_IG09
-       mov      rdi, r13
-       mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       call     [rax]System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       mov      rdi, 0xD1FFAB1E      ; 'System.Nullable`1[T]'
-       cmp      rax, rdi
-       je       SHORT G_M40660_IG10
-						;; size=70 bbWeight=0.50 PerfScore 5.75
-G_M40660_IG09:
-       xor      r12, r12
-       jmp      SHORT G_M40660_IG11
-						;; size=5 bbWeight=0.50 PerfScore 1.12
-G_M40660_IG10:
-       mov      rdi, r13
-       mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetGenericArguments():System.Type[]:this
-       call     [rax]System.RuntimeType:GetGenericArguments():System.Type[]:this
-       cmp      dword ptr [rax+0x08], 0
-       jbe      G_M40660_IG28
-       mov      r12, gword ptr [rax+0x10]
-						;; size=29 bbWeight=0.50 PerfScore 4.75
-G_M40660_IG11:
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:get_IsEnum():ubyte:this
        call     [rax]System.RuntimeType:get_IsEnum():ubyte:this
        test     eax, eax
-       je       SHORT G_M40660_IG13
+       je       SHORT G_M40660_IG10
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:get_IsActualEnum():ubyte:this
        call     [rax]System.RuntimeType:get_IsActualEnum():ubyte:this
        test     eax, eax
-       je       G_M40660_IG27
+       je       G_M40660_IG22
        mov      rdi, 0xD1FFAB1E      ; global ptr
        test     byte  ptr [rdi], 1
-       je       G_M40660_IG26
-						;; size=61 bbWeight=0.50 PerfScore 6.88
-G_M40660_IG12:
+       je       G_M40660_IG21
+						;; size=94 bbWeight=0.50 PerfScore 9.38
+G_M40660_IG09:
        mov      rdi, 0xD1FFAB1E      ; data for System.Enum:s_underlyingTypes
        mov      r13, gword ptr [rdi]
        mov      rdi, qword ptr [r14+0x18]
        call     System.Enum:InternalGetCorElementType(ulong):ubyte
        cmp      eax, dword ptr [r13+0x08]
-       jae      G_M40660_IG28
+       jae      G_M40660_IG24
        mov      edi, eax
        mov      r13, gword ptr [r13+8*rdi+0x10]
-       jmp      SHORT G_M40660_IG14
+       jmp      SHORT G_M40660_IG11
 						;; size=41 bbWeight=0.50 PerfScore 6.75
-G_M40660_IG13:
+G_M40660_IG10:
        mov      r13, r14
 						;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M40660_IG14:
-       mov      rdi, r12
-       mov      rax, qword ptr [r12]
+G_M40660_IG11:
+       xor      rdi, rdi
+       mov      rax, qword ptr [0x0000]
        mov      r14, qword ptr [rax+0x70]
        call     [r14+0x30]System.Type:get_IsEnum():ubyte:this
        test     eax, eax
-       je       SHORT G_M40660_IG15
-       mov      rdi, r12
-       mov      rax, qword ptr [r12]
-       mov      rax, qword ptr [rax+0xA0]
-       call     [rax+0x18]System.Type:GetEnumUnderlyingType():System.Type:this
-       jmp      SHORT G_M40660_IG16
-						;; size=38 bbWeight=0.50 PerfScore 8.88
-G_M40660_IG15:
-       mov      rax, r12
-						;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M40660_IG16:
+       jne      G_M40660_IG23
        mov      rdi, r13
-       mov      rsi, rax
+       xor      rsi, rsi
        mov      rax, 0xD1FFAB1E      ; code for System.Type:op_Equality(System.Type,System.Type):ubyte
        call     [rax]System.Type:op_Equality(System.Type,System.Type):ubyte
        test     eax, eax
-       je       SHORT G_M40660_IG19
-       mov      rdi, r12
+       je       SHORT G_M40660_IG14
+       xor      rdi, rdi
        call     [r14+0x30]System.Type:get_IsEnum():ubyte:this
        test     eax, eax
-       je       SHORT G_M40660_IG17
-       mov      rdi, r12
+       je       SHORT G_M40660_IG12
+       xor      rdi, rdi
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Enum:ToObject(System.Type,System.Object):System.Object
        call     [rax]System.Enum:ToObject(System.Type,System.Object):System.Object
-       jmp      SHORT G_M40660_IG18
-						;; size=53 bbWeight=0.50 PerfScore 7.62
-G_M40660_IG17:
+       jmp      SHORT G_M40660_IG13
+						;; size=76 bbWeight=0.50 PerfScore 11.88
+G_M40660_IG12:
        mov      rdi, rbx
-       mov      rsi, r12
+       xor      rsi, rsi
        xor      rdx, rdx
        mov      rax, 0xD1FFAB1E      ; code for System.Convert:ChangeType(System.Object,System.Type,System.IFormatProvider):System.Object
        call     [rax]System.Convert:ChangeType(System.Object,System.Type,System.IFormatProvider):System.Object
-						;; size=20 bbWeight=0.50 PerfScore 2.00
-G_M40660_IG18:
+						;; size=19 bbWeight=0.50 PerfScore 2.00
+G_M40660_IG13:
        mov      rbx, rax
 						;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M40660_IG19:
+G_M40660_IG14:
        mov      rdi, 0xD1FFAB1E      ; System.Numerics.Vector`1[float]
        cmp      qword ptr [rbx], rdi
-       je       SHORT G_M40660_IG21
+       je       SHORT G_M40660_IG16
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M40660_IG20:
+G_M40660_IG15:
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_UNBOX
        call     [rax]CORINFO_HELP_UNBOX
 						;; size=15 bbWeight=0.25 PerfScore 0.88
-G_M40660_IG21:
+G_M40660_IG16:
        vmovups  ymm0, ymmword ptr [rbx+0x08]
        vmovups  ymmword ptr [r15], ymm0
        mov      rax, r15
 						;; size=13 bbWeight=0.50 PerfScore 3.62
-G_M40660_IG22:
+G_M40660_IG17:
        vzeroupper 
-       add      rsp, 8
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=18 bbWeight=0.50 PerfScore 2.62
-G_M40660_IG23:
+						;; size=12 bbWeight=0.50 PerfScore 2.25
+G_M40660_IG18:
        vxorps   ymm0, ymm0, ymm0
        vmovups  ymmword ptr [r15], ymm0
        mov      rax, r15
 						;; size=12 bbWeight=0.50 PerfScore 1.29
-G_M40660_IG24:
+G_M40660_IG19:
        vzeroupper 
-       add      rsp, 8
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=18 bbWeight=0.50 PerfScore 2.62
-G_M40660_IG25:
+						;; size=12 bbWeight=0.50 PerfScore 2.25
+G_M40660_IG20:
        mov      rdi, 0xD1FFAB1E      ; System.DBNull
        call     CORINFO_HELP_GET_GCSTATIC_BASE
        jmp      G_M40660_IG03
 						;; size=20 bbWeight=0 PerfScore 0.00
-G_M40660_IG26:
+G_M40660_IG21:
        mov      rdi, 0xD1FFAB1E      ; System.Enum
        call     CORINFO_HELP_GET_GCSTATIC_BASE
-       jmp      G_M40660_IG12
+       jmp      G_M40660_IG09
 						;; size=20 bbWeight=0 PerfScore 0.00
-G_M40660_IG27:
+G_M40660_IG22:
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:ThrowMustBeEnum()
        call     [rax]System.RuntimeType:ThrowMustBeEnum()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M40660_IG28:
+G_M40660_IG23:
+       mov      edi, 0x4C5
+       mov      rsi, 0xD1FFAB1E
+       call     CORINFO_HELP_STRCNS
+       mov      rdi, rax
+       mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
+       call     [rax]System.ArgumentNullException:Throw(System.String)
+       int3     
+						;; size=36 bbWeight=0 PerfScore 0.00
+G_M40660_IG24:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 590, prolog size 16, PerfScore 81.54, instruction count 154, allocated bytes for code 590 (MethodHash=3a1e612b) for method System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:NullableFieldUsingReflection(System.Object):System.Numerics.Vector`1[float] (FullOpts)
+; Total bytes of code 515, prolog size 13, PerfScore 64.54, instruction count 130, allocated bytes for code 515 (MethodHash=3a1e612b) for method System.Data.DataRowExtensions+UnboxT`1[System.Numerics.Vector`1[float]]:NullableFieldUsingReflection(System.Object):System.Numerics.Vector`1[float] (FullOpts)
-71 (-23.59 % of base) - System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this
 ; Assembly listing for method System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this (FullOpts)
 ; Emitting BLENDED_CODE for X86 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 1 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] ( 10,  6   )     ref  ->  rbx         this class-hnd single-def <System.Text.Json.Serialization.JsonConverter>
 ;  V01 loc0         [V01,T04] (  3,  2.50)     ref  ->  rax         class-hnd single-def <System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T02] (  3,  3   )     ref  ->  rax         class-hnd single-def "dup spill" <System.Text.Json.Serialization.JsonConverter>
 ;* V04 tmp2         [V04    ] (  0,  0   )     ref  ->  zero-ref    single-def
-;  V05 tmp3         [V05,T07] (  3,  1.50)     ref  ->  rax        
+;  V05 tmp3         [V05,T06] (  3,  1.50)     ref  ->  rax        
 ;  V06 tmp4         [V06,T05] (  4,  2   )     ref  ->  rax        
 ;  V07 tmp5         [V07,T03] (  3,  3   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Text.Json.Serialization.Converters.CastingConverter`1[System.Numerics.Vector`1[float]]>
-;  V08 tmp6         [V08,T06] (  2,  2   )     int  ->  r15         "non-inline candidate call"
-;  V09 tmp7         [V09,T08] (  3,  1.50)   ubyte  ->  r13         "Inline return value spill temp"
-;  V10 tmp8         [V10,T01] (  5,  5   )     ref  ->  r14         class-hnd single-def "Inlining Arg" <System.Type>
+;* V08 tmp6         [V08    ] (  0,  0   )     int  ->  zero-ref    "non-inline candidate call"
+;* V09 tmp7         [V09,T07] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp8         [V10,T01] (  5,  5   )     ref  ->  r15         class-hnd single-def "Inlining Arg" <System.Type>
 ;
 ; Lcl frame size = 0
 
 G_M27543_IG01:
        push     rbp
        push     r15
-       push     r14
-       push     r13
        push     rbx
-       lea      rbp, [rsp+0x20]
+       lea      rbp, [rsp+0x10]
        mov      rbx, rdi
-						;; size=16 bbWeight=1 PerfScore 5.75
+						;; size=12 bbWeight=1 PerfScore 3.75
 G_M27543_IG02:
        mov      rsi, rbx
        mov      rdi, 0xD1FFAB1E      ; System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_ISINSTANCEOFCLASS
        call     [rax]CORINFO_HELP_ISINSTANCEOFCLASS
        test     rax, rax
-       jne      G_M27543_IG10
+       jne      G_M27543_IG08
 						;; size=34 bbWeight=1 PerfScore 5.00
 G_M27543_IG03:
        cmp      byte  ptr [rbx+0x17], 0
-       je       SHORT G_M27543_IG06
-       mov      rdi, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single]'
-       mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       call     [rax]System.RuntimeType:GetGenericTypeDefinition():System.Type:this
-       mov      rdi, 0xD1FFAB1E      ; 'System.Nullable`1[T]'
-       cmp      rax, rdi
-       sete     r15b
-       movzx    r15, r15b
+       je       SHORT G_M27543_IG04
        mov      rdi, rbx
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Text.Json.Serialization.JsonConverter:get_Type():System.Type:this
-       mov      r14, rax
-       mov      rdi, r14
-       mov      rax, qword ptr [r14]
+       mov      r15, rax
+       mov      rdi, r15
+       mov      rax, qword ptr [r15]
        mov      rax, qword ptr [rax+0x60]
        call     [rax+0x08]System.Type:get_IsGenericType():ubyte:this
        test     eax, eax
-       jne      SHORT G_M27543_IG04
-       xor      r13d, r13d
-       jmp      SHORT G_M27543_IG05
-						;; size=87 bbWeight=0.50 PerfScore 13.75
-G_M27543_IG04:
-       mov      rdi, r14
-       mov      rax, qword ptr [r14]
+       je       SHORT G_M27543_IG04
+       mov      rdi, r15
+       mov      rax, qword ptr [r15]
        mov      rax, qword ptr [rax+0x68]
        call     [rax+0x18]System.Type:GetGenericTypeDefinition():System.Type:this
        mov      rdi, 0xD1FFAB1E      ; 'System.Nullable`1[T]'
        cmp      rax, rdi
-       sete     r13b
-       movzx    r13, r13b
-						;; size=34 bbWeight=0.50 PerfScore 4.50
-G_M27543_IG05:
-       xor      r15d, r13d
-       jne      SHORT G_M27543_IG11
-						;; size=5 bbWeight=0.50 PerfScore 0.62
-G_M27543_IG06:
+       je       SHORT G_M27543_IG09
+						;; size=67 bbWeight=0.50 PerfScore 14.38
+G_M27543_IG04:
        mov      rdi, rbx
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x48]
        call     [rax+0x20]System.Text.Json.Serialization.JsonConverter:get_SourceConverterForCastingConverter():System.Text.Json.Serialization.JsonConverter:this
        test     rax, rax
-       je       SHORT G_M27543_IG07
+       je       SHORT G_M27543_IG05
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this
        call     [rax]System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this
-       jmp      SHORT G_M27543_IG08
+       jmp      SHORT G_M27543_IG06
 						;; size=35 bbWeight=0.50 PerfScore 7.00
-G_M27543_IG07:
+G_M27543_IG05:
        xor      rax, rax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M27543_IG08:
+G_M27543_IG06:
        test     rax, rax
-       jne      SHORT G_M27543_IG09
+       jne      SHORT G_M27543_IG07
        mov      rdi, 0xD1FFAB1E      ; System.Text.Json.Serialization.Converters.CastingConverter`1[System.Numerics.Vector`1[float]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rdi, r15
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.Converters.CastingConverter`1[System.Numerics.Vector`1[float]]:.ctor(System.Text.Json.Serialization.JsonConverter):this
        call     [rax]System.Text.Json.Serialization.Converters.CastingConverter`1[System.Numerics.Vector`1[float]]:.ctor(System.Text.Json.Serialization.JsonConverter):this
        mov      rax, r15
 						;; size=44 bbWeight=0.50 PerfScore 3.38
-G_M27543_IG09:
+G_M27543_IG07:
        pop      rbx
-       pop      r13
-       pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=9 bbWeight=0.50 PerfScore 1.75
-G_M27543_IG10:
+						;; size=5 bbWeight=0.50 PerfScore 1.25
+G_M27543_IG08:
        pop      rbx
-       pop      r13
-       pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=9 bbWeight=0.50 PerfScore 1.75
-G_M27543_IG11:
+						;; size=5 bbWeight=0.50 PerfScore 1.25
+G_M27543_IG09:
        mov      rsi, rbx
        mov      rdi, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single]'
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_ConverterCanConvertMultipleTypes(System.Type,System.Text.Json.Serialization.JsonConverter)
        call     [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_ConverterCanConvertMultipleTypes(System.Type,System.Text.Json.Serialization.JsonConverter)
        int3     
 						;; size=26 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 301, prolog size 13, PerfScore 43.62, instruction count 83, allocated bytes for code 301 (MethodHash=a5569468) for method System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this (FullOpts)
+; Total bytes of code 230, prolog size 9, PerfScore 36.12, instruction count 65, allocated bytes for code 230 (MethodHash=a5569468) for method System.Text.Json.Serialization.JsonConverter:CreateCastingConverter[System.Numerics.Vector`1[float]]():System.Text.Json.Serialization.JsonConverter`1[System.Numerics.Vector`1[float]]:this (FullOpts)

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jun 17, 2024

@EgorBo

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