Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[JitDiff X64] [hez2010] JIT: Allow stack allocate objects in loops #570

Open
MihuBot opened this issue Aug 27, 2024 · 3 comments
Open

[JitDiff X64] [hez2010] JIT: Allow stack allocate objects in loops #570

MihuBot opened this issue Aug 27, 2024 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Aug 27, 2024

Job completed in 15 minutes.
dotnet/runtime#106526

Diffs

Found 265 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39722709
Total bytes of diff: 39722286
Total bytes of delta: -423 (-0.00 % of base)
Total relative delta: -0.67
    diff is an improvement.
    relative diff is an improvement.


Top file regressions (bytes):
          19 : ILCompiler.Reflection.ReadyToRun.dasm (0.01 % of base)

Top file improvements (bytes):
        -329 : System.Linq.Expressions.dasm (-0.04 % of base)
        -113 : System.Reflection.MetadataLoadContext.dasm (-0.05 % of base)

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

Top method regressions (bytes):
          19 (2.29 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts)
          11 (1.77 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts)

Top method improvements (bytes):
        -113 (-4.80 % of base) : System.Reflection.MetadataLoadContext.dasm - System.Reflection.TypeLoading.Ecma.EcmaDefaultValueProcessing:TryFindRawDefaultValueFromCustomAttributes(System.Reflection.Metadata.CustomAttributeHandleCollection,System.Reflection.TypeLoading.Ecma.EcmaModule,byref):ubyte (FullOpts)
         -70 (-13.49 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts)
         -69 (-13.48 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts)
         -67 (-13.06 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts)

Top method regressions (percentages):
          19 (2.29 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts)
          11 (1.77 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts)

Top method improvements (percentages):
         -70 (-13.49 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts)
         -69 (-13.48 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts)
         -67 (-13.06 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts)
        -113 (-4.80 % of base) : System.Reflection.MetadataLoadContext.dasm - System.Reflection.TypeLoading.Ecma.EcmaDefaultValueProcessing:TryFindRawDefaultValueFromCustomAttributes(System.Reflection.Metadata.CustomAttributeHandleCollection,System.Reflection.TypeLoading.Ecma.EcmaModule,byref):ubyte (FullOpts)

8 total methods with Code Size differences (6 improved, 2 regressed), 232053 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Aug 27, 2024

Top method regressions

19 (2.29 % of base) - ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this
 ; Assembly listing for method ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 25 single block inlinees; 8 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T25] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo>
-;  V01 arg1         [V01,T26] (  3,  3   )     ref  ->  r15         class-hnd single-def <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]>
+;  V00 this         [V00,T31] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo>
+;  V01 arg1         [V01,T32] (  3,  3   )     ref  ->  r15         class-hnd single-def <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]>
 ;  V02 loc0         [V02,T08] (  5,162   )     ref  ->  r14         class-hnd exact single-def <System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]>
 ;  V03 loc1         [V03,T13] (  5, 57   )     int  ->  r13        
-;* V04 loc2         [V04,T38] (  0,  0   )    long  ->  zero-ref    class-hnd exact EH-live single-def <System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
+;  V04 loc2         [V04,T20] (  5, 19   )     ref  ->  r12         class-hnd exact single-def <System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
 ;* V05 loc3         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange>
-;  V06 loc4         [V06,T20] (  3, 17   )     int  ->  [rbp-0x2C] 
+;  V06 loc4         [V06,T22] (  3, 17   )     int  ->  [rbp-0x2C] 
 ;* V07 loc5         [V07    ] (  0,  0   )  struct (24) zero-ref    ld-addr-op <System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]>
 ;* V08 loc6         [V08    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition>
 ;  V09 loc7         [V09,T01] (  8,296   )     int  ->  [rbp-0x30] 
 ;# V10 OutArgs      [V10    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V11 tmp1         [V11,T23] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]>
-;* V12 tmp2         [V12    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
+;  V11 tmp1         [V11,T29] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]>
+;  V12 tmp2         [V12,T27] (  5, 10   )     ref  ->  r12         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
 ;* V13 tmp3         [V13    ] (  0,  0   )     int  ->  zero-ref    "impAppendStmt"
 ;* V14 tmp4         [V14    ] (  0,  0   )     int  ->  zero-ref    "impAppendStmt"
-;  V15 tmp5         [V15,T04] (  3,192   )     ref  ->  [rbp-0x90]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]>
+;  V15 tmp5         [V15,T04] (  3,192   )     ref  ->  [rbp-0x70]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]>
 ;* V16 tmp6         [V16    ] (  0,  0   )     int  ->  zero-ref    "impAppendStmt"
 ;* V17 tmp7         [V17    ] (  0,  0   )     int  ->  zero-ref    "impAppendStmt"
-;  V18 tmp8         [V18,T24] (  3,  6   )     ref  ->  rdi         class-hnd single-def "Inlining Arg" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
-;  V19 tmp9         [V19,T33] (  1,  2   )  struct (32) [rbp-0x50]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
+;  V18 tmp8         [V18,T30] (  3,  6   )     ref  ->  rdi         class-hnd single-def "Inlining Arg" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
+;  V19 tmp9         [V19,T33] (  2,  4   )  struct (32) [rbp-0x50]  do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
 ;* V20 tmp10        [V20    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;* V21 tmp11        [V21    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V22 tmp12        [V22,T27] (  4,  3   )     ref  ->  rdi         class-hnd single-def "Inline stloc first use temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
+;  V21 tmp11        [V21,T25] (  9, 12   )   byref  ->  rax         single-def "Inlining Arg"
+;  V22 tmp12        [V22,T34] (  4,  3   )     ref  ->  rdi         class-hnd single-def "Inline stloc first use temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
 ;* V23 tmp13        [V23    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V24 tmp14        [V24    ] (  0,  0   )  struct (24) zero-ref    ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]>
 ;* V25 tmp15        [V25    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;  V26 tmp16        [V26,T10] (  9,144   )    long  ->  rdi         "Inlining Arg"
-;  V27 tmp17        [V27,T17] (  4, 32   )     ref  ->  rsi         class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
+;  V26 tmp16        [V26,T10] (  7,112   )   byref  ->  rax         "Inlining Arg"
+;  V27 tmp17        [V27,T17] (  4, 32   )     ref  ->  rdx         class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]>
 ;* V28 tmp18        [V28    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V29 tmp19        [V29,T00] (  7,448   )     ref  ->  rdi         class-hnd "Inline return value spill temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]>
 ;  V30 tmp20        [V30,T05] (  3,192   )   byref  ->  rax         "Inline stloc first use temp"
 ;* V31 tmp21        [V31    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]>
 ;  V32 tmp22        [V32,T06] (  3,192   )     ref  ->  rdx         class-hnd "Inline stloc first use temp" <ILCompiler.Reflection.ReadyToRun.BaseGcTransition[]>
 ;  V33 tmp23        [V33,T03] (  4,256   )     int  ->  rsi         "Inline stloc first use temp"
 ;* V34 tmp24        [V34    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V35 tmp25        [V35    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]>
 ;* V36 tmp26        [V36    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V37 tmp27        [V37    ] ( 19, 36.50)  struct (40) [rbp-0x78]  do-not-enreg[XSF] must-init addr-exposed "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]]>
-;* V38 tmp28        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V05.<Index>k__BackingField (fldOffset=0x0)" P-INDEP
-;  V39 tmp29        [V39,T12] (  6, 58   )     int  ->  rbx         "field V05.<StartOffset>k__BackingField (fldOffset=0x4)" P-INDEP
-;  V40 tmp30        [V40,T14] (  5, 50   )     int  ->  r12         "field V05.<StopOffset>k__BackingField (fldOffset=0x8)" P-INDEP
-;  V41 tmp31        [V41,T11] (  4, 73   )     ref  ->  r15         single-def "field V07._list (fldOffset=0x0)" P-INDEP
-;  V42 tmp32        [V42,T02] (  6,264   )     ref  ->  [rbp-0x98]  spill-single-def "field V07._current (fldOffset=0x8)" P-INDEP
-;* V43 tmp33        [V43,T35] (  0,  0   )     int  ->  zero-ref    "field V07._index (fldOffset=0x10)" P-INDEP
-;  V44 tmp34        [V44,T22] (  2,  9   )     int  ->  [rbp-0x7C]  spill-single-def "field V07._version (fldOffset=0x14)" P-INDEP
-;  V45 tmp35        [V45,T28] (  3,  3   )     ref  ->  r15         single-def "field V24._list (fldOffset=0x0)" P-INDEP
-;* V46 tmp36        [V46    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V24._current (fldOffset=0x8)" P-INDEP
-;* V47 tmp37        [V47,T36] (  0,  0   )     int  ->  zero-ref    single-def "field V24._index (fldOffset=0x10)" P-INDEP
-;  V48 tmp38        [V48,T31] (  2,  2   )     int  ->  rax         single-def "field V24._version (fldOffset=0x14)" P-INDEP
-;* V49 tmp39        [V49    ] (  0,  0   )     ref  ->  zero-ref    single-def "V19.[000..008)"
-;* V50 tmp40        [V50    ] (  0,  0   )     int  ->  zero-ref    single-def "V19.[008..012)"
-;  V51 tmp41        [V51,T32] (  2,  2   )     int  ->  rsi         single-def "V19.[012..016)"
-;  V52 tmp42        [V52,T29] (  3,  3   )     ref  ->  rdi         single-def "arr expr"
-;  V53 tmp43        [V53,T30] (  3,  3   )     int  ->  rsi         "index expr"
-;  V54 tmp44        [V54,T07] (  3,192   )     ref  ->  rcx         "arr expr"
-;  V55 tmp45        [V55,T15] (  3, 48   )     ref  ->   r8         "arr expr"
-;  V56 tmp46        [V56,T16] (  3, 48   )     int  ->   r9         "index expr"
-;  V57 PSPSym       [V57,T37] (  1,  1   )    long  ->  [rbp-0xA0]  do-not-enreg[V] "PSPSym"
-;  V58 cse0         [V58,T19] (  3, 24   )     int  ->   r9         "CSE #06: moderate"
-;  V59 cse1         [V59,T21] (  2, 16   )     int  ->   r9         "CSE #07: moderate"
-;  V60 cse2         [V60,T34] (  3,  1.50)     int  ->  rsi         "CSE #05: conservative"
-;  V61 cse3         [V61,T18] (  3, 24   )     ref  ->   r8         "CSE #08: moderate"
-;  V62 rat0         [V62,T09] (  6,161   )    long  ->  [rbp-0x88]  "Widened IV V43"
+;* V37 tmp27        [V37    ] (  0,  0   )     int  ->  zero-ref    "field V05.<Index>k__BackingField (fldOffset=0x0)" P-INDEP
+;  V38 tmp28        [V38,T12] (  6, 58   )     int  ->  [rbp-0x54]  "field V05.<StartOffset>k__BackingField (fldOffset=0x4)" P-INDEP
+;  V39 tmp29        [V39,T14] (  5, 50   )     int  ->  [rbp-0x58]  "field V05.<StopOffset>k__BackingField (fldOffset=0x8)" P-INDEP
+;  V40 tmp30        [V40,T11] (  4, 73   )     ref  ->  r15         single-def "field V07._list (fldOffset=0x0)" P-INDEP
+;  V41 tmp31        [V41,T02] (  6,264   )     ref  ->  [rbp-0x78]  spill-single-def "field V07._current (fldOffset=0x8)" P-INDEP
+;* V42 tmp32        [V42,T42] (  0,  0   )     int  ->  zero-ref    "field V07._index (fldOffset=0x10)" P-INDEP
+;  V43 tmp33        [V43,T28] (  2,  9   )     int  ->  [rbp-0x5C]  spill-single-def "field V07._version (fldOffset=0x14)" P-INDEP
+;  V44 tmp34        [V44,T35] (  3,  3   )     ref  ->  r15         single-def "field V24._list (fldOffset=0x0)" P-INDEP
+;* V45 tmp35        [V45    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V24._current (fldOffset=0x8)" P-INDEP
+;* V46 tmp36        [V46,T43] (  0,  0   )     int  ->  zero-ref    single-def "field V24._index (fldOffset=0x10)" P-INDEP
+;  V47 tmp37        [V47,T38] (  2,  2   )     int  ->   r8         single-def "field V24._version (fldOffset=0x14)" P-INDEP
+;* V48 tmp38        [V48    ] (  0,  0   )     ref  ->  zero-ref    single-def "V19.[000..008)"
+;* V49 tmp39        [V49    ] (  0,  0   )     int  ->  zero-ref    single-def "V19.[008..012)"
+;  V50 tmp40        [V50,T39] (  2,  2   )     int  ->  rdx         single-def "V19.[012..016)"
+;  V51 tmp41        [V51,T36] (  3,  3   )     ref  ->  rdi         single-def "arr expr"
+;  V52 tmp42        [V52,T37] (  3,  3   )     int  ->  rsi         "index expr"
+;  V53 tmp43        [V53,T07] (  3,192   )     ref  ->   r9         "arr expr"
+;  V54 tmp44        [V54,T15] (  3, 48   )     ref  ->  rsi         "arr expr"
+;  V55 tmp45        [V55,T16] (  3, 48   )     int  ->  rdi         "index expr"
+;  V56 PSPSym       [V56,T44] (  1,  1   )    long  ->  [rbp-0x90]  do-not-enreg[V] "PSPSym"
+;  V57 cse0         [V57,T18] (  3, 24   )     int  ->  rdi         "CSE #08: moderate"
+;  V58 cse1         [V58,T23] (  2, 16   )     int  ->  rdi         "CSE #09: moderate"
+;  V59 cse2         [V59,T24] (  2, 16   )     int  ->  r11         "CSE #11: moderate"
+;  V60 cse3         [V60,T19] (  3, 24   )     int  ->  rsi         "CSE #12: moderate"
+;  V61 cse4         [V61,T40] (  3,  1.50)     int  ->  rsi         "CSE #02: conservative"
+;  V62 cse5         [V62,T41] (  3,  1.50)     int  ->  rcx         "CSE #06: conservative"
+;  V63 cse6         [V63,T21] (  6, 18   )   byref  ->  [rbp-0x80]  multi-def "CSE #07: moderate"
+;  V64 cse7         [V64,T26] (  4, 11   )   byref  ->  rbx         "CSE #01: moderate"
+;  V65 rat0         [V65,T09] (  6,161   )    long  ->  [rbp-0x68]  "Widened IV V42"
 ;
-; Lcl frame size = 120
+; Lcl frame size = 104
 
 G_M53180_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 120
-       lea      rbp, [rsp+0xA0]
-       xor      eax, eax
-       mov      qword ptr [rbp-0x78], rax
+       sub      rsp, 104
+       lea      rbp, [rsp+0x90]
        vxorps   xmm8, xmm8, xmm8
-       vmovdqu32 zmmword ptr [rbp-0x70], zmm8
-       mov      qword ptr [rbp-0xA0], rsp
+       vmovdqu  ymmword ptr [rbp-0x50], ymm8
+       mov      qword ptr [rbp-0x90], rsp
        mov      rbx, rdi
        mov      r15, rsi
-						;; size=56 bbWeight=1 PerfScore 11.83
+						;; size=45 bbWeight=1 PerfScore 10.58
 G_M53180_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r14
        xor      esi, esi
        xor      rdx, rdx
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:.ctor(int,System.Collections.Generic.IEqualityComparer`1[int]):this
        call     [rax]System.Collections.Generic.Dictionary`2[int,System.__Canon]:.ctor(int,System.Collections.Generic.IEqualityComparer`1[int]):this
        xor      r13d, r13d
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange]
-       mov      qword ptr [rbp-0x78], rdi
+       call     CORINFO_HELP_NEWSFAST
+       mov      r12, rax
        mov      rdi, gword ptr [rbx+0x38]
-       mov      esi, dword ptr [rdi+0x14]
-						;; size=61 bbWeight=1 PerfScore 11.00
+       mov      edx, dword ptr [rdi+0x14]
+       mov      gword ptr [rbp-0x50], rdi
+       lea      rbx, bword ptr [r12+0x08]
+       mov      rdi, rbx
+       lea      rsi, bword ptr [rbp-0x50]
+       call     CORINFO_HELP_ASSIGN_BYREF
+       movsq    
+       movsq    
+       movsq    
+       xor      edi, edi
+       mov      dword ptr [r12+0x10], edi
+       mov      dword ptr [r12+0x14], edx
+						;; size=104 bbWeight=1 PerfScore 19.75
 G_M53180_IG03:
-       vmovdqu  ymm0, ymmword ptr [rbp-0x50]
-       vmovdqu  ymmword ptr [rbp-0x70], ymm0
-						;; size=10 bbWeight=1 PerfScore 5.00
+       mov      rax, rbx
+       mov      rdi, gword ptr [rax]
+       mov      esi, dword ptr [rax+0x0C]
+       cmp      esi, dword ptr [rdi+0x14]
+       jne      G_M53180_IG19
+						;; size=18 bbWeight=1 PerfScore 8.25
 G_M53180_IG04:
-       mov      gword ptr [rbp-0x70], rdi
+       mov      esi, dword ptr [rax+0x08]
+       mov      ecx, dword ptr [rdi+0x10]
+       cmp      esi, ecx
+       jb       SHORT G_M53180_IG05
+       inc      ecx
+       mov      dword ptr [rax+0x08], ecx
+       lea      rcx, bword ptr [rax+0x10]
        xor      edi, edi
-       mov      dword ptr [rbp-0x68], edi
-       mov      dword ptr [rbp-0x64], esi
-						;; size=12 bbWeight=1 PerfScore 3.25
+       mov      qword ptr [rcx], rdi
+       mov      dword ptr [rcx+0x08], edi
+       jmp      SHORT G_M53180_IG06
+						;; size=29 bbWeight=0.50 PerfScore 5.62
 G_M53180_IG05:
-       mov      rdi, gword ptr [rbp-0x70]
-       mov      esi, dword ptr [rbp-0x64]
-       cmp      esi, dword ptr [rdi+0x14]
-       jne      G_M53180_IG21
-						;; size=16 bbWeight=1 PerfScore 6.00
-G_M53180_IG06:
-       mov      esi, dword ptr [rdi+0x10]
-       cmp      dword ptr [rbp-0x68], esi
-       jb       SHORT G_M53180_IG07
-       inc      esi
-       mov      dword ptr [rbp-0x68], esi
-       xor      edi, edi
-       mov      qword ptr [rbp-0x60], rdi
-       mov      dword ptr [rbp-0x58], edi
-       jmp      SHORT G_M53180_IG08
-						;; size=24 bbWeight=0.50 PerfScore 5.25
-G_M53180_IG07:
        mov      rdi, gword ptr [rdi+0x08]
-       mov      esi, dword ptr [rbp-0x68]
        cmp      esi, dword ptr [rdi+0x08]
-       jae      G_M53180_IG20
-       lea      rsi, [rsi+2*rsi]
-       mov      rax, qword ptr [rdi+4*rsi+0x10]
-       mov      qword ptr [rbp-0x60], rax
-       mov      eax, dword ptr [rdi+4*rsi+0x18]
-       mov      dword ptr [rbp-0x58], eax
-       mov      edi, dword ptr [rbp-0x68]
-       inc      edi
-       mov      dword ptr [rbp-0x68], edi
-						;; size=44 bbWeight=0.50 PerfScore 7.88
-G_M53180_IG08:
-       mov      ebx, dword ptr [rbp-0x5C]
-       mov      r12d, dword ptr [rbp-0x58]
-       mov      edi, r12d
-       sub      edi, ebx
-       mov      eax, dword ptr [r15+0x14]
-       mov      dword ptr [rbp-0x7C], eax
+       jae      G_M53180_IG18
+       mov      ecx, esi
+       lea      rsi, [rcx+2*rcx]
+       lea      rcx, bword ptr [rax+0x10]
+       mov      rdx, qword ptr [rdi+4*rsi+0x10]
+       mov      qword ptr [rcx], rdx
+       mov      edx, dword ptr [rdi+4*rsi+0x18]
+       mov      dword ptr [rcx+0x08], edx
+       inc      dword ptr [rax+0x08]
+						;; size=41 bbWeight=0.50 PerfScore 8.12
+G_M53180_IG06:
+       mov      eax, dword ptr [r12+0x1C]
+       mov      edx, dword ptr [r12+0x20]
+       mov      edi, edx
+       sub      edi, eax
+       mov      r8d, dword ptr [r15+0x14]
+       mov      dword ptr [rbp-0x5C], r8d
        xor      esi, esi
-       jmp      SHORT G_M53180_IG10
-						;; size=23 bbWeight=1 PerfScore 7.75
-G_M53180_IG09:
+       jmp      SHORT G_M53180_IG08
+						;; size=26 bbWeight=1 PerfScore 9.75
+G_M53180_IG07:
        lea      eax, [rsi+0x01]
        mov      dword ptr [rdi+0x10], eax
        movsxd   rsi, esi
        mov      rdi, rdx
-       mov      rdx, gword ptr [rbp-0x98]
+       mov      rdx, gword ptr [rbp-0x78]
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_ARRADDR_ST
        call     [rax]CORINFO_HELP_ARRADDR_ST
-       mov      eax, dword ptr [rbp-0x7C]
-       mov      rsi, qword ptr [rbp-0x88]
+       mov      eax, dword ptr [rbp-0x54]
+       mov      rcx, bword ptr [rbp-0x80]
+       mov      edx, dword ptr [rbp-0x58]
+       mov      rsi, qword ptr [rbp-0x68]
        mov      edi, dword ptr [rbp-0x2C]
-						;; size=44 bbWeight=64 PerfScore 592.00
-G_M53180_IG10:
-       cmp      eax, dword ptr [r15+0x14]
-       jne      G_M53180_IG21
+       mov      r8d, dword ptr [rbp-0x5C]
+						;; size=49 bbWeight=64 PerfScore 784.00
+G_M53180_IG08:
+       cmp      r8d, dword ptr [r15+0x14]
+       jne      G_M53180_IG19
 						;; size=10 bbWeight=8 PerfScore 32.00
-G_M53180_IG11:
+G_M53180_IG09:
        cmp      esi, dword ptr [r15+0x10]
-       jae      G_M53180_IG24
-       mov      rcx, gword ptr [r15+0x08]
-       cmp      esi, dword ptr [rcx+0x08]
-       jae      G_M53180_IG20
-       mov      rcx, gword ptr [rcx+8*rsi+0x10]
-       mov      gword ptr [rbp-0x98], rcx
+       jae      G_M53180_IG22
+       mov      r9, gword ptr [r15+0x08]
+       cmp      esi, dword ptr [r9+0x08]
+       jae      G_M53180_IG18
+       mov      r9, gword ptr [r9+8*rsi+0x10]
+       mov      gword ptr [rbp-0x78], r9
        inc      esi
-       mov      qword ptr [rbp-0x88], rsi
-       mov      r8d, ebx
-       add      r8d, dword ptr [rcx+0x08]
-       sub      r8d, r13d
-       movsxd   rsi, r8d
-       mov      r9d, r12d
-       cmp      rsi, r9
-       jle      SHORT G_M53180_IG13
-						;; size=65 bbWeight=32 PerfScore 624.00
-G_M53180_IG12:
+       mov      qword ptr [rbp-0x68], rsi
+       mov      r11d, eax
+       add      r11d, dword ptr [r9+0x08]
+       sub      r11d, r13d
+       movsxd   rsi, r11d
+       mov      r8d, edx
+       cmp      rsi, r8
+       mov      dword ptr [rbp-0x54], eax
+       mov      dword ptr [rbp-0x58], edx
+       jle      SHORT G_M53180_IG11
+						;; size=66 bbWeight=32 PerfScore 688.00
+G_M53180_IG10:
        add      r13d, edi
-       lea      rdi, [rbp-0x70]
-       mov      r8, gword ptr [rdi]
-       mov      rsi, r8
-       mov      r9d, dword ptr [rdi+0x0C]
-       cmp      r9d, dword ptr [rsi+0x14]
-       jne      G_M53180_IG21
-       mov      r9d, dword ptr [rdi+0x08]
-       cmp      r9d, dword ptr [rsi+0x10]
-       jae      SHORT G_M53180_IG14
-       mov      r8, gword ptr [rsi+0x08]
-       cmp      r9d, dword ptr [r8+0x08]
-       jae      G_M53180_IG20
-       mov      esi, r9d
-       lea      rsi, [rsi+2*rsi]
-       mov      r9, qword ptr [r8+4*rsi+0x10]
-       mov      qword ptr [rdi+0x10], r9
-       mov      r9d, dword ptr [r8+4*rsi+0x18]
-       mov      dword ptr [rdi+0x18], r9d
-       inc      dword ptr [rdi+0x08]
-       jmp      SHORT G_M53180_IG15
-						;; size=81 bbWeight=8 PerfScore 262.00
-G_M53180_IG13:
+       mov      rax, rbx
+       mov      rdx, gword ptr [rax]
+       mov      edi, dword ptr [rax+0x0C]
+       mov      r11d, dword ptr [rdx+0x14]
+       cmp      edi, r11d
+       jne      G_M53180_IG19
+       mov      edi, dword ptr [rax+0x08]
+       mov      esi, dword ptr [rdx+0x10]
+       cmp      edi, esi
+       jae      SHORT G_M53180_IG12
+       mov      rsi, gword ptr [rdx+0x08]
+       cmp      edi, dword ptr [rsi+0x08]
+       jae      G_M53180_IG18
+       lea      rdi, [rdi+2*rdi]
+       mov      rdx, qword ptr [rsi+4*rdi+0x10]
+       mov      qword ptr [rcx], rdx
+       mov      edx, dword ptr [rsi+4*rdi+0x18]
+       mov      dword ptr [rcx+0x08], edx
+       inc      dword ptr [rax+0x08]
+       jmp      SHORT G_M53180_IG13
+						;; size=72 bbWeight=8 PerfScore 244.00
+G_M53180_IG11:
+       mov      bword ptr [rbp-0x80], rcx
        mov      dword ptr [rbp-0x2C], edi
-       jmp      SHORT G_M53180_IG16
-						;; size=5 bbWeight=16 PerfScore 48.00
-G_M53180_IG14:
-       mov      esi, dword ptr [r8+0x10]
+       jmp      SHORT G_M53180_IG14
+						;; size=9 bbWeight=16 PerfScore 64.00
+G_M53180_IG12:
        inc      esi
-       mov      dword ptr [rdi+0x08], esi
-       xor      esi, esi
-       mov      qword ptr [rdi+0x10], rsi
-       mov      dword ptr [rdi+0x18], esi
-						;; size=18 bbWeight=8 PerfScore 44.00
-G_M53180_IG15:
-       mov      ebx, dword ptr [rbp-0x5C]
-       mov      r12d, dword ptr [rbp-0x58]
-       mov      edi, r12d
-       sub      edi, ebx
+       mov      dword ptr [rax+0x08], esi
+       xor      edi, edi
+       mov      bword ptr [rbp-0x80], rcx
+       mov      qword ptr [rcx], rdi
+       mov      dword ptr [rcx+0x08], edi
+       mov      rcx, bword ptr [rbp-0x80]
+						;; size=21 bbWeight=8 PerfScore 44.00
+G_M53180_IG13:
+       mov      eax, dword ptr [r12+0x1C]
+       mov      edx, dword ptr [r12+0x20]
+       mov      dword ptr [rbp-0x58], edx
+       mov      edi, edx
+       sub      edi, eax
        mov      dword ptr [rbp-0x2C], edi
-       mov      edi, ebx
-       add      edi, dword ptr [rcx+0x08]
-       sub      edi, r13d
-       mov      r9d, edi
-       mov      r8d, r9d
-						;; size=29 bbWeight=8 PerfScore 60.00
-G_M53180_IG16:
-       mov      dword ptr [rcx+0x08], r8d
+       mov      dword ptr [rbp-0x54], eax
+       mov      r11d, eax
+       add      r11d, dword ptr [r9+0x08]
+       sub      r11d, r13d
+       mov      bword ptr [rbp-0x80], rcx
+						;; size=37 bbWeight=8 PerfScore 96.00
+G_M53180_IG14:
+       mov      dword ptr [r9+0x08], r11d
        mov      rdi, r14
-       mov      dword ptr [rbp-0x30], r8d
-       mov      esi, r8d
-       mov      r9, 0xD1FFAB1E      ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this
-       call     [r9]System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this
+       mov      dword ptr [rbp-0x30], r11d
+       mov      esi, r11d
+       mov      r8, 0xD1FFAB1E      ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this
+       call     [r8]System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this
        test     rax, rax
-       jne      SHORT G_M53180_IG19
+       jne      SHORT G_M53180_IG17
 						;; size=32 bbWeight=64 PerfScore 448.00
-G_M53180_IG17:
+G_M53180_IG15:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]
        call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x90], rax
+       mov      gword ptr [rbp-0x70], rax
        mov      rdi, 0xD1FFAB1E      ; global ptr
        test     byte  ptr [rdi], 1
-       je       G_M53180_IG22
-						;; size=41 bbWeight=32 PerfScore 208.00
-G_M53180_IG18:
+       je       G_M53180_IG20
+						;; size=38 bbWeight=32 PerfScore 208.00
+G_M53180_IG16:
        mov      rdi, 0xD1FFAB1E      ; data for System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]:s_emptyArray
        mov      rsi, gword ptr [rdi]
        lea      rdi, bword ptr [rax+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, r14
        mov      esi, dword ptr [rbp-0x30]
-       mov      rdx, gword ptr [rbp-0x90]
+       mov      rdx, gword ptr [rbp-0x70]
        mov      ecx, 1
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:TryInsert(int,System.__Canon,ubyte):ubyte:this
        call     [rax]System.Collections.Generic.Dictionary`2[int,System.__Canon]:TryInsert(int,System.__Canon,ubyte):ubyte:this
-						;; size=52 bbWeight=32 PerfScore 304.00
-G_M53180_IG19:
+						;; size=49 bbWeight=32 PerfScore 304.00
+G_M53180_IG17:
        mov      rdi, r14
        mov      esi, dword ptr [rbp-0x30]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this
        call     [rax]System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this
        test     rax, rax
-       je       SHORT G_M53180_IG23
+       je       SHORT G_M53180_IG21
        mov      rdi, gword ptr [rax]
        inc      dword ptr [rdi+0x14]
        mov      rdx, gword ptr [rdi+0x08]
        mov      esi, dword ptr [rdi+0x10]
        cmp      dword ptr [rdx+0x08], esi
-       ja       G_M53180_IG09
-       mov      rsi, gword ptr [rbp-0x98]
+       ja       G_M53180_IG07
+       mov      rsi, gword ptr [rbp-0x78]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
        call     [rax]System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
-       mov      eax, dword ptr [rbp-0x7C]
-       mov      rsi, qword ptr [rbp-0x88]
+       mov      eax, dword ptr [rbp-0x54]
+       mov      rcx, bword ptr [rbp-0x80]
+       mov      edx, dword ptr [rbp-0x58]
+       mov      rsi, qword ptr [rbp-0x68]
        mov      edi, dword ptr [rbp-0x2C]
-       jmp      G_M53180_IG10
-						;; size=82 bbWeight=64 PerfScore 1792.00
-G_M53180_IG20:
+       mov      r8d, dword ptr [rbp-0x5C]
+       jmp      G_M53180_IG08
+						;; size=87 bbWeight=64 PerfScore 1984.00
+G_M53180_IG18:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
-G_M53180_IG21:
+G_M53180_IG19:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
        call     [rax]System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M53180_IG22:
+G_M53180_IG20:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]
        call     CORINFO_HELP_GET_GCSTATIC_BASE
-       mov      rax, gword ptr [rbp-0x90]
-       jmp      G_M53180_IG18
-						;; size=27 bbWeight=0 PerfScore 0.00
-G_M53180_IG23:
+       mov      rax, gword ptr [rbp-0x70]
+       jmp      G_M53180_IG16
+						;; size=24 bbWeight=0 PerfScore 0.00
+G_M53180_IG21:
        mov      edi, dword ptr [rbp-0x30]
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowKeyNotFoundException[int](int)
        call     [rax]System.ThrowHelper:ThrowKeyNotFoundException[int](int)
        int3     
 						;; size=16 bbWeight=0 PerfScore 0.00
-G_M53180_IG24:
+G_M53180_IG22:
        mov      rax, r14
 						;; size=3 bbWeight=1 PerfScore 0.25
-G_M53180_IG25:
-       vzeroupper 
-       add      rsp, 120
+G_M53180_IG23:
+       add      rsp, 104
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=18 bbWeight=1 PerfScore 5.25
-G_M53180_IG26:
+						;; size=15 bbWeight=1 PerfScore 4.25
+G_M53180_IG24:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
-       lea      rbp, [rbp+0xA0]
+       lea      rbp, [rbp+0x90]
 						;; size=25 bbWeight=0 PerfScore 0.00
-G_M53180_IG27:
-       vzeroupper 
+G_M53180_IG25:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=18 bbWeight=0 PerfScore 0.00
+						;; size=15 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 831, prolog size 56, PerfScore 4477.46, instruction count 219, allocated bytes for code 831 (MethodHash=d9be3043) for method ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts)
+; Total bytes of code 850, prolog size 45, PerfScore 4962.58, instruction count 234, allocated bytes for code 850 (MethodHash=d9be3043) for method ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts)
11 (1.77 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]]
 ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (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; 6 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T03] (  9, 26.50)     ref  ->  rbx         class-hnd single-def <System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]]>
 ;  V01 arg1         [V01,T04] (  5, 11   )     ref  ->  r15         class-hnd single-def <System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]>
 ;  V02 loc0         [V02,T02] ( 11, 29.66)     ref  ->  r14         class-hnd <System.Numerics.Vector`1[float][]>
 ;* V03 loc1         [V03,T09] (  0,  0   )     int  ->  zero-ref   
-;  V04 loc2         [V04,T07] (  4,  8   )     int  ->  r12        
+;  V04 loc2         [V04,T06] (  4,  8   )     int  ->  r12        
 ;  V05 loc3         [V05,T12] (  3,  8   )  simd32  ->  [rbp-0x50]  do-not-enreg[HS] hidden-struct-arg <System.Numerics.Vector`1[float]>
 ;  V06 loc4         [V06,T00] ( 12, 82.16)     int  ->  [rbp-0x54] 
 ;  V07 OutArgs      [V07    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V08 tmp1         [V08,T11] (  2, 16   )  simd32  ->  [rbp-0x90]  do-not-enreg[HS] hidden-struct-arg "spilled call-like call argument"
-;  V09 tmp2         [V09,T05] (  3, 12   )     ref  ->  [rbp-0xB8]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Numerics.Vector`1[float]>
-;  V10 tmp3         [V10,T06] (  3, 12   )     ref  ->  [rbp-0xC0]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Numerics.Vector`1[float]>
+;* V09 tmp2         [V09    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Numerics.Vector`1[float]>
+;  V10 tmp3         [V10,T05] (  3, 12   )     ref  ->  [rbp-0xE0]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Numerics.Vector`1[float]>
 ;  V11 tmp4         [V11,T10] (  4, 64   )  simd32  ->  [rbp-0xB0]  do-not-enreg[HS] hidden-struct-arg "Strict ordering of exceptions for Array store"
 ;  V12 tmp5         [V12,T08] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[System.Numerics.Vector`1[float]]>
-;  V13 rat0         [V13,T01] ( 12, 42   )    long  ->  r13         "Widened IV V03"
+;  V13 tmp6         [V13    ] (  4,  8   )  struct (40) [rbp-0xD8]  do-not-enreg[XSF] addr-exposed "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[System.Numerics.Vector`1[float]]>
+;  V14 cse0         [V14,T07] (  3,  6   )    long  ->  rdi         "CSE #01: aggressive"
+;  V15 rat0         [V15,T01] ( 12, 42   )    long  ->  r13         "Widened IV V03"
 ;
-; Lcl frame size = 184
+; Lcl frame size = 216
 
 G_M3520_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 184
-       lea      rbp, [rsp+0xE0]
+       sub      rsp, 216
+       lea      rbp, [rsp+0x100]
        mov      rbx, rdi
        mov      r15, rsi
 						;; size=31 bbWeight=1 PerfScore 7.25
 G_M3520_IG02:
        test     rbx, rbx
        je       G_M3520_IG16
        test     r15, r15
        je       G_M3520_IG15
        xor      r14, r14
        xor      r13d, r13d
        mov      rdi, gword ptr [rbx+0x08]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.ICollection`1[System.Numerics.Vector`1[float]]:get_Count():int:this
        call     [r11]System.Collections.Generic.ICollection`1[System.Numerics.Vector`1[float]]:get_Count():int:this
        mov      r12d, eax
        test     r12d, r12d
        jle      G_M3520_IG09
 						;; size=53 bbWeight=1 PerfScore 9.75
 G_M3520_IG03:
        mov      rdi, gword ptr [rbx+0x08]
        lea      rsi, [rbp-0x90]
        mov      edx, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this
        call     [r11]System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this
        vmovups  ymm0, ymmword ptr [rbp-0x90]
        vmovups  ymmword ptr [rsp], ymm0
        lea      rsi, [rbp-0x50]
        mov      rdi, gword ptr [r15+0x08]
        call     [r15+0x18]System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]:Invoke(System.Numerics.Vector`1[float]):System.Numerics.Vector`1[float]:this
        test     r14, r14
        jne      G_M3520_IG07
 						;; size=61 bbWeight=4 PerfScore 71.00
 G_M3520_IG04:
+       vxorps   ymm0, ymm0, ymm0
+       vmovdqu  ymmword ptr [rbp-0xD8], ymm0
+       vmovdqu  xmmword ptr [rbp-0xC0], xmm0
        mov      rdi, 0xD1FFAB1E      ; System.Numerics.Vector`1[float]
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0xB8], rax
+       mov      qword ptr [rbp-0xD8], rdi
        vmovups  ymm0, ymmword ptr [rbp-0x50]
-       vmovups  ymmword ptr [rax+0x08], ymm0
-       mov      rdi, 0xD1FFAB1E      ; System.Numerics.Vector`1[float]
+       vmovups  ymmword ptr [rbp-0xD0], ymm0
        call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0xC0], rax
+       mov      gword ptr [rbp-0xE0], rax
        mov      rdi, gword ptr [rbx+0x08]
        lea      rsi, bword ptr [rax+0x08]
        mov      edx, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this
        call     [r11]System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this
-       mov      rsi, gword ptr [rbp-0xB8]
-       cmp      rsi, gword ptr [rbp-0xC0]
+       lea      rsi, [rbp-0xD8]
+       mov      rdi, gword ptr [rbp-0xE0]
+       cmp      rsi, rdi
        je       G_M3520_IG08
        movsxd   rsi, r12d
        mov      rdi, 0xD1FFAB1E      ; System.Numerics.Vector`1[float][]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        xor      eax, eax
        test     r13d, r13d
        jle      SHORT G_M3520_IG07
-						;; size=126 bbWeight=2 PerfScore 47.50
+						;; size=137 bbWeight=2 PerfScore 45.17
 G_M3520_IG05:
        cmp      dword ptr [r14+0x08], r13d
        jl       G_M3520_IG12
 						;; size=10 bbWeight=1 PerfScore 4.00
 G_M3520_IG06:
        mov      rdi, gword ptr [rbx+0x08]
        lea      rsi, [rbp-0xB0]
        mov      dword ptr [rbp-0x54], eax
        mov      edx, eax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this
        call     [r11]System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this
        mov      eax, dword ptr [rbp-0x54]
        mov      edi, eax
        shl      rdi, 5
        vmovups  ymm0, ymmword ptr [rbp-0xB0]
        vmovups  ymmword ptr [r14+rdi+0x10], ymm0
        inc      eax
        cmp      eax, r13d
        jl       SHORT G_M3520_IG06
 						;; size=60 bbWeight=15.84 PerfScore 257.40
 G_M3520_IG07:
        cmp      r13d, dword ptr [r14+0x08]
        jae      G_M3520_IG17
        mov      rax, r13
        shl      rax, 5
        vmovups  ymm0, ymmword ptr [rbp-0x50]
        vmovups  ymmword ptr [r14+rax+0x10], ymm0
 						;; size=29 bbWeight=2 PerfScore 21.50
 G_M3520_IG08:
        inc      r13d
        cmp      r13d, r12d
        jl       G_M3520_IG03
 						;; size=12 bbWeight=4 PerfScore 6.00
 G_M3520_IG09:
        test     r14, r14
        jne      SHORT G_M3520_IG13
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M3520_IG10:
        mov      rax, rbx
 						;; size=3 bbWeight=0.50 PerfScore 0.12
 G_M3520_IG11:
        vzeroupper 
-       add      rsp, 184
+       add      rsp, 216
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=0.50 PerfScore 2.62
 G_M3520_IG12:
        mov      rdi, gword ptr [rbx+0x08]
        lea      rsi, [rbp-0xB0]
        mov      dword ptr [rbp-0x54], eax
        mov      edx, eax
        mov      r11, 0xD1FFAB1E      ; function address
        call     [r11]System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this
        mov      edi, dword ptr [rbp-0x54]
        cmp      edi, dword ptr [r14+0x08]
        jae      G_M3520_IG17
        mov      eax, edi
        shl      rax, 5
        vmovups  ymm0, ymmword ptr [rbp-0xB0]
        vmovups  ymmword ptr [r14+rax+0x10], ymm0
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
        jl       SHORT G_M3520_IG12
        jmp      G_M3520_IG07
 						;; size=77 bbWeight=0.16 PerfScore 3.60
 G_M3520_IG13:
        mov      rdi, 0xD1FFAB1E      ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[System.Numerics.Vector`1[float]]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, rbx
 						;; size=33 bbWeight=0.50 PerfScore 1.75
 G_M3520_IG14:
        vzeroupper 
-       add      rsp, 184
+       add      rsp, 216
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=0.50 PerfScore 2.62
 G_M3520_IG15:
        mov      edi, 0x3B01
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 G_M3520_IG16:
        mov      edi, 0x3AF5
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 G_M3520_IG17:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 620, prolog size 25, PerfScore 436.38, instruction count 144, allocated bytes for code 620 (MethodHash=f352f23f) for method System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts)
+; Total bytes of code 631, prolog size 25, PerfScore 434.04, instruction count 146, allocated bytes for code 631 (MethodHash=f352f23f) for method System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts)

@MihuBot
Copy link
Owner Author

MihuBot commented Aug 27, 2024

Top method improvements

-70 (-13.49 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double]
 ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (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; 6 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T03] (  9, 26.50)     ref  ->  rbx         class-hnd single-def <System.Collections.ObjectModel.ReadOnlyCollection`1[double]>
 ;  V01 arg1         [V01,T04] (  5, 11   )     ref  ->  r15         class-hnd single-def <System.Func`2[double,double]>
-;  V02 loc0         [V02,T02] ( 11, 29.66)     ref  ->  r14         class-hnd <double[]>
-;* V03 loc1         [V03,T09] (  0,  0   )     int  ->  zero-ref   
-;  V04 loc2         [V04,T07] (  4,  8   )     int  ->  r12        
-;  V05 loc3         [V05,T12] (  3,  8   )  double  ->  [rbp-0x30]  spill-single-def
+;  V02 loc0         [V02,T02] ( 11, 33.66)     ref  ->  r14         class-hnd <double[]>
+;* V03 loc1         [V03,T07] (  0,  0   )     int  ->  zero-ref   
+;  V04 loc2         [V04,T05] (  4,  8   )     int  ->  r12        
+;  V05 loc3         [V05,T10] (  2,  8   )  double  ->  [rbp-0x30]  spill-single-def
 ;  V06 loc4         [V06,T00] ( 12, 82.16)     int  ->  [rbp-0x34] 
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V08 tmp1         [V08,T05] (  3, 12   )     ref  ->  [rbp-0x40]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Double>
-;  V09 tmp2         [V09,T06] (  3, 12   )     ref  ->  [rbp-0x48]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Double>
-;  V10 tmp3         [V10,T10] (  4, 64   )  double  ->  mm0         "Strict ordering of exceptions for Array store"
-;  V11 tmp4         [V11,T08] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[double]>
-;  V12 tmp5         [V12,T11] (  2, 16   )  double  ->  mm0         "argument with side effect"
-;  V13 rat0         [V13,T01] ( 12, 42   )    long  ->  r13         "Widened IV V03"
+;* V08 tmp1         [V08    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Double>
+;* V09 tmp2         [V09    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Double>
+;  V10 tmp3         [V10,T08] (  4, 64   )  double  ->  mm0         "Strict ordering of exceptions for Array store"
+;  V11 tmp4         [V11,T06] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[double]>
+;* V12 tmp5         [V12    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[double]>
+;* V13 tmp6         [V13    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[double]>
+;  V14 tmp7         [V14,T09] (  2, 16   )  double  ->  mm0         "argument with side effect"
+;  V15 rat0         [V15,T01] ( 12, 46   )    long  ->  r13         "Widened IV V03"
 ;
-; Lcl frame size = 40
+; Lcl frame size = 24
 
 G_M3862_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 40
-       lea      rbp, [rsp+0x50]
+       sub      rsp, 24
+       lea      rbp, [rsp+0x40]
        mov      rbx, rdi
        mov      r15, rsi
 						;; size=25 bbWeight=1 PerfScore 7.25
 G_M3862_IG02:
        test     rbx, rbx
-       je       G_M3862_IG16
-       test     r15, r15
        je       G_M3862_IG15
+       test     r15, r15
+       je       G_M3862_IG14
        xor      r14, r14
        xor      r13d, r13d
        mov      rdi, gword ptr [rbx+0x08]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.ICollection`1[double]:get_Count():int:this
        call     [r11]System.Collections.Generic.ICollection`1[double]:get_Count():int:this
        mov      r12d, eax
        test     r12d, r12d
-       jle      G_M3862_IG09
+       jle      G_M3862_IG08
 						;; size=53 bbWeight=1 PerfScore 9.75
 G_M3862_IG03:
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[double]:get_Item(int):double:this
        call     [r11]System.Collections.Generic.IList`1[double]:get_Item(int):double:this
        mov      rdi, gword ptr [r15+0x08]
        call     [r15+0x18]System.Func`2[double,double]:Invoke(double):double:this
        vmovsd   qword ptr [rbp-0x30], xmm0
        test     r14, r14
-       jne      G_M3862_IG07
-						;; size=42 bbWeight=4 PerfScore 51.00
+       jne      SHORT G_M3862_IG07
+						;; size=38 bbWeight=4 PerfScore 51.00
 G_M3862_IG04:
-       mov      rdi, 0xD1FFAB1E      ; System.Double
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x40], rax
-       vmovsd   xmm0, qword ptr [rbp-0x30]
-       vmovsd   qword ptr [rax+0x08], xmm0
-       mov      rdi, 0xD1FFAB1E      ; System.Double
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x48], rax
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[double]:get_Item(int):double:this
        call     [r11]System.Collections.Generic.IList`1[double]:get_Item(int):double:this
-       mov      rsi, gword ptr [rbp-0x48]
-       vmovsd   qword ptr [rsi+0x08], xmm0
-       mov      rdi, gword ptr [rbp-0x40]
-       cmp      rdi, rsi
-       je       SHORT G_M3862_IG08
        movsxd   rsi, r12d
        mov      rdi, 0xD1FFAB1E      ; double[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        xor      eax, eax
        test     r13d, r13d
        jle      SHORT G_M3862_IG07
-						;; size=114 bbWeight=2 PerfScore 47.00
+						;; size=48 bbWeight=2 PerfScore 17.50
 G_M3862_IG05:
        cmp      dword ptr [r14+0x08], r13d
-       jl       SHORT G_M3862_IG12
+       jl       SHORT G_M3862_IG11
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M3862_IG06:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x34], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[double]:get_Item(int):double:this
        call     [r11]System.Collections.Generic.IList`1[double]:get_Item(int):double:this
        mov      eax, dword ptr [rbp-0x34]
        mov      edi, eax
        vmovsd   qword ptr [r14+8*rdi+0x10], xmm0
        inc      eax
        cmp      eax, r13d
        jl       SHORT G_M3862_IG06
 						;; size=41 bbWeight=15.84 PerfScore 178.20
 G_M3862_IG07:
        cmp      r13d, dword ptr [r14+0x08]
-       jae      G_M3862_IG17
+       jae      G_M3862_IG16
        vmovsd   xmm0, qword ptr [rbp-0x30]
        vmovsd   qword ptr [r14+8*r13+0x10], xmm0
-						;; size=22 bbWeight=2 PerfScore 18.00
-G_M3862_IG08:
        inc      r13d
        cmp      r13d, r12d
        jl       G_M3862_IG03
-						;; size=12 bbWeight=4 PerfScore 6.00
-G_M3862_IG09:
+						;; size=34 bbWeight=4 PerfScore 42.00
+G_M3862_IG08:
        test     r14, r14
-       jne      SHORT G_M3862_IG13
+       jne      SHORT G_M3862_IG12
 						;; size=5 bbWeight=1 PerfScore 1.25
-G_M3862_IG10:
+G_M3862_IG09:
        mov      rax, rbx
 						;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M3862_IG11:
-       add      rsp, 40
+G_M3862_IG10:
+       add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M3862_IG12:
+G_M3862_IG11:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x34], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; function address
        call     [r11]System.Collections.Generic.IList`1[double]:get_Item(int):double:this
        mov      edi, dword ptr [rbp-0x34]
        cmp      edi, dword ptr [r14+0x08]
-       jae      G_M3862_IG17
+       jae      G_M3862_IG16
        mov      eax, edi
        vmovsd   qword ptr [r14+8*rax+0x10], xmm0
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
-       jl       SHORT G_M3862_IG12
+       jl       SHORT G_M3862_IG11
        jmp      SHORT G_M3862_IG07
 						;; size=55 bbWeight=0.16 PerfScore 2.80
-G_M3862_IG13:
+G_M3862_IG12:
        mov      rdi, 0xD1FFAB1E      ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[double]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, rbx
 						;; size=33 bbWeight=0.50 PerfScore 1.75
-G_M3862_IG14:
-       add      rsp, 40
+G_M3862_IG13:
+       add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M3862_IG15:
+G_M3862_IG14:
        mov      edi, 0x3B01
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M3862_IG16:
+G_M3862_IG15:
        mov      edi, 0x3AF5
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M3862_IG17:
+G_M3862_IG16:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 519, prolog size 19, PerfScore 331.38, instruction count 132, allocated bytes for code 519 (MethodHash=5a3ef0e9) for method System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts)
+; Total bytes of code 449, prolog size 19, PerfScore 319.88, instruction count 119, allocated bytes for code 449 (MethodHash=5a3ef0e9) for method System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts)
-69 (-13.48 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short]
 ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (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; 6 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T04] (  9, 26.50)     ref  ->  rbx         class-hnd single-def <System.Collections.ObjectModel.ReadOnlyCollection`1[short]>
 ;  V01 arg1         [V01,T06] (  5, 11   )     ref  ->  r15         class-hnd single-def <System.Func`2[short,short]>
-;  V02 loc0         [V02,T03] ( 11, 29.66)     ref  ->  r14         class-hnd <short[]>
-;* V03 loc1         [V03,T12] (  0,  0   )     int  ->  zero-ref   
-;  V04 loc2         [V04,T09] (  4,  8   )     int  ->  r12        
-;  V05 loc3         [V05,T10] (  3,  8   )   short  ->  [rbp-0x2C]  spill-single-def
+;  V02 loc0         [V02,T03] ( 11, 33.66)     ref  ->  r14         class-hnd <short[]>
+;* V03 loc1         [V03,T10] (  0,  0   )     int  ->  zero-ref   
+;  V04 loc2         [V04,T07] (  4,  8   )     int  ->  r12        
+;  V05 loc3         [V05,T08] (  2,  8   )   short  ->  [rbp-0x2C]  spill-single-def
 ;  V06 loc4         [V06,T00] ( 12, 82.16)     int  ->  [rbp-0x30] 
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V08 tmp1         [V08,T07] (  3, 12   )     ref  ->  [rbp-0x38]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Int16>
-;  V09 tmp2         [V09,T08] (  3, 12   )     ref  ->  [rbp-0x40]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Int16>
+;* V08 tmp1         [V08    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Int16>
+;* V09 tmp2         [V09    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Int16>
 ;  V10 tmp3         [V10,T01] (  4, 64   )     int  ->  rax         "Strict ordering of exceptions for Array store"
-;  V11 tmp4         [V11,T11] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[short]>
-;  V12 tmp5         [V12,T05] (  2, 16   )     int  ->  rsi         "argument with side effect"
-;  V13 rat0         [V13,T02] ( 12, 42   )    long  ->  r13         "Widened IV V03"
+;  V11 tmp4         [V11,T09] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[short]>
+;* V12 tmp5         [V12    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[short]>
+;* V13 tmp6         [V13    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[short]>
+;  V14 tmp7         [V14,T05] (  2, 16   )     int  ->  rsi         "argument with side effect"
+;  V15 rat0         [V15,T02] ( 12, 46   )    long  ->  r13         "Widened IV V03"
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M56529_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
+       push     rax
+       lea      rbp, [rsp+0x30]
        mov      rbx, rdi
        mov      r15, rsi
-						;; size=25 bbWeight=1 PerfScore 7.25
+						;; size=22 bbWeight=1 PerfScore 8.00
 G_M56529_IG02:
        test     rbx, rbx
-       je       G_M56529_IG16
-       test     r15, r15
        je       G_M56529_IG15
+       test     r15, r15
+       je       G_M56529_IG14
        xor      r14, r14
        xor      r13d, r13d
        mov      rdi, gword ptr [rbx+0x08]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.ICollection`1[short]:get_Count():int:this
        call     [r11]System.Collections.Generic.ICollection`1[short]:get_Count():int:this
        mov      r12d, eax
        test     r12d, r12d
-       jle      G_M56529_IG09
+       jle      G_M56529_IG08
 						;; size=53 bbWeight=1 PerfScore 9.75
 G_M56529_IG03:
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[short]:get_Item(int):short:this
        call     [r11]System.Collections.Generic.IList`1[short]:get_Item(int):short:this
        mov      esi, eax
        mov      rdi, gword ptr [r15+0x08]
        call     [r15+0x18]System.Func`2[short,short]:Invoke(short):short:this
        mov      dword ptr [rbp-0x2C], eax
        test     r14, r14
-       jne      G_M56529_IG07
-						;; size=42 bbWeight=4 PerfScore 52.00
+       jne      SHORT G_M56529_IG07
+						;; size=38 bbWeight=4 PerfScore 52.00
 G_M56529_IG04:
-       mov      rdi, 0xD1FFAB1E      ; System.Int16
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x38], rax
-       mov      ecx, dword ptr [rbp-0x2C]
-       mov      word  ptr [rax+0x08], cx
-       mov      rdi, 0xD1FFAB1E      ; System.Int16
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x40], rax
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[short]:get_Item(int):short:this
        call     [r11]System.Collections.Generic.IList`1[short]:get_Item(int):short:this
-       mov      rsi, gword ptr [rbp-0x40]
-       mov      word  ptr [rsi+0x08], ax
-       mov      rdi, gword ptr [rbp-0x38]
-       cmp      rdi, rsi
-       je       SHORT G_M56529_IG08
        movsxd   rsi, r12d
        mov      rdi, 0xD1FFAB1E      ; short[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        xor      eax, eax
        test     r13d, r13d
        jle      SHORT G_M56529_IG07
-						;; size=110 bbWeight=2 PerfScore 39.00
+						;; size=48 bbWeight=2 PerfScore 17.50
 G_M56529_IG05:
        cmp      dword ptr [r14+0x08], r13d
-       jl       SHORT G_M56529_IG12
+       jl       SHORT G_M56529_IG11
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M56529_IG06:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x30], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[short]:get_Item(int):short:this
        call     [r11]System.Collections.Generic.IList`1[short]:get_Item(int):short:this
        mov      edi, dword ptr [rbp-0x30]
        mov      esi, edi
        mov      word  ptr [r14+2*rsi+0x10], ax
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
        jl       SHORT G_M56529_IG06
 						;; size=42 bbWeight=15.84 PerfScore 166.32
 G_M56529_IG07:
        cmp      r13d, dword ptr [r14+0x08]
-       jae      G_M56529_IG17
+       jae      G_M56529_IG16
        mov      ecx, dword ptr [rbp-0x2C]
        mov      word  ptr [r14+2*r13+0x10], cx
-						;; size=19 bbWeight=2 PerfScore 12.00
-G_M56529_IG08:
        inc      r13d
        cmp      r13d, r12d
        jl       G_M56529_IG03
-						;; size=12 bbWeight=4 PerfScore 6.00
-G_M56529_IG09:
+						;; size=31 bbWeight=4 PerfScore 30.00
+G_M56529_IG08:
        test     r14, r14
-       jne      SHORT G_M56529_IG13
+       jne      SHORT G_M56529_IG12
 						;; size=5 bbWeight=1 PerfScore 1.25
-G_M56529_IG10:
+G_M56529_IG09:
        mov      rax, rbx
 						;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M56529_IG11:
-       add      rsp, 24
+G_M56529_IG10:
+       add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M56529_IG12:
+G_M56529_IG11:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x30], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; function address
        call     [r11]System.Collections.Generic.IList`1[short]:get_Item(int):short:this
        mov      edi, dword ptr [rbp-0x30]
        cmp      edi, dword ptr [r14+0x08]
-       jae      G_M56529_IG17
+       jae      G_M56529_IG16
        mov      ecx, edi
        mov      word  ptr [r14+2*rcx+0x10], ax
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
-       jl       SHORT G_M56529_IG12
+       jl       SHORT G_M56529_IG11
        jmp      SHORT G_M56529_IG07
 						;; size=54 bbWeight=0.16 PerfScore 2.64
-G_M56529_IG13:
+G_M56529_IG12:
        mov      rdi, 0xD1FFAB1E      ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[short]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, rbx
 						;; size=33 bbWeight=0.50 PerfScore 1.75
-G_M56529_IG14:
-       add      rsp, 24
+G_M56529_IG13:
+       add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M56529_IG15:
+G_M56529_IG14:
        mov      edi, 0x3B01
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M56529_IG16:
+G_M56529_IG15:
        mov      edi, 0x3AF5
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M56529_IG17:
+G_M56529_IG16:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 512, prolog size 19, PerfScore 306.34, instruction count 134, allocated bytes for code 512 (MethodHash=e7be232e) for method System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts)
+; Total bytes of code 443, prolog size 16, PerfScore 297.59, instruction count 121, allocated bytes for code 443 (MethodHash=e7be232e) for method System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts)
-67 (-13.21 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int]
 ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (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; 6 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T04] (  9, 26.50)     ref  ->  rbx         class-hnd single-def <System.Collections.ObjectModel.ReadOnlyCollection`1[int]>
 ;  V01 arg1         [V01,T06] (  5, 11   )     ref  ->  r15         class-hnd single-def <System.Func`2[int,int]>
-;  V02 loc0         [V02,T03] ( 11, 29.66)     ref  ->  r14         class-hnd <int[]>
-;* V03 loc1         [V03,T12] (  0,  0   )     int  ->  zero-ref   
-;  V04 loc2         [V04,T09] (  4,  8   )     int  ->  r12        
-;  V05 loc3         [V05,T10] (  3,  8   )     int  ->  [rbp-0x2C]  spill-single-def
+;  V02 loc0         [V02,T03] ( 11, 33.66)     ref  ->  r14         class-hnd <int[]>
+;* V03 loc1         [V03,T10] (  0,  0   )     int  ->  zero-ref   
+;  V04 loc2         [V04,T07] (  4,  8   )     int  ->  r12        
+;  V05 loc3         [V05,T08] (  2,  8   )     int  ->  [rbp-0x2C]  spill-single-def
 ;  V06 loc4         [V06,T00] ( 12, 82.16)     int  ->  [rbp-0x30] 
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V08 tmp1         [V08,T07] (  3, 12   )     ref  ->  [rbp-0x38]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Int32>
-;  V09 tmp2         [V09,T08] (  3, 12   )     ref  ->  [rbp-0x40]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Int32>
+;* V08 tmp1         [V08    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Int32>
+;* V09 tmp2         [V09    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Int32>
 ;  V10 tmp3         [V10,T01] (  4, 64   )     int  ->  rax         "Strict ordering of exceptions for Array store"
-;  V11 tmp4         [V11,T11] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[int]>
-;  V12 tmp5         [V12,T05] (  2, 16   )     int  ->  rsi         "argument with side effect"
-;  V13 rat0         [V13,T02] ( 12, 42   )    long  ->  r13         "Widened IV V03"
+;  V11 tmp4         [V11,T09] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[int]>
+;* V12 tmp5         [V12    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[int]>
+;* V13 tmp6         [V13    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[int]>
+;  V14 tmp7         [V14,T05] (  2, 16   )     int  ->  rsi         "argument with side effect"
+;  V15 rat0         [V15,T02] ( 12, 46   )    long  ->  r13         "Widened IV V03"
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M35728_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
+       push     rax
+       lea      rbp, [rsp+0x30]
        mov      rbx, rdi
        mov      r15, rsi
-						;; size=25 bbWeight=1 PerfScore 7.25
+						;; size=22 bbWeight=1 PerfScore 8.00
 G_M35728_IG02:
        test     rbx, rbx
-       je       G_M35728_IG16
-       test     r15, r15
        je       G_M35728_IG15
+       test     r15, r15
+       je       G_M35728_IG14
        xor      r14, r14
        xor      r13d, r13d
        mov      rdi, gword ptr [rbx+0x08]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.ICollection`1[int]:get_Count():int:this
        call     [r11]System.Collections.Generic.ICollection`1[int]:get_Count():int:this
        mov      r12d, eax
        test     r12d, r12d
-       jle      G_M35728_IG09
+       jle      G_M35728_IG08
 						;; size=53 bbWeight=1 PerfScore 9.75
 G_M35728_IG03:
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[int]:get_Item(int):int:this
        call     [r11]System.Collections.Generic.IList`1[int]:get_Item(int):int:this
        mov      esi, eax
        mov      rdi, gword ptr [r15+0x08]
        call     [r15+0x18]System.Func`2[int,int]:Invoke(int):int:this
        mov      dword ptr [rbp-0x2C], eax
        test     r14, r14
-       jne      G_M35728_IG07
-						;; size=42 bbWeight=4 PerfScore 52.00
+       jne      SHORT G_M35728_IG07
+						;; size=38 bbWeight=4 PerfScore 52.00
 G_M35728_IG04:
-       mov      rdi, 0xD1FFAB1E      ; System.Int32
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x38], rax
-       mov      ecx, dword ptr [rbp-0x2C]
-       mov      dword ptr [rax+0x08], ecx
-       mov      rdi, 0xD1FFAB1E      ; System.Int32
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x40], rax
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[int]:get_Item(int):int:this
        call     [r11]System.Collections.Generic.IList`1[int]:get_Item(int):int:this
-       mov      rsi, gword ptr [rbp-0x40]
-       mov      dword ptr [rsi+0x08], eax
-       mov      rdi, gword ptr [rbp-0x38]
-       cmp      rdi, rsi
-       je       SHORT G_M35728_IG08
        movsxd   rsi, r12d
        mov      rdi, 0xD1FFAB1E      ; int[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        xor      eax, eax
        test     r13d, r13d
        jle      SHORT G_M35728_IG07
-						;; size=108 bbWeight=2 PerfScore 39.00
+						;; size=48 bbWeight=2 PerfScore 17.50
 G_M35728_IG05:
        cmp      dword ptr [r14+0x08], r13d
-       jl       SHORT G_M35728_IG12
+       jl       SHORT G_M35728_IG11
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M35728_IG06:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x30], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[int]:get_Item(int):int:this
        call     [r11]System.Collections.Generic.IList`1[int]:get_Item(int):int:this
        mov      edi, dword ptr [rbp-0x30]
        mov      esi, edi
        mov      dword ptr [r14+4*rsi+0x10], eax
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
        jl       SHORT G_M35728_IG06
 						;; size=41 bbWeight=15.84 PerfScore 166.32
 G_M35728_IG07:
        cmp      r13d, dword ptr [r14+0x08]
-       jae      G_M35728_IG17
+       jae      G_M35728_IG16
        mov      ecx, dword ptr [rbp-0x2C]
        mov      dword ptr [r14+4*r13+0x10], ecx
-						;; size=18 bbWeight=2 PerfScore 12.00
-G_M35728_IG08:
        inc      r13d
        cmp      r13d, r12d
        jl       G_M35728_IG03
-						;; size=12 bbWeight=4 PerfScore 6.00
-G_M35728_IG09:
+						;; size=30 bbWeight=4 PerfScore 30.00
+G_M35728_IG08:
        test     r14, r14
-       jne      SHORT G_M35728_IG13
+       jne      SHORT G_M35728_IG12
 						;; size=5 bbWeight=1 PerfScore 1.25
-G_M35728_IG10:
+G_M35728_IG09:
        mov      rax, rbx
 						;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M35728_IG11:
-       add      rsp, 24
+G_M35728_IG10:
+       add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M35728_IG12:
+G_M35728_IG11:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x30], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; function address
        call     [r11]System.Collections.Generic.IList`1[int]:get_Item(int):int:this
        mov      edi, dword ptr [rbp-0x30]
        cmp      edi, dword ptr [r14+0x08]
-       jae      G_M35728_IG17
+       jae      G_M35728_IG16
        mov      ecx, edi
        mov      dword ptr [r14+4*rcx+0x10], eax
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
-       jl       SHORT G_M35728_IG12
+       jl       SHORT G_M35728_IG11
        jmp      SHORT G_M35728_IG07
 						;; size=53 bbWeight=0.16 PerfScore 2.64
-G_M35728_IG13:
+G_M35728_IG12:
        mov      rdi, 0xD1FFAB1E      ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[int]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, rbx
 						;; size=33 bbWeight=0.50 PerfScore 1.75
-G_M35728_IG14:
-       add      rsp, 24
+G_M35728_IG13:
+       add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M35728_IG15:
+G_M35728_IG14:
        mov      edi, 0x3B01
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M35728_IG16:
+G_M35728_IG15:
        mov      edi, 0x3AF5
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M35728_IG17:
+G_M35728_IG16:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 507, prolog size 19, PerfScore 306.34, instruction count 134, allocated bytes for code 507 (MethodHash=f676746f) for method System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts)
+; Total bytes of code 440, prolog size 16, PerfScore 297.59, instruction count 121, allocated bytes for code 440 (MethodHash=f676746f) for method System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts)
-67 (-13.06 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long]
 ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (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; 6 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T04] (  9, 26.50)     ref  ->  rbx         class-hnd single-def <System.Collections.ObjectModel.ReadOnlyCollection`1[long]>
 ;  V01 arg1         [V01,T06] (  5, 11   )     ref  ->  r15         class-hnd single-def <System.Func`2[long,long]>
-;  V02 loc0         [V02,T03] ( 11, 29.66)     ref  ->  r14         class-hnd <long[]>
-;* V03 loc1         [V03,T12] (  0,  0   )     int  ->  zero-ref   
-;  V04 loc2         [V04,T09] (  4,  8   )     int  ->  r12        
-;  V05 loc3         [V05,T10] (  3,  8   )    long  ->  [rbp-0x30]  spill-single-def
+;  V02 loc0         [V02,T03] ( 11, 33.66)     ref  ->  r14         class-hnd <long[]>
+;* V03 loc1         [V03,T10] (  0,  0   )     int  ->  zero-ref   
+;  V04 loc2         [V04,T07] (  4,  8   )     int  ->  r12        
+;  V05 loc3         [V05,T08] (  2,  8   )    long  ->  [rbp-0x30]  spill-single-def
 ;  V06 loc4         [V06,T00] ( 12, 82.16)     int  ->  [rbp-0x34] 
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V08 tmp1         [V08,T07] (  3, 12   )     ref  ->  [rbp-0x40]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Int64>
-;  V09 tmp2         [V09,T08] (  3, 12   )     ref  ->  [rbp-0x48]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Int64>
+;* V08 tmp1         [V08    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Int64>
+;* V09 tmp2         [V09    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Int64>
 ;  V10 tmp3         [V10,T01] (  4, 64   )    long  ->  rax         "Strict ordering of exceptions for Array store"
-;  V11 tmp4         [V11,T11] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[long]>
-;  V12 tmp5         [V12,T05] (  2, 16   )    long  ->  rsi         "argument with side effect"
-;  V13 rat0         [V13,T02] ( 12, 42   )    long  ->  r13         "Widened IV V03"
+;  V11 tmp4         [V11,T09] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[long]>
+;* V12 tmp5         [V12    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[long]>
+;* V13 tmp6         [V13    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[long]>
+;  V14 tmp7         [V14,T05] (  2, 16   )    long  ->  rsi         "argument with side effect"
+;  V15 rat0         [V15,T02] ( 12, 46   )    long  ->  r13         "Widened IV V03"
 ;
-; Lcl frame size = 40
+; Lcl frame size = 24
 
 G_M41065_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 40
-       lea      rbp, [rsp+0x50]
+       sub      rsp, 24
+       lea      rbp, [rsp+0x40]
        mov      rbx, rdi
        mov      r15, rsi
 						;; size=25 bbWeight=1 PerfScore 7.25
 G_M41065_IG02:
        test     rbx, rbx
-       je       G_M41065_IG16
-       test     r15, r15
        je       G_M41065_IG15
+       test     r15, r15
+       je       G_M41065_IG14
        xor      r14, r14
        xor      r13d, r13d
        mov      rdi, gword ptr [rbx+0x08]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.ICollection`1[long]:get_Count():int:this
        call     [r11]System.Collections.Generic.ICollection`1[long]:get_Count():int:this
        mov      r12d, eax
        test     r12d, r12d
-       jle      G_M41065_IG09
+       jle      G_M41065_IG08
 						;; size=53 bbWeight=1 PerfScore 9.75
 G_M41065_IG03:
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[long]:get_Item(int):long:this
        call     [r11]System.Collections.Generic.IList`1[long]:get_Item(int):long:this
        mov      rsi, rax
        mov      rdi, gword ptr [r15+0x08]
        call     [r15+0x18]System.Func`2[long,long]:Invoke(long):long:this
        mov      qword ptr [rbp-0x30], rax
        test     r14, r14
-       jne      G_M41065_IG07
-						;; size=44 bbWeight=4 PerfScore 52.00
+       jne      SHORT G_M41065_IG07
+						;; size=40 bbWeight=4 PerfScore 52.00
 G_M41065_IG04:
-       mov      rdi, 0xD1FFAB1E      ; System.Int64
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x40], rax
-       mov      rcx, qword ptr [rbp-0x30]
-       mov      qword ptr [rax+0x08], rcx
-       mov      rdi, 0xD1FFAB1E      ; System.Int64
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x48], rax
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[long]:get_Item(int):long:this
        call     [r11]System.Collections.Generic.IList`1[long]:get_Item(int):long:this
-       mov      rsi, gword ptr [rbp-0x48]
-       mov      qword ptr [rsi+0x08], rax
-       mov      rdi, gword ptr [rbp-0x40]
-       cmp      rdi, rsi
-       je       SHORT G_M41065_IG08
        movsxd   rsi, r12d
        mov      rdi, 0xD1FFAB1E      ; long[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        xor      eax, eax
        test     r13d, r13d
        jle      SHORT G_M41065_IG07
-						;; size=111 bbWeight=2 PerfScore 39.00
+						;; size=48 bbWeight=2 PerfScore 17.50
 G_M41065_IG05:
        cmp      dword ptr [r14+0x08], r13d
-       jl       SHORT G_M41065_IG12
+       jl       SHORT G_M41065_IG11
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M41065_IG06:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x34], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[long]:get_Item(int):long:this
        call     [r11]System.Collections.Generic.IList`1[long]:get_Item(int):long:this
        mov      edi, dword ptr [rbp-0x34]
        mov      esi, edi
        mov      qword ptr [r14+8*rsi+0x10], rax
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
        jl       SHORT G_M41065_IG06
 						;; size=41 bbWeight=15.84 PerfScore 166.32
 G_M41065_IG07:
        cmp      r13d, dword ptr [r14+0x08]
-       jae      G_M41065_IG17
+       jae      G_M41065_IG16
        mov      rcx, qword ptr [rbp-0x30]
        mov      qword ptr [r14+8*r13+0x10], rcx
-						;; size=19 bbWeight=2 PerfScore 12.00
-G_M41065_IG08:
        inc      r13d
        cmp      r13d, r12d
        jl       G_M41065_IG03
-						;; size=12 bbWeight=4 PerfScore 6.00
-G_M41065_IG09:
+						;; size=31 bbWeight=4 PerfScore 30.00
+G_M41065_IG08:
        test     r14, r14
-       jne      SHORT G_M41065_IG13
+       jne      SHORT G_M41065_IG12
 						;; size=5 bbWeight=1 PerfScore 1.25
-G_M41065_IG10:
+G_M41065_IG09:
        mov      rax, rbx
 						;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M41065_IG11:
-       add      rsp, 40
+G_M41065_IG10:
+       add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M41065_IG12:
+G_M41065_IG11:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x34], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; function address
        call     [r11]System.Collections.Generic.IList`1[long]:get_Item(int):long:this
        mov      edi, dword ptr [rbp-0x34]
        cmp      edi, dword ptr [r14+0x08]
-       jae      G_M41065_IG17
+       jae      G_M41065_IG16
        mov      ecx, edi
        mov      qword ptr [r14+8*rcx+0x10], rax
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
-       jl       SHORT G_M41065_IG12
+       jl       SHORT G_M41065_IG11
        jmp      SHORT G_M41065_IG07
 						;; size=53 bbWeight=0.16 PerfScore 2.64
-G_M41065_IG13:
+G_M41065_IG12:
        mov      rdi, 0xD1FFAB1E      ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[long]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, rbx
 						;; size=33 bbWeight=0.50 PerfScore 1.75
-G_M41065_IG14:
-       add      rsp, 40
+G_M41065_IG13:
+       add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M41065_IG15:
+G_M41065_IG14:
        mov      edi, 0x3B01
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M41065_IG16:
+G_M41065_IG15:
        mov      edi, 0x3AF5
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M41065_IG17:
+G_M41065_IG16:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 513, prolog size 19, PerfScore 306.34, instruction count 134, allocated bytes for code 513 (MethodHash=f4f75f96) for method System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts)
+; Total bytes of code 446, prolog size 19, PerfScore 296.84, instruction count 121, allocated bytes for code 446 (MethodHash=f4f75f96) for method System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts)
-67 (-13.21 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte]
 ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (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; 6 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T04] (  9, 26.50)     ref  ->  rbx         class-hnd single-def <System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte]>
 ;  V01 arg1         [V01,T06] (  5, 11   )     ref  ->  r15         class-hnd single-def <System.Func`2[ubyte,ubyte]>
-;  V02 loc0         [V02,T03] ( 11, 29.66)     ref  ->  r14         class-hnd <ubyte[]>
-;* V03 loc1         [V03,T12] (  0,  0   )     int  ->  zero-ref   
-;  V04 loc2         [V04,T09] (  4,  8   )     int  ->  r12        
-;  V05 loc3         [V05,T10] (  3,  8   )   ubyte  ->  [rbp-0x2C]  spill-single-def
+;  V02 loc0         [V02,T03] ( 11, 33.66)     ref  ->  r14         class-hnd <ubyte[]>
+;* V03 loc1         [V03,T10] (  0,  0   )     int  ->  zero-ref   
+;  V04 loc2         [V04,T07] (  4,  8   )     int  ->  r12        
+;  V05 loc3         [V05,T08] (  2,  8   )   ubyte  ->  [rbp-0x2C]  spill-single-def
 ;  V06 loc4         [V06,T00] ( 12, 82.16)     int  ->  [rbp-0x30] 
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V08 tmp1         [V08,T07] (  3, 12   )     ref  ->  [rbp-0x38]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Byte>
-;  V09 tmp2         [V09,T08] (  3, 12   )     ref  ->  [rbp-0x40]  class-hnd exact spill-single-def "Single-def Box Helper" <System.Byte>
+;* V08 tmp1         [V08    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Byte>
+;* V09 tmp2         [V09    ] (  0,  0   )    long  ->  zero-ref    class-hnd exact "Single-def Box Helper" <System.Byte>
 ;  V10 tmp3         [V10,T01] (  4, 64   )     int  ->  rax         "Strict ordering of exceptions for Array store"
-;  V11 tmp4         [V11,T11] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[ubyte]>
-;  V12 tmp5         [V12,T05] (  2, 16   )     int  ->  rsi         "argument with side effect"
-;  V13 rat0         [V13,T02] ( 12, 42   )    long  ->  r13         "Widened IV V03"
+;  V11 tmp4         [V11,T09] (  3,  3   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Runtime.CompilerServices.TrueReadOnlyCollection`1[ubyte]>
+;* V12 tmp5         [V12    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[ubyte]>
+;* V13 tmp6         [V13    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] "stack allocated boxed value class temp" <System.Runtime.CompilerServices.StackAllocatedBox`1[ubyte]>
+;  V14 tmp7         [V14,T05] (  2, 16   )     int  ->  rsi         "argument with side effect"
+;  V15 rat0         [V15,T02] ( 12, 46   )    long  ->  r13         "Widened IV V03"
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M46492_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
+       push     rax
+       lea      rbp, [rsp+0x30]
        mov      rbx, rdi
        mov      r15, rsi
-						;; size=25 bbWeight=1 PerfScore 7.25
+						;; size=22 bbWeight=1 PerfScore 8.00
 G_M46492_IG02:
        test     rbx, rbx
-       je       G_M46492_IG16
-       test     r15, r15
        je       G_M46492_IG15
+       test     r15, r15
+       je       G_M46492_IG14
        xor      r14, r14
        xor      r13d, r13d
        mov      rdi, gword ptr [rbx+0x08]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.ICollection`1[ubyte]:get_Count():int:this
        call     [r11]System.Collections.Generic.ICollection`1[ubyte]:get_Count():int:this
        mov      r12d, eax
        test     r12d, r12d
-       jle      G_M46492_IG09
+       jle      G_M46492_IG08
 						;; size=53 bbWeight=1 PerfScore 9.75
 G_M46492_IG03:
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this
        call     [r11]System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this
        mov      esi, eax
        mov      rdi, gword ptr [r15+0x08]
        call     [r15+0x18]System.Func`2[ubyte,ubyte]:Invoke(ubyte):ubyte:this
        mov      dword ptr [rbp-0x2C], eax
        test     r14, r14
-       jne      G_M46492_IG07
-						;; size=42 bbWeight=4 PerfScore 52.00
+       jne      SHORT G_M46492_IG07
+						;; size=38 bbWeight=4 PerfScore 52.00
 G_M46492_IG04:
-       mov      rdi, 0xD1FFAB1E      ; System.Byte
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x38], rax
-       mov      ecx, dword ptr [rbp-0x2C]
-       mov      byte  ptr [rax+0x08], cl
-       mov      rdi, 0xD1FFAB1E      ; System.Byte
-       call     CORINFO_HELP_NEWSFAST
-       mov      gword ptr [rbp-0x40], rax
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, r13d
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this
        call     [r11]System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this
-       mov      rsi, gword ptr [rbp-0x40]
-       mov      byte  ptr [rsi+0x08], al
-       mov      rdi, gword ptr [rbp-0x38]
-       cmp      rdi, rsi
-       je       SHORT G_M46492_IG08
        movsxd   rsi, r12d
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        xor      eax, eax
        test     r13d, r13d
        jle      SHORT G_M46492_IG07
-						;; size=108 bbWeight=2 PerfScore 39.00
+						;; size=48 bbWeight=2 PerfScore 17.50
 G_M46492_IG05:
        cmp      dword ptr [r14+0x08], r13d
-       jl       SHORT G_M46492_IG12
+       jl       SHORT G_M46492_IG11
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M46492_IG06:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x30], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this
        call     [r11]System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this
        mov      edi, dword ptr [rbp-0x30]
        mov      esi, edi
        mov      byte  ptr [r14+rsi+0x10], al
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
        jl       SHORT G_M46492_IG06
 						;; size=41 bbWeight=15.84 PerfScore 166.32
 G_M46492_IG07:
        cmp      r13d, dword ptr [r14+0x08]
-       jae      G_M46492_IG17
+       jae      G_M46492_IG16
        mov      ecx, dword ptr [rbp-0x2C]
        mov      byte  ptr [r14+r13+0x10], cl
-						;; size=18 bbWeight=2 PerfScore 12.00
-G_M46492_IG08:
        inc      r13d
        cmp      r13d, r12d
        jl       G_M46492_IG03
-						;; size=12 bbWeight=4 PerfScore 6.00
-G_M46492_IG09:
+						;; size=30 bbWeight=4 PerfScore 30.00
+G_M46492_IG08:
        test     r14, r14
-       jne      SHORT G_M46492_IG13
+       jne      SHORT G_M46492_IG12
 						;; size=5 bbWeight=1 PerfScore 1.25
-G_M46492_IG10:
+G_M46492_IG09:
        mov      rax, rbx
 						;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M46492_IG11:
-       add      rsp, 24
+G_M46492_IG10:
+       add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M46492_IG12:
+G_M46492_IG11:
        mov      rdi, gword ptr [rbx+0x08]
        mov      dword ptr [rbp-0x30], eax
        mov      esi, eax
        mov      r11, 0xD1FFAB1E      ; function address
        call     [r11]System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this
        mov      edi, dword ptr [rbp-0x30]
        cmp      edi, dword ptr [r14+0x08]
-       jae      G_M46492_IG17
+       jae      G_M46492_IG16
        mov      ecx, edi
        mov      byte  ptr [r14+rcx+0x10], al
        inc      edi
        cmp      edi, r13d
        mov      eax, edi
-       jl       SHORT G_M46492_IG12
+       jl       SHORT G_M46492_IG11
        jmp      SHORT G_M46492_IG07
 						;; size=53 bbWeight=0.16 PerfScore 2.64
-G_M46492_IG13:
+G_M46492_IG12:
        mov      rdi, 0xD1FFAB1E      ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[ubyte]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, rbx
 						;; size=33 bbWeight=0.50 PerfScore 1.75
-G_M46492_IG14:
-       add      rsp, 24
+G_M46492_IG13:
+       add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M46492_IG15:
+G_M46492_IG14:
        mov      edi, 0x3B01
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M46492_IG16:
+G_M46492_IG15:
        mov      edi, 0x3AF5
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M46492_IG17:
+G_M46492_IG16:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 507, prolog size 19, PerfScore 306.34, instruction count 134, allocated bytes for code 507 (MethodHash=174c4a63) for method System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts)
+; Total bytes of code 440, prolog size 16, PerfScore 297.59, instruction count 121, allocated bytes for code 440 (MethodHash=174c4a63) for method System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (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/5f1390056574e77eed6ce6a61b9740bf

@MihuBot
Copy link
Owner Author

MihuBot commented Aug 27, 2024

@hez2010

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant