Skip to content

Instantly share code, notes, and snippets.

@MihuBot
Created October 22, 2023 02:18
Show Gist options
  • Save MihuBot/f51f54cde9bf294728f74bd03de71b4c to your computer and use it in GitHub Desktop.
Save MihuBot/f51f54cde9bf294728f74bd03de71b4c to your computer and use it in GitHub Desktop.
JIT diffs CoreLib improvements for https://github.com/MihuBot/runtime-utils/issues/208

Top method improvements

-51 (-3.32 % of base) - System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this
 ; Assembly listing for method System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 20 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 18 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T21] ( 12, 24   )     ref  ->  [rbp-0x68]  this class-hnd EH-live single-def <System.Buffers.SharedArrayPool`1[System.__Canon]>
-;  V01 loc0         [V01,T10] (  5, 33.50)     int  ->  rbx        
-;  V02 loc1         [V02,T33] (  5, 19   )     int  ->  r15        
-;  V03 loc2         [V03,T20] (  7, 27   )     ref  ->  r14         class-hnd exact single-def <System.Buffers.ArrayPoolEventSource>
-;  V04 loc3         [V04,T38] (  4, 10   )     ref  ->  [rbp-0x70]  class-hnd spill-single-def <System.__Canon[]>
-;  V05 loc4         [V05,T32] (  6, 19   )     int  ->  r12        
-;  V06 loc5         [V06,T41] (  7,  9   )     ref  ->  [rbp-0x78]  class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
+;  V00 this         [V00,T15] ( 18, 27   )     ref  ->  [rbp-0x60]  this class-hnd EH-live single-def <System.Buffers.SharedArrayPool`1[System.__Canon]>
+;  V01 loc0         [V01,T07] (  5, 33.50)     int  ->  rbx        
+;  V02 loc1         [V02,T27] (  5, 19   )     int  ->  r15        
+;  V03 loc2         [V03,T16] (  7, 27   )     ref  ->  r14         class-hnd exact single-def <System.Buffers.ArrayPoolEventSource>
+;  V04 loc3         [V04,T31] (  4, 10   )     ref  ->  [rbp-0x68]  class-hnd spill-single-def <System.__Canon[]>
+;  V05 loc4         [V05,T26] (  6, 19   )     int  ->  r12        
+;  V06 loc5         [V06,T33] (  7,  9   )     ref  ->  [rbp-0x70]  class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
 ;* V07 loc6         [V07    ] (  0,  0   )  struct (16) zero-ref    multireg-ret ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]>
-;  V08 loc7         [V08,T42] (  7,  9   )     ref  ->  [rbp-0x80]  class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
+;  V08 loc7         [V08,T34] (  7,  9   )     ref  ->  [rbp-0x78]  class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
 ;* V09 loc8         [V09    ] (  0,  0   )  struct (16) zero-ref    multireg-ret ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]>
-;  V10 loc9         [V10,T22] (  3, 24   )     ref  ->  r15         class-hnd <System.Buffers.SharedArrayPool`1+ThreadLocalArray[System.__Canon][]>
+;  V10 loc9         [V10,T17] (  3, 24   )     ref  ->  r15         class-hnd <System.Buffers.SharedArrayPool`1+ThreadLocalArray[System.__Canon][]>
 ;  V11 loc10        [V11,T00] (  5, 68   )     int  ->  rbx        
-;  V12 loc11        [V12,T06] (  4, 48   )     ref  ->  [rbp-0x88]  class-hnd spill-single-def <System.__Canon[]>
-;  V13 loc12        [V13,T45] (  2,  8.50)     int  ->  r12        
-;  V14 loc13        [V14,T81] (  2,  1   )     int  ->  r12        
-;  V15 loc14        [V15,T43] (  7,  9   )     ref  ->  [rbp-0x90]  class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
+;  V12 loc11        [V12,T05] (  4, 48   )     ref  ->  [rbp-0x80]  class-hnd spill-single-def <System.__Canon[]>
+;  V13 loc12        [V13,T36] (  2,  8.50)     int  ->  r12        
+;  V14 loc13        [V14,T77] (  2,  1   )     int  ->  r12        
+;  V15 loc14        [V15,T35] (  7,  9   )     ref  ->  [rbp-0x88]  class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
 ;* V16 loc15        [V16    ] (  0,  0   )  struct (16) zero-ref    multireg-ret ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]>
-;  V17 loc16        [V17,T05] (  6, 48   )     ref  ->  [rbp-0x98]  class-hnd spill-single-def <System.Buffers.SharedArrayPool`1+ThreadLocalArray[System.__Canon][]>
+;  V17 loc16        [V17,T04] (  6, 48   )     ref  ->  r15         class-hnd <System.Buffers.SharedArrayPool`1+ThreadLocalArray[System.__Canon][]>
 ;  V18 loc17        [V18,T01] (  5, 68   )     int  ->  [rbp-0x34] 
-;  V19 loc18        [V19,T23] (  3, 24   )     int  ->  rsi        
-;  V20 loc19        [V20,T11] (  4, 32   )     ref  ->  [rbp-0xA0]  class-hnd spill-single-def <System.__Canon[]>
+;  V19 loc18        [V19,T18] (  3, 24   )     int  ->  rdx        
+;  V20 loc19        [V20,T08] (  4, 32   )     ref  ->  [rbp-0x90]  class-hnd spill-single-def <System.__Canon[]>
 ;# V21 OutArgs      [V21    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V22 tmp1         [V22,T35] (  2, 16   )     ref  ->  rax         class-hnd "dup spill" <System.__Canon>
-;  V23 tmp2         [V23,T39] (  3, 10   )     ref  ->  [rbp-0xA8]  spill-single-def
-;  V24 tmp3         [V24,T08] (  2, 36   )     int  ->  [rbp-0x38]  spill-single-def "impAppendStmt"
+;  V22 tmp1         [V22,T29] (  2, 16   )     ref  ->  rax         class-hnd "dup spill" <System.__Canon>
+;  V23 tmp2         [V23,T32] (  3, 10   )     ref  ->  [rbp-0x98]  spill-single-def
+;  V24 tmp3         [V24,T06] (  2, 36   )     int  ->  [rbp-0x38]  spill-single-def "impAppendStmt"
 ;* V25 tmp4         [V25    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V26 tmp5         [V26    ] (  0,  0   )    long  ->  zero-ref    "VirtualCall with runtime lookup"
 ;* V27 tmp6         [V27    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V28 tmp7         [V28,T24] (  3, 24   )    long  ->  r11         "VirtualCall with runtime lookup"
+;  V28 tmp7         [V28,T19] (  3, 24   )    long  ->  r11         "VirtualCall with runtime lookup"
 ;* V29 tmp8         [V29    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]>
 ;* V30 tmp9         [V30    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V31 tmp10        [V31    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V32 tmp11        [V32,T14] (  2, 32   )     int  ->  [rbp-0x3C]  spill-single-def "impAppendStmt"
-;  V33 tmp12        [V33,T15] (  2, 32   )     int  ->  [rbp-0x40]  spill-single-def "impAppendStmt"
-;* V34 tmp13        [V34    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V35 tmp14        [V35    ] (  0,  0   )    long  ->  zero-ref    "VirtualCall with runtime lookup"
-;* V36 tmp15        [V36    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V37 tmp16        [V37,T25] (  3, 24   )    long  ->  r11         "VirtualCall with runtime lookup"
-;* V38 tmp17        [V38    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]>
-;* V39 tmp18        [V39    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V40 tmp19        [V40    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V41 tmp20        [V41,T16] (  2, 32   )     int  ->  [rbp-0x44]  spill-single-def "impAppendStmt"
-;  V42 tmp21        [V42,T17] (  2, 32   )     int  ->  [rbp-0x48]  spill-single-def "impAppendStmt"
+;  V31 tmp10        [V31,T09] (  2, 32   )     int  ->  [rbp-0x3C]  spill-single-def "impAppendStmt"
+;  V32 tmp11        [V32,T10] (  2, 32   )     int  ->  [rbp-0x40]  spill-single-def "impAppendStmt"
+;* V33 tmp12        [V33    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;* V34 tmp13        [V34    ] (  0,  0   )    long  ->  zero-ref    "VirtualCall with runtime lookup"
+;* V35 tmp14        [V35    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;  V36 tmp15        [V36,T20] (  3, 24   )    long  ->  r11         "VirtualCall with runtime lookup"
+;* V37 tmp16        [V37    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]>
+;* V38 tmp17        [V38    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;  V39 tmp18        [V39,T11] (  2, 32   )     int  ->  [rbp-0x44]  spill-single-def "impAppendStmt"
+;  V40 tmp19        [V40,T12] (  2, 32   )     int  ->  [rbp-0x48]  spill-single-def "impAppendStmt"
+;* V41 tmp20        [V41    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;* V42 tmp21        [V42    ] (  0,  0   )    long  ->  zero-ref    "VirtualCall with runtime lookup"
 ;* V43 tmp22        [V43    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V44 tmp23        [V44    ] (  0,  0   )    long  ->  zero-ref    "VirtualCall with runtime lookup"
-;* V45 tmp24        [V45    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V46 tmp25        [V46,T26] (  3, 24   )    long  ->  r11         "VirtualCall with runtime lookup"
-;* V47 tmp26        [V47    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]>
-;* V48 tmp27        [V48    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V49 tmp28        [V49,T34] (  2, 18   )     int  ->  [rbp-0x4C]  spill-single-def "Inline stloc first use temp"
-;  V50 tmp29        [V50,T30] (  3, 20   )     ref  ->  [rbp-0xB0]  class-hnd spill-single-def "Inline stloc first use temp" <System.__Canon[]>
-;  V51 tmp30        [V51,T02] (  5, 66   )     int  ->  [rbp-0x50]  "Inline stloc first use temp"
-;* V52 tmp31        [V52    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V53 tmp32        [V53,T03] (  2, 64   )     ref  ->  rcx         class-hnd "updating class info" <System.__Canon[]>
-;  V54 tmp33        [V54,T18] (  2, 32   )     int  ->   r8         "Inlining Arg"
-;* V55 tmp34        [V55    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V56 tmp35        [V56,T13] (  2, 32   )     ref  ->  rsi         class-hnd "updating class info" <System.__Canon[]>
-;  V57 tmp36        [V57,T19] (  2, 32   )     int  ->   r8         "Inlining Arg"
-;  V58 tmp37        [V58,T47] (  2,  8   )     ref  ->  rdi         "field V07.key (fldOffset=0x0)" P-INDEP
-;  V59 tmp38        [V59,T50] (  1,  4   )     ref  ->  rdx         "field V07.value (fldOffset=0x8)" P-INDEP
-;  V60 tmp39        [V60,T48] (  2,  8   )     ref  ->  r15         "field V09.key (fldOffset=0x0)" P-INDEP
-;  V61 tmp40        [V61,T51] (  1,  4   )     ref  ->  rdx         "field V09.value (fldOffset=0x8)" P-INDEP
-;  V62 tmp41        [V62,T49] (  2,  8   )     ref  ->  rax         "field V16.key (fldOffset=0x0)" P-INDEP
-;  V63 tmp42        [V63,T52] (  1,  4   )     ref  ->  rdx         "field V16.value (fldOffset=0x8)" P-INDEP
-;* V64 tmp43        [V64    ] (  0,  0   )     ref  ->  zero-ref    "field V29.key (fldOffset=0x0)" P-DEP
-;* V65 tmp44        [V65    ] (  0,  0   )     ref  ->  zero-ref    "field V29.value (fldOffset=0x8)" P-DEP
-;* V66 tmp45        [V66    ] (  0,  0   )     ref  ->  zero-ref    "field V38.key (fldOffset=0x0)" P-DEP
-;* V67 tmp46        [V67    ] (  0,  0   )     ref  ->  zero-ref    "field V38.value (fldOffset=0x8)" P-DEP
-;* V68 tmp47        [V68    ] (  0,  0   )     ref  ->  zero-ref    "field V47.key (fldOffset=0x0)" P-DEP
-;* V69 tmp48        [V69    ] (  0,  0   )     ref  ->  zero-ref    "field V47.value (fldOffset=0x8)" P-DEP
-;  V70 PSPSym       [V70,T85] (  1,  1   )    long  ->  [rbp-0xC0]  do-not-enreg[V] "PSPSym"
-;* V71 cse0         [V71,T40] (  0,  0   )    long  ->  zero-ref    hoist multi-def "CSE - moderate"
-;  V72 cse1         [V72,T36] (  6, 13.50)    long  ->  registers   hoist multi-def "CSE - moderate"
-;* V73 cse2         [V73,T80] (  0,  0   )    long  ->  zero-ref    hoist multi-def "CSE - moderate"
-;  V74 cse3         [V74,T04] (  5, 56   )    long  ->  rdi         "CSE - aggressive"
-;  V75 cse4         [V75,T29] ( 17, 16.54)    long  ->  r13         multi-def "CSE - moderate"
-;  V76 cse5         [V76,T31] (  3, 20   )     int  ->  [rbp-0x54]  spill-single-def "CSE - moderate"
-;  V77 cse6         [V77,T27] (  3, 24   )     int  ->  [rbp-0x58]  spill-single-def "CSE - moderate"
-;  V78 cse7         [V78,T28] (  3, 24   )     int  ->  [rbp-0x5C]  spill-single-def "CSE - moderate"
-;  V79 rat0         [V79,T62] (  2,  2   )    long  ->  rax         "Spilling to split statement for tree"
-;* V80 rat1         [V80,T82] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;  V81 rat2         [V81,T53] (  2,  2   )    long  ->  rax         "spilling expr"
-;* V82 rat3         [V82,T65] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
-;  V83 rat4         [V83,T74] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V84 rat5         [V84,T54] (  3,  2.80)    long  ->  rdi         "spilling expr"
-;  V85 rat6         [V85,T66] (  3,  2.24)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;* V86 rat7         [V86,T75] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;  V87 rat8         [V87,T55] (  2,  2   )    long  ->  rdi         "spilling expr"
-;* V88 rat9         [V88,T67] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
-;  V89 rat10        [V89,T63] (  2,  2   )    long  ->  rax         "Spilling to split statement for tree"
-;* V90 rat11        [V90,T83] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;  V91 rat12        [V91,T56] (  2,  2   )    long  ->  rax         "spilling expr"
-;* V92 rat13        [V92,T68] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
-;  V93 rat14        [V93,T76] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V94 rat15        [V94,T57] (  3,  2.80)    long  ->  rdi         "spilling expr"
-;  V95 rat16        [V95,T69] (  3,  2.24)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;* V96 rat17        [V96,T77] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;  V97 rat18        [V97,T58] (  2,  2   )    long  ->  rdi         "spilling expr"
-;* V98 rat19        [V98,T70] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
-;* V99 rat20        [V99,T46] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;  V100 rat21       [V100,T37] (  3, 11.20)    long  ->  rdi         "spilling expr"
-;  V101 rat22       [V101,T44] (  2,  6.40)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V102 rat23       [V102,T64] (  2,  2   )    long  ->  rax         "Spilling to split statement for tree"
-;* V103 rat24       [V103,T84] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;  V104 rat25       [V104,T59] (  2,  2   )    long  ->  rax         "spilling expr"
-;* V105 rat26       [V105,T71] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
-;  V106 rat27       [V106,T78] (  3,  2   )    long  ->  rax         "runtime lookup"
-;  V107 rat28       [V107,T60] (  3,  2.80)    long  ->  rdi         "spilling expr"
-;  V108 rat29       [V108,T72] (  3,  2.24)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;* V109 rat30       [V109,T79] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;  V110 rat31       [V110,T61] (  2,  2   )    long  ->  rdi         "spilling expr"
-;* V111 rat32       [V111,T73] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
-;* V112 rat33       [V112,T12] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;  V113 rat34       [V113,T07] (  2, 32   )    long  ->  rsi         "spilling expr"
-;* V114 rat35       [V114,T09] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
+;  V44 tmp23        [V44,T21] (  3, 24   )    long  ->  r11         "VirtualCall with runtime lookup"
+;* V45 tmp24        [V45    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]>
+;* V46 tmp25        [V46    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;  V47 tmp26        [V47,T28] (  2, 18   )     int  ->  [rbp-0x4C]  spill-single-def "Inline stloc first use temp"
+;  V48 tmp27        [V48,T24] (  3, 20   )     ref  ->  [rbp-0xA0]  class-hnd spill-single-def "Inline stloc first use temp" <System.__Canon[]>
+;  V49 tmp28        [V49,T02] (  5, 66   )     int  ->  [rbp-0x50]  "Inline stloc first use temp"
+;  V50 tmp29        [V50,T13] (  2, 32   )     int  ->   r8         "Inlining Arg"
+;  V51 tmp30        [V51,T14] (  2, 32   )     int  ->   r8         "Inlining Arg"
+;  V52 tmp31        [V52,T37] (  2,  8   )     ref  ->  rdi         "field V07.key (fldOffset=0x0)" P-INDEP
+;  V53 tmp32        [V53,T40] (  1,  4   )     ref  ->  rdx         "field V07.value (fldOffset=0x8)" P-INDEP
+;  V54 tmp33        [V54,T38] (  2,  8   )     ref  ->  r15         "field V09.key (fldOffset=0x0)" P-INDEP
+;  V55 tmp34        [V55,T41] (  1,  4   )     ref  ->  rdx         "field V09.value (fldOffset=0x8)" P-INDEP
+;  V56 tmp35        [V56,T39] (  2,  8   )     ref  ->  r15         "field V16.key (fldOffset=0x0)" P-INDEP
+;  V57 tmp36        [V57,T42] (  1,  4   )     ref  ->  rdx         "field V16.value (fldOffset=0x8)" P-INDEP
+;* V58 tmp37        [V58    ] (  0,  0   )     ref  ->  zero-ref    "field V29.key (fldOffset=0x0)" P-DEP
+;* V59 tmp38        [V59    ] (  0,  0   )     ref  ->  zero-ref    "field V29.value (fldOffset=0x8)" P-DEP
+;* V60 tmp39        [V60    ] (  0,  0   )     ref  ->  zero-ref    "field V37.key (fldOffset=0x0)" P-DEP
+;* V61 tmp40        [V61    ] (  0,  0   )     ref  ->  zero-ref    "field V37.value (fldOffset=0x8)" P-DEP
+;* V62 tmp41        [V62    ] (  0,  0   )     ref  ->  zero-ref    "field V45.key (fldOffset=0x0)" P-DEP
+;* V63 tmp42        [V63    ] (  0,  0   )     ref  ->  zero-ref    "field V45.value (fldOffset=0x8)" P-DEP
+;  V64 PSPSym       [V64,T81] (  1,  1   )    long  ->  [rbp-0xB0]  do-not-enreg[V] "PSPSym"
+;  V65 cse0         [V65,T30] (  6, 13.50)    long  ->  r13         hoist multi-def "CSE - moderate"
+;* V66 cse1         [V66,T76] (  0,  0   )    long  ->  zero-ref    hoist multi-def "CSE - moderate"
+;  V67 cse2         [V67,T03] (  5, 56   )    long  ->  rdi         "CSE - aggressive"
+;  V68 cse3         [V68,T25] (  3, 20   )     int  ->  [rbp-0x54]  spill-single-def "CSE - moderate"
+;  V69 cse4         [V69,T22] (  3, 24   )     int  ->  r12         "CSE - moderate"
+;  V70 cse5         [V70,T23] (  3, 24   )     int  ->  [rbp-0x58]  spill-single-def "CSE - moderate"
+;  V71 rat0         [V71,T52] (  2,  2   )    long  ->  rax         "Spilling to split statement for tree"
+;* V72 rat1         [V72,T78] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
+;  V73 rat2         [V73,T43] (  2,  2   )    long  ->  rax         "spilling expr"
+;* V74 rat3         [V74,T61] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
+;  V75 rat4         [V75,T53] (  3,  2.36)    long  ->  rsi         "Spilling to split statement for tree"
+;  V76 rat5         [V76,T70] (  3,  2   )    long  ->  r13         "runtime lookup"
+;  V77 rat6         [V77,T44] (  3,  2.80)    long  ->  rax         "spilling expr"
+;  V78 rat7         [V78,T62] (  3,  2.24)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V79 rat8         [V79,T54] (  2,  2   )    long  ->  r11         "Spilling to split statement for tree"
+;* V80 rat9         [V80,T71] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
+;  V81 rat10        [V81,T45] (  2,  2   )    long  ->  r11         "spilling expr"
+;* V82 rat11        [V82,T63] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
+;  V83 rat12        [V83,T55] (  2,  2   )    long  ->  rax         "Spilling to split statement for tree"
+;* V84 rat13        [V84,T79] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
+;  V85 rat14        [V85,T46] (  2,  2   )    long  ->  rax         "spilling expr"
+;* V86 rat15        [V86,T64] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
+;  V87 rat16        [V87,T56] (  3,  2.36)    long  ->  rsi         "Spilling to split statement for tree"
+;  V88 rat17        [V88,T72] (  3,  2   )    long  ->  r13         "runtime lookup"
+;  V89 rat18        [V89,T47] (  3,  2.80)    long  ->  rax         "spilling expr"
+;  V90 rat19        [V90,T65] (  3,  2.24)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V91 rat20        [V91,T57] (  2,  2   )    long  ->  r11         "Spilling to split statement for tree"
+;* V92 rat21        [V92,T73] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
+;  V93 rat22        [V93,T48] (  2,  2   )    long  ->  r11         "spilling expr"
+;* V94 rat23        [V94,T66] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
+;  V95 rat24        [V95,T58] (  2,  2   )    long  ->  rax         "Spilling to split statement for tree"
+;* V96 rat25        [V96,T80] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
+;  V97 rat26        [V97,T49] (  2,  2   )    long  ->  rax         "spilling expr"
+;* V98 rat27        [V98,T67] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
+;  V99 rat28        [V99,T59] (  3,  2.36)    long  ->  rsi         "Spilling to split statement for tree"
+;  V100 rat29       [V100,T74] (  3,  2   )    long  ->  r13         "runtime lookup"
+;  V101 rat30       [V101,T50] (  3,  2.80)    long  ->  rax         "spilling expr"
+;  V102 rat31       [V102,T68] (  3,  2.24)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V103 rat32       [V103,T60] (  2,  2   )    long  ->  r11         "Spilling to split statement for tree"
+;* V104 rat33       [V104,T75] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
+;  V105 rat34       [V105,T51] (  2,  2   )    long  ->  r11         "spilling expr"
+;* V106 rat35       [V106,T69] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
 ;
-; Lcl frame size = 152
+; Lcl frame size = 136
 
 G_M16529_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 152
-       lea      rbp, [rsp+0xC0]
-       mov      qword ptr [rbp-0xC0], rsp
+       sub      rsp, 136
+       lea      rbp, [rsp+0xB0]
+       mov      qword ptr [rbp-0xB0], rsp
        mov      qword ptr [rbp-0x30], rdi
-       mov      gword ptr [rbp-0x68], rdi
+       mov      gword ptr [rbp-0x60], rdi
 						;; size=40 bbWeight=1 PerfScore 9.75
 G_M16529_IG02:
        call     System.Environment:get_TickCount():int
        mov      ebx, eax
        mov      rax, 0xD1FFAB1E      ; code for System.Buffers.Utilities:GetMemoryPressure():int
        call     [rax]System.Buffers.Utilities:GetMemoryPressure():int
        mov      r15d, eax
        mov      rdi, 0xD1FFAB1E      ; const ptr
        mov      r14, gword ptr [rdi]
        cmp      byte  ptr [r14+0x9D], 0
        je       SHORT G_M16529_IG04
 						;; size=45 bbWeight=1 PerfScore 11.00
 G_M16529_IG03:
        mov      rdi, r14
        mov      ecx, r15d
        mov      edx, ebx
        mov      esi, 5
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int):this
        call     [rax]System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int):this
 						;; size=25 bbWeight=0.50 PerfScore 2.12
 G_M16529_IG04:
-       mov      rdi, gword ptr [rbp-0x68]
+       mov      rdi, gword ptr [rbp-0x60]
        mov      r13, gword ptr [rdi+0x10]
-       mov      gword ptr [rbp-0x70], r13
+       mov      gword ptr [rbp-0x68], r13
        xor      r12d, r12d
        cmp      dword ptr [r13+0x08], 0
        jle      G_M16529_IG09
 						;; size=26 bbWeight=1 PerfScore 8.25
 G_M16529_IG05:
-       mov      rdi, gword ptr [rbp-0x68]
+       mov      rdi, gword ptr [rbp-0x60]
        mov      eax, r12d
        mov      rax, gword ptr [r13+8*rax+0x10]
-       mov      gword ptr [rbp-0xA8], rax
+       mov      gword ptr [rbp-0x98], rax
        test     rax, rax
        je       G_M16529_IG08
 						;; size=28 bbWeight=4 PerfScore 22.00
 G_M16529_IG06:
        call     System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int
        mov      dword ptr [rbp-0x38], eax
        mov      edi, 16
        shlx     r9d, edi, r12d
        mov      dword ptr [rbp-0x4C], r9d
-       mov      rdi, gword ptr [rbp-0xA8]
+       mov      rdi, gword ptr [rbp-0x98]
        mov      r10, gword ptr [rdi+0x08]
-       mov      gword ptr [rbp-0xB0], r10
+       mov      gword ptr [rbp-0xA0], r10
        xor      r11d, r11d
        mov      r8d, dword ptr [r10+0x08]
        mov      dword ptr [rbp-0x54], r8d
        test     r8d, r8d
        jle      SHORT G_M16529_IG08
 						;; size=56 bbWeight=2 PerfScore 24.50
 G_M16529_IG07:
        mov      dword ptr [rbp-0x50], r11d
        mov      edi, r11d
        mov      rdi, gword ptr [r10+8*rdi+0x10]
        mov      esi, ebx
        mov      edx, eax
        mov      ecx, r15d
        mov      r8d, r9d
        mov      r13, 0xD1FFAB1E      ; code for System.Buffers.SharedArrayPool`1+Partition[System.__Canon]:Trim(int,int,int,int):this
        cmp      dword ptr [rdi], edi
        call     [r13]System.Buffers.SharedArrayPool`1+Partition[System.__Canon]:Trim(int,int,int,int):this
        mov      r13d, dword ptr [rbp-0x50]
        inc      r13d
        mov      edi, dword ptr [rbp-0x54]
        cmp      edi, r13d
        mov      r11d, r13d
        mov      eax, dword ptr [rbp-0x38]
        mov      r9d, dword ptr [rbp-0x4C]
-       mov      r10, gword ptr [rbp-0xB0]
+       mov      r10, gword ptr [rbp-0xA0]
        jg       SHORT G_M16529_IG07
 						;; size=70 bbWeight=16 PerfScore 276.00
 G_M16529_IG08:
        inc      r12d
-       mov      r13, gword ptr [rbp-0x70]
+       mov      r13, gword ptr [rbp-0x68]
        cmp      dword ptr [r13+0x08], r12d
        jg       G_M16529_IG05
 						;; size=17 bbWeight=4 PerfScore 21.00
 G_M16529_IG09:
        cmp      r15d, 2
-       jne      G_M16529_IG36
+       jne      G_M16529_IG34
 						;; size=10 bbWeight=1 PerfScore 1.25
 G_M16529_IG10:
        cmp      byte  ptr [r14+0x9D], 0
        jne      G_M16529_IG19
-       mov      rdi, gword ptr [rbp-0x68]
-       mov      r13, qword ptr [rdi]
-       mov      rax, r13
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x30]
        mov      rax, qword ptr [rax+0x08]
        cmp      qword ptr [rax+0x08], 72
        jle      SHORT G_M16529_IG11
-						;; size=39 bbWeight=0.50 PerfScore 7.62
+						;; size=36 bbWeight=0.50 PerfScore 7.50
 G_M16529_IG11:
        mov      rdi, gword ptr [rdi+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this
-       mov      gword ptr [rbp-0x78], rax
+       mov      gword ptr [rbp-0x70], rax
 						;; size=22 bbWeight=0.50 PerfScore 4.62
 G_M16529_IG12:
        mov      rdi, rax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        je       SHORT G_M16529_IG18
-       mov      rdi, qword ptr [r13+0x30]
-       mov      rdi, qword ptr [rdi+0x08]
-       cmp      qword ptr [rdi+0x08], 80
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      rsi, qword ptr [rdi]
+       mov      rax, qword ptr [rsi+0x30]
+       mov      rax, qword ptr [rax+0x08]
+       cmp      qword ptr [rax+0x08], 80
        jle      SHORT G_M16529_IG15
-						;; size=35 bbWeight=0.50 PerfScore 6.38
+						;; size=42 bbWeight=0.50 PerfScore 7.88
 G_M16529_IG13:
-       mov      r12, qword ptr [rdi+0x50]
-       test     r12, r12
+       mov      r13, qword ptr [rax+0x50]
+       test     r13, r13
        je       SHORT G_M16529_IG15
 						;; size=9 bbWeight=0.40 PerfScore 1.30
 G_M16529_IG14:
        jmp      SHORT G_M16529_IG16
 						;; size=2 bbWeight=0.32 PerfScore 0.64
 G_M16529_IG15:
-       mov      rdi, r13
+       mov      rdi, rsi
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
-       mov      r12, rax
+       mov      r13, rax
 						;; size=21 bbWeight=0.18 PerfScore 0.32
 G_M16529_IG16:
-       mov      rdi, qword ptr [r13+0x30]
-       mov      rdi, qword ptr [rdi+0x08]
-       cmp      qword ptr [rdi+0x08], 88
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      r11, qword ptr [rdi]
+       mov      r11, qword ptr [r11+0x30]
+       mov      r11, qword ptr [r11+0x08]
+       cmp      qword ptr [r11+0x08], 88
        jle      SHORT G_M16529_IG17
-						;; size=15 bbWeight=0.50 PerfScore 4.00
+						;; size=22 bbWeight=0.50 PerfScore 5.50
 G_M16529_IG17:
-       mov      r11, r12
-       mov      rdi, gword ptr [rbp-0x78]
+       mov      r11, r13
+       mov      rdi, gword ptr [rbp-0x70]
        call     [r11]
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Array:Clear(System.Array)
        call     [rax]System.Array:Clear(System.Array)
-       mov      rdi, gword ptr [rbp-0x78]
+       mov      rdi, gword ptr [rbp-0x70]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      SHORT G_M16529_IG17
 						;; size=46 bbWeight=4 PerfScore 53.00
 G_M16529_IG18:
-       mov      rdi, gword ptr [rbp-0x78]
+       mov      rdi, gword ptr [rbp-0x70]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
-       jmp      G_M16529_IG55
+       jmp      G_M16529_IG50
 						;; size=22 bbWeight=0.50 PerfScore 3.12
 G_M16529_IG19:
-       mov      rdi, gword ptr [rbp-0x68]
-       mov      r13, qword ptr [rdi]
-       mov      rax, r13
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x30]
        mov      rax, qword ptr [rax+0x08]
        cmp      qword ptr [rax+0x08], 72
        jle      SHORT G_M16529_IG20
-						;; size=25 bbWeight=0.50 PerfScore 5.62
+						;; size=22 bbWeight=0.50 PerfScore 5.50
 G_M16529_IG20:
        mov      rdi, gword ptr [rdi+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this
-       mov      gword ptr [rbp-0x80], rax
+       mov      gword ptr [rbp-0x78], rax
 						;; size=22 bbWeight=0.50 PerfScore 4.62
 G_M16529_IG21:
        mov      rdi, rax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
-       je       G_M16529_IG35
-       mov      rdi, qword ptr [r13+0x30]
-       mov      rdi, qword ptr [rdi+0x08]
-       cmp      qword ptr [rdi+0x08], 80
+       je       G_M16529_IG33
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      rsi, qword ptr [rdi]
+       mov      rax, qword ptr [rsi+0x30]
+       mov      rax, qword ptr [rax+0x08]
+       cmp      qword ptr [rax+0x08], 80
        jle      SHORT G_M16529_IG24
-						;; size=39 bbWeight=0.50 PerfScore 6.38
+						;; size=46 bbWeight=0.50 PerfScore 7.88
 G_M16529_IG22:
-       mov      r12, qword ptr [rdi+0x50]
-       test     r12, r12
+       mov      r13, qword ptr [rax+0x50]
+       test     r13, r13
        je       SHORT G_M16529_IG24
 						;; size=9 bbWeight=0.40 PerfScore 1.30
 G_M16529_IG23:
        jmp      SHORT G_M16529_IG25
 						;; size=2 bbWeight=0.32 PerfScore 0.64
 G_M16529_IG24:
-       mov      rdi, r13
+       mov      rdi, rsi
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
-       mov      r12, rax
+       mov      r13, rax
 						;; size=21 bbWeight=0.18 PerfScore 0.32
 G_M16529_IG25:
-       mov      rdi, qword ptr [r13+0x30]
-       mov      rdi, qword ptr [rdi+0x08]
-       cmp      qword ptr [rdi+0x08], 88
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      r11, qword ptr [rdi]
+       mov      r11, qword ptr [r11+0x30]
+       mov      r11, qword ptr [r11+0x08]
+       cmp      qword ptr [r11+0x08], 88
        jle      SHORT G_M16529_IG26
-						;; size=15 bbWeight=0.50 PerfScore 4.00
+						;; size=22 bbWeight=0.50 PerfScore 5.50
 G_M16529_IG26:
-       mov      r11, r12
-       mov      rdi, gword ptr [rbp-0x80]
+       mov      r11, r13
+       mov      rdi, gword ptr [rbp-0x78]
        call     [r11]
        mov      r15, rax
        xor      ebx, ebx
-       mov      eax, dword ptr [r15+0x08]
-       mov      dword ptr [rbp-0x58], eax
-       test     eax, eax
-       jle      SHORT G_M16529_IG32
-						;; size=26 bbWeight=4 PerfScore 36.00
+       mov      r12d, dword ptr [r15+0x08]
+       test     r12d, r12d
+       jle      SHORT G_M16529_IG30
+						;; size=24 bbWeight=4 PerfScore 32.00
 G_M16529_IG27:
-       mov      rdi, qword ptr [r13+0x30]
-       mov      rdi, qword ptr [rdi+0x08]
-       cmp      qword ptr [rdi+0x08], 96
-       jle      SHORT G_M16529_IG29
-						;; size=15 bbWeight=2 PerfScore 16.00
-G_M16529_IG28:
-       mov      rdi, qword ptr [rdi+0x60]
-       test     rdi, rdi
-						;; size=7 bbWeight=1.60 PerfScore 3.60
-G_M16529_IG29:
        mov      edi, ebx
        shl      rdi, 4
        lea      rdi, bword ptr [r15+rdi+0x10]
-       xor      rcx, rcx
-       xchg     gword ptr [rdi], rcx
-       mov      gword ptr [rbp-0x88], rcx
-       test     rcx, rcx
-       je       SHORT G_M16529_IG31
-						;; size=28 bbWeight=16 PerfScore 388.00
-G_M16529_IG30:
-       mov      rdi, rcx
+       xor      rax, rax
+       xchg     gword ptr [rdi], rax
+       mov      gword ptr [rbp-0x80], rax
+       test     rax, rax
+       je       SHORT G_M16529_IG29
+						;; size=25 bbWeight=16 PerfScore 388.00
+G_M16529_IG28:
+       mov      rdi, rax
        call     System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int
        mov      dword ptr [rbp-0x44], eax
-       mov      rdi, gword ptr [rbp-0x88]
+       mov      rdi, gword ptr [rbp-0x80]
        mov      ecx, dword ptr [rdi+0x08]
        mov      dword ptr [rbp-0x48], ecx
-       mov      rdi, gword ptr [rbp-0x68]
+       mov      rdi, gword ptr [rbp-0x60]
        call     System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int
        mov      r8d, eax
        mov      rdi, r14
        mov      edx, dword ptr [rbp-0x44]
        mov      ecx, dword ptr [rbp-0x48]
        mov      esi, 4
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int,int):this
        call     [rax]System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int,int):this
-						;; size=62 bbWeight=8 PerfScore 114.00
-G_M16529_IG31:
+						;; size=59 bbWeight=8 PerfScore 114.00
+G_M16529_IG29:
        inc      ebx
-       mov      eax, dword ptr [rbp-0x58]
-       cmp      eax, ebx
-       jg       SHORT G_M16529_IG29
-						;; size=9 bbWeight=16 PerfScore 40.00
-G_M16529_IG32:
-       mov      rdi, gword ptr [rbp-0x80]
+       cmp      r12d, ebx
+       jg       SHORT G_M16529_IG27
+						;; size=7 bbWeight=16 PerfScore 24.00
+G_M16529_IG30:
+       mov      rdi, gword ptr [rbp-0x78]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      G_M16529_IG26
 						;; size=25 bbWeight=4 PerfScore 22.00
-G_M16529_IG33:
-       jmp      SHORT G_M16529_IG35
+G_M16529_IG31:
+       jmp      SHORT G_M16529_IG33
 						;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M16529_IG34:
+G_M16529_IG32:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
-G_M16529_IG35:
-       mov      rdi, gword ptr [rbp-0x80]
+G_M16529_IG33:
+       mov      rdi, gword ptr [rbp-0x78]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
-       jmp      G_M16529_IG55
+       jmp      G_M16529_IG50
 						;; size=22 bbWeight=0.50 PerfScore 3.12
-G_M16529_IG36:
+G_M16529_IG34:
        mov      r12d, 0x7530
        mov      edi, 0x3A98
        cmp      r15d, 1
        cmove    r12d, edi
-       mov      rdi, gword ptr [rbp-0x68]
-       mov      r13, qword ptr [rdi]
-       mov      rax, r13
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x30]
        mov      rax, qword ptr [rax+0x08]
        cmp      qword ptr [rax+0x08], 72
-       jle      SHORT G_M16529_IG37
-						;; size=44 bbWeight=0.50 PerfScore 6.12
-G_M16529_IG37:
+       jle      SHORT G_M16529_IG35
+						;; size=41 bbWeight=0.50 PerfScore 6.00
+G_M16529_IG35:
        mov      rdi, gword ptr [rdi+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this
-       mov      gword ptr [rbp-0x90], rax
+       mov      gword ptr [rbp-0x88], rax
 						;; size=25 bbWeight=0.50 PerfScore 4.62
-G_M16529_IG38:
+G_M16529_IG36:
        mov      rdi, rax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
-       je       G_M16529_IG54
-       mov      rdi, qword ptr [r13+0x30]
-       mov      rdi, qword ptr [rdi+0x08]
-       cmp      qword ptr [rdi+0x08], 80
-       jle      SHORT G_M16529_IG41
-						;; size=39 bbWeight=0.50 PerfScore 6.38
-G_M16529_IG39:
-       mov      rax, qword ptr [rdi+0x50]
-       test     rax, rax
-       je       SHORT G_M16529_IG41
+       je       G_M16529_IG49
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      rsi, qword ptr [rdi]
+       mov      rax, qword ptr [rsi+0x30]
+       mov      rax, qword ptr [rax+0x08]
+       cmp      qword ptr [rax+0x08], 80
+       jle      SHORT G_M16529_IG39
+						;; size=46 bbWeight=0.50 PerfScore 7.88
+G_M16529_IG37:
+       mov      r13, qword ptr [rax+0x50]
+       test     r13, r13
+       je       SHORT G_M16529_IG39
 						;; size=9 bbWeight=0.40 PerfScore 1.30
-G_M16529_IG40:
-       jmp      SHORT G_M16529_IG42
+G_M16529_IG38:
+       jmp      SHORT G_M16529_IG40
 						;; size=2 bbWeight=0.32 PerfScore 0.64
-G_M16529_IG41:
-       mov      rdi, r13
+G_M16529_IG39:
+       mov      rdi, rsi
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
-						;; size=18 bbWeight=0.18 PerfScore 0.27
-G_M16529_IG42:
+       mov      r13, rax
+						;; size=21 bbWeight=0.18 PerfScore 0.32
+G_M16529_IG40:
+       mov      rdi, gword ptr [rbp-0x60]
+       mov      r11, qword ptr [rdi]
+       mov      r11, qword ptr [r11+0x30]
+       mov      r11, qword ptr [r11+0x08]
+       cmp      qword ptr [r11+0x08], 88
+       jle      SHORT G_M16529_IG41
+						;; size=22 bbWeight=0.50 PerfScore 5.50
+G_M16529_IG41:
+       mov      r11, r13
+       mov      rdi, gword ptr [rbp-0x88]
+       call     [r11]
        mov      r15, rax
-       mov      rdi, qword ptr [r13+0x30]
-       mov      rdi, qword ptr [rdi+0x08]
-       cmp      qword ptr [rdi+0x08], 88
-       jle      SHORT G_M16529_IG43
-						;; size=18 bbWeight=0.50 PerfScore 4.12
+       xor      eax, eax
+       mov      ecx, dword ptr [r15+0x08]
+       mov      dword ptr [rbp-0x58], ecx
+       test     ecx, ecx
+       jle      SHORT G_M16529_IG45
+						;; size=29 bbWeight=4 PerfScore 36.00
+G_M16529_IG42:
+       mov      dword ptr [rbp-0x34], eax
+       mov      edi, eax
+       shl      rdi, 4
+       cmp      gword ptr [r15+rdi+0x10], 0
+       je       SHORT G_M16529_IG44
+						;; size=17 bbWeight=16 PerfScore 92.00
 G_M16529_IG43:
-       mov      r11, r15
-       mov      rdi, gword ptr [rbp-0x90]
-       call     [r11]
-       mov      gword ptr [rbp-0x98], rax
-       xor      ecx, ecx
-       mov      edx, dword ptr [rax+0x08]
-       mov      dword ptr [rbp-0x5C], edx
+       mov      edx, dword ptr [r15+rdi+0x18]
        test     edx, edx
-       jle      SHORT G_M16529_IG47
-						;; size=32 bbWeight=4 PerfScore 39.00
+       jne      SHORT G_M16529_IG48
+       mov      dword ptr [r15+rdi+0x18], ebx
+						;; size=14 bbWeight=8 PerfScore 34.00
 G_M16529_IG44:
-       mov      dword ptr [rbp-0x34], ecx
-       mov      edi, ecx
-       shl      rdi, 4
-       cmp      gword ptr [rax+rdi+0x10], 0
-       je       SHORT G_M16529_IG46
-						;; size=17 bbWeight=16 PerfScore 92.00
-G_M16529_IG45:
-       mov      esi, dword ptr [rax+rdi+0x18]
-       test     esi, esi
-       jne      SHORT G_M16529_IG50
-       mov      dword ptr [rax+rdi+0x18], ebx
-						;; size=12 bbWeight=8 PerfScore 34.00
-G_M16529_IG46:
-       mov      ecx, dword ptr [rbp-0x34]
-       inc      ecx
-       mov      edx, dword ptr [rbp-0x5C]
-       cmp      edx, ecx
-       jg       SHORT G_M16529_IG44
+       mov      eax, dword ptr [rbp-0x34]
+       inc      eax
+       mov      ecx, dword ptr [rbp-0x58]
+       cmp      ecx, eax
+       jg       SHORT G_M16529_IG42
 						;; size=12 bbWeight=16 PerfScore 56.00
-G_M16529_IG47:
-       mov      rdi, gword ptr [rbp-0x90]
+G_M16529_IG45:
+       mov      rdi, gword ptr [rbp-0x88]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
-       jne      SHORT G_M16529_IG43
+       jne      SHORT G_M16529_IG41
 						;; size=24 bbWeight=4 PerfScore 22.00
-G_M16529_IG48:
-       jmp      G_M16529_IG54
-						;; size=5 bbWeight=0.50 PerfScore 1.00
-G_M16529_IG49:
+G_M16529_IG46:
+       jmp      SHORT G_M16529_IG49
+						;; size=2 bbWeight=0.50 PerfScore 1.00
+G_M16529_IG47:
        call     CORINFO_HELP_RNGCHKFAIL
 						;; size=5 bbWeight=0 PerfScore 0.00
-G_M16529_IG50:
-       mov      r8d, ebx
-       sub      r8d, esi
-       movsxd   rsi, r8d
-       mov      r8d, r12d
-       cmp      rsi, r8
-       jl       SHORT G_M16529_IG46
-       mov      rsi, qword ptr [r13+0x30]
-       mov      rsi, qword ptr [rsi+0x08]
-       cmp      qword ptr [rsi+0x08], 96
-       jle      SHORT G_M16529_IG51
-						;; size=32 bbWeight=8 PerfScore 82.00
-G_M16529_IG51:
-       lea      rdi, bword ptr [rax+rdi+0x10]
-       xor      rsi, rsi
-       xchg     gword ptr [rdi], rsi
-       mov      gword ptr [rbp-0xA0], rsi
-       test     rsi, rsi
-       je       SHORT G_M16529_IG53
+G_M16529_IG48:
+       mov      esi, ebx
+       sub      esi, edx
+       movsxd   rdx, esi
+       mov      esi, r12d
+       cmp      rdx, rsi
+       jl       SHORT G_M16529_IG44
+       lea      rdi, bword ptr [r15+rdi+0x10]
+       xor      rdx, rdx
+       xchg     gword ptr [rdi], rdx
+       mov      gword ptr [rbp-0x90], rdx
+       test     rdx, rdx
+       je       SHORT G_M16529_IG44
        cmp      byte  ptr [r14+0x9D], 0
-       je       SHORT G_M16529_IG52
-       mov      rdi, rsi
+       je       SHORT G_M16529_IG44
+       mov      rdi, rdx
        call     System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int
        mov      dword ptr [rbp-0x3C], eax
-       mov      rdi, gword ptr [rbp-0xA0]
+       mov      rdi, gword ptr [rbp-0x90]
        mov      ecx, dword ptr [rdi+0x08]
        mov      dword ptr [rbp-0x40], ecx
-       mov      rdi, gword ptr [rbp-0x68]
+       mov      rdi, gword ptr [rbp-0x60]
        call     System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int
        mov      r8d, eax
        mov      rdi, r14
        mov      edx, dword ptr [rbp-0x3C]
        mov      ecx, dword ptr [rbp-0x40]
        mov      esi, 4
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int,int):this
        call     [rax]System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int,int):this
-       mov      rax, gword ptr [rbp-0x98]
-       jmp      G_M16529_IG46
-						;; size=106 bbWeight=8 PerfScore 358.00
-G_M16529_IG52:
-       mov      rax, gword ptr [rbp-0x98]
-       jmp      G_M16529_IG46
-						;; size=12 bbWeight=4 PerfScore 12.00
-G_M16529_IG53:
-       mov      rax, gword ptr [rbp-0x98]
-       jmp      G_M16529_IG46
-						;; size=12 bbWeight=4 PerfScore 12.00
-G_M16529_IG54:
-       mov      rdi, gword ptr [rbp-0x90]
+       jmp      G_M16529_IG44
+						;; size=114 bbWeight=8 PerfScore 368.00
+G_M16529_IG49:
+       mov      rdi, gword ptr [rbp-0x88]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
 						;; size=20 bbWeight=0.50 PerfScore 2.12
-G_M16529_IG55:
+G_M16529_IG50:
        mov      eax, 1
 						;; size=5 bbWeight=1 PerfScore 0.25
-G_M16529_IG56:
-       add      rsp, 152
+G_M16529_IG51:
+       add      rsp, 136
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=18 bbWeight=1 PerfScore 4.25
-G_M16529_IG57:
+G_M16529_IG52:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
-G_M16529_IG58:
+G_M16529_IG53:
        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+0xC0]
+       lea      rbp, [rbp+0xB0]
 						;; size=25 bbWeight=0 PerfScore 0.00
-G_M16529_IG59:
-       cmp      gword ptr [rbp-0x78], 0
-       je       SHORT G_M16529_IG60
-       mov      rdi, gword ptr [rbp-0x78]
+G_M16529_IG54:
+       cmp      gword ptr [rbp-0x70], 0
+       je       SHORT G_M16529_IG55
+       mov      rdi, gword ptr [rbp-0x70]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
 						;; size=24 bbWeight=0 PerfScore 0.00
-G_M16529_IG60:
+G_M16529_IG55:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
-G_M16529_IG61:
+G_M16529_IG56:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0 PerfScore 0.00
-G_M16529_IG62:
+G_M16529_IG57:
        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+0xC0]
+       lea      rbp, [rbp+0xB0]
 						;; size=25 bbWeight=0 PerfScore 0.00
-G_M16529_IG63:
-       cmp      gword ptr [rbp-0x80], 0
-       je       SHORT G_M16529_IG64
-       mov      rdi, gword ptr [rbp-0x80]
+G_M16529_IG58:
+       cmp      gword ptr [rbp-0x78], 0
+       je       SHORT G_M16529_IG59
+       mov      rdi, gword ptr [rbp-0x78]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
 						;; size=24 bbWeight=0 PerfScore 0.00
-G_M16529_IG64:
+G_M16529_IG59:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
-G_M16529_IG65:
+G_M16529_IG60:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0 PerfScore 0.00
-G_M16529_IG66:
+G_M16529_IG61:
        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+0xC0]
+       lea      rbp, [rbp+0xB0]
 						;; size=25 bbWeight=0 PerfScore 0.00
-G_M16529_IG67:
-       cmp      gword ptr [rbp-0x90], 0
-       je       SHORT G_M16529_IG68
-       mov      rdi, gword ptr [rbp-0x90]
+G_M16529_IG62:
+       cmp      gword ptr [rbp-0x88], 0
+       je       SHORT G_M16529_IG63
+       mov      rdi, gword ptr [rbp-0x88]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
 						;; size=30 bbWeight=0 PerfScore 0.00
-G_M16529_IG68:
+G_M16529_IG63:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
-G_M16529_IG69:
+G_M16529_IG64:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1537, prolog size 40, PerfScore 1995.27, instruction count 405, allocated bytes for code 1537 (MethodHash=d29cbf6e) for method System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts)
+; Total bytes of code 1486, prolog size 40, PerfScore 1860.12, instruction count 397, allocated bytes for code 1486 (MethodHash=d29cbf6e) for method System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts)
-3 (-1.72 % of base) - System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this
 ; Assembly listing for method System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 2 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T00] (  6,  5   )     ref  ->  [rbp-0x20]  this class-hnd EH-live single-def <System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]>
-;  V01 loc0         [V01,T04] (  5,  3.50)     ref  ->  rbx         class-hnd exact single-def <System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]>
-;  V02 loc1         [V02,T06] (  4,  1   )     ref  ->  [rbp-0x28]  class-hnd EH-live spill-single-def <System.Object>
+;  V00 this         [V00,T00] (  6,  5   )     ref  ->  rbx         this class-hnd single-def <System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]>
+;  V01 loc0         [V01,T01] (  5,  3.50)     ref  ->  r15         class-hnd single-def <System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]>
+;  V02 loc1         [V02,T02] (  4,  1   )     ref  ->  [rbp-0x20]  class-hnd EH-live spill-single-def <System.Object>
 ;  V03 loc2         [V03    ] (  5,  2   )   ubyte  ->  [rbp-0x18]  do-not-enreg[X] addr-exposed ld-addr-op
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V05 tmp1         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V06 tmp2         [V06    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V07 tmp3         [V07,T03] (  2,  4   )     ref  ->  rbx         class-hnd single-def "updating class info" <System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]>
-;  V08 PSPSym       [V08,T07] (  1,  1   )    long  ->  [rbp-0x30]  do-not-enreg[V] "PSPSym"
-;* V09 rat0         [V09,T02] (  0,  0   )    long  ->  zero-ref    "Spilling to split statement for tree"
-;* V10 rat1         [V10,T05] (  0,  0   )    long  ->  zero-ref    "runtime lookup"
-;* V11 rat2         [V11,T01] (  0,  0   )    long  ->  zero-ref    "fgMakeTemp is creating a new local variable"
+;  V05 PSPSym       [V05,T03] (  1,  1   )    long  ->  [rbp-0x30]  do-not-enreg[V] "PSPSym"
 ;
-; Lcl frame size = 40
+; Lcl frame size = 32
 
 G_M1143_IG01:
        push     rbp
+       push     r15
        push     rbx
-       sub      rsp, 40
+       sub      rsp, 32
        lea      rbp, [rsp+0x30]
        mov      qword ptr [rbp-0x30], rsp
-       mov      qword ptr [rbp-0x10], rdi
-       mov      gword ptr [rbp-0x20], rdi
-						;; size=23 bbWeight=1 PerfScore 5.75
+       mov      rbx, rdi
+						;; size=20 bbWeight=1 PerfScore 5.00
 G_M1143_IG02:
-       cmp      dword ptr [rdi], edi
-       lea      rsi, bword ptr [rdi+0x08]
-       xor      rax, rax
-       mov      rbx, rax
-       xchg     gword ptr [rsi], rbx
-       test     rbx, rbx
-       je       SHORT G_M1143_IG09
+       cmp      byte  ptr [rbx], bl
+       lea      rsi, bword ptr [rbx+0x08]
+       xor      rdi, rdi
+       mov      r15, rdi
+       xchg     gword ptr [rsi], r15
+       test     r15, r15
+       je       SHORT G_M1143_IG10
 						;; size=19 bbWeight=1 PerfScore 25.25
 G_M1143_IG03:
        xor      esi, esi
-       mov      qword ptr [rdi+0x18], rsi
-       mov      qword ptr [rdi+0x20], rsi
-       mov      rsi, gword ptr [rbx+0x08]
-       mov      gword ptr [rbp-0x28], rsi
-       xor      eax, eax
-       mov      dword ptr [rbp-0x18], eax
-						;; size=23 bbWeight=0.50 PerfScore 3.25
+       mov      qword ptr [rbx+0x18], rsi
+       mov      qword ptr [rbx+0x20], rsi
+       mov      rdi, gword ptr [r15+0x08]
+       mov      gword ptr [rbp-0x20], rdi
+						;; size=18 bbWeight=0.50 PerfScore 2.62
 G_M1143_IG04:
+       mov      dword ptr [rbp-0x18], esi
+						;; size=3 bbWeight=0.50 PerfScore 0.50
+G_M1143_IG05:
        cmp      byte  ptr [rbp-0x18], 0
-       jne      SHORT G_M1143_IG05
+       jne      SHORT G_M1143_IG06
        lea      rsi, [rbp-0x18]
-       mov      rdi, gword ptr [rbp-0x28]
        call     System.Threading.Monitor:ReliableEnter(System.Object,byref)
-       jmp      SHORT G_M1143_IG06
-						;; size=21 bbWeight=0.50 PerfScore 3.75
-G_M1143_IG05:
+       jmp      SHORT G_M1143_IG07
+						;; size=17 bbWeight=0.50 PerfScore 3.25
+G_M1143_IG06:
        mov      rax, 0xD1FFAB1E      ; code for System.Threading.Monitor:ThrowLockTakenException()
        call     [rax]System.Threading.Monitor:ThrowLockTakenException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M1143_IG06:
-       dec      dword ptr [rbx+0x18]
-						;; size=3 bbWeight=0.50 PerfScore 1.50
 G_M1143_IG07:
+       dec      dword ptr [r15+0x18]
+						;; size=4 bbWeight=0.50 PerfScore 1.50
+G_M1143_IG08:
        cmp      byte  ptr [rbp-0x18], 0
-       je       SHORT G_M1143_IG08
-       mov      rdi, gword ptr [rbp-0x28]
+       je       SHORT G_M1143_IG09
+       mov      rdi, gword ptr [rbp-0x20]
        call     System.Threading.Monitor:Exit(System.Object)
 						;; size=15 bbWeight=0.50 PerfScore 2.50
-G_M1143_IG08:
-       mov      rdi, gword ptr [rbp-0x20]
-       call     System.GC:_SuppressFinalize(System.Object)
-       mov      rdi, gword ptr [rbp-0x20]
-						;; size=13 bbWeight=0.50 PerfScore 1.50
 G_M1143_IG09:
-       add      rsp, 40
+       mov      rdi, rbx
+       call     System.GC:_SuppressFinalize(System.Object)
+						;; size=8 bbWeight=0.50 PerfScore 0.62
+G_M1143_IG10:
+       nop      
+						;; size=1 bbWeight=1 PerfScore 0.25
+G_M1143_IG11:
+       add      rsp, 32
        pop      rbx
+       pop      r15
        pop      rbp
        ret      
-						;; size=7 bbWeight=1 PerfScore 2.25
-G_M1143_IG10:
+						;; size=9 bbWeight=1 PerfScore 2.75
+G_M1143_IG12:
        push     rbp
+       push     r15
        push     rbx
-       push     rax
+       sub      rsp, 16
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x30]
-						;; size=14 bbWeight=0 PerfScore 0.00
-G_M1143_IG11:
+						;; size=19 bbWeight=0 PerfScore 0.00
+G_M1143_IG13:
        cmp      byte  ptr [rbp-0x18], 0
-       je       SHORT G_M1143_IG12
-       mov      rdi, gword ptr [rbp-0x28]
+       je       SHORT G_M1143_IG14
+       mov      rdi, gword ptr [rbp-0x20]
        call     System.Threading.Monitor:Exit(System.Object)
 						;; size=15 bbWeight=0 PerfScore 0.00
-G_M1143_IG12:
+G_M1143_IG14:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
-G_M1143_IG13:
-       add      rsp, 8
+G_M1143_IG15:
+       add      rsp, 16
        pop      rbx
+       pop      r15
        pop      rbp
        ret      
-						;; size=7 bbWeight=0 PerfScore 0.00
+						;; size=9 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 174, prolog size 23, PerfScore 63.15, instruction count 57, allocated bytes for code 174 (MethodHash=6275fb88) for method System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts)
+; Total bytes of code 171, prolog size 20, PerfScore 61.35, instruction count 58, allocated bytes for code 171 (MethodHash=6275fb88) for method System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts)
-1 (-0.12 % of base) - System.Threading.CancellationTokenSource:ExecuteCallbackHandlers(ubyte):this
 ; Assembly listing for method System.Threading.CancellationTokenSource:ExecuteCallbackHandlers(ubyte):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T11] (  7,  6   )     ref  ->  [rbp-0x30]  this class-hnd EH-live single-def <System.Threading.CancellationTokenSource>
-;  V01 arg1         [V01,T14] (  3,  2   )   ubyte  ->  [rbp-0x24]  EH-live single-def
-;  V02 loc0         [V02,T01] ( 12, 51   )     ref  ->  [rbp-0x38]  must-init class-hnd exact EH-live single-def <System.Threading.CancellationTokenSource+Registrations>
-;  V03 loc1         [V03,T15] (  6,  2   )     ref  ->  [rbp-0x40]  do-not-enreg[Z] must-init class-hnd EH-live <System.Collections.Generic.List`1[System.Exception]>
+;  V01 arg1         [V01,T13] (  3,  2   )   ubyte  ->  [rbp-0x24]  EH-live single-def
+;  V02 loc0         [V02,T01] ( 13, 52   )     ref  ->  [rbp-0x38]  must-init class-hnd EH-live single-def <System.Threading.CancellationTokenSource+Registrations>
+;  V03 loc1         [V03,T14] (  6,  2   )     ref  ->  [rbp-0x40]  do-not-enreg[Z] must-init class-hnd EH-live <System.Collections.Generic.List`1[System.Exception]>
 ;  V04 loc2         [V04,T00] (  8, 64   )     ref  ->  r15         class-hnd exact <System.Threading.CancellationTokenSource+CallbackNode>
-;  V05 loc3         [V05,T20] (  3,  0   )     ref  ->  [rbp-0x48]  do-not-enreg[Z] must-init class-hnd EH-live <System.Exception>
+;  V05 loc3         [V05,T19] (  3,  0   )     ref  ->  [rbp-0x48]  do-not-enreg[Z] must-init class-hnd EH-live <System.Exception>
 ;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V07 tmp1         [V07,T03] (  2, 32   )     ref  ->  rsi         class-hnd exact "dup spill" <System.Threading.SendOrPostCallback>
 ;  V08 tmp2         [V08,T04] (  2, 32   )     ref  ->  r14         class-hnd "impSpillLclRefs" <System.Threading.SynchronizationContext>
 ;  V09 tmp3         [V09,T07] (  3, 24   )     ref  ->  r14        
 ;  V10 tmp4         [V10,T05] (  4, 28   )     ref  ->  rsi        
 ;  V11 tmp5         [V11,T02] (  5, 40   )     ref  ->  r13         class-hnd exact "NewObj constructor temp" <System.Threading.SendOrPostCallback>
-;  V12 tmp6         [V12,T25] (  2,  0   )     ref  ->  rsi         class-hnd "impSpillSpecialSideEff" <System.Object>
-;  V13 tmp7         [V13,T26] (  2,  0   )     ref  ->  rax         class-hnd "dup spill" <System.Exception>
-;  V14 tmp8         [V14,T21] (  3,  0   )     ref  ->  rax        
-;  V15 tmp9         [V15,T24] (  3,  0   )     int  ->  rax        
+;  V12 tmp6         [V12,T24] (  2,  0   )     ref  ->  rsi         class-hnd "impSpillSpecialSideEff" <System.Object>
+;  V13 tmp7         [V13,T25] (  2,  0   )     ref  ->  rax         class-hnd "dup spill" <System.Exception>
+;  V14 tmp8         [V14,T20] (  3,  0   )     ref  ->  rax        
+;  V15 tmp9         [V15,T23] (  3,  0   )     int  ->  rax        
 ;* V16 tmp10        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "impSpillSpecialSideEff" <System.Object>
-;  V17 tmp11        [V17,T17] (  8,  0   )     ref  ->  rdi        
-;  V18 tmp12        [V18,T18] (  4,  0   )     ref  ->  rbx         class-hnd exact "NewObj constructor temp" <System.Collections.Generic.List`1[System.Exception]>
-;  V19 tmp13        [V19,T22] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.AggregateException>
-;* V20 tmp14        [V20    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V21 tmp15        [V21,T13] (  3,  6   )     ref  ->  rcx         class-hnd single-def "updating class info" <System.Threading.CancellationTokenSource+Registrations>
-;  V22 tmp16        [V22,T10] (  3, 20   )   byref  ->  rdi         "Inline stloc first use temp"
-;  V23 tmp17        [V23,T08] (  3, 24   )     ref  ->  rsi         class-hnd exact "Inlining Arg" <System.Threading.CancellationTokenSource+<>c>
-;  V24 tmp18        [V24,T23] (  3,  0   )     ref  ->  rdx         class-hnd "Inline stloc first use temp" <System.Exception[]>
-;  V25 tmp19        [V25,T19] (  4,  0   )     int  ->  rsi         "Inline stloc first use temp"
-;  V26 PSPSym       [V26,T16] (  1,  1   )    long  ->  [rbp-0x50]  do-not-enreg[V] "PSPSym"
-;* V27 cse0         [V27,T12] (  0,  0   )    long  ->  zero-ref    "CSE - aggressive"
-;  V28 cse1         [V28,T06] (  4, 28   )     ref  ->  rsi         "CSE - aggressive"
-;  V29 cse2         [V29,T09] (  3, 24   )     ref  ->  r14         "CSE - aggressive"
+;  V17 tmp11        [V17,T16] (  8,  0   )     ref  ->  rdi        
+;  V18 tmp12        [V18,T17] (  4,  0   )     ref  ->  rbx         class-hnd exact "NewObj constructor temp" <System.Collections.Generic.List`1[System.Exception]>
+;  V19 tmp13        [V19,T21] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.AggregateException>
+;  V20 tmp14        [V20,T10] (  3, 20   )   byref  ->  rdi         "Inline stloc first use temp"
+;  V21 tmp15        [V21,T08] (  3, 24   )     ref  ->  rsi         class-hnd exact "Inlining Arg" <System.Threading.CancellationTokenSource+<>c>
+;  V22 tmp16        [V22,T22] (  3,  0   )     ref  ->  rdx         class-hnd "Inline stloc first use temp" <System.Exception[]>
+;  V23 tmp17        [V23,T18] (  4,  0   )     int  ->  rsi         "Inline stloc first use temp"
+;  V24 PSPSym       [V24,T15] (  1,  1   )    long  ->  [rbp-0x50]  do-not-enreg[V] "PSPSym"
+;* V25 cse0         [V25,T12] (  0,  0   )    long  ->  zero-ref    "CSE - aggressive"
+;  V26 cse1         [V26,T06] (  4, 28   )     ref  ->  rsi         "CSE - aggressive"
+;  V27 cse2         [V27,T09] (  3, 24   )     ref  ->  r14         "CSE - aggressive"
 ;
 ; Lcl frame size = 48
 
 G_M33701_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 48
        lea      rbp, [rsp+0x50]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  xmmword ptr [rbp-0x48], xmm8
        xor      eax, eax
        mov      qword ptr [rbp-0x38], rax
        mov      qword ptr [rbp-0x50], rsp
        mov      gword ptr [rbp-0x30], rdi
        mov      dword ptr [rbp-0x24], esi
 						;; size=44 bbWeight=1 PerfScore 12.33
 G_M33701_IG02:
        cmp      byte  ptr [rdi], dil
        lea      rax, bword ptr [rdi+0x18]
        xor      rcx, rcx
-       xchg     gword ptr [rax], rcx
-       mov      gword ptr [rbp-0x38], rcx
-       test     rcx, rcx
+       mov      rbx, rcx
+       xchg     gword ptr [rax], rbx
+       mov      gword ptr [rbp-0x38], rbx
+       test     rbx, rbx
        jne      SHORT G_M33701_IG04
        add      rdi, 32
        mov      eax, 2
        xchg     dword ptr [rdi], eax
-						;; size=32 bbWeight=1 PerfScore 46.50
+						;; size=35 bbWeight=1 PerfScore 46.75
 G_M33701_IG03:
        add      rsp, 48
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=13 bbWeight=1 PerfScore 3.75
 G_M33701_IG04:
        call     System.Environment:get_CurrentManagedThreadId():int
-       mov      rbx, gword ptr [rbp-0x38]
        mov      dword ptr [rbx+0x30], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0x40], rdi
-						;; size=18 bbWeight=1 PerfScore 4.25
+						;; size=14 bbWeight=1 PerfScore 3.25
 G_M33701_IG05:
        mov      rbx, gword ptr [rbp-0x38]
        lea      rdi, bword ptr [rbx+0x34]
        mov      eax, 1
        xchg     dword ptr [rdi], eax
        test     eax, eax
        je       SHORT G_M33701_IG07
 						;; size=19 bbWeight=8 PerfScore 184.00
 G_M33701_IG06:
        mov      rax, 0xD1FFAB1E      ; code for System.Threading.CancellationTokenSource+Registrations:<EnterLock>g__Contention|13_0(byref)
        call     [rax]System.Threading.CancellationTokenSource+Registrations:<EnterLock>g__Contention|13_0(byref)
 						;; size=12 bbWeight=4 PerfScore 13.00
 G_M33701_IG07:
        nop      
 						;; size=1 bbWeight=8 PerfScore 2.00
 G_M33701_IG08:
        mov      r15, gword ptr [rbx+0x10]
        test     r15, r15
        je       SHORT G_M33701_IG12
        mov      rsi, gword ptr [r15+0x18]
        test     rsi, rsi
        je       SHORT G_M33701_IG10
 						;; size=18 bbWeight=8 PerfScore 52.00
 G_M33701_IG09:
        xor      rdi, rdi
        mov      gword ptr [rsi+0x10], rdi
 						;; size=6 bbWeight=4 PerfScore 5.00
 G_M33701_IG10:
        lea      rdi, bword ptr [rbx+0x10]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, qword ptr [r15+0x40]
        mov      qword ptr [rbx+0x28], rdi
        xor      edi, edi
        mov      qword ptr [r15+0x40], rdi
 						;; size=23 bbWeight=8 PerfScore 46.00
 G_M33701_IG11:
        xor      edi, edi
        mov      dword ptr [rbx+0x34], edi
        jmp      SHORT G_M33701_IG14
 						;; size=7 bbWeight=8 PerfScore 26.00
 G_M33701_IG12:
        mov      rdi, rsp
        call     G_M33701_IG24
 						;; size=8 bbWeight=1 PerfScore 1.25
 G_M33701_IG13:
        jmp      G_M33701_IG21
 						;; size=5 bbWeight=1 PerfScore 2.00
 G_M33701_IG14:
        mov      r14, gword ptr [r15+0x38]
        test     r14, r14
        je       G_M33701_IG20
        mov      rdi, 0xD1FFAB1E      ; global ptr
        test     byte  ptr [rdi], 1
        je       G_M33701_IG19
 						;; size=32 bbWeight=8 PerfScore 60.00
 G_M33701_IG15:
        mov      rdi, 0xD1FFAB1E      ; data for System.Threading.CancellationTokenSource+<>c:<>9__38_0
        mov      rsi, gword ptr [rdi]
        test     rsi, rsi
        jne      SHORT G_M33701_IG17
 						;; size=18 bbWeight=8 PerfScore 28.00
 G_M33701_IG16:
        mov      rdi, 0xD1FFAB1E      ; System.Threading.SendOrPostCallback
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      rdi, 0xD1FFAB1E      ; data for System.Threading.CancellationTokenSource+<>c:<>9
        mov      rsi, gword ptr [rdi]
        test     rsi, rsi
        je       SHORT G_M33701_IG18
        lea      rdi, bword ptr [r13+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, 0xD1FFAB1E      ; code for System.Threading.CancellationTokenSource+<>c:<ExecuteCallbackHandlers>b__38_0(System.Object):this
        mov      qword ptr [r13+0x18], rdi
        mov      rdi, 0xD1FFAB1E      ; data for System.Threading.CancellationTokenSource+<>c:<>9__38_0
        mov      rsi, r13
        call     CORINFO_HELP_ASSIGN_REF
        mov      rsi, r13
 						;; size=80 bbWeight=4 PerfScore 38.00
 G_M33701_IG17:
        mov      rdi, r14
        mov      rdx, r15
        mov      rax, qword ptr [r14]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Threading.SynchronizationContext:Send(System.Threading.SendOrPostCallback,System.Object):this
        call     System.Environment:get_CurrentManagedThreadId():int
        mov      dword ptr [rbx+0x30], eax
        jmp      G_M33701_IG05
 						;; size=29 bbWeight=8 PerfScore 92.00
 G_M33701_IG18:
        mov      rax, 0xD1FFAB1E      ; code for System.MulticastDelegate:ThrowNullThisInDelegateToInstance()
        call     [rax]System.MulticastDelegate:ThrowNullThisInDelegateToInstance()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M33701_IG19:
        mov      rdi, 0xD1FFAB1E
        mov      esi, 781
        call     CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
        jmp      G_M33701_IG15
 						;; size=25 bbWeight=0 PerfScore 0.00
 G_M33701_IG20:
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Threading.CancellationTokenSource+CallbackNode:ExecuteCallback():this
        call     [rax]System.Threading.CancellationTokenSource+CallbackNode:ExecuteCallback():this
        jmp      G_M33701_IG05
 						;; size=20 bbWeight=8 PerfScore 44.00
 G_M33701_IG21:
        mov      rdi, gword ptr [rbp-0x30]
        mov      dword ptr [rdi+0x20], 2
        mov      rbx, gword ptr [rbp-0x38]
        add      rbx, 40
        xor      edi, edi
        xchg     qword ptr [rbx], rdi
        cmp      gword ptr [rbp-0x40], 0
        jne      SHORT G_M33701_IG23
 						;; size=31 bbWeight=1 PerfScore 26.50
 G_M33701_IG22:
        add      rsp, 48
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=13 bbWeight=1 PerfScore 3.75
 G_M33701_IG23:
        mov      rdi, 0xD1FFAB1E      ; System.AggregateException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rdi, rbx
        mov      rsi, gword ptr [rbp-0x40]
        mov      rax, 0xD1FFAB1E      ; code for System.AggregateException:.ctor(System.Collections.Generic.IEnumerable`1[System.Exception]):this
        call     [rax]System.AggregateException:.ctor(System.Collections.Generic.IEnumerable`1[System.Exception]):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=46 bbWeight=0 PerfScore 0.00
 G_M33701_IG24:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 16
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x50]
 						;; size=23 bbWeight=1 PerfScore 8.75
 G_M33701_IG25:
        xor      edi, edi
        mov      rbx, gword ptr [rbp-0x38]
        mov      dword ptr [rbx+0x34], edi
 						;; size=9 bbWeight=1 PerfScore 2.25
 G_M33701_IG26:
        add      rsp, 16
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=13 bbWeight=1 PerfScore 3.75
 G_M33701_IG27:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 16
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x50]
 						;; size=23 bbWeight=0 PerfScore 0.00
 G_M33701_IG28:
        mov      rdi, 0xD1FFAB1E      ; System.Exception
        call     CORINFO_HELP_ISINSTANCEOFCLASS
        test     rax, rax
        jne      SHORT G_M33701_IG29
        xor      eax, eax
        jmp      SHORT G_M33701_IG30
 						;; size=24 bbWeight=0 PerfScore 0.00
 G_M33701_IG29:
        mov      gword ptr [rbp-0x48], rax
        xor      eax, eax
        cmp      byte  ptr [rbp-0x24], 0
        sete     al
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M33701_IG30:
        add      rsp, 16
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M33701_IG31:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 16
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x50]
 						;; size=23 bbWeight=0 PerfScore 0.00
 G_M33701_IG32:
        mov      rdi, gword ptr [rbp-0x40]
        cmp      gword ptr [rbp-0x40], 0
        jne      SHORT G_M33701_IG33
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.List`1[System.Exception]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.List`1[System.__Canon]:.ctor():this
        call     [rax]System.Collections.Generic.List`1[System.__Canon]:.ctor():this
        mov      gword ptr [rbp-0x40], rbx
        mov      rdi, rbx
 						;; size=51 bbWeight=0 PerfScore 0.00
 G_M33701_IG33:
        inc      dword ptr [rdi+0x14]
        mov      rdx, gword ptr [rdi+0x08]
        mov      esi, dword ptr [rdi+0x10]
        cmp      dword ptr [rdx+0x08], esi
        jbe      SHORT G_M33701_IG34
        lea      eax, [rsi+0x01]
        mov      dword ptr [rdi+0x10], eax
        movsxd   rsi, esi
        mov      rdi, rdx
        mov      rdx, gword ptr [rbp-0x48]
        call     CORINFO_HELP_ARRADDR_ST
        jmp      SHORT G_M33701_IG35
 						;; size=38 bbWeight=0 PerfScore 0.00
 G_M33701_IG34:
        mov      rsi, gword ptr [rbp-0x48]
        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
 						;; size=16 bbWeight=0 PerfScore 0.00
 G_M33701_IG35:
        lea      rax, G_M33701_IG05
 						;; size=7 bbWeight=0 PerfScore 0.00
 G_M33701_IG36:
        add      rsp, 16
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M33701_IG37:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 16
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x50]
 						;; size=23 bbWeight=0 PerfScore 0.00
 G_M33701_IG38:
        mov      rdi, gword ptr [rbp-0x30]
        mov      dword ptr [rdi+0x20], 2
        mov      rbx, gword ptr [rbp-0x38]
        cmp      byte  ptr [rbx], bl
        lea      rax, bword ptr [rbx+0x28]
        xor      ecx, ecx
        xchg     qword ptr [rax], rcx
 						;; size=26 bbWeight=0 PerfScore 0.00
 G_M33701_IG39:
        add      rsp, 16
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=13 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 841, prolog size 44, PerfScore 789.18, instruction count 245, allocated bytes for code 841 (MethodHash=24f87c5a) for method System.Threading.CancellationTokenSource:ExecuteCallbackHandlers(ubyte):this (FullOpts)
+; Total bytes of code 840, prolog size 44, PerfScore 788.33, instruction count 245, allocated bytes for code 840 (MethodHash=24f87c5a) for method System.Threading.CancellationTokenSource:ExecuteCallbackHandlers(ubyte):this (FullOpts)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment