Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JitDiff X64] [EgorBo] Mark some structs as byreflike #525

Open
MihuBot opened this issue Jul 14, 2024 · 2 comments
Open

[JitDiff X64] [EgorBo] Mark some structs as byreflike #525

MihuBot opened this issue Jul 14, 2024 · 2 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jul 14, 2024

Job completed in 14 minutes.
dotnet/runtime#104870

Diffs

Found 263 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39113879
Total bytes of diff: 39113648
Total bytes of delta: -231 (-0.00 % of base)
Total relative delta: -3.87
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
        -216 : System.Private.CoreLib.dasm (-0.00 % of base)
         -15 : System.Text.RegularExpressions.dasm (-0.00 % of base)

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

Top method improvements (bytes):
         -41 (-77.36 % of base) : System.Private.CoreLib.dasm - System.Array+SorterGenericArray:.ctor(System.Array,System.Array,System.Collections.IComparer):this (FullOpts)
         -41 (-77.36 % of base) : System.Private.CoreLib.dasm - System.Array+SorterObjectArray:.ctor(System.Object[],System.Object[],System.Collections.IComparer):this (FullOpts)
         -10 (-35.71 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue:.ctor(System.Object):this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_2[System.__Canon]:<GetPropertyGetter>b__2(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_3[System.__Canon]:<GetPropertyGetter>b__3(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_4[System.__Canon]:<GetPropertyGetter>b__4(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.48 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_5[System.__Canon]:<GetPropertyGetter>b__5(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.48 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_6[System.__Canon]:<GetPropertyGetter>b__6(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.48 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_7[System.__Canon]:<GetPropertyGetter>b__7(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_8[System.__Canon]:<GetPropertyGetter>b__8(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_9[System.__Canon]:<GetPropertyGetter>b__9(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.58 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_0(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.58 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_1(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.48 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_12(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.58 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_2(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.55 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_3(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.55 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_4(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.55 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_5(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.62 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_6(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.62 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_7(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.14 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_14[System.__Canon]:<GetPropertyGetter>b__14(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[double]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[double]):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[int]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[int]):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[long]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[long]):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[short]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[short]):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[ubyte]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[ubyte]):this (FullOpts)

Top method improvements (percentages):
         -41 (-77.36 % of base) : System.Private.CoreLib.dasm - System.Array+SorterGenericArray:.ctor(System.Array,System.Array,System.Collections.IComparer):this (FullOpts)
         -41 (-77.36 % of base) : System.Private.CoreLib.dasm - System.Array+SorterObjectArray:.ctor(System.Object[],System.Object[],System.Collections.IComparer):this (FullOpts)
         -10 (-35.71 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue:.ctor(System.Object):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[double]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[double]):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[int]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[int]):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[long]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[long]):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[short]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[short]):this (FullOpts)
          -3 (-21.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+CurrentState[ubyte]:.ctor(System.Text.RegularExpressions.Symbolic.SymbolicRegexMatcher`1+NfaMatchingState[ubyte]):this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_2[System.__Canon]:<GetPropertyGetter>b__2(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_3[System.__Canon]:<GetPropertyGetter>b__3(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_4[System.__Canon]:<GetPropertyGetter>b__4(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_8[System.__Canon]:<GetPropertyGetter>b__8(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.52 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_9[System.__Canon]:<GetPropertyGetter>b__9(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.48 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_5[System.__Canon]:<GetPropertyGetter>b__5(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.48 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_6[System.__Canon]:<GetPropertyGetter>b__6(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -8 (-5.48 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_7[System.__Canon]:<GetPropertyGetter>b__7(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.62 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_6(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.62 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_7(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.58 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_0(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.58 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_1(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.58 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_2(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.55 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_3(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.55 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_4(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.55 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_5(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.48 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_12(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
          -6 (-4.14 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_14[System.__Canon]:<GetPropertyGetter>b__14(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)

26 total methods with Code Size differences (26 improved, 0 regressed), 230452 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jul 14, 2024

Top method improvements

-41 (-77.36 % of base) - System.Array+SorterGenericArray:.ctor(System.Array,System.Array,System.Collections.IComparer):this
 ; Assembly listing for method System.Array+SorterGenericArray:.ctor(System.Array,System.Array,System.Collections.IComparer):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T00] (  5,  5   )   byref  ->  rbx         this single-def
+;  V00 this         [V00,T00] (  5,  5   )   byref  ->  rdi         this single-def
 ;  V01 arg1         [V01,T01] (  3,  3   )     ref  ->  rsi         class-hnd single-def <System.Array>
-;  V02 arg2         [V02,T02] (  3,  3   )     ref  ->  r15         class-hnd single-def <System.Array>
-;  V03 arg3         [V03,T03] (  3,  3   )     ref  ->  r14         class-hnd single-def <System.Collections.IComparer>
+;  V02 arg2         [V02,T02] (  3,  3   )     ref  ->  rdx         class-hnd single-def <System.Array>
+;  V03 arg3         [V03,T03] (  3,  3   )     ref  ->  rcx         class-hnd single-def <System.Collections.IComparer>
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M26553_IG01:
-       push     r15
-       push     r14
-       push     rbx
-       mov      rbx, rdi
-       mov      r15, rdx
-       mov      r14, rcx
-						;; size=14 bbWeight=1 PerfScore 3.75
+						;; size=0 bbWeight=1 PerfScore 0.00
 G_M26553_IG02:
-       mov      rdi, rbx
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       lea      rdi, bword ptr [rbx+0x08]
-       mov      rsi, r15
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       lea      rdi, bword ptr [rbx+0x10]
-       mov      rsi, r14
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       nop      
-						;; size=33 bbWeight=1 PerfScore 5.00
+       mov      gword ptr [rdi], rsi
+       mov      gword ptr [rdi+0x08], rdx
+       mov      gword ptr [rdi+0x10], rcx
+						;; size=11 bbWeight=1 PerfScore 3.00
 G_M26553_IG03:
-       pop      rbx
-       pop      r14
-       pop      r15
        ret      
-						;; size=6 bbWeight=1 PerfScore 2.50
+						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 53, prolog size 5, PerfScore 11.25, instruction count 19, allocated bytes for code 53 (MethodHash=6b259846) for method System.Array+SorterGenericArray:.ctor(System.Array,System.Array,System.Collections.IComparer):this (FullOpts)
+; Total bytes of code 12, prolog size 0, PerfScore 4.00, instruction count 4, allocated bytes for code 12 (MethodHash=6b259846) for method System.Array+SorterGenericArray:.ctor(System.Array,System.Array,System.Collections.IComparer):this (FullOpts)
-41 (-77.36 % of base) - System.Array+SorterObjectArray:.ctor(System.Object[],System.Object[],System.Collections.IComparer):this
 ; Assembly listing for method System.Array+SorterObjectArray:.ctor(System.Object[],System.Object[],System.Collections.IComparer):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T00] (  5,  5   )   byref  ->  rbx         this single-def
+;  V00 this         [V00,T00] (  5,  5   )   byref  ->  rdi         this single-def
 ;  V01 arg1         [V01,T01] (  3,  3   )     ref  ->  rsi         class-hnd single-def <System.Object[]>
-;  V02 arg2         [V02,T02] (  3,  3   )     ref  ->  r15         class-hnd single-def <System.Object[]>
-;  V03 arg3         [V03,T03] (  3,  3   )     ref  ->  r14         class-hnd single-def <System.Collections.IComparer>
+;  V02 arg2         [V02,T02] (  3,  3   )     ref  ->  rdx         class-hnd single-def <System.Object[]>
+;  V03 arg3         [V03,T03] (  3,  3   )     ref  ->  rcx         class-hnd single-def <System.Collections.IComparer>
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M55325_IG01:
-       push     r15
-       push     r14
-       push     rbx
-       mov      rbx, rdi
-       mov      r15, rdx
-       mov      r14, rcx
-						;; size=14 bbWeight=1 PerfScore 3.75
+						;; size=0 bbWeight=1 PerfScore 0.00
 G_M55325_IG02:
-       mov      rdi, rbx
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       lea      rdi, bword ptr [rbx+0x08]
-       mov      rsi, r15
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       lea      rdi, bword ptr [rbx+0x10]
-       mov      rsi, r14
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       nop      
-						;; size=33 bbWeight=1 PerfScore 5.00
+       mov      gword ptr [rdi], rsi
+       mov      gword ptr [rdi+0x08], rdx
+       mov      gword ptr [rdi+0x10], rcx
+						;; size=11 bbWeight=1 PerfScore 3.00
 G_M55325_IG03:
-       pop      rbx
-       pop      r14
-       pop      r15
        ret      
-						;; size=6 bbWeight=1 PerfScore 2.50
+						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 53, prolog size 5, PerfScore 11.25, instruction count 19, allocated bytes for code 53 (MethodHash=115e27e2) for method System.Array+SorterObjectArray:.ctor(System.Object[],System.Object[],System.Collections.IComparer):this (FullOpts)
+; Total bytes of code 12, prolog size 0, PerfScore 4.00, instruction count 4, allocated bytes for code 12 (MethodHash=115e27e2) for method System.Array+SorterObjectArray:.ctor(System.Object[],System.Object[],System.Collections.IComparer):this (FullOpts)
-10 (-35.71 % of base) - System.Diagnostics.Tracing.PropertyValue:.ctor(System.Object):this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue:.ctor(System.Object):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T00] (  5,  5   )   byref  ->  rbx         this single-def
+;  V00 this         [V00,T00] (  5,  5   )   byref  ->  rdi         this single-def
 ;  V01 arg1         [V01,T01] (  3,  3   )     ref  ->  rsi         class-hnd single-def <System.Object>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M33264_IG01:
-       push     rbx
-       mov      rbx, rdi
-						;; size=4 bbWeight=1 PerfScore 1.25
+						;; size=0 bbWeight=1 PerfScore 0.00
 G_M33264_IG02:
-       mov      rdi, rbx
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rdi], rsi
        vxorps   xmm0, xmm0, xmm0
-       vmovdqu  xmmword ptr [rbx+0x10], xmm0
+       vmovdqu  xmmword ptr [rdi+0x10], xmm0
        xor      eax, eax
-       mov      dword ptr [rbx+0x08], eax
-						;; size=22 bbWeight=1 PerfScore 4.83
+       mov      dword ptr [rdi+0x08], eax
+						;; size=17 bbWeight=1 PerfScore 4.58
 G_M33264_IG03:
-       pop      rbx
        ret      
-						;; size=2 bbWeight=1 PerfScore 1.50
+						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 28, prolog size 1, PerfScore 7.58, instruction count 10, allocated bytes for code 28 (MethodHash=421d7e0f) for method System.Diagnostics.Tracing.PropertyValue:.ctor(System.Object):this (FullOpts)
+; Total bytes of code 18, prolog size 0, PerfScore 5.58, instruction count 6, allocated bytes for code 18 (MethodHash=421d7e0f) for method System.Diagnostics.Tracing.PropertyValue:.ctor(System.Object):this (FullOpts)
-8 (-5.52 % of base) - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_2[System.__Canon]:b__2(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_2[System.__Canon]:<GetPropertyGetter>b__2(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  4,  4   )     ref  ->  r15         this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_2[System.__Canon]>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T10] (  1,  1   )  struct (32) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Diagnostics.Tracing.PropertyValue>
 ;# 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 "impAppendStmt" <System.Func`2[System.__Canon,ubyte]>
 ;  V05 tmp2         [V05,T06] (  2,  4   )  struct (32) [rbp-0x40]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V07 tmp4         [V07,T07] (  2,  4   )   ubyte  ->  rdx         "Inlining Arg"
+;  V07 tmp4         [V07,T07] (  2,  4   )   ubyte  ->  rax         "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V09 tmp6         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def "V05.[000..008)"
 ;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "V05.[008..012)"
 ;* V11 tmp8         [V11    ] (  0,  0   )   ubyte  ->  zero-ref    "V05.[016..017)"
 ;* V12 tmp9         [V12    ] (  0,  0   )   ubyte  ->  zero-ref    "V06.[000..001)"
 ;* V13 tmp10        [V13    ] (  0,  0   )   ubyte  ->  zero-ref    "V08.[000..001)"
 ;  V14 tmp11        [V14,T05] (  2,  4   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 tmp12        [V15,T03] (  3,  6   )     ref  ->  r14         single-def "argument with side effect"
 ;  V16 rat0         [V16,T08] (  2,  3   )    long  ->  rdi         "Spilling to split statement for tree"
 ;  V17 rat1         [V17,T04] (  3,  4.50)     ref  ->  rsi         "Spilling to split statement for tree"
 ;  V18 rat2         [V18,T01] (  5,  7.50)     ref  ->  rax         "replacement local"
 ;  V19 rat3         [V19,T09] (  3,  2.50)    long  ->  rdi         "CSE for expectedClsNode"
 ;
 ; Lcl frame size = 40
 
 G_M22027_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x40]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rdi
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=35 bbWeight=1 PerfScore 8.58
 G_M22027_IG02:
        mov      r14, gword ptr [r15+0x08]
        mov      rdi, qword ptr [r15]
        mov      rdi, qword ptr [rdi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M22027_IG05
 						;; size=29 bbWeight=1 PerfScore 12.50
 G_M22027_IG03:
        cmp      qword ptr [rax], rdi
        je       SHORT G_M22027_IG05
 						;; size=5 bbWeight=0.50 PerfScore 2.00
 G_M22027_IG04:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTANY
        call     [rax]CORINFO_HELP_CHKCASTANY
 						;; size=12 bbWeight=0.25 PerfScore 0.81
 G_M22027_IG05:
        mov      rsi, rax
        mov      rdi, gword ptr [r14+0x08]
        call     [r14+0x18]System.Func`2[System.__Canon,ubyte]:Invoke(System.__Canon):ubyte:this
-       mov      edx, eax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rbp-0x40]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=20 bbWeight=1 PerfScore 6.58
+G_M22027_IG06:
+       vmovdqu  ymm0, ymmword ptr [rbp-0x40]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=9 bbWeight=1 PerfScore 6.00
+G_M22027_IG07:
        mov      dword ptr [rbx+0x08], 1
-       mov      byte  ptr [rbx+0x10], dl
+       mov      byte  ptr [rbx+0x10], al
        mov      rax, rbx
-						;; size=53 bbWeight=1 PerfScore 13.83
-G_M22027_IG06:
+						;; size=13 bbWeight=1 PerfScore 2.25
+G_M22027_IG08:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=14 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 145, prolog size 29, PerfScore 40.98, instruction count 45, allocated bytes for code 145 (MethodHash=1b2ba9f4) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_2[System.__Canon]:<GetPropertyGetter>b__2(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 137, prolog size 29, PerfScore 42.98, instruction count 41, allocated bytes for code 137 (MethodHash=1b2ba9f4) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_2[System.__Canon]:<GetPropertyGetter>b__2(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
-8 (-5.52 % of base) - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_3[System.__Canon]:b__3(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_3[System.__Canon]:<GetPropertyGetter>b__3(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  4,  4   )     ref  ->  r15         this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_3[System.__Canon]>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T10] (  1,  1   )  struct (32) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Diagnostics.Tracing.PropertyValue>
 ;# 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 "impAppendStmt" <System.Func`2[System.__Canon,ubyte]>
 ;  V05 tmp2         [V05,T06] (  2,  4   )  struct (32) [rbp-0x40]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V07 tmp4         [V07,T07] (  2,  4   )   ubyte  ->  rdx         "Inlining Arg"
+;  V07 tmp4         [V07,T07] (  2,  4   )   ubyte  ->  rax         "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V09 tmp6         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def "V05.[000..008)"
 ;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "V05.[008..012)"
 ;* V11 tmp8         [V11    ] (  0,  0   )   ubyte  ->  zero-ref    "V05.[016..017)"
 ;* V12 tmp9         [V12    ] (  0,  0   )   ubyte  ->  zero-ref    "V06.[000..001)"
 ;* V13 tmp10        [V13    ] (  0,  0   )   ubyte  ->  zero-ref    "V08.[000..001)"
 ;  V14 tmp11        [V14,T05] (  2,  4   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 tmp12        [V15,T03] (  3,  6   )     ref  ->  r14         single-def "argument with side effect"
 ;  V16 rat0         [V16,T08] (  2,  3   )    long  ->  rdi         "Spilling to split statement for tree"
 ;  V17 rat1         [V17,T04] (  3,  4.50)     ref  ->  rsi         "Spilling to split statement for tree"
 ;  V18 rat2         [V18,T01] (  5,  7.50)     ref  ->  rax         "replacement local"
 ;  V19 rat3         [V19,T09] (  3,  2.50)    long  ->  rdi         "CSE for expectedClsNode"
 ;
 ; Lcl frame size = 40
 
 G_M55051_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x40]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rdi
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=35 bbWeight=1 PerfScore 8.58
 G_M55051_IG02:
        mov      r14, gword ptr [r15+0x08]
        mov      rdi, qword ptr [r15]
        mov      rdi, qword ptr [rdi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M55051_IG05
 						;; size=29 bbWeight=1 PerfScore 12.50
 G_M55051_IG03:
        cmp      qword ptr [rax], rdi
        je       SHORT G_M55051_IG05
 						;; size=5 bbWeight=0.50 PerfScore 2.00
 G_M55051_IG04:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTANY
        call     [rax]CORINFO_HELP_CHKCASTANY
 						;; size=12 bbWeight=0.25 PerfScore 0.81
 G_M55051_IG05:
        mov      rsi, rax
        mov      rdi, gword ptr [r14+0x08]
        call     [r14+0x18]System.Func`2[System.__Canon,ubyte]:Invoke(System.__Canon):ubyte:this
-       mov      edx, eax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rbp-0x40]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=20 bbWeight=1 PerfScore 6.58
+G_M55051_IG06:
+       vmovdqu  ymm0, ymmword ptr [rbp-0x40]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=9 bbWeight=1 PerfScore 6.00
+G_M55051_IG07:
        mov      dword ptr [rbx+0x08], 1
-       mov      byte  ptr [rbx+0x10], dl
+       mov      byte  ptr [rbx+0x10], al
        mov      rax, rbx
-						;; size=53 bbWeight=1 PerfScore 13.83
-G_M55051_IG06:
+						;; size=13 bbWeight=1 PerfScore 2.25
+G_M55051_IG08:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=14 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 145, prolog size 29, PerfScore 40.98, instruction count 45, allocated bytes for code 145 (MethodHash=d5e128f4) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_3[System.__Canon]:<GetPropertyGetter>b__3(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 137, prolog size 29, PerfScore 42.98, instruction count 41, allocated bytes for code 137 (MethodHash=d5e128f4) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_3[System.__Canon]:<GetPropertyGetter>b__3(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
-8 (-5.52 % of base) - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_4[System.__Canon]:b__4(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_4[System.__Canon]:<GetPropertyGetter>b__4(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  4,  4   )     ref  ->  r15         this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_4[System.__Canon]>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T10] (  1,  1   )  struct (32) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Diagnostics.Tracing.PropertyValue>
 ;# 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 "impAppendStmt" <System.Func`2[System.__Canon,byte]>
 ;  V05 tmp2         [V05,T06] (  2,  4   )  struct (32) [rbp-0x40]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V07 tmp4         [V07,T07] (  2,  4   )    byte  ->  rdx         "Inlining Arg"
+;  V07 tmp4         [V07,T07] (  2,  4   )    byte  ->  rax         "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V09 tmp6         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def "V05.[000..008)"
 ;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "V05.[008..012)"
 ;* V11 tmp8         [V11    ] (  0,  0   )    byte  ->  zero-ref    "V05.[016..017)"
 ;* V12 tmp9         [V12    ] (  0,  0   )    byte  ->  zero-ref    "V06.[000..001)"
 ;* V13 tmp10        [V13    ] (  0,  0   )    byte  ->  zero-ref    "V08.[000..001)"
 ;  V14 tmp11        [V14,T05] (  2,  4   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 tmp12        [V15,T03] (  3,  6   )     ref  ->  r14         single-def "argument with side effect"
 ;  V16 rat0         [V16,T08] (  2,  3   )    long  ->  rdi         "Spilling to split statement for tree"
 ;  V17 rat1         [V17,T04] (  3,  4.50)     ref  ->  rsi         "Spilling to split statement for tree"
 ;  V18 rat2         [V18,T01] (  5,  7.50)     ref  ->  rax         "replacement local"
 ;  V19 rat3         [V19,T09] (  3,  2.50)    long  ->  rdi         "CSE for expectedClsNode"
 ;
 ; Lcl frame size = 40
 
 G_M44171_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x40]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rdi
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=35 bbWeight=1 PerfScore 8.58
 G_M44171_IG02:
        mov      r14, gword ptr [r15+0x08]
        mov      rdi, qword ptr [r15]
        mov      rdi, qword ptr [rdi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M44171_IG05
 						;; size=29 bbWeight=1 PerfScore 12.50
 G_M44171_IG03:
        cmp      qword ptr [rax], rdi
        je       SHORT G_M44171_IG05
 						;; size=5 bbWeight=0.50 PerfScore 2.00
 G_M44171_IG04:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTANY
        call     [rax]CORINFO_HELP_CHKCASTANY
 						;; size=12 bbWeight=0.25 PerfScore 0.81
 G_M44171_IG05:
        mov      rsi, rax
        mov      rdi, gword ptr [r14+0x08]
        call     [r14+0x18]System.Func`2[System.__Canon,byte]:Invoke(System.__Canon):byte:this
-       mov      edx, eax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rbp-0x40]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=20 bbWeight=1 PerfScore 6.58
+G_M44171_IG06:
+       vmovdqu  ymm0, ymmword ptr [rbp-0x40]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=9 bbWeight=1 PerfScore 6.00
+G_M44171_IG07:
        mov      dword ptr [rbx+0x08], 1
-       mov      byte  ptr [rbx+0x10], dl
+       mov      byte  ptr [rbx+0x10], al
        mov      rax, rbx
-						;; size=53 bbWeight=1 PerfScore 13.83
-G_M44171_IG06:
+						;; size=13 bbWeight=1 PerfScore 2.25
+G_M44171_IG08:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=14 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 145, prolog size 29, PerfScore 40.98, instruction count 45, allocated bytes for code 145 (MethodHash=2fca5374) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_4[System.__Canon]:<GetPropertyGetter>b__4(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 137, prolog size 29, PerfScore 42.98, instruction count 41, allocated bytes for code 137 (MethodHash=2fca5374) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_4[System.__Canon]:<GetPropertyGetter>b__4(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
-8 (-5.48 % of base) - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_5[System.__Canon]:b__5(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_5[System.__Canon]:<GetPropertyGetter>b__5(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  4,  4   )     ref  ->  r15         this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_5[System.__Canon]>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T10] (  1,  1   )  struct (32) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Diagnostics.Tracing.PropertyValue>
 ;# 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 "impAppendStmt" <System.Func`2[System.__Canon,ushort]>
 ;  V05 tmp2         [V05,T06] (  2,  4   )  struct (32) [rbp-0x40]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V07 tmp4         [V07,T07] (  2,  4   )  ushort  ->  rdx         "Inlining Arg"
+;  V07 tmp4         [V07,T07] (  2,  4   )  ushort  ->  rax         "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V09 tmp6         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def "V05.[000..008)"
 ;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "V05.[008..012)"
 ;* V11 tmp8         [V11    ] (  0,  0   )  ushort  ->  zero-ref    "V05.[016..018)"
 ;* V12 tmp9         [V12    ] (  0,  0   )  ushort  ->  zero-ref    "V06.[000..002)"
 ;* V13 tmp10        [V13    ] (  0,  0   )  ushort  ->  zero-ref    "V08.[000..002)"
 ;  V14 tmp11        [V14,T05] (  2,  4   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 tmp12        [V15,T03] (  3,  6   )     ref  ->  r14         single-def "argument with side effect"
 ;  V16 rat0         [V16,T08] (  2,  3   )    long  ->  rdi         "Spilling to split statement for tree"
 ;  V17 rat1         [V17,T04] (  3,  4.50)     ref  ->  rsi         "Spilling to split statement for tree"
 ;  V18 rat2         [V18,T01] (  5,  7.50)     ref  ->  rax         "replacement local"
 ;  V19 rat3         [V19,T09] (  3,  2.50)    long  ->  rdi         "CSE for expectedClsNode"
 ;
 ; Lcl frame size = 40
 
 G_M43915_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x40]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rdi
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=35 bbWeight=1 PerfScore 8.58
 G_M43915_IG02:
        mov      r14, gword ptr [r15+0x08]
        mov      rdi, qword ptr [r15]
        mov      rdi, qword ptr [rdi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M43915_IG05
 						;; size=29 bbWeight=1 PerfScore 12.50
 G_M43915_IG03:
        cmp      qword ptr [rax], rdi
        je       SHORT G_M43915_IG05
 						;; size=5 bbWeight=0.50 PerfScore 2.00
 G_M43915_IG04:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTANY
        call     [rax]CORINFO_HELP_CHKCASTANY
 						;; size=12 bbWeight=0.25 PerfScore 0.81
 G_M43915_IG05:
        mov      rsi, rax
        mov      rdi, gword ptr [r14+0x08]
        call     [r14+0x18]System.Func`2[System.__Canon,ushort]:Invoke(System.__Canon):ushort:this
-       mov      edx, eax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rbp-0x40]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=20 bbWeight=1 PerfScore 6.58
+G_M43915_IG06:
+       vmovdqu  ymm0, ymmword ptr [rbp-0x40]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=9 bbWeight=1 PerfScore 6.00
+G_M43915_IG07:
        mov      dword ptr [rbx+0x08], 2
-       mov      word  ptr [rbx+0x10], dx
+       mov      word  ptr [rbx+0x10], ax
        mov      rax, rbx
-						;; size=54 bbWeight=1 PerfScore 13.83
-G_M43915_IG06:
+						;; size=14 bbWeight=1 PerfScore 2.25
+G_M43915_IG08:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=14 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 146, prolog size 29, PerfScore 40.98, instruction count 45, allocated bytes for code 146 (MethodHash=2b585474) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_5[System.__Canon]:<GetPropertyGetter>b__5(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 138, prolog size 29, PerfScore 42.98, instruction count 41, allocated bytes for code 138 (MethodHash=2b585474) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_5[System.__Canon]:<GetPropertyGetter>b__5(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
-8 (-5.48 % of base) - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_6[System.__Canon]:b__6(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_6[System.__Canon]:<GetPropertyGetter>b__6(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  4,  4   )     ref  ->  r15         this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_6[System.__Canon]>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T10] (  1,  1   )  struct (32) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Diagnostics.Tracing.PropertyValue>
 ;# 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 "impAppendStmt" <System.Func`2[System.__Canon,short]>
 ;  V05 tmp2         [V05,T06] (  2,  4   )  struct (32) [rbp-0x40]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V07 tmp4         [V07,T07] (  2,  4   )   short  ->  rdx         "Inlining Arg"
+;  V07 tmp4         [V07,T07] (  2,  4   )   short  ->  rax         "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V09 tmp6         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def "V05.[000..008)"
 ;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "V05.[008..012)"
 ;* V11 tmp8         [V11    ] (  0,  0   )   short  ->  zero-ref    "V05.[016..018)"
 ;* V12 tmp9         [V12    ] (  0,  0   )   short  ->  zero-ref    "V06.[000..002)"
 ;* V13 tmp10        [V13    ] (  0,  0   )   short  ->  zero-ref    "V08.[000..002)"
 ;  V14 tmp11        [V14,T05] (  2,  4   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 tmp12        [V15,T03] (  3,  6   )     ref  ->  r14         single-def "argument with side effect"
 ;  V16 rat0         [V16,T08] (  2,  3   )    long  ->  rdi         "Spilling to split statement for tree"
 ;  V17 rat1         [V17,T04] (  3,  4.50)     ref  ->  rsi         "Spilling to split statement for tree"
 ;  V18 rat2         [V18,T01] (  5,  7.50)     ref  ->  rax         "replacement local"
 ;  V19 rat3         [V19,T09] (  3,  2.50)    long  ->  rdi         "CSE for expectedClsNode"
 ;
 ; Lcl frame size = 40
 
 G_M14859_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x40]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rdi
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=35 bbWeight=1 PerfScore 8.58
 G_M14859_IG02:
        mov      r14, gword ptr [r15+0x08]
        mov      rdi, qword ptr [r15]
        mov      rdi, qword ptr [rdi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M14859_IG05
 						;; size=29 bbWeight=1 PerfScore 12.50
 G_M14859_IG03:
        cmp      qword ptr [rax], rdi
        je       SHORT G_M14859_IG05
 						;; size=5 bbWeight=0.50 PerfScore 2.00
 G_M14859_IG04:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTANY
        call     [rax]CORINFO_HELP_CHKCASTANY
 						;; size=12 bbWeight=0.25 PerfScore 0.81
 G_M14859_IG05:
        mov      rsi, rax
        mov      rdi, gword ptr [r14+0x08]
        call     [r14+0x18]System.Func`2[System.__Canon,short]:Invoke(System.__Canon):short:this
-       mov      edx, eax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rbp-0x40]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=20 bbWeight=1 PerfScore 6.58
+G_M14859_IG06:
+       vmovdqu  ymm0, ymmword ptr [rbp-0x40]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=9 bbWeight=1 PerfScore 6.00
+G_M14859_IG07:
        mov      dword ptr [rbx+0x08], 2
-       mov      word  ptr [rbx+0x10], dx
+       mov      word  ptr [rbx+0x10], ax
        mov      rax, rbx
-						;; size=54 bbWeight=1 PerfScore 13.83
-G_M14859_IG06:
+						;; size=14 bbWeight=1 PerfScore 2.25
+G_M14859_IG08:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=14 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 146, prolog size 29, PerfScore 40.98, instruction count 45, allocated bytes for code 146 (MethodHash=3962c5f4) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_6[System.__Canon]:<GetPropertyGetter>b__6(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 138, prolog size 29, PerfScore 42.98, instruction count 41, allocated bytes for code 138 (MethodHash=3962c5f4) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_6[System.__Canon]:<GetPropertyGetter>b__6(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
-8 (-5.48 % of base) - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_7[System.__Canon]:b__7(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_7[System.__Canon]:<GetPropertyGetter>b__7(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  4,  4   )     ref  ->  r15         this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_7[System.__Canon]>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T10] (  1,  1   )  struct (32) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Diagnostics.Tracing.PropertyValue>
 ;# 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 "impAppendStmt" <System.Func`2[System.__Canon,ushort]>
 ;  V05 tmp2         [V05,T06] (  2,  4   )  struct (32) [rbp-0x40]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V07 tmp4         [V07,T07] (  2,  4   )  ushort  ->  rdx         "Inlining Arg"
+;  V07 tmp4         [V07,T07] (  2,  4   )  ushort  ->  rax         "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V09 tmp6         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def "V05.[000..008)"
 ;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "V05.[008..012)"
 ;* V11 tmp8         [V11    ] (  0,  0   )  ushort  ->  zero-ref    "V05.[016..018)"
 ;* V12 tmp9         [V12    ] (  0,  0   )  ushort  ->  zero-ref    "V06.[000..002)"
 ;* V13 tmp10        [V13    ] (  0,  0   )  ushort  ->  zero-ref    "V08.[000..002)"
 ;  V14 tmp11        [V14,T05] (  2,  4   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 tmp12        [V15,T03] (  3,  6   )     ref  ->  r14         single-def "argument with side effect"
 ;  V16 rat0         [V16,T08] (  2,  3   )    long  ->  rdi         "Spilling to split statement for tree"
 ;  V17 rat1         [V17,T04] (  3,  4.50)     ref  ->  rsi         "Spilling to split statement for tree"
 ;  V18 rat2         [V18,T01] (  5,  7.50)     ref  ->  rax         "replacement local"
 ;  V19 rat3         [V19,T09] (  3,  2.50)    long  ->  rdi         "CSE for expectedClsNode"
 ;
 ; Lcl frame size = 40
 
 G_M47883_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x40]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rdi
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=35 bbWeight=1 PerfScore 8.58
 G_M47883_IG02:
        mov      r14, gword ptr [r15+0x08]
        mov      rdi, qword ptr [r15]
        mov      rdi, qword ptr [rdi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M47883_IG05
 						;; size=29 bbWeight=1 PerfScore 12.50
 G_M47883_IG03:
        cmp      qword ptr [rax], rdi
        je       SHORT G_M47883_IG05
 						;; size=5 bbWeight=0.50 PerfScore 2.00
 G_M47883_IG04:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTANY
        call     [rax]CORINFO_HELP_CHKCASTANY
 						;; size=12 bbWeight=0.25 PerfScore 0.81
 G_M47883_IG05:
        mov      rsi, rax
        mov      rdi, gword ptr [r14+0x08]
        call     [r14+0x18]System.Func`2[System.__Canon,ushort]:Invoke(System.__Canon):ushort:this
-       mov      edx, eax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rbp-0x40]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=20 bbWeight=1 PerfScore 6.58
+G_M47883_IG06:
+       vmovdqu  ymm0, ymmword ptr [rbp-0x40]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=9 bbWeight=1 PerfScore 6.00
+G_M47883_IG07:
        mov      dword ptr [rbx+0x08], 2
-       mov      word  ptr [rbx+0x10], dx
+       mov      word  ptr [rbx+0x10], ax
        mov      rax, rbx
-						;; size=54 bbWeight=1 PerfScore 13.83
-G_M47883_IG06:
+						;; size=14 bbWeight=1 PerfScore 2.25
+G_M47883_IG08:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=14 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 146, prolog size 29, PerfScore 40.98, instruction count 45, allocated bytes for code 146 (MethodHash=f41844f4) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_7[System.__Canon]:<GetPropertyGetter>b__7(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 138, prolog size 29, PerfScore 42.98, instruction count 41, allocated bytes for code 138 (MethodHash=f41844f4) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_7[System.__Canon]:<GetPropertyGetter>b__7(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
-8 (-5.52 % of base) - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_8[System.__Canon]:b__8(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_8[System.__Canon]:<GetPropertyGetter>b__8(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  4,  4   )     ref  ->  r15         this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_8[System.__Canon]>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T10] (  1,  1   )  struct (32) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Diagnostics.Tracing.PropertyValue>
 ;# 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 "impAppendStmt" <System.Func`2[System.__Canon,int]>
 ;  V05 tmp2         [V05,T06] (  2,  4   )  struct (32) [rbp-0x40]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V07 tmp4         [V07,T07] (  2,  4   )     int  ->  rdx         "Inlining Arg"
+;  V07 tmp4         [V07,T07] (  2,  4   )     int  ->  rax         "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V09 tmp6         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def "V05.[000..008)"
 ;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "V05.[008..012)"
 ;* V11 tmp8         [V11    ] (  0,  0   )     int  ->  zero-ref    "V05.[016..020)"
 ;* V12 tmp9         [V12    ] (  0,  0   )     int  ->  zero-ref    "V06.[000..004)"
 ;* V13 tmp10        [V13    ] (  0,  0   )     int  ->  zero-ref    "V08.[000..004)"
 ;  V14 tmp11        [V14,T05] (  2,  4   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 tmp12        [V15,T03] (  3,  6   )     ref  ->  r14         single-def "argument with side effect"
 ;  V16 rat0         [V16,T08] (  2,  3   )    long  ->  rdi         "Spilling to split statement for tree"
 ;  V17 rat1         [V17,T04] (  3,  4.50)     ref  ->  rsi         "Spilling to split statement for tree"
 ;  V18 rat2         [V18,T01] (  5,  7.50)     ref  ->  rax         "replacement local"
 ;  V19 rat3         [V19,T09] (  3,  2.50)    long  ->  rdi         "CSE for expectedClsNode"
 ;
 ; Lcl frame size = 40
 
 G_M37515_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x40]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rdi
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=35 bbWeight=1 PerfScore 8.58
 G_M37515_IG02:
        mov      r14, gword ptr [r15+0x08]
        mov      rdi, qword ptr [r15]
        mov      rdi, qword ptr [rdi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M37515_IG05
 						;; size=29 bbWeight=1 PerfScore 12.50
 G_M37515_IG03:
        cmp      qword ptr [rax], rdi
        je       SHORT G_M37515_IG05
 						;; size=5 bbWeight=0.50 PerfScore 2.00
 G_M37515_IG04:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTANY
        call     [rax]CORINFO_HELP_CHKCASTANY
 						;; size=12 bbWeight=0.25 PerfScore 0.81
 G_M37515_IG05:
        mov      rsi, rax
        mov      rdi, gword ptr [r14+0x08]
        call     [r14+0x18]System.Func`2[System.__Canon,int]:Invoke(System.__Canon):int:this
-       mov      edx, eax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rbp-0x40]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=20 bbWeight=1 PerfScore 6.58
+G_M37515_IG06:
+       vmovdqu  ymm0, ymmword ptr [rbp-0x40]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=9 bbWeight=1 PerfScore 6.00
+G_M37515_IG07:
        mov      dword ptr [rbx+0x08], 4
-       mov      dword ptr [rbx+0x10], edx
+       mov      dword ptr [rbx+0x10], eax
        mov      rax, rbx
-						;; size=53 bbWeight=1 PerfScore 13.83
-G_M37515_IG06:
+						;; size=13 bbWeight=1 PerfScore 2.25
+G_M37515_IG08:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=14 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 145, prolog size 29, PerfScore 40.98, instruction count 45, allocated bytes for code 145 (MethodHash=63a16d74) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_8[System.__Canon]:<GetPropertyGetter>b__8(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 137, prolog size 29, PerfScore 42.98, instruction count 41, allocated bytes for code 137 (MethodHash=63a16d74) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_8[System.__Canon]:<GetPropertyGetter>b__8(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
-8 (-5.52 % of base) - System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_9[System.__Canon]:b__9(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_9[System.__Canon]:<GetPropertyGetter>b__9(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  4,  4   )     ref  ->  r15         this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_9[System.__Canon]>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T10] (  1,  1   )  struct (32) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Diagnostics.Tracing.PropertyValue>
 ;# 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 "impAppendStmt" <System.Func`2[System.__Canon,uint]>
 ;  V05 tmp2         [V05,T06] (  2,  4   )  struct (32) [rbp-0x40]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V07 tmp4         [V07,T07] (  2,  4   )     int  ->  rdx         "Inlining Arg"
+;  V07 tmp4         [V07,T07] (  2,  4   )     int  ->  rax         "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V09 tmp6         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def "V05.[000..008)"
 ;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "V05.[008..012)"
 ;* V11 tmp8         [V11    ] (  0,  0   )     int  ->  zero-ref    "V05.[016..020)"
 ;* V12 tmp9         [V12    ] (  0,  0   )     int  ->  zero-ref    "V06.[000..004)"
 ;* V13 tmp10        [V13    ] (  0,  0   )     int  ->  zero-ref    "V08.[000..004)"
 ;  V14 tmp11        [V14,T05] (  2,  4   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 tmp12        [V15,T03] (  3,  6   )     ref  ->  r14         single-def "argument with side effect"
 ;  V16 rat0         [V16,T08] (  2,  3   )    long  ->  rdi         "Spilling to split statement for tree"
 ;  V17 rat1         [V17,T04] (  3,  4.50)     ref  ->  rsi         "Spilling to split statement for tree"
 ;  V18 rat2         [V18,T01] (  5,  7.50)     ref  ->  rax         "replacement local"
 ;  V19 rat3         [V19,T09] (  3,  2.50)    long  ->  rdi         "CSE for expectedClsNode"
 ;
 ; Lcl frame size = 40
 
 G_M37259_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x40]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rdi
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=35 bbWeight=1 PerfScore 8.58
 G_M37259_IG02:
        mov      r14, gword ptr [r15+0x08]
        mov      rdi, qword ptr [r15]
        mov      rdi, qword ptr [rdi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      rax, rsi
        test     rax, rax
        je       SHORT G_M37259_IG05
 						;; size=29 bbWeight=1 PerfScore 12.50
 G_M37259_IG03:
        cmp      qword ptr [rax], rdi
        je       SHORT G_M37259_IG05
 						;; size=5 bbWeight=0.50 PerfScore 2.00
 G_M37259_IG04:
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTANY
        call     [rax]CORINFO_HELP_CHKCASTANY
 						;; size=12 bbWeight=0.25 PerfScore 0.81
 G_M37259_IG05:
        mov      rsi, rax
        mov      rdi, gword ptr [r14+0x08]
        call     [r14+0x18]System.Func`2[System.__Canon,uint]:Invoke(System.__Canon):uint:this
-       mov      edx, eax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rbp-0x40]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=20 bbWeight=1 PerfScore 6.58
+G_M37259_IG06:
+       vmovdqu  ymm0, ymmword ptr [rbp-0x40]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=9 bbWeight=1 PerfScore 6.00
+G_M37259_IG07:
        mov      dword ptr [rbx+0x08], 4
-       mov      dword ptr [rbx+0x10], edx
+       mov      dword ptr [rbx+0x10], eax
        mov      rax, rbx
-						;; size=53 bbWeight=1 PerfScore 13.83
-G_M37259_IG06:
+						;; size=13 bbWeight=1 PerfScore 2.25
+G_M37259_IG08:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=14 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 145, prolog size 29, PerfScore 40.98, instruction count 45, allocated bytes for code 145 (MethodHash=5f2f6e74) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_9[System.__Canon]:<GetPropertyGetter>b__9(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 137, prolog size 29, PerfScore 42.98, instruction count 41, allocated bytes for code 137 (MethodHash=5f2f6e74) for method System.Diagnostics.Tracing.PropertyValue+ReferenceTypeHelper`1+<>c__DisplayClass1_9[System.__Canon]:<GetPropertyGetter>b__9(System.Diagnostics.Tracing.PropertyValue):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
-6 (-4.58 % of base) - System.Diagnostics.Tracing.PropertyValue+<>c:b__25_0(System.Object):System.Diagnostics.Tracing.PropertyValue:this
 ; Assembly listing for method System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_0(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.Diagnostics.Tracing.PropertyValue+<>c>
 ;  V01 RetBuf       [V01,T00] (  6,  6   )   byref  ->  rbx         single-def
 ;  V02 arg1         [V02,T01] (  5,  4.25)     ref  ->  r15         class-hnd single-def <System.Object>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V04 tmp1         [V04,T02] (  2,  4   )  struct (32) [rsp+0x08]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Diagnostics.Tracing.PropertyValue>
 ;* V05 tmp2         [V05    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "Inline ldloca(s) first use temp" <System.Diagnostics.Tracing.PropertyValue+Scalar>
-;  V06 tmp3         [V06,T03] (  2,  4   )   ubyte  ->  rdx         "Inlining Arg"
+;  V06 tmp3         [V06,T03] (  2,  4   )   ubyte  ->  rax         "Inlining Arg"
 ;* V07 tmp4         [V07    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.Diagnostics.Tracing.PropertyValue+Scalar>
 ;* V08 tmp5         [V08    ] (  0,  0   )     ref  ->  zero-ref    single-def "V04.[000..008)"
 ;* V09 tmp6         [V09    ] (  0,  0   )     int  ->  zero-ref    "V04.[008..012)"
 ;* V10 tmp7         [V10    ] (  0,  0   )   ubyte  ->  zero-ref    "V04.[016..017)"
 ;* V11 tmp8         [V11    ] (  0,  0   )   ubyte  ->  zero-ref    "V05.[000..001)"
 ;* V12 tmp9         [V12    ] (  0,  0   )   ubyte  ->  zero-ref    "V07.[000..001)"
 ;
 ; Lcl frame size = 40
 
 G_M34457_IG01:
        push     r15
        push     rbx
        sub      rsp, 40
        xor      eax, eax
        mov      qword ptr [rsp+0x08], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rsp+0x10], xmm8
        mov      qword ptr [rsp+0x20], rax
        mov      rbx, rsi
        mov      r15, rdx
 						;; size=36 bbWeight=1 PerfScore 7.33
 G_M34457_IG02:
        mov      rsi, 0xD1FFAB1E      ; System.Boolean
        cmp      qword ptr [r15], rsi
        je       SHORT G_M34457_IG04
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M34457_IG03:
        mov      rsi, r15
        mov      rdi, 0xD1FFAB1E      ; System.Boolean
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_UNBOX
        call     [rax]CORINFO_HELP_UNBOX
 						;; size=25 bbWeight=0.25 PerfScore 0.94
 G_M34457_IG04:
-       movzx    rdx, byte  ptr [r15+0x08]
+       movzx    rax, byte  ptr [r15+0x08]
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rsp+0x18], xmm0
-       mov      rdi, rbx
-       lea      rsi, bword ptr [rsp+0x08]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+						;; size=15 bbWeight=1 PerfScore 3.33
+G_M34457_IG05:
+       vmovdqu  ymm0, ymmword ptr [rsp+0x08]
+       vmovdqu  ymmword ptr [rbx], ymm0
+						;; size=10 bbWeight=1 PerfScore 6.00
+G_M34457_IG06:
        mov      dword ptr [rbx+0x08], 1
-       mov      byte  ptr [rbx+0x10], dl
+       mov      byte  ptr [rbx+0x10], al
        mov      rax, rbx
-						;; size=47 bbWeight=1 PerfScore 10.33
-G_M34457_IG05:
+						;; size=13 bbWeight=1 PerfScore 2.25
+G_M34457_IG07:
+       vzeroupper 
        add      rsp, 40
        pop      rbx
        pop      r15
        ret      
-						;; size=8 bbWeight=1 PerfScore 2.25
+						;; size=11 bbWeight=1 PerfScore 3.25
 
-; Total bytes of code 131, prolog size 30, PerfScore 25.10, instruction count 33, allocated bytes for code 131 (MethodHash=11407966) for method System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_0(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)
+; Total bytes of code 125, prolog size 30, PerfScore 27.35, instruction count 30, allocated bytes for code 125 (MethodHash=11407966) for method System.Diagnostics.Tracing.PropertyValue+<>c:<GetFactory>b__25_0(System.Object):System.Diagnostics.Tracing.PropertyValue:this (FullOpts)

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jul 14, 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