MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] [hez2010] JIT: Simple importer single-block forward substitution #774

Open MihuBot opened 1 week ago

MihuBot commented 1 week ago

Job completed in 20 minutes 2 seconds. https://github.com/dotnet/runtime/pull/109482

Diffs

Found 263 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39726231
Total bytes of diff: 39721939
Total bytes of delta: -4292 (-0.01 % of base)
Total relative delta: -15.96
    diff is an improvement.
    relative diff is an improvement.

Top file improvements (bytes):
       -3056 : System.Private.CoreLib.dasm (-0.05 % of base)
        -671 : System.ComponentModel.TypeConverter.dasm (-0.22 % of base)
        -565 : System.ComponentModel.Composition.dasm (-0.13 % of base)

3 total files with Code Size differences (3 improved, 0 regressed), 256 unchanged.

Top method improvements (bytes):
        -250 (-65.27 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts)
        -247 (-65.00 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts)
        -239 (-72.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[System.Nullable`1[int]]():int (FullOpts)
        -239 (-72.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[System.Numerics.Vector`1[float]]():int (FullOpts)
        -179 (-63.25 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts)
        -151 (-47.34 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts)
        -117 (-41.64 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[double](long):double (FullOpts)
        -117 (-42.24 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[int](long):int (FullOpts)
        -117 (-42.09 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[long](long):long (FullOpts)
        -117 (-41.79 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[short](long):short (FullOpts)
        -117 (-41.94 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[ubyte](long):ubyte (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[double]():int (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[int]():int (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[long]():int (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[short]():int (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[ubyte]():int (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[double]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[int]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[long]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[short]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[ubyte]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-29.69 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[double](long):double (FullOpts)
        -106 (-29.86 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[int](long):int (FullOpts)
        -106 (-29.78 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[long](long):long (FullOpts)
        -106 (-29.69 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[short](long):short (FullOpts)
        -106 (-29.78 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[ubyte](long):ubyte (FullOpts)
        -104 (-4.80 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[System.Numerics.Vector`1[float]](System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.Numerics.Vector`1[float] (FullOpts)
         -93 (-4.37 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[double](System.Collections.Generic.IDictionary`2[System.String,System.Object]):double (FullOpts)
         -93 (-4.37 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[short](System.Collections.Generic.IDictionary`2[System.String,System.Object]):short (FullOpts)
         -92 (-4.33 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[long](System.Collections.Generic.IDictionary`2[System.String,System.Object]):long (FullOpts)
         -92 (-4.33 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[ubyte](System.Collections.Generic.IDictionary`2[System.String,System.Object]):ubyte (FullOpts)
         -91 (-4.29 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[int](System.Collections.Generic.IDictionary`2[System.String,System.Object]):int (FullOpts)
         -76 (-65.52 % of base) : System.Private.CoreLib.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -47 (-34.31 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.__Canon]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
         -47 (-41.96 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
         -47 (-41.96 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Numerics.Vector`1[float]]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)

Top method improvements (percentages):
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[double]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[int]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[long]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[short]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -106 (-94.64 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[ubyte]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -239 (-72.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[System.Nullable`1[int]]():int (FullOpts)
        -239 (-72.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[System.Numerics.Vector`1[float]]():int (FullOpts)
         -76 (-65.52 % of base) : System.Private.CoreLib.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
        -250 (-65.27 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts)
        -247 (-65.00 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts)
        -179 (-63.25 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts)
        -151 (-47.34 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts)
        -117 (-42.24 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[int](long):int (FullOpts)
        -117 (-42.09 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[long](long):long (FullOpts)
         -47 (-41.96 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
         -47 (-41.96 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Numerics.Vector`1[float]]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -117 (-41.94 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[ubyte](long):ubyte (FullOpts)
        -117 (-41.79 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[short](long):short (FullOpts)
        -117 (-41.64 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[double](long):double (FullOpts)
         -47 (-34.31 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.__Canon]:get_ItemTypeHasDefaultConstructor():ubyte (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[double]():int (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[int]():int (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[long]():int (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[short]():int (FullOpts)
        -112 (-33.84 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:SizeOf[ubyte]():int (FullOpts)
        -106 (-29.86 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[int](long):int (FullOpts)
        -106 (-29.78 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[long](long):long (FullOpts)
        -106 (-29.78 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[ubyte](long):ubyte (FullOpts)
        -106 (-29.69 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[double](long):double (FullOpts)
        -106 (-29.69 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[short](long):short (FullOpts)
        -104 (-4.80 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[System.Numerics.Vector`1[float]](System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.Numerics.Vector`1[float] (FullOpts)
         -93 (-4.37 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[double](System.Collections.Generic.IDictionary`2[System.String,System.Object]):double (FullOpts)
         -93 (-4.37 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[short](System.Collections.Generic.IDictionary`2[System.String,System.Object]):short (FullOpts)
         -92 (-4.33 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[long](System.Collections.Generic.IDictionary`2[System.String,System.Object]):long (FullOpts)
         -92 (-4.33 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[ubyte](System.Collections.Generic.IDictionary`2[System.String,System.Object]):ubyte (FullOpts)
         -91 (-4.29 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[int](System.Collections.Generic.IDictionary`2[System.String,System.Object]):int (FullOpts)

36 total methods with Code Size differences (36 improved, 0 regressed), 232672 unchanged.

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

Artifacts:

MihuBot commented 1 week ago

Top method improvements

-250 (-65.27 % of base) - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Nullable`1[int]](long):System.Nullable`1[int] ```diff ; Assembly listing for method System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data -; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data +; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; -; V00 arg0 [V00,T00] ( 4, 4 ) long -> rbx single-def -;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def +; V00 arg0 [V00,T00] ( 3, 2 ) long -> rdi single-def +;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V03 tmp1 [V03 ] ( 5, 3.50) struct ( 8) [rbp-0x18] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable tmp" -; V04 tmp2 [V04,T01] ( 5, 5 ) ref -> rax single-def "op1 spilled for Nullable unbox" -; V05 tmp3 [V05,T03] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V06 tmp4 [V06,T04] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V07 tmp5 [V07 ] ( 4, 2.75) ubyte -> [rbp-0x18] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP -; V08 tmp6 [V08 ] ( 4, 2.75) int -> [rbp-0x14] do-not-enreg[X] addr-exposed "field V03.value (fldOffset=0x4)" P-DEP -; V09 tmp7 [V09,T05] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V10 tmp8 [V10,T06] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V11 tmp9 [V11,T07] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V12 tmp10 [V12,T08] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V13 cse0 [V13,T02] ( 4, 4 ) ref -> r15 "CSE #01: aggressive" +; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> r15 single-def "argument with side effect" +; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; -; Lcl frame size = 16 +; Lcl frame size = 0 G_M39254_IG01: push rbp push r15 push rbx - sub rsp, 16 - lea rbp, [rsp+0x20] - mov rbx, rdi - ;; size=16 bbWeight=1 PerfScore 4.00 + lea rbp, [rsp+0x10] + ;; size=9 bbWeight=0 PerfScore 0.00 G_M39254_IG02: - test rbx, rbx - je G_M39254_IG10 - mov r15, 0xD1FFAB1E ; 'System.Nullable`1[System.Int32]' - mov rdi, r15 - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsGenericType():ubyte:this - call [rax]System.RuntimeType:get_IsGenericType():ubyte:this - test eax, eax - jne G_M39254_IG09 - mov rdi, r15 - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:GetBaseType():System.RuntimeType:this - call [rax]System.RuntimeType:GetBaseType():System.RuntimeType:this - mov rdi, 0xD1FFAB1E ; 'System.MulticastDelegate' - cmp rax, rdi - jne SHORT G_M39254_IG08 - mov rdi, rbx - mov rsi, r15 - mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointerInternal(long,System.RuntimeType):System.Delegate - call [rax]System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointerInternal(long,System.RuntimeType):System.Delegate - test rax, rax - jne SHORT G_M39254_IG04 - ;; size=95 bbWeight=1 PerfScore 16.25 -G_M39254_IG03: - xor eax, eax - mov qword ptr [rbp-0x18], rax - jmp SHORT G_M39254_IG05 - ;; size=8 bbWeight=0.25 PerfScore 0.81 -G_M39254_IG04: - mov rdi, 0xD1FFAB1E ; System.Int32 - cmp qword ptr [rax], rdi - jne SHORT G_M39254_IG07 - mov byte ptr [rbp-0x18], 1 - mov eax, dword ptr [rax+0x08] - mov dword ptr [rbp-0x14], eax - ;; size=25 bbWeight=0.25 PerfScore 2.06 -G_M39254_IG05: - mov rax, qword ptr [rbp-0x18] - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M39254_IG06: - add rsp, 16 - pop rbx - pop r15 - pop rbp - ret - ;; size=9 bbWeight=1 PerfScore 2.75 -G_M39254_IG07: - lea rdi, [rbp-0x18] - mov rdx, rax - mov rsi, 0xD1FFAB1E ; System.Nullable`1[int] - call CORINFO_HELP_UNBOX_NULLABLE - jmp SHORT G_M39254_IG05 - ;; size=24 bbWeight=0 PerfScore 0.00 -G_M39254_IG08: - mov rdi, 0xD1FFAB1E ; System.ArgumentException - call CORINFO_HELP_NEWSFAST - mov rbx, rax - mov rax, 0xD1FFAB1E ; code for System.SR:get_Arg_MustBeDelegate():System.String - call [rax]System.SR:get_Arg_MustBeDelegate():System.String - mov r15, rax - mov edi, 0x194F4 - mov rsi, 0xD1FFAB1E - call CORINFO_HELP_STRCNS - mov rdx, rax - mov rsi, r15 - mov rdi, rbx - mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this - call [rax]System.ArgumentException:.ctor(System.String,System.String):this - mov rdi, rbx - call CORINFO_HELP_THROW - int3 - ;; size=83 bbWeight=0 PerfScore 0.00 -G_M39254_IG09: + test rdi, rdi + je SHORT G_M39254_IG03 mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_NeedNonGenericType():System.String call [rax]System.SR:get_Argument_NeedNonGenericType():System.String mov r15, rax mov edi, 0x194F4 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 - ;; size=83 bbWeight=0 PerfScore 0.00 -G_M39254_IG10: + ;; size=88 bbWeight=0 PerfScore 0.00 +G_M39254_IG03: mov edi, 0xD7D 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 -; Total bytes of code 383, prolog size 13, PerfScore 26.88, instruction count 87, allocated bytes for code 383 (MethodHash=fcab66a9) for method System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts) +; Total bytes of code 133, prolog size 9, PerfScore 0.00, instruction count 30, allocated bytes for code 133 (MethodHash=fcab66a9) for method System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts) ; ============================================================ ```
-247 (-65.00 % of base) - System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] ```diff ; Assembly listing for method System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data -; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data +; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; -; V00 RetBuf [V00,T01] ( 4, 4 ) byref -> rbx single-def -; V01 arg0 [V01,T02] ( 4, 4 ) long -> r15 single-def -;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def +;* V00 RetBuf [V00 ] ( 0, 0 ) byref -> zero-ref single-def +; V01 arg0 [V01,T00] ( 3, 2 ) long -> rsi single-def +;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V04 tmp1 [V04,T00] ( 4, 6.50) ref -> r15 single-def "inline UNBOX clone1" -; V05 tmp2 [V05,T04] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V06 tmp3 [V06,T05] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V07 tmp4 [V07,T06] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V08 tmp5 [V08,T07] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V09 tmp6 [V09,T08] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V10 tmp7 [V10,T09] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V11 cse0 [V11,T03] ( 4, 4 ) ref -> r14 "CSE #01: aggressive" +; V04 tmp1 [V04,T01] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V05 tmp2 [V05,T02] ( 2, 0 ) ref -> r15 single-def "argument with side effect" +; V06 tmp3 [V06,T03] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M46454_IG01: push rbp push r15 - push r14 push rbx - push rax - lea rbp, [rsp+0x20] - mov rbx, rdi - mov r15, rsi - ;; size=18 bbWeight=1 PerfScore 6.00 + lea rbp, [rsp+0x10] + ;; size=9 bbWeight=0 PerfScore 0.00 G_M46454_IG02: - test r15, r15 - je G_M46454_IG08 - mov r14, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single]' - mov rdi, r14 - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsGenericType():ubyte:this - call [rax]System.RuntimeType:get_IsGenericType():ubyte:this - test eax, eax - jne G_M46454_IG07 - mov rdi, r14 - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:GetBaseType():System.RuntimeType:this - call [rax]System.RuntimeType:GetBaseType():System.RuntimeType:this - mov rdi, 0xD1FFAB1E ; 'System.MulticastDelegate' - cmp rax, rdi - jne SHORT G_M46454_IG06 - mov rdi, r15 - mov rsi, r14 - mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointerInternal(long,System.RuntimeType):System.Delegate - call [rax]System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointerInternal(long,System.RuntimeType):System.Delegate - mov r15, rax - mov rsi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - cmp qword ptr [r15], rsi - je SHORT G_M46454_IG04 - ;; size=108 bbWeight=1 PerfScore 19.50 -G_M46454_IG03: - mov rsi, r15 - mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX - call [rax]CORINFO_HELP_UNBOX - ;; size=25 bbWeight=0.25 PerfScore 0.94 -G_M46454_IG04: - vmovups ymm0, ymmword ptr [r15+0x08] - vmovups ymmword ptr [rbx], ymm0 - mov rax, rbx - ;; size=13 bbWeight=1 PerfScore 7.25 -G_M46454_IG05: - vzeroupper - add rsp, 8 - pop rbx - pop r14 - pop r15 - pop rbp - ret - ;; size=14 bbWeight=1 PerfScore 4.25 -G_M46454_IG06: - mov rdi, 0xD1FFAB1E ; System.ArgumentException - call CORINFO_HELP_NEWSFAST - mov rbx, rax - mov rax, 0xD1FFAB1E ; code for System.SR:get_Arg_MustBeDelegate():System.String - call [rax]System.SR:get_Arg_MustBeDelegate():System.String - mov r15, rax - mov edi, 0x194F4 - mov rsi, 0xD1FFAB1E - call CORINFO_HELP_STRCNS - mov rdx, rax - mov rsi, r15 - mov rdi, rbx - mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this - call [rax]System.ArgumentException:.ctor(System.String,System.String):this - mov rdi, rbx - call CORINFO_HELP_THROW - int3 - ;; size=83 bbWeight=0 PerfScore 0.00 -G_M46454_IG07: + test rsi, rsi + je SHORT G_M46454_IG03 mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_NeedNonGenericType():System.String call [rax]System.SR:get_Argument_NeedNonGenericType():System.String mov r15, rax mov edi, 0x194F4 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 - ;; size=83 bbWeight=0 PerfScore 0.00 -G_M46454_IG08: + ;; size=88 bbWeight=0 PerfScore 0.00 +G_M46454_IG03: mov edi, 0xD7D 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 -; Total bytes of code 380, prolog size 12, PerfScore 37.94, instruction count 85, allocated bytes for code 380 (MethodHash=ca504a89) for method System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts) +; Total bytes of code 133, prolog size 9, PerfScore 0.00, instruction count 30, allocated bytes for code 133 (MethodHash=ca504a89) for method System.Runtime.InteropServices.Marshal:GetDelegateForFunctionPointer[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts) ; ============================================================ ```
-239 (-72.21 % of base) - System.Runtime.InteropServices.Marshal:SizeOf[System.Nullable`1[int]]():int ```diff ; Assembly listing for method System.Runtime.InteropServices.Marshal:SizeOf[System.Nullable`1[int]]():int (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data -; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V01 tmp1 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "dup spill" -;* V02 tmp2 [V02 ] ( 0, 0 ) ref -> zero-ref single-def -; V03 tmp3 [V03,T07] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V04 tmp4 [V04 ] ( 4, 8 ) ref -> [rbp-0x30] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" -; V05 tmp5 [V05 ] ( 4, 8 ) struct (16) [rbp-0x40] do-not-enreg[SFA] multireg-arg ld-addr-op "NewObj constructor temp" -; V06 tmp6 [V06,T01] ( 3, 5 ) ref -> rdi class-hnd exact single-def "dup spill" -;* V07 tmp7 [V07 ] ( 0, 0 ) byref -> zero-ref -;* V08 tmp8 [V08 ] ( 0, 0 ) ref -> zero-ref single-def -;* V09 tmp9 [V09 ] ( 0, 0 ) byref -> zero-ref -; V10 tmp10 [V10,T06] ( 3, 2 ) long -> rdi -;* V11 tmp11 [V11 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V12 tmp12 [V12 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -; V13 tmp13 [V13,T04] ( 2, 4 ) int -> rax "Single return block return value" -; V14 FramesRoot [V14,T00] ( 6, 6 ) long -> rbx "Pinvoke FrameListRoot" -; V15 PInvokeFrame [V15 ] ( 8, 8 ) struct (64) [rbp-0x80] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V16 tmp16 [V16,T02] ( 3, 5 ) long -> [rbp-0x40] do-not-enreg[] "field V05._ptr (fldOffset=0x0)" P-DEP -; V17 tmp17 [V17,T03] ( 3, 5 ) long -> [rbp-0x38] do-not-enreg[] "field V05._handle (fldOffset=0x8)" P-DEP -;* V18 tmp18 [V18 ] ( 0, 0 ) long -> zero-ref "field V12._ptr (fldOffset=0x0)" P-INDEP -;* V19 tmp19 [V19 ] ( 0, 0 ) long -> zero-ref "field V12._handle (fldOffset=0x8)" P-INDEP -; V20 tmp20 [V20,T08] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V21 tmp21 [V21,T09] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V22 cse0 [V22,T05] ( 3, 3 ) ref -> r15 "CSE #01: aggressive" +;* V01 tmp1 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "dup spill" +;* V02 tmp2 [V02 ] ( 0, 0 ) ref -> zero-ref +; V03 tmp3 [V03,T00] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V04 tmp4 [V04,T01] ( 2, 0 ) ref -> r15 single-def "argument with side effect" +; V05 tmp5 [V05,T02] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; -; Lcl frame size = 88 +; Lcl frame size = 0 G_M374_IG01: push rbp push r15 - push r14 - push r13 - push r12 push rbx - sub rsp, 88 - vzeroupper - lea rbp, [rsp+0x80] - xor eax, eax - mov qword ptr [rbp-0x30], rax - ;; size=31 bbWeight=1 PerfScore 9.00 + lea rbp, [rsp+0x10] + ;; size=9 bbWeight=0 PerfScore 0.00 G_M374_IG02: - lea rdi, [rbp-0x78] - call CORINFO_HELP_INIT_PINVOKE_FRAME - mov rbx, rax - mov rdi, rsp - mov qword ptr [rbp-0x60], rdi - mov rdi, rbp - mov qword ptr [rbp-0x50], rdi - mov r15, 0xD1FFAB1E ; 'System.Nullable`1[System.Int32]' - mov rdi, r15 - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsGenericType():ubyte:this - call [rax]System.RuntimeType:get_IsGenericType():ubyte:this - test eax, eax - jne G_M374_IG11 - mov gword ptr [rbp-0x30], r15 - vxorps xmm0, xmm0, xmm0 - vmovups xmmword ptr [rbp-0x40], xmm0 - lea rdi, [rbp-0x30] - mov qword ptr [rbp-0x40], rdi - mov rdi, gword ptr [rbp-0x30] - test rdi, rdi - je SHORT G_M374_IG04 - ;; size=89 bbWeight=1 PerfScore 15.33 -G_M374_IG03: - mov rdi, qword ptr [rdi+0x18] - jmp SHORT G_M374_IG05 - ;; size=6 bbWeight=0.50 PerfScore 2.00 -G_M374_IG04: - xor edi, edi - ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M374_IG05: - mov qword ptr [rbp-0x38], rdi - lea rdi, [rbp-0x30] - mov rsi, qword ptr [rbp-0x38] - mov edx, 1 - mov rax, 0xD1FFAB1E ; function address - mov qword ptr [rbp-0x68], rax - lea rax, G_M374_IG08 - mov qword ptr [rbp-0x58], rax - lea rax, [rbp-0x78] - mov qword ptr [rbx+0x08], rax - mov byte ptr [rbx+0x04], 0 - ;; size=54 bbWeight=1 PerfScore 8.50 -G_M374_IG06: - mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:g____PInvoke|1_0(System.Runtime.CompilerServices.QCallTypeHandle,int):int - ;; size=10 bbWeight=1 PerfScore 0.25 -G_M374_IG07: - call [rax]System.Runtime.InteropServices.Marshal:g____PInvoke|1_0(System.Runtime.CompilerServices.QCallTypeHandle,int):int - ;; size=2 bbWeight=1 PerfScore 3.00 -G_M374_IG08: - mov byte ptr [rbx+0x04], 1 - mov rcx, 0xD1FFAB1E ; function address - cmp dword ptr [rcx], 0 - je SHORT G_M374_IG09 - mov rdi, 0xD1FFAB1E - call [rdi]CORINFO_HELP_STOP_FOR_GC - ;; size=31 bbWeight=1 PerfScore 8.50 -G_M374_IG09: - mov rdi, qword ptr [rbp-0x70] - mov qword ptr [rbx+0x08], rdi - ;; size=8 bbWeight=1 PerfScore 2.00 -G_M374_IG10: - add rsp, 88 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 - pop rbp - ret - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M374_IG11: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_NeedNonGenericType():System.String call [rax]System.SR:get_Argument_NeedNonGenericType():System.String mov r15, rax mov edi, 0x154F mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=83 bbWeight=0 PerfScore 0.00 -; Total bytes of code 331, prolog size 31, PerfScore 52.96, instruction count 81, allocated bytes for code 331 (MethodHash=c90dfe89) for method System.Runtime.InteropServices.Marshal:SizeOf[System.Nullable`1[int]]():int (FullOpts) +; Total bytes of code 92, prolog size 9, PerfScore 0.00, instruction count 21, allocated bytes for code 92 (MethodHash=c90dfe89) for method System.Runtime.InteropServices.Marshal:SizeOf[System.Nullable`1[int]]():int (FullOpts) ; ============================================================ ```
-239 (-72.21 % of base) - System.Runtime.InteropServices.Marshal:SizeOf[System.Numerics.Vector`1[float]]():int ```diff ; Assembly listing for method System.Runtime.InteropServices.Marshal:SizeOf[System.Numerics.Vector`1[float]]():int (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data -; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V01 tmp1 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "dup spill" -;* V02 tmp2 [V02 ] ( 0, 0 ) ref -> zero-ref single-def -; V03 tmp3 [V03,T07] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V04 tmp4 [V04 ] ( 4, 8 ) ref -> [rbp-0x30] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" -; V05 tmp5 [V05 ] ( 4, 8 ) struct (16) [rbp-0x40] do-not-enreg[SFA] multireg-arg ld-addr-op "NewObj constructor temp" -; V06 tmp6 [V06,T01] ( 3, 5 ) ref -> rdi class-hnd exact single-def "dup spill" -;* V07 tmp7 [V07 ] ( 0, 0 ) byref -> zero-ref -;* V08 tmp8 [V08 ] ( 0, 0 ) ref -> zero-ref single-def -;* V09 tmp9 [V09 ] ( 0, 0 ) byref -> zero-ref -; V10 tmp10 [V10,T06] ( 3, 2 ) long -> rdi -;* V11 tmp11 [V11 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V12 tmp12 [V12 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -; V13 tmp13 [V13,T04] ( 2, 4 ) int -> rax "Single return block return value" -; V14 FramesRoot [V14,T00] ( 6, 6 ) long -> rbx "Pinvoke FrameListRoot" -; V15 PInvokeFrame [V15 ] ( 8, 8 ) struct (64) [rbp-0x80] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V16 tmp16 [V16,T02] ( 3, 5 ) long -> [rbp-0x40] do-not-enreg[] "field V05._ptr (fldOffset=0x0)" P-DEP -; V17 tmp17 [V17,T03] ( 3, 5 ) long -> [rbp-0x38] do-not-enreg[] "field V05._handle (fldOffset=0x8)" P-DEP -;* V18 tmp18 [V18 ] ( 0, 0 ) long -> zero-ref "field V12._ptr (fldOffset=0x0)" P-INDEP -;* V19 tmp19 [V19 ] ( 0, 0 ) long -> zero-ref "field V12._handle (fldOffset=0x8)" P-INDEP -; V20 tmp20 [V20,T08] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V21 tmp21 [V21,T09] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V22 cse0 [V22,T05] ( 3, 3 ) ref -> r15 "CSE #01: aggressive" +;* V01 tmp1 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "dup spill" +;* V02 tmp2 [V02 ] ( 0, 0 ) ref -> zero-ref +; V03 tmp3 [V03,T00] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V04 tmp4 [V04,T01] ( 2, 0 ) ref -> r15 single-def "argument with side effect" +; V05 tmp5 [V05,T02] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; -; Lcl frame size = 88 +; Lcl frame size = 0 G_M52811_IG01: push rbp push r15 - push r14 - push r13 - push r12 push rbx - sub rsp, 88 - vzeroupper - lea rbp, [rsp+0x80] - xor eax, eax - mov qword ptr [rbp-0x30], rax - ;; size=31 bbWeight=1 PerfScore 9.00 + lea rbp, [rsp+0x10] + ;; size=9 bbWeight=0 PerfScore 0.00 G_M52811_IG02: - lea rdi, [rbp-0x78] - call CORINFO_HELP_INIT_PINVOKE_FRAME - mov rbx, rax - mov rdi, rsp - mov qword ptr [rbp-0x60], rdi - mov rdi, rbp - mov qword ptr [rbp-0x50], rdi - mov r15, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single]' - mov rdi, r15 - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsGenericType():ubyte:this - call [rax]System.RuntimeType:get_IsGenericType():ubyte:this - test eax, eax - jne G_M52811_IG11 - mov gword ptr [rbp-0x30], r15 - vxorps xmm0, xmm0, xmm0 - vmovups xmmword ptr [rbp-0x40], xmm0 - lea rdi, [rbp-0x30] - mov qword ptr [rbp-0x40], rdi - mov rdi, gword ptr [rbp-0x30] - test rdi, rdi - je SHORT G_M52811_IG04 - ;; size=89 bbWeight=1 PerfScore 15.33 -G_M52811_IG03: - mov rdi, qword ptr [rdi+0x18] - jmp SHORT G_M52811_IG05 - ;; size=6 bbWeight=0.50 PerfScore 2.00 -G_M52811_IG04: - xor edi, edi - ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M52811_IG05: - mov qword ptr [rbp-0x38], rdi - lea rdi, [rbp-0x30] - mov rsi, qword ptr [rbp-0x38] - mov edx, 1 - mov rax, 0xD1FFAB1E ; function address - mov qword ptr [rbp-0x68], rax - lea rax, G_M52811_IG08 - mov qword ptr [rbp-0x58], rax - lea rax, [rbp-0x78] - mov qword ptr [rbx+0x08], rax - mov byte ptr [rbx+0x04], 0 - ;; size=54 bbWeight=1 PerfScore 8.50 -G_M52811_IG06: - mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:g____PInvoke|1_0(System.Runtime.CompilerServices.QCallTypeHandle,int):int - ;; size=10 bbWeight=1 PerfScore 0.25 -G_M52811_IG07: - call [rax]System.Runtime.InteropServices.Marshal:g____PInvoke|1_0(System.Runtime.CompilerServices.QCallTypeHandle,int):int - ;; size=2 bbWeight=1 PerfScore 3.00 -G_M52811_IG08: - mov byte ptr [rbx+0x04], 1 - mov rcx, 0xD1FFAB1E ; function address - cmp dword ptr [rcx], 0 - je SHORT G_M52811_IG09 - mov rdi, 0xD1FFAB1E - call [rdi]CORINFO_HELP_STOP_FOR_GC - ;; size=31 bbWeight=1 PerfScore 8.50 -G_M52811_IG09: - mov rdi, qword ptr [rbp-0x70] - mov qword ptr [rbx+0x08], rdi - ;; size=8 bbWeight=1 PerfScore 2.00 -G_M52811_IG10: - add rsp, 88 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 - pop rbp - ret - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M52811_IG11: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_NeedNonGenericType():System.String call [rax]System.SR:get_Argument_NeedNonGenericType():System.String mov r15, rax mov edi, 0x154F mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=83 bbWeight=0 PerfScore 0.00 -; Total bytes of code 331, prolog size 31, PerfScore 52.96, instruction count 81, allocated bytes for code 331 (MethodHash=f86031b4) for method System.Runtime.InteropServices.Marshal:SizeOf[System.Numerics.Vector`1[float]]():int (FullOpts) +; Total bytes of code 92, prolog size 9, PerfScore 0.00, instruction count 21, allocated bytes for code 92 (MethodHash=f86031b4) for method System.Runtime.InteropServices.Marshal:SizeOf[System.Numerics.Vector`1[float]]():int (FullOpts) ; ============================================================ ```
-179 (-63.25 % of base) - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Nullable`1[int]](long):System.Nullable`1[int] ```diff ; Assembly listing for method System.Runtime.InteropServices.Marshal:PtrToStructure[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data -; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; -; V00 arg0 [V00,T00] ( 4, 3.50) long -> rbx single-def -; V01 loc0 [V01,T01] ( 6, 2 ) ref -> r15 class-hnd single-def +; V00 arg0 [V00,T00] ( 3, 3 ) long -> rdi single-def +;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "dup spill" -;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref single-def -; V05 tmp3 [V05 ] ( 5, 2.50) struct ( 8) [rbp-0x18] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable tmp" -; V06 tmp4 [V06,T02] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -;* V07 tmp5 [V07 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "Nullable tmp" -; V08 tmp6 [V08 ] ( 4, 1.75) ubyte -> [rbp-0x18] do-not-enreg[X] addr-exposed "field V05.hasValue (fldOffset=0x0)" P-DEP -; V09 tmp7 [V09 ] ( 4, 1.75) int -> [rbp-0x14] do-not-enreg[X] addr-exposed "field V05.value (fldOffset=0x4)" P-DEP -;* V10 tmp8 [V10 ] ( 0, 0 ) ubyte -> zero-ref do-not-enreg[] "field V07.hasValue (fldOffset=0x0)" P-DEP -;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref do-not-enreg[] "field V07.value (fldOffset=0x4)" P-DEP -; V12 tmp10 [V12,T03] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V13 tmp11 [V13,T04] ( 2, 0 ) ref -> rdx single-def "argument with side effect" +;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "dup spill" +;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref +; V05 tmp3 [V05,T01] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +;* V06 tmp4 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "Nullable tmp" +;* V07 tmp5 [V07 ] ( 0, 0 ) ubyte -> zero-ref do-not-enreg[] "field V06.hasValue (fldOffset=0x0)" P-DEP +;* V08 tmp6 [V08 ] ( 0, 0 ) int -> zero-ref do-not-enreg[] "field V06.value (fldOffset=0x4)" P-DEP +; V09 tmp7 [V09,T02] ( 2, 0 ) ref -> r15 single-def "argument with side effect" +; V10 tmp8 [V10,T03] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; -; Lcl frame size = 16 +; Lcl frame size = 0 G_M1349_IG01: push rbp push r15 push rbx - sub rsp, 16 - lea rbp, [rsp+0x20] - mov rbx, rdi - ;; size=16 bbWeight=1 PerfScore 4.00 + lea rbp, [rsp+0x10] + ;; size=9 bbWeight=1 PerfScore 3.50 G_M1349_IG02: - test rbx, rbx - je G_M1349_IG08 - ;; size=9 bbWeight=1 PerfScore 1.25 -G_M1349_IG03: - mov rdi, 0xD1FFAB1E ; 'System.Nullable`1[System.Int32]' - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsGenericType():ubyte:this - call [rax]System.RuntimeType:get_IsGenericType():ubyte:this - test eax, eax - jne G_M1349_IG11 - mov rdi, 0xD1FFAB1E ; 'System.Nullable`1[System.Int32]' - mov esi, 1 - mov edx, 1 - mov rax, 0xD1FFAB1E ; code for System.Activator:CreateInstance(System.Type,ubyte,ubyte):System.Object - call [rax]System.Activator:CreateInstance(System.Type,ubyte,ubyte):System.Object - mov r15, rax - mov rdi, rbx - mov rsi, r15 - mov edx, 1 - mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:PtrToStructureHelper(long,System.Object,ubyte) - call [rax]System.Runtime.InteropServices.Marshal:PtrToStructureHelper(long,System.Object,ubyte) - test r15, r15 - jne SHORT G_M1349_IG05 - ;; size=93 bbWeight=0.50 PerfScore 7.12 -G_M1349_IG04: - xor edi, edi - mov qword ptr [rbp-0x18], rdi - jmp SHORT G_M1349_IG06 - ;; size=8 bbWeight=0.25 PerfScore 0.81 -G_M1349_IG05: - mov rdi, 0xD1FFAB1E ; System.Int32 - cmp qword ptr [r15], rdi - jne SHORT G_M1349_IG10 - mov byte ptr [rbp-0x18], 1 - mov eax, dword ptr [r15+0x08] - mov dword ptr [rbp-0x14], eax - ;; size=26 bbWeight=0.25 PerfScore 2.06 -G_M1349_IG06: - mov rax, qword ptr [rbp-0x18] - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M1349_IG07: - add rsp, 16 - pop rbx - pop r15 - pop rbp - ret - ;; size=9 bbWeight=0.50 PerfScore 1.38 -G_M1349_IG08: + test rdi, rdi + jne SHORT G_M1349_IG04 xor eax, eax - ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M1349_IG09: - add rsp, 16 + ;; size=7 bbWeight=1 PerfScore 1.50 +G_M1349_IG03: pop rbx pop r15 pop rbp ret - ;; size=9 bbWeight=0.50 PerfScore 1.38 -G_M1349_IG10: - lea rdi, [rbp-0x18] - mov rdx, r15 - mov rsi, 0xD1FFAB1E ; System.Nullable`1[int] - call CORINFO_HELP_UNBOX_NULLABLE - jmp SHORT G_M1349_IG06 - ;; size=24 bbWeight=0 PerfScore 0.00 -G_M1349_IG11: + ;; size=5 bbWeight=1 PerfScore 2.50 +G_M1349_IG04: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_NeedNonGenericType():System.String call [rax]System.SR:get_Argument_NeedNonGenericType():System.String mov r15, rax mov edi, 0x154F mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=83 bbWeight=0 PerfScore 0.00 -; Total bytes of code 283, prolog size 13, PerfScore 18.62, instruction count 69, allocated bytes for code 283 (MethodHash=4812faba) for method System.Runtime.InteropServices.Marshal:PtrToStructure[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts) +; Total bytes of code 104, prolog size 9, PerfScore 7.50, instruction count 28, allocated bytes for code 104 (MethodHash=4812faba) for method System.Runtime.InteropServices.Marshal:PtrToStructure[System.Nullable`1[int]](long):System.Nullable`1[int] (FullOpts) ; ============================================================ ```
-151 (-47.34 % of base) - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] ```diff ; Assembly listing for method System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data -; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; -; V00 RetBuf [V00,T00] ( 6, 4 ) byref -> rbx single-def -; V01 arg0 [V01,T01] ( 4, 3.50) long -> r15 single-def -; V02 loc0 [V02,T03] ( 5, 2.25) ref -> r14 class-hnd single-def +; V00 RetBuf [V00,T00] ( 4, 4 ) byref -> rbx single-def +; V01 arg0 [V01,T01] ( 3, 3 ) long -> rsi single-def +;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "dup spill" -;* V05 tmp2 [V05 ] ( 0, 0 ) ref -> zero-ref single-def -; V06 tmp3 [V06,T04] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V07 tmp4 [V07,T05] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V08 tmp5 [V08,T06] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V09 cse0 [V09,T02] ( 6, 2.50) long -> rdi multi-def "CSE #01: aggressive" +;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "dup spill" +;* V05 tmp2 [V05 ] ( 0, 0 ) ref -> zero-ref +; V06 tmp3 [V06,T02] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V07 tmp4 [V07,T03] ( 2, 0 ) ref -> r15 single-def "argument with side effect" +; V08 tmp5 [V08,T04] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M9637_IG01: push rbp push r15 - push r14 push rbx - push rax - lea rbp, [rsp+0x20] + lea rbp, [rsp+0x10] mov rbx, rdi - mov r15, rsi - ;; size=18 bbWeight=1 PerfScore 6.00 + ;; size=12 bbWeight=1 PerfScore 3.75 G_M9637_IG02: - test r15, r15 - je G_M9637_IG07 - ;; size=9 bbWeight=1 PerfScore 1.25 -G_M9637_IG03: - mov rdi, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single]' - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsGenericType():ubyte:this - call [rax]System.RuntimeType:get_IsGenericType():ubyte:this - test eax, eax - jne G_M9637_IG11 - mov rdi, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single]' - mov esi, 1 - mov edx, 1 - mov rax, 0xD1FFAB1E ; code for System.Activator:CreateInstance(System.Type,ubyte,ubyte):System.Object - call [rax]System.Activator:CreateInstance(System.Type,ubyte,ubyte):System.Object - mov r14, rax - mov rdi, r15 - mov rsi, r14 - mov edx, 1 - mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:PtrToStructureHelper(long,System.Object,ubyte) - call [rax]System.Runtime.InteropServices.Marshal:PtrToStructureHelper(long,System.Object,ubyte) - mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - cmp qword ptr [r14], rdi - je SHORT G_M9637_IG05 - ;; size=103 bbWeight=0.50 PerfScore 8.62 -G_M9637_IG04: - mov rsi, r14 - mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX - call [rax]CORINFO_HELP_UNBOX - ;; size=15 bbWeight=0.25 PerfScore 0.88 -G_M9637_IG05: - vmovups ymm0, ymmword ptr [r14+0x08] - vmovups ymmword ptr [rbx], ymm0 - mov rax, rbx - ;; size=13 bbWeight=0.50 PerfScore 3.62 -G_M9637_IG06: - vzeroupper - add rsp, 8 - pop rbx - pop r14 - pop r15 - pop rbp - ret - ;; size=14 bbWeight=0.50 PerfScore 2.12 -G_M9637_IG07: + test rsi, rsi + jne SHORT G_M9637_IG06 mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] cmp qword ptr [0x0000], rdi - je SHORT G_M9637_IG09 - ;; size=20 bbWeight=0.50 PerfScore 2.12 -G_M9637_IG08: + je SHORT G_M9637_IG04 + ;; size=25 bbWeight=1 PerfScore 5.50 +G_M9637_IG03: + mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] xor rsi, rsi mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX call [rax]CORINFO_HELP_UNBOX - ;; size=14 bbWeight=0.25 PerfScore 0.88 -G_M9637_IG09: + ;; size=24 bbWeight=0.25 PerfScore 0.94 +G_M9637_IG04: vmovups ymm0, ymmword ptr [0x0000] vmovups ymmword ptr [rbx], ymm0 mov rax, rbx - ;; size=16 bbWeight=0.50 PerfScore 3.62 -G_M9637_IG10: + ;; size=16 bbWeight=1 PerfScore 7.25 +G_M9637_IG05: vzeroupper - add rsp, 8 pop rbx - pop r14 pop r15 pop rbp ret - ;; size=14 bbWeight=0.50 PerfScore 2.12 -G_M9637_IG11: + ;; size=8 bbWeight=1 PerfScore 3.50 +G_M9637_IG06: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_NeedNonGenericType():System.String call [rax]System.SR:get_Argument_NeedNonGenericType():System.String mov r15, rax mov edi, 0x154F mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=83 bbWeight=0 PerfScore 0.00 -; Total bytes of code 319, prolog size 12, PerfScore 31.25, instruction count 75, allocated bytes for code 319 (MethodHash=f44cda5a) for method System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts) +; Total bytes of code 168, prolog size 9, PerfScore 20.94, instruction count 39, allocated bytes for code 168 (MethodHash=f44cda5a) for method System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](long):System.Numerics.Vector`1[float] (FullOpts) ; ============================================================ ```
-117 (-41.64 % of base) - System.Runtime.InteropServices.Marshal:PtrToStructure[double](long):double ```diff ; Assembly listing for method System.Runtime.InteropServices.Marshal:PtrToStructure[double](long):double (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 4, 3.50) long -> rbx single-def ; V01 loc0 [V01,T02] ( 5, 2.25) ref -> r15 class-hnd single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "dup spill" -;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref single-def -; V05 tmp3 [V05,T03] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V06 tmp4 [V06,T04] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V07 tmp5 [V07,T05] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V08 cse0 [V08,T01] ( 6, 2.50) long -> rdi multi-def "CSE #01: aggressive" +;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "dup spill" +;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref +; V05 cse0 [V05,T01] ( 6, 2.50) long -> rdi multi-def "CSE #01: aggressive" ; ; Lcl frame size = 0 G_M15429_IG01: push rbp push r15 push rbx lea rbp, [rsp+0x10] mov rbx, rdi ;; size=12 bbWeight=1 PerfScore 3.75 G_M15429_IG02: test rbx, rbx - je G_M15429_IG07 - ;; size=9 bbWeight=1 PerfScore 1.25 + je SHORT G_M15429_IG07 + ;; size=5 bbWeight=1 PerfScore 1.25 G_M15429_IG03: - mov rdi, 0xD1FFAB1E ; 'System.Double' - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsGenericType():ubyte:this - call [rax]System.RuntimeType:get_IsGenericType():ubyte:this - test eax, eax - jne G_M15429_IG11 mov rdi, 0xD1FFAB1E ; 'System.Double' mov esi, 1 mov edx, 1 mov rax, 0xD1FFAB1E ; code for System.Activator:CreateInstance(System.Type,ubyte,ubyte):System.Object call [rax]System.Activator:CreateInstance(System.Type,ubyte,ubyte):System.Object mov r15, rax mov rdi, rbx mov rsi, r15 mov edx, 1 mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:PtrToStructureHelper(long,System.Object,ubyte) call [rax]System.Runtime.InteropServices.Marshal:PtrToStructureHelper(long,System.Object,ubyte) mov rdi, 0xD1FFAB1E ; System.Double cmp qword ptr [r15], rdi je SHORT G_M15429_IG05 - ;; size=103 bbWeight=0.50 PerfScore 8.62 + ;; size=73 bbWeight=0.50 PerfScore 6.25 G_M15429_IG04: mov rsi, r15 mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX call [rax]CORINFO_HELP_UNBOX ;; size=15 bbWeight=0.25 PerfScore 0.88 G_M15429_IG05: vmovsd xmm0, qword ptr [r15+0x08] ;; size=6 bbWeight=0.50 PerfScore 2.00 G_M15429_IG06: pop rbx pop r15 pop rbp ret ;; size=5 bbWeight=0.50 PerfScore 1.25 G_M15429_IG07: mov rdi, 0xD1FFAB1E ; System.Double cmp qword ptr [0x0000], rdi je SHORT G_M15429_IG09 ;; size=20 bbWeight=0.50 PerfScore 2.12 G_M15429_IG08: xor rsi, rsi mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX call [rax]CORINFO_HELP_UNBOX ;; size=14 bbWeight=0.25 PerfScore 0.88 G_M15429_IG09: vmovsd xmm0, qword ptr [0x0000] ;; size=9 bbWeight=0.50 PerfScore 2.00 G_M15429_IG10: pop rbx pop r15 pop rbp ret ;; size=5 bbWeight=0.50 PerfScore 1.25 -G_M15429_IG11: - mov rdi, 0xD1FFAB1E ; System.ArgumentException - call CORINFO_HELP_NEWSFAST - mov rbx, rax - mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_NeedNonGenericType():System.String - call [rax]System.SR:get_Argument_NeedNonGenericType():System.String - mov r15, rax - mov edi, 0x154F - mov rsi, 0xD1FFAB1E - call CORINFO_HELP_STRCNS - mov rdx, rax - mov rsi, r15 - mov rdi, rbx - mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this - call [rax]System.ArgumentException:.ctor(System.String,System.String):this - mov rdi, rbx - call CORINFO_HELP_THROW - int3 - ;; size=83 bbWeight=0 PerfScore 0.00 -; Total bytes of code 281, prolog size 9, PerfScore 24.00, instruction count 62, allocated bytes for code 281 (MethodHash=fdc7c3ba) for method System.Runtime.InteropServices.Marshal:PtrToStructure[double](long):double (FullOpts) +; Total bytes of code 164, prolog size 9, PerfScore 21.62, instruction count 40, allocated bytes for code 164 (MethodHash=fdc7c3ba) for method System.Runtime.InteropServices.Marshal:PtrToStructure[double](long):double (FullOpts) ; ============================================================ ```
-117 (-42.24 % of base) - System.Runtime.InteropServices.Marshal:PtrToStructure[int](long):int ```diff ; Assembly listing for method System.Runtime.InteropServices.Marshal:PtrToStructure[int](long):int (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 4, 3.50) long -> rbx single-def ; V01 loc0 [V01,T02] ( 5, 2.25) ref -> r15 class-hnd single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "dup spill" -;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref single-def -; V05 tmp3 [V05,T03] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V06 tmp4 [V06,T04] ( 2, 0 ) ref -> r15 single-def "argument with side effect" -; V07 tmp5 [V07,T05] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V08 cse0 [V08,T01] ( 6, 2.50) long -> rdi multi-def "CSE #01: aggressive" +;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "dup spill" +;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref +; V05 cse0 [V05,T01] ( 6, 2.50) long -> rdi multi-def "CSE #01: aggressive" ; ; Lcl frame size = 0 G_M10469_IG01: push rbp push r15 push rbx lea rbp, [rsp+0x10] mov rbx, rdi ;; size=12 bbWeight=1 PerfScore 3.75 G_M10469_IG02: test rbx, rbx - je G_M10469_IG07 - ;; size=9 bbWeight=1 PerfScore 1.25 + je SHORT G_M10469_IG07 + ;; size=5 bbWeight=1 PerfScore 1.25 G_M10469_IG03: - mov rdi, 0xD1FFAB1E ; 'System.Int32' - mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsGenericType():ubyte:this - call [rax]System.RuntimeType:get_IsGenericType():ubyte:this - test eax, eax - jne G_M10469_IG11 mov rdi, 0xD1FFAB1E ; 'System.Int32' mov esi, 1 mov edx, 1 mov rax, 0xD1FFAB1E ; code for System.Activator:CreateInstance(System.Type,ubyte,ubyte):System.Object call [rax]System.Activator:CreateInstance(System.Type,ubyte,ubyte):System.Object mov r15, rax mov rdi, rbx mov rsi, r15 mov edx, 1 mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:PtrToStructureHelper(long,System.Object,ubyte) call [rax]System.Runtime.InteropServices.Marshal:PtrToStructureHelper(long,System.Object,ubyte) mov rdi, 0xD1FFAB1E ; System.Int32 cmp qword ptr [r15], rdi je SHORT G_M10469_IG05 - ;; size=103 bbWeight=0.50 PerfScore 8.62 + ;; size=73 bbWeight=0.50 PerfScore 6.25 G_M10469_IG04: mov rsi, r15 mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX call [rax]CORINFO_HELP_UNBOX ;; size=15 bbWeight=0.25 PerfScore 0.88 G_M10469_IG05: mov eax, dword ptr [r15+0x08] ;; size=4 bbWeight=0.50 PerfScore 1.00 G_M10469_IG06: pop rbx pop r15 pop rbp ret ;; size=5 bbWeight=0.50 PerfScore 1.25 G_M10469_IG07: mov rdi, 0xD1FFAB1E ; System.Int32 cmp qword ptr [0x0000], rdi je SHORT G_M10469_IG09 ;; size=20 bbWeight=0.50 PerfScore 2.12 G_M10469_IG08: xor rsi, rsi mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX call [rax]CORINFO_HELP_UNBOX ;; size=14 bbWeight=0.25 PerfScore 0.88 G_M10469_IG09: mov eax, dword ptr [0x0000] ;; size=7 bbWeight=0.50 PerfScore 1.00 G_M10469_IG10: pop rbx pop r15 pop rbp ret ;; size=5 bbWeight=0.50 PerfScore 1.25 -G_M10469_IG11: - mov rdi, 0xD1FFAB1E ; System.ArgumentException - call CORINFO_HELP_NEWSFAST - mov rbx, rax - mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_NeedNonGenericType():System.String - call [rax]System.SR:get_Argument_NeedNonGenericType():System.String - mov r15, rax - mov edi, 0x154F - mov rsi, 0xD1FFAB1E - call CORINFO_HELP_STRCNS - mov rdx, rax - mov rsi, r15 - mov rdi, rbx - mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this - call [rax]System.ArgumentException:.ctor(System.String,System.String):this - mov rdi, rbx - call CORINFO_HELP_THROW - int3 - ;; size=83 bbWeight=0 PerfScore 0.00 -; Total bytes of code 277, prolog size 9, PerfScore 22.00, instruction count 62, allocated bytes for code 277 (MethodHash=2e02d71a) for method System.Runtime.InteropServices.Marshal:PtrToStructure[int](long):int (FullOpts) +; Total bytes of code 160, prolog size 9, PerfScore 19.62, instruction count 40, allocated bytes for code 160 (MethodHash=2e02d71a) for method System.Runtime.InteropServices.Marshal:PtrToStructure[int](long):int (FullOpts) ; ============================================================ ```

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

MihuBot commented 1 week ago

@hez2010