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] Improve GetObjectType in VN #886

Open
MihuBot opened this issue Jan 16, 2025 · 2 comments
Open

[JitDiff X64] [EgorBo] Improve GetObjectType in VN #886

MihuBot opened this issue Jan 16, 2025 · 2 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jan 16, 2025

Job completed in 14 minutes 12 seconds.
dotnet/runtime#111489

Diffs

Found 263 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 40162467
Total bytes of diff: 40162101
Total bytes of delta: -366 (-0.00 % of base)
Total relative delta: -2.55
    diff is an improvement.
    relative diff is an improvement.


Total byte diff includes 170 bytes from reconciling methods
	Base had    0 unique methods,        0 unique bytes
	Diff had    1 unique methods,      170 unique bytes

Top file improvements (bytes):
        -200 : System.ObjectModel.dasm (-0.30 % of base)
        -166 : System.Private.Xml.dasm (-0.00 % of base)

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

Top method regressions (bytes):
         170 (Infinity of base) : System.Net.Sockets.dasm - 

Top method improvements (bytes):
        -170 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine:TryRegisterSocket(long,System.Net.Sockets.SocketAsyncContext,byref,byref):ubyte (FullOpts)
         -51 (-35.17 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Qil.QilPatternFactory:Invoke(System.Xml.Xsl.Qil.QilFunction,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
         -47 (-8.90 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Qil.QilPatternFactory:Choice(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
         -43 (-3.52 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Xslt.InvokeGenerator:GenerateInvoke(System.Xml.Xsl.Qil.QilFunction,System.Collections.Generic.IList`1[System.Xml.Xsl.Xslt.XslNode]):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[double]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[int]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[long]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[short]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.__Canon]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.Nullable`1[int]]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Numerics.Vector`1[float]]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.Numerics.Vector`1[float]]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[ubyte]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[ubyte]):this (FullOpts)
         -25 (-26.60 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Qil.QilFactory:LiteralType(System.Xml.Xsl.XmlQueryType):System.Xml.Xsl.Qil.QilLiteral:this (FullOpts)

Top method regressions (percentages):
         170 (Infinity of base) : System.Net.Sockets.dasm - 

Top method improvements (percentages):
        -170 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine:TryRegisterSocket(long,System.Net.Sockets.SocketAsyncContext,byref,byref):ubyte (FullOpts)
         -51 (-35.17 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Qil.QilPatternFactory:Invoke(System.Xml.Xsl.Qil.QilFunction,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
         -25 (-26.60 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Qil.QilFactory:LiteralType(System.Xml.Xsl.XmlQueryType):System.Xml.Xsl.Qil.QilLiteral:this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[double]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[int]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[long]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[short]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.__Canon]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.Nullable`1[int]]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Numerics.Vector`1[float]]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.Numerics.Vector`1[float]]):this (FullOpts)
         -25 (-10.12 % of base) : System.ObjectModel.dasm - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[ubyte]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[ubyte]):this (FullOpts)
         -47 (-8.90 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Qil.QilPatternFactory:Choice(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
         -43 (-3.52 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.Xslt.InvokeGenerator:GenerateInvoke(System.Xml.Xsl.Qil.QilFunction,System.Collections.Generic.IList`1[System.Xml.Xsl.Xslt.XslNode]):System.Xml.Xsl.Qil.QilNode:this (FullOpts)

14 total methods with Code Size differences (13 improved, 1 regressed), 233040 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 16, 2025

Top method improvements

-51 (-35.17 % of base) - System.Xml.Xsl.Qil.QilPatternFactory:Invoke(System.Xml.Xsl.Qil.QilFunction,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this
 ; Assembly listing for method System.Xml.Xsl.Qil.QilPatternFactory:Invoke(System.Xml.Xsl.Qil.QilFunction,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
-; rbp based frame
+; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 10 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T02] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Xml.Xsl.Qil.QilPatternFactory>
-;  V01 arg1         [V01,T03] (  3,  3   )     ref  ->  rbx         class-hnd single-def <System.Xml.Xsl.Qil.QilFunction>
-;  V02 arg2         [V02,T04] (  3,  3   )     ref  ->  r15         class-hnd single-def <System.Xml.Xsl.Qil.QilList>
+;  V00 this         [V00,T01] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Xml.Xsl.Qil.QilPatternFactory>
+;  V01 arg1         [V01,T02] (  3,  3   )     ref  ->  rbx         class-hnd single-def <System.Xml.Xsl.Qil.QilFunction>
+;  V02 arg2         [V02,T03] (  3,  3   )     ref  ->  r15         class-hnd single-def <System.Xml.Xsl.Qil.QilList>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V04 tmp1         [V04,T00] (  7, 14   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Xml.Xsl.Qil.QilInvoke>
 ;* V05 tmp2         [V05    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Xml.Xsl.Qil.QilFactory>
 ;* V06 tmp3         [V06    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Xml.Xsl.Qil.QilFunction>
-;  V07 tmp4         [V07,T06] (  2,  4   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <System.Xml.Xsl.XmlQueryType>
-;  V08 rat0         [V08,T05] (  3,  4   )     ref  ->  rsi         "Spilling to split statement for tree"
-;  V09 rat1         [V09,T01] (  4,  7   )     ref  ->  rdi         "replacement local"
-;  V10 rat2         [V10,T07] (  3,  2   )    long  ->  rax         "CSE for expectedClsNode"
+;  V07 tmp4         [V07,T04] (  2,  4   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <System.Xml.Xsl.XmlQueryType>
+;  V08 cse0         [V08,T05] (  2,  2   )     ref  ->  rdi         "CSE #01: aggressive"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 0
 
 G_M22727_IG01:
-       push     rbp
        push     r15
        push     r14
        push     rbx
-       push     rax
-       lea      rbp, [rsp+0x20]
        mov      rbx, rsi
        mov      r15, rdx
-						;; size=18 bbWeight=1 PerfScore 6.00
+						;; size=11 bbWeight=1 PerfScore 3.50
 G_M22727_IG02:
        mov      rdi, gword ptr [rdi+0x08]
        cmp      byte  ptr [rdi], dil
        mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilInvoke
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      dword ptr [r14+0x20], 66
        lea      rdi, bword ptr [r14+0x28]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        lea      rdi, bword ptr [r14+0x30]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
-       mov      rsi, gword ptr [r14+0x28]
-       mov      rdi, rsi
-       test     rdi, rdi
-       je       SHORT G_M22727_IG04
-						;; size=69 bbWeight=1 PerfScore 14.50
-G_M22727_IG03:
-       mov      rax, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilFunction
-       cmp      qword ptr [rdi], rax
-       jne      SHORT G_M22727_IG06
-						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M22727_IG04:
+       mov      rdi, gword ptr [r14+0x28]
        mov      rsi, gword ptr [rdi+0x08]
        lea      rdi, bword ptr [r14+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, r14
-						;; size=16 bbWeight=1 PerfScore 3.75
-G_M22727_IG05:
-       add      rsp, 8
+						;; size=77 bbWeight=1 PerfScore 16.75
+G_M22727_IG03:
        pop      rbx
        pop      r14
        pop      r15
-       pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
-G_M22727_IG06:
-       mov      rdi, rax
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
-       call     [rax]CORINFO_HELP_CHKCASTCLASS
-       int3     
-						;; size=16 bbWeight=0 PerfScore 0.00
+						;; size=6 bbWeight=1 PerfScore 2.50
 
-; Total bytes of code 145, prolog size 12, PerfScore 29.62, instruction count 41, allocated bytes for code 145 (MethodHash=f11ba738) for method System.Xml.Xsl.Qil.QilPatternFactory:Invoke(System.Xml.Xsl.Qil.QilFunction,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
+; Total bytes of code 94, prolog size 5, PerfScore 22.75, instruction count 26, allocated bytes for code 94 (MethodHash=f11ba738) for method System.Xml.Xsl.Qil.QilPatternFactory:Invoke(System.Xml.Xsl.Qil.QilFunction,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
 ; ============================================================
-47 (-8.90 % of base) - System.Xml.Xsl.Qil.QilPatternFactory:Choice(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this
 ; Assembly listing for method System.Xml.Xsl.Qil.QilPatternFactory:Choice(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode: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; 10 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T02] (  6,  4.50)     ref  ->  rdi         this class-hnd single-def <System.Xml.Xsl.Qil.QilPatternFactory>
 ;  V01 arg1         [V01,T03] (  5,  3.50)     ref  ->  r15         class-hnd single-def <System.Xml.Xsl.Qil.QilNode>
 ;  V02 arg2         [V02,T00] (  8,  5   )     ref  ->  rbx         class-hnd single-def <System.Xml.Xsl.Qil.QilList>
-;  V03 loc0         [V03,T21] (  3,  1.50)     int  ->  r14        
+;  V03 loc0         [V03,T19] (  3,  1.50)     int  ->  r14        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V05 tmp1         [V05,T09] (  2,  2   )     ref  ->  r14         class-hnd exact single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilFactory>
-;  V06 tmp2         [V06,T10] (  2,  2   )     ref  ->  rsi         class-hnd single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilIterator>
-;  V07 tmp3         [V07,T11] (  2,  2   )     ref  ->  r14         class-hnd exact single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilFactory>
+;  V05 tmp1         [V05,T07] (  2,  2   )     ref  ->  r14         class-hnd exact single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilFactory>
+;  V06 tmp2         [V06,T08] (  2,  2   )     ref  ->  rsi         class-hnd single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilIterator>
+;  V07 tmp3         [V07,T09] (  2,  2   )     ref  ->  r14         class-hnd exact single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilFactory>
 ;* V08 tmp4         [V08    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "impAppendStmt" <System.Xml.Xsl.Qil.QilFactory>
-;  V09 tmp5         [V09,T12] (  2,  2   )     ref  ->  rsi         class-hnd single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilBinary>
-;  V10 tmp6         [V10,T13] (  2,  2   )     ref  ->  rdi         class-hnd single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilNode>
-;  V11 tmp7         [V11,T25] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.IndexOutOfRangeException>
-;  V12 tmp8         [V12,T26] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.IndexOutOfRangeException>
-;  V13 tmp9         [V13,T27] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.IndexOutOfRangeException>
+;  V09 tmp5         [V09,T10] (  2,  2   )     ref  ->  rsi         class-hnd single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilBinary>
+;  V10 tmp6         [V10,T11] (  2,  2   )     ref  ->  rdi         class-hnd single-def "impAppendStmt" <System.Xml.Xsl.Qil.QilNode>
+;  V11 tmp7         [V11,T23] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.IndexOutOfRangeException>
+;  V12 tmp8         [V12,T24] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.IndexOutOfRangeException>
+;  V13 tmp9         [V13,T25] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.IndexOutOfRangeException>
 ;  V14 tmp10        [V14,T01] (  7,  7   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Xml.Xsl.Qil.QilChoice>
 ;* V15 tmp11        [V15    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Xml.Xsl.Qil.QilFactory>
-;  V16 tmp12        [V16,T14] (  2,  2   )     ref  ->  rax         class-hnd single-def "Inlining Arg" <System.Xml.Xsl.XmlQueryType>
-;  V17 tmp13        [V17,T06] (  3,  3   )     ref  ->  rdx         single-def "arr expr"
-;  V18 tmp14        [V18,T15] (  2,  2   )     ref  ->  rdx         single-def "argument with side effect"
-;  V19 tmp15        [V19,T16] (  2,  2   )     ref  ->  rdx         single-def "argument with side effect"
-;  V20 tmp16        [V20,T17] (  2,  2   )     ref  ->  r13         single-def "argument with side effect"
-;  V21 tmp17        [V21,T07] (  3,  3   )     ref  ->  rdi         single-def "arr expr"
-;  V22 tmp18        [V22,T18] (  2,  2   )     ref  ->  rdx         single-def "arr expr"
-;  V23 tmp19        [V23,T19] (  2,  2   )     ref  ->  rcx         single-def "argument with side effect"
+;  V16 tmp12        [V16,T12] (  2,  2   )     ref  ->  rax         class-hnd single-def "Inlining Arg" <System.Xml.Xsl.XmlQueryType>
+;  V17 tmp13        [V17,T05] (  3,  3   )     ref  ->  rdx         single-def "arr expr"
+;  V18 tmp14        [V18,T13] (  2,  2   )     ref  ->  rdx         single-def "argument with side effect"
+;  V19 tmp15        [V19,T14] (  2,  2   )     ref  ->  rdx         single-def "argument with side effect"
+;  V20 tmp16        [V20,T15] (  2,  2   )     ref  ->  r13         single-def "argument with side effect"
+;  V21 tmp17        [V21,T06] (  3,  3   )     ref  ->  rdi         single-def "arr expr"
+;  V22 tmp18        [V22,T16] (  2,  2   )     ref  ->  rdx         single-def "arr expr"
+;  V23 tmp19        [V23,T17] (  2,  2   )     ref  ->  rcx         single-def "argument with side effect"
 ;  V24 cse0         [V24,T04] (  9,  4.50)     ref  ->  rdi         multi-def "CSE #01: aggressive"
-;  V25 cse1         [V25,T22] (  3,  1.50)     int  ->  rcx         "CSE #02: moderate"
-;  V26 cse2         [V26,T20] (  3,  1.50)     ref  ->  rdx         "CSE #04: moderate"
-;  V27 cse3         [V27,T23] (  3,  1.50)     int  ->  rax         "CSE #05: moderate"
-;  V28 rat0         [V28,T08] (  3,  2   )     ref  ->  rsi         "Spilling to split statement for tree"
-;  V29 rat1         [V29,T05] (  4,  3.50)     ref  ->  rdi         "replacement local"
-;  V30 rat2         [V30,T24] (  3,  1   )    long  ->  rax         "CSE for expectedClsNode"
+;  V25 cse1         [V25,T20] (  3,  1.50)     int  ->  rcx         "CSE #02: moderate"
+;  V26 cse2         [V26,T18] (  3,  1.50)     ref  ->  rdx         "CSE #04: moderate"
+;  V27 cse3         [V27,T22] (  2,  1   )     ref  ->  rdi         "CSE #06: moderate"
+;  V28 cse4         [V28,T21] (  3,  1.50)     int  ->  rax         "CSE #05: moderate"
 ;
 ; Lcl frame size = 0
 
 G_M37246_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        lea      rbp, [rsp+0x20]
        mov      r15, rsi
        mov      rbx, rdx
 						;; size=19 bbWeight=1 PerfScore 6.00
 G_M37246_IG02:
        cmp      byte  ptr [rdi+0x10], 0
        jne      SHORT G_M37246_IG06
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M37246_IG03:
        mov      r14d, dword ptr [rbx+0x24]
        cmp      r14d, 1
        jne      SHORT G_M37246_IG05
        mov      rdi, gword ptr [rdi+0x08]
        mov      r14, rdi
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.Qil.QilFactory:Let(System.Xml.Xsl.Qil.QilNode):System.Xml.Xsl.Qil.QilIterator:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Xml.Xsl.Qil.QilFactory:Let(System.Xml.Xsl.Qil.QilNode):System.Xml.Xsl.Qil.QilIterator:this
        mov      rsi, rax
        cmp      dword ptr [rbx+0x24], 0
-       jle      G_M37246_IG12
+       jle      G_M37246_IG10
        mov      rdx, gword ptr [rbx+0x28]
        cmp      dword ptr [rdx+0x08], 0
-       jbe      G_M37246_IG16
+       jbe      G_M37246_IG13
        mov      rdx, gword ptr [rdx+0x10]
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.Qil.QilFactory:Loop(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilNode):System.Xml.Xsl.Qil.QilLoop:this
 						;; size=78 bbWeight=0.50 PerfScore 12.38
 G_M37246_IG04:
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [rax]System.Xml.Xsl.Qil.QilFactory:Loop(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilNode):System.Xml.Xsl.Qil.QilLoop:this
 						;; size=11 bbWeight=0.50 PerfScore 2.25
 G_M37246_IG05:
        cmp      r14d, 2
-       je       G_M37246_IG10
-						;; size=10 bbWeight=0.50 PerfScore 0.62
+       je       SHORT G_M37246_IG08
+						;; size=6 bbWeight=0.50 PerfScore 0.62
 G_M37246_IG06:
        mov      rdi, gword ptr [rdi+0x08]
        cmp      byte  ptr [rdi], dil
        mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilChoice
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      dword ptr [r14+0x20], 32
        lea      rdi, bword ptr [r14+0x28]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        lea      rdi, bword ptr [r14+0x30]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
-       mov      rsi, gword ptr [r14+0x30]
-       mov      rdi, rsi
-       test     rdi, rdi
-       je       SHORT G_M37246_IG08
-						;; size=69 bbWeight=0.50 PerfScore 7.25
-G_M37246_IG07:
-       mov      rax, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilList
-       cmp      qword ptr [rdi], rax
-       jne      G_M37246_IG13
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M37246_IG08:
+       mov      rdi, gword ptr [r14+0x30]
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.Qil.QilList:get_XmlType():System.Xml.Xsl.XmlQueryType:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Xml.Xsl.Qil.QilList:get_XmlType():System.Xml.Xsl.XmlQueryType:this
        lea      rdi, bword ptr [r14+0x08]
        mov      rsi, rax
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, r14
-						;; size=29 bbWeight=0.50 PerfScore 4.12
-G_M37246_IG09:
+						;; size=90 bbWeight=0.50 PerfScore 10.62
+G_M37246_IG07:
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=9 bbWeight=0.50 PerfScore 1.75
-G_M37246_IG10:
+G_M37246_IG08:
        mov      rdi, gword ptr [rdi+0x08]
        mov      r14, rdi
        mov      r13, rdi
        xor      esi, esi
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.Qil.QilFactory:LiteralInt32(int):System.Xml.Xsl.Qil.QilLiteral:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Xml.Xsl.Qil.QilFactory:LiteralInt32(int):System.Xml.Xsl.Qil.QilLiteral:this
        mov      rdx, rax
        mov      rdi, r13
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.Qil.QilFactory:Eq(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilNode):System.Xml.Xsl.Qil.QilBinary:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Xml.Xsl.Qil.QilFactory:Eq(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilNode):System.Xml.Xsl.Qil.QilBinary:this
        mov      rsi, rax
        mov      ecx, dword ptr [rbx+0x24]
        test     ecx, ecx
-       jle      G_M37246_IG15
+       jle      G_M37246_IG12
        mov      rdx, gword ptr [rbx+0x28]
        mov      rdi, rdx
        mov      eax, dword ptr [rdi+0x08]
        test     eax, eax
-       je       G_M37246_IG16
+       je       G_M37246_IG13
        mov      rdi, gword ptr [rdi+0x10]
        cmp      ecx, 1
-       jle      SHORT G_M37246_IG14
+       jle      SHORT G_M37246_IG11
        cmp      eax, 1
-       jbe      G_M37246_IG16
+       jbe      G_M37246_IG13
        mov      rcx, gword ptr [rdx+0x18]
        mov      rdx, rdi
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.Qil.QilFactory:Conditional(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilNode):System.Xml.Xsl.Qil.QilTernary:this
 						;; size=119 bbWeight=0.50 PerfScore 16.12
-G_M37246_IG11:
+G_M37246_IG09:
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [rax]System.Xml.Xsl.Qil.QilFactory:Conditional(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilNode):System.Xml.Xsl.Qil.QilTernary:this
 						;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M37246_IG12:
+G_M37246_IG10:
        mov      rdi, 0xD1FFAB1E      ; System.IndexOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.IndexOutOfRangeException:.ctor():this
        call     [rax]System.IndexOutOfRangeException:.ctor():this
        mov      rdi, r15
        call     CORINFO_HELP_THROW
        int3     
 						;; size=42 bbWeight=0 PerfScore 0.00
+G_M37246_IG11:
+       mov      rdi, 0xD1FFAB1E      ; System.IndexOutOfRangeException
+       call     CORINFO_HELP_NEWSFAST
+       mov      rbx, rax
+       mov      rdi, rbx
+       mov      rax, 0xD1FFAB1E      ; code for System.IndexOutOfRangeException:.ctor():this
+       call     [rax]System.IndexOutOfRangeException:.ctor():this
+       mov      rdi, rbx
+       call     CORINFO_HELP_THROW
+       int3     
+						;; size=42 bbWeight=0 PerfScore 0.00
+G_M37246_IG12:
+       mov      rdi, 0xD1FFAB1E      ; System.IndexOutOfRangeException
+       call     CORINFO_HELP_NEWSFAST
+       mov      rbx, rax
+       mov      rdi, rbx
+       mov      rax, 0xD1FFAB1E      ; code for System.IndexOutOfRangeException:.ctor():this
+       call     [rax]System.IndexOutOfRangeException:.ctor():this
+       mov      rdi, rbx
+       call     CORINFO_HELP_THROW
+       int3     
+						;; size=42 bbWeight=0 PerfScore 0.00
 G_M37246_IG13:
-       mov      rdi, rax
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
-       call     [rax]CORINFO_HELP_CHKCASTCLASS
-       int3     
-						;; size=16 bbWeight=0 PerfScore 0.00
-G_M37246_IG14:
-       mov      rdi, 0xD1FFAB1E      ; System.IndexOutOfRangeException
-       call     CORINFO_HELP_NEWSFAST
-       mov      rbx, rax
-       mov      rdi, rbx
-       mov      rax, 0xD1FFAB1E      ; code for System.IndexOutOfRangeException:.ctor():this
-       call     [rax]System.IndexOutOfRangeException:.ctor():this
-       mov      rdi, rbx
-       call     CORINFO_HELP_THROW
-       int3     
-						;; size=42 bbWeight=0 PerfScore 0.00
-G_M37246_IG15:
-       mov      rdi, 0xD1FFAB1E      ; System.IndexOutOfRangeException
-       call     CORINFO_HELP_NEWSFAST
-       mov      rbx, rax
-       mov      rdi, rbx
-       mov      rax, 0xD1FFAB1E      ; code for System.IndexOutOfRangeException:.ctor():this
-       call     [rax]System.IndexOutOfRangeException:.ctor():this
-       mov      rdi, rbx
-       call     CORINFO_HELP_THROW
-       int3     
-						;; size=42 bbWeight=0 PerfScore 0.00
-G_M37246_IG16:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 528, prolog size 13, PerfScore 57.81, instruction count 138, allocated bytes for code 528 (MethodHash=7e656e81) for method System.Xml.Xsl.Qil.QilPatternFactory:Choice(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
+; Total bytes of code 481, prolog size 13, PerfScore 56.00, instruction count 128, allocated bytes for code 481 (MethodHash=7e656e81) for method System.Xml.Xsl.Qil.QilPatternFactory:Choice(System.Xml.Xsl.Qil.QilNode,System.Xml.Xsl.Qil.QilList):System.Xml.Xsl.Qil.QilNode:this (FullOpts)
 ; ============================================================
-25 (-10.12 % of base) - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[double]):this
 ; Assembly listing for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[double]):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; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  7,  7   )     ref  ->  rbx         this class-hnd single-def <System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]>
 ;  V01 arg1         [V01,T03] (  4,  4   )     ref  ->  rsi         class-hnd single-def <System.Collections.ObjectModel.ObservableCollection`1[double]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T01] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Specialized.NotifyCollectionChangedEventHandler>
 ;  V04 tmp2         [V04,T04] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[double]>
 ;  V05 tmp3         [V05,T02] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ComponentModel.PropertyChangedEventHandler>
 ;  V06 tmp4         [V06,T05] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[double]>
+;  V07 cse0         [V07,T06] (  2,  2   )     ref  ->  r14         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M18815_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
 						;; size=15 bbWeight=1 PerfScore 5.75
 G_M18815_IG02:
        test     rsi, rsi
        je       G_M18815_IG04
        lea      rdi, bword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.NotifyCollectionChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
-       mov      rsi, gword ptr [rbx+0x08]
-       mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.INotifyCollectionChanged
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
-       call     [rax]CORINFO_HELP_CHKCASTINTERFACE
-       mov      r14, rax
+       mov      r14, gword ptr [rbx+0x08]
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]:HandleCollectionChanged(System.Object,System.Collections.Specialized.NotifyCollectionChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        call     [r11]System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.PropertyChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rsi, gword ptr [rbx+0x08]
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.INotifyPropertyChanged
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
        call     [rax]CORINFO_HELP_CHKCASTINTERFACE
        mov      r14, rax
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]:HandlePropertyChanged(System.Object,System.ComponentModel.PropertyChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
        cmp      dword ptr [rdi], edi
-						;; size=201 bbWeight=1 PerfScore 30.75
+						;; size=176 bbWeight=1 PerfScore 27.00
 G_M18815_IG03:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [r11]System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
 						;; size=13 bbWeight=1 PerfScore 4.25
 G_M18815_IG04:
        mov      edi, 20
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 
-; Total bytes of code 247, prolog size 12, PerfScore 42.62, instruction count 55, allocated bytes for code 247 (MethodHash=6d2bb680) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[double]):this (FullOpts)
+; Total bytes of code 222, prolog size 12, PerfScore 38.88, instruction count 51, allocated bytes for code 222 (MethodHash=6d2bb680) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[double]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[double]):this (FullOpts)
 ; ============================================================
-25 (-10.12 % of base) - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[int]):this
 ; Assembly listing for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[int]):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; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  7,  7   )     ref  ->  rbx         this class-hnd single-def <System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]>
 ;  V01 arg1         [V01,T03] (  4,  4   )     ref  ->  rsi         class-hnd single-def <System.Collections.ObjectModel.ObservableCollection`1[int]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T01] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Specialized.NotifyCollectionChangedEventHandler>
 ;  V04 tmp2         [V04,T04] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[int]>
 ;  V05 tmp3         [V05,T02] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ComponentModel.PropertyChangedEventHandler>
 ;  V06 tmp4         [V06,T05] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[int]>
+;  V07 cse0         [V07,T06] (  2,  2   )     ref  ->  r14         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M16671_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
 						;; size=15 bbWeight=1 PerfScore 5.75
 G_M16671_IG02:
        test     rsi, rsi
        je       G_M16671_IG04
        lea      rdi, bword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.NotifyCollectionChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
-       mov      rsi, gword ptr [rbx+0x08]
-       mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.INotifyCollectionChanged
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
-       call     [rax]CORINFO_HELP_CHKCASTINTERFACE
-       mov      r14, rax
+       mov      r14, gword ptr [rbx+0x08]
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]:HandleCollectionChanged(System.Object,System.Collections.Specialized.NotifyCollectionChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        call     [r11]System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.PropertyChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rsi, gword ptr [rbx+0x08]
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.INotifyPropertyChanged
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
        call     [rax]CORINFO_HELP_CHKCASTINTERFACE
        mov      r14, rax
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]:HandlePropertyChanged(System.Object,System.ComponentModel.PropertyChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
        cmp      dword ptr [rdi], edi
-						;; size=201 bbWeight=1 PerfScore 30.75
+						;; size=176 bbWeight=1 PerfScore 27.00
 G_M16671_IG03:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [r11]System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
 						;; size=13 bbWeight=1 PerfScore 4.25
 G_M16671_IG04:
        mov      edi, 20
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 
-; Total bytes of code 247, prolog size 12, PerfScore 42.62, instruction count 55, allocated bytes for code 247 (MethodHash=9abdbee0) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[int]):this (FullOpts)
+; Total bytes of code 222, prolog size 12, PerfScore 38.88, instruction count 51, allocated bytes for code 222 (MethodHash=9abdbee0) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[int]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[int]):this (FullOpts)
 ; ============================================================
-25 (-10.12 % of base) - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[long]):this
 ; Assembly listing for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[long]):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; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  7,  7   )     ref  ->  rbx         this class-hnd single-def <System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]>
 ;  V01 arg1         [V01,T03] (  4,  4   )     ref  ->  rsi         class-hnd single-def <System.Collections.ObjectModel.ObservableCollection`1[long]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T01] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Specialized.NotifyCollectionChangedEventHandler>
 ;  V04 tmp2         [V04,T04] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[long]>
 ;  V05 tmp3         [V05,T02] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ComponentModel.PropertyChangedEventHandler>
 ;  V06 tmp4         [V06,T05] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[long]>
+;  V07 cse0         [V07,T06] (  2,  2   )     ref  ->  r14         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M767_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
 						;; size=15 bbWeight=1 PerfScore 5.75
 G_M767_IG02:
        test     rsi, rsi
        je       G_M767_IG04
        lea      rdi, bword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.NotifyCollectionChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
-       mov      rsi, gword ptr [rbx+0x08]
-       mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.INotifyCollectionChanged
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
-       call     [rax]CORINFO_HELP_CHKCASTINTERFACE
-       mov      r14, rax
+       mov      r14, gword ptr [rbx+0x08]
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]:HandleCollectionChanged(System.Object,System.Collections.Specialized.NotifyCollectionChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        call     [r11]System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.PropertyChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rsi, gword ptr [rbx+0x08]
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.INotifyPropertyChanged
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
        call     [rax]CORINFO_HELP_CHKCASTINTERFACE
        mov      r14, rax
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]:HandlePropertyChanged(System.Object,System.ComponentModel.PropertyChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
        cmp      dword ptr [rdi], edi
-						;; size=201 bbWeight=1 PerfScore 30.75
+						;; size=176 bbWeight=1 PerfScore 27.00
 G_M767_IG03:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [r11]System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
 						;; size=13 bbWeight=1 PerfScore 4.25
 G_M767_IG04:
        mov      edi, 20
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 
-; Total bytes of code 247, prolog size 12, PerfScore 42.62, instruction count 55, allocated bytes for code 247 (MethodHash=1b73fd00) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[long]):this (FullOpts)
+; Total bytes of code 222, prolog size 12, PerfScore 38.88, instruction count 51, allocated bytes for code 222 (MethodHash=1b73fd00) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[long]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[long]):this (FullOpts)
 ; ============================================================
-25 (-10.12 % of base) - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[short]):this
 ; Assembly listing for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[short]):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; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  7,  7   )     ref  ->  rbx         this class-hnd single-def <System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]>
 ;  V01 arg1         [V01,T03] (  4,  4   )     ref  ->  rsi         class-hnd single-def <System.Collections.ObjectModel.ObservableCollection`1[short]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T01] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Specialized.NotifyCollectionChangedEventHandler>
 ;  V04 tmp2         [V04,T04] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[short]>
 ;  V05 tmp3         [V05,T02] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ComponentModel.PropertyChangedEventHandler>
 ;  V06 tmp4         [V06,T05] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[short]>
+;  V07 cse0         [V07,T06] (  2,  2   )     ref  ->  r14         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M32511_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
 						;; size=15 bbWeight=1 PerfScore 5.75
 G_M32511_IG02:
        test     rsi, rsi
        je       G_M32511_IG04
        lea      rdi, bword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.NotifyCollectionChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
-       mov      rsi, gword ptr [rbx+0x08]
-       mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.INotifyCollectionChanged
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
-       call     [rax]CORINFO_HELP_CHKCASTINTERFACE
-       mov      r14, rax
+       mov      r14, gword ptr [rbx+0x08]
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]:HandleCollectionChanged(System.Object,System.Collections.Specialized.NotifyCollectionChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        call     [r11]System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.PropertyChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rsi, gword ptr [rbx+0x08]
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.INotifyPropertyChanged
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
        call     [rax]CORINFO_HELP_CHKCASTINTERFACE
        mov      r14, rax
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]:HandlePropertyChanged(System.Object,System.ComponentModel.PropertyChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
        cmp      dword ptr [rdi], edi
-						;; size=201 bbWeight=1 PerfScore 30.75
+						;; size=176 bbWeight=1 PerfScore 27.00
 G_M32511_IG03:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [r11]System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
 						;; size=13 bbWeight=1 PerfScore 4.25
 G_M32511_IG04:
        mov      edi, 20
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 
-; Total bytes of code 247, prolog size 12, PerfScore 42.62, instruction count 55, allocated bytes for code 247 (MethodHash=44028100) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[short]):this (FullOpts)
+; Total bytes of code 222, prolog size 12, PerfScore 38.88, instruction count 51, allocated bytes for code 222 (MethodHash=44028100) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[short]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[short]):this (FullOpts)
 ; ============================================================
-25 (-10.12 % of base) - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.__Canon]):this
 ; Assembly listing for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.__Canon]):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; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  7,  7   )     ref  ->  rbx         this class-hnd single-def <System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]>
 ;  V01 arg1         [V01,T03] (  4,  4   )     ref  ->  rsi         class-hnd single-def <System.Collections.ObjectModel.ObservableCollection`1[System.__Canon]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T01] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Specialized.NotifyCollectionChangedEventHandler>
 ;  V04 tmp2         [V04,T04] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[System.__Canon]>
 ;  V05 tmp3         [V05,T02] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ComponentModel.PropertyChangedEventHandler>
 ;  V06 tmp4         [V06,T05] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[System.__Canon]>
+;  V07 cse0         [V07,T06] (  2,  2   )     ref  ->  r14         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M30207_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
 						;; size=15 bbWeight=1 PerfScore 5.75
 G_M30207_IG02:
        test     rsi, rsi
        je       G_M30207_IG04
        lea      rdi, bword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.NotifyCollectionChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
-       mov      rsi, gword ptr [rbx+0x08]
-       mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.INotifyCollectionChanged
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
-       call     [rax]CORINFO_HELP_CHKCASTINTERFACE
-       mov      r14, rax
+       mov      r14, gword ptr [rbx+0x08]
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]:HandleCollectionChanged(System.Object,System.Collections.Specialized.NotifyCollectionChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        call     [r11]System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.PropertyChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rsi, gword ptr [rbx+0x08]
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.INotifyPropertyChanged
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
        call     [rax]CORINFO_HELP_CHKCASTINTERFACE
        mov      r14, rax
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]:HandlePropertyChanged(System.Object,System.ComponentModel.PropertyChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
        cmp      dword ptr [rdi], edi
-						;; size=201 bbWeight=1 PerfScore 30.75
+						;; size=176 bbWeight=1 PerfScore 27.00
 G_M30207_IG03:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [r11]System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
 						;; size=13 bbWeight=1 PerfScore 4.25
 G_M30207_IG04:
        mov      edi, 20
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 
-; Total bytes of code 247, prolog size 12, PerfScore 42.62, instruction count 55, allocated bytes for code 247 (MethodHash=712e8a00) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 222, prolog size 12, PerfScore 38.88, instruction count 51, allocated bytes for code 222 (MethodHash=712e8a00) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.__Canon]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.__Canon]):this (FullOpts)
 ; ============================================================
-25 (-10.12 % of base) - System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.Nullable`1[int]]):this
 ; Assembly listing for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.Nullable`1[int]]):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; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  7,  7   )     ref  ->  rbx         this class-hnd single-def <System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]>
 ;  V01 arg1         [V01,T03] (  4,  4   )     ref  ->  rsi         class-hnd single-def <System.Collections.ObjectModel.ObservableCollection`1[System.Nullable`1[int]]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T01] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Specialized.NotifyCollectionChangedEventHandler>
 ;  V04 tmp2         [V04,T04] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[System.Nullable`1[int]]>
 ;  V05 tmp3         [V05,T02] (  4,  8   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ComponentModel.PropertyChangedEventHandler>
 ;  V06 tmp4         [V06,T05] (  2,  4   )     ref  ->  r14         class-hnd single-def "impAppendStmt" <System.Collections.Generic.IList`1[System.Nullable`1[int]]>
+;  V07 cse0         [V07,T06] (  2,  2   )     ref  ->  r14         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M11071_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
 						;; size=15 bbWeight=1 PerfScore 5.75
 G_M11071_IG02:
        test     rsi, rsi
        je       G_M11071_IG04
        lea      rdi, bword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.NotifyCollectionChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
-       mov      rsi, gword ptr [rbx+0x08]
-       mov      rdi, 0xD1FFAB1E      ; System.Collections.Specialized.INotifyCollectionChanged
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
-       call     [rax]CORINFO_HELP_CHKCASTINTERFACE
-       mov      r14, rax
+       mov      r14, gword ptr [rbx+0x08]
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]:HandleCollectionChanged(System.Object,System.Collections.Specialized.NotifyCollectionChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        call     [r11]System.Collections.Specialized.INotifyCollectionChanged:add_CollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventHandler):this
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.PropertyChangedEventHandler
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rsi, gword ptr [rbx+0x08]
        mov      rdi, 0xD1FFAB1E      ; System.ComponentModel.INotifyPropertyChanged
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTINTERFACE
        call     [rax]CORINFO_HELP_CHKCASTINTERFACE
        mov      r14, rax
        lea      rdi, bword ptr [r15+0x08]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]:HandlePropertyChanged(System.Object,System.ComponentModel.PropertyChangedEventArgs):this
        mov      qword ptr [r15+0x18], rdi
        mov      rdi, r14
        mov      rsi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
        cmp      dword ptr [rdi], edi
-						;; size=201 bbWeight=1 PerfScore 30.75
+						;; size=176 bbWeight=1 PerfScore 27.00
 G_M11071_IG03:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [r11]System.ComponentModel.INotifyPropertyChanged:add_PropertyChanged(System.ComponentModel.PropertyChangedEventHandler):this
 						;; size=13 bbWeight=1 PerfScore 4.25
 G_M11071_IG04:
        mov      edi, 20
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 
-; Total bytes of code 247, prolog size 12, PerfScore 42.62, instruction count 55, allocated bytes for code 247 (MethodHash=9575d4c0) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.Nullable`1[int]]):this (FullOpts)
+; Total bytes of code 222, prolog size 12, PerfScore 38.88, instruction count 51, allocated bytes for code 222 (MethodHash=9575d4c0) for method System.Collections.ObjectModel.ReadOnlyObservableCollection`1[System.Nullable`1[int]]:.ctor(System.Collections.ObjectModel.ObservableCollection`1[System.Nullable`1[int]]):this (FullOpts)
 ; ============================================================
-25 (-26.60 % of base) - System.Xml.Xsl.Qil.QilFactory:LiteralType(System.Xml.Xsl.XmlQueryType):System.Xml.Xsl.Qil.QilLiteral:this
 ; Assembly listing for method System.Xml.Xsl.Qil.QilFactory:LiteralType(System.Xml.Xsl.XmlQueryType):System.Xml.Xsl.Qil.QilLiteral: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; 7 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.Xml.Xsl.Qil.QilFactory>
 ;  V01 arg1         [V01,T01] (  3,  3   )     ref  ->  rbx         class-hnd single-def <System.Xml.Xsl.XmlQueryType>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T00] (  6, 12   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Xml.Xsl.Qil.QilLiteral>
-;  V04 tmp2         [V04,T02] (  2,  4   )     ref  ->  rax         class-hnd single-def "Inlining Arg" <System.Xml.Xsl.XmlQueryType>
+;  V04 tmp2         [V04,T02] (  2,  4   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <System.Xml.Xsl.XmlQueryType>
+;  V05 cse0         [V05,T03] (  2,  2   )     ref  ->  rsi         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M1077_IG01:
        push     r15
        push     rbx
        push     rax
        mov      rbx, rsi
 						;; size=7 bbWeight=1 PerfScore 3.25
 G_M1077_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.Qil.QilLiteral
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      dword ptr [r15+0x20], 26
        lea      rdi, bword ptr [r15+0x28]
        mov      rsi, rbx
        call     CORINFO_HELP_ASSIGN_REF
        mov      rsi, gword ptr [r15+0x28]
-       mov      rdi, 0xD1FFAB1E      ; System.Xml.Xsl.XmlQueryType
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
-       call     [rax]CORINFO_HELP_CHKCASTCLASS
        lea      rdi, bword ptr [r15+0x08]
-       mov      rsi, rax
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, r15
-						;; size=79 bbWeight=1 PerfScore 11.75
+						;; size=54 bbWeight=1 PerfScore 8.00
 G_M1077_IG03:
        add      rsp, 8
        pop      rbx
        pop      r15
        ret      
 						;; size=8 bbWeight=1 PerfScore 2.25
 
-; Total bytes of code 94, prolog size 4, PerfScore 17.25, instruction count 23, allocated bytes for code 94 (MethodHash=6119fbca) for method System.Xml.Xsl.Qil.QilFactory:LiteralType(System.Xml.Xsl.XmlQueryType):System.Xml.Xsl.Qil.QilLiteral:this (FullOpts)
+; Total bytes of code 69, prolog size 4, PerfScore 13.50, instruction count 19, allocated bytes for code 69 (MethodHash=6119fbca) for method System.Xml.Xsl.Qil.QilFactory:LiteralType(System.Xml.Xsl.XmlQueryType):System.Xml.Xsl.Qil.QilLiteral:this (FullOpts)
 ; ============================================================

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

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 16, 2025

@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