Skip to content

Instantly share code, notes, and snippets.

@MihuBot
Created May 1, 2024 11:03
Show Gist options
  • Save MihuBot/9664169c61236544050564bd3af95e49 to your computer and use it in GitHub Desktop.
Save MihuBot/9664169c61236544050564bd3af95e49 to your computer and use it in GitHub Desktop.

Top method improvements

-52 (-9.40 % of base) - System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 13 single block inlinees; 7 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T03] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
+;  V00 this         [V00,T04] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V03 tmp2         [V03,T02] (  3,  6   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.DictionaryEnumerator`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V04 tmp3         [V04    ] (  4,  8   )  struct (160) [rbp-0xC0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V05 tmp4         [V05,T00] (  4,  7   )     ref  ->  rbx         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;  V06 tmp5         [V06    ] ( 14, 20   )  struct (32) [rbp-0xE0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V07 tmp6         [V07    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V08 tmp7         [V08    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V09 tmp8         [V09    ] (  0,  0   )     int  ->  zero-ref   
 ;* V10 tmp9         [V10    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V11 tmp10        [V11,T07] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
-;  V12 tmp11        [V12,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;* V13 tmp12        [V13,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V11 tmp10        [V11,T09] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
+;  V12 tmp11        [V12,T06] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
+;* V13 tmp12        [V13,T12] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V14 tmp13        [V14    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V15 tmp14        [V15,T08] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V15 tmp14        [V15,T10] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V16 tmp15        [V16    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V17 tmp16        [V17    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
-;  V18 tmp17        [V18,T04] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V18 tmp17        [V18,T05] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V21 tmp20        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;  V22 tmp21        [V22,T06] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
+;  V22 tmp21        [V22,T07] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V23 tmp22        [V23    ] (  5,  5.50)     ref  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V06._root (fldOffset=0x0)" P-DEP
 ;  V24 tmp23        [V24    ] (  7,  6   )     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V06._stack (fldOffset=0x8)" P-DEP
 ;  V25 tmp24        [V25    ] (  3,  4   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V06._current (fldOffset=0x10)" P-DEP
 ;  V26 tmp25        [V26    ] (  5,  5   )     int  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V06._poolUserId (fldOffset=0x18)" P-DEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V14._root (fldOffset=0x0)" P-INDEP
 ;* V28 tmp27        [V28    ] (  0,  0   )     ref  ->  zero-ref    "field V14._stack (fldOffset=0x8)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    "field V14._current (fldOffset=0x10)" P-INDEP
-;  V30 tmp29        [V30,T09] (  3,  1.50)     int  ->  r14         "field V14._poolUserId (fldOffset=0x18)" P-INDEP
+;  V30 tmp29        [V30,T11] (  3,  1.50)     int  ->  r14         "field V14._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V20._root (fldOffset=0x0)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V20._stack (fldOffset=0x8)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V20._current (fldOffset=0x10)" P-INDEP
 ;* V34 tmp33        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V20._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V10.[000..008)"
 ;* V36 tmp35        [V36    ] (  0,  0   )     ref  ->  zero-ref    single-def "V10.[008..016)"
 ;* V37 tmp36        [V37    ] (  0,  0   )     ref  ->  zero-ref    single-def "V10.[016..024)"
-;  V38 tmp37        [V38,T11] (  2,  1   )     int  ->  r14         "V10.[024..028)"
+;  V38 tmp37        [V38,T13] (  2,  1   )     int  ->  r14         "V10.[024..028)"
+;  V39 rat0         [V39,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V40 rat1         [V40,T08] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 192
 
 G_M46956_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 192
        lea      rbp, [rsp+0xE0]
        vxorps   xmm8, xmm8, xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        vmovdqa  xmmword ptr [rax+rbp], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      rbx, rdi
 						;; size=64 bbWeight=1 PerfScore 13.83
 G_M46956_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rbx, gword ptr [rbx+0x08]
        test     rbx, rbx
        je       G_M46956_IG09
        mov      gword ptr [rbp-0xE0], rbx
        xor      rax, rax
        mov      gword ptr [rbp-0xD0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC8], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xD8], rsi
        mov      rsi, gword ptr [rbp-0xE0]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M46956_IG06
 						;; size=92 bbWeight=1 PerfScore 17.50
 G_M46956_IG03:
        mov      r14d, dword ptr [rbp-0xC8]
        cmp      r14d, -1
        je       SHORT G_M46956_IG04
        lea      rsi, [rbp-0xD8]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M46956_IG04
        mov      rdi, gword ptr [rbp-0xD8]
        mov      dword ptr [rdi+0x10], r14d
        jmp      SHORT G_M46956_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M46956_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD8], rdi
        mov      r14d, dword ptr [rbp-0xC8]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        movzx    rsi, byte  ptr [rbx+0x1D]
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r13
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [rbx+0x10], r14d
        mov      gword ptr [rbp-0xD8], rbx
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M46956_IG05:
        lea      rdi, [rbp-0xE0]
        mov      rsi, gword ptr [rbp-0xE0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M46956_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xE0]
        vmovdqu  ymmword ptr [rbp-0xB0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M46956_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x90], ymm0
        vmovdqu  ymmword ptr [rbp-0x70], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
        mov      dword ptr [rbp-0xB8], -1
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xC0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 5
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xC0]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.DictionaryEnumerator`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rsi, r15
        lea      rdi, bword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, rbx
-						;; size=146 bbWeight=1 PerfScore 50.08
+						;; size=94 bbWeight=1 PerfScore 14.08
 G_M46956_IG08:
        vzeroupper 
        add      rsp, 192
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=19 bbWeight=1 PerfScore 4.75
 G_M46956_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 553, prolog size 61, PerfScore 106.54, instruction count 115, allocated bytes for code 553 (MethodHash=0c354893) for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
+; Total bytes of code 501, prolog size 61, PerfScore 70.54, instruction count 101, allocated bytes for code 501 (MethodHash=0c354893) for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
-52 (-9.94 % of base) - System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 11 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T02] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
+;  V00 this         [V00,T03] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V03 tmp2         [V03    ] (  4,  8   )  struct (160) [rbp-0xC0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V04 tmp3         [V04,T00] (  4,  7   )     ref  ->  rbx         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;  V05 tmp4         [V05    ] ( 14, 20   )  struct (32) [rbp-0xE0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V06 tmp5         [V06    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V07 tmp6         [V07    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V08 tmp7         [V08    ] (  0,  0   )     int  ->  zero-ref   
 ;* V09 tmp8         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V10 tmp9         [V10,T05] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
-;  V11 tmp10        [V11,T04] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;* V12 tmp11        [V12,T08] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp9         [V10,T07] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
+;  V11 tmp10        [V11,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
+;* V12 tmp11        [V12,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V14 tmp13        [V14,T06] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V14 tmp13        [V14,T08] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V15 tmp14        [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
-;  V17 tmp16        [V17,T03] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V17 tmp16        [V17,T04] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V21 tmp20        [V21    ] (  5,  5.50)     ref  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
 ;  V22 tmp21        [V22    ] (  7,  6   )     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
 ;  V23 tmp22        [V23    ] (  3,  4   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
 ;  V24 tmp23        [V24    ] (  5,  5   )     int  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
 ;* V25 tmp24        [V25    ] (  0,  0   )     ref  ->  zero-ref    "field V13._root (fldOffset=0x0)" P-INDEP
 ;* V26 tmp25        [V26    ] (  0,  0   )     ref  ->  zero-ref    "field V13._stack (fldOffset=0x8)" P-INDEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V13._current (fldOffset=0x10)" P-INDEP
-;  V28 tmp27        [V28,T07] (  3,  1.50)     int  ->  r14         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+;  V28 tmp27        [V28,T09] (  3,  1.50)     int  ->  r14         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._root (fldOffset=0x0)" P-INDEP
 ;* V30 tmp29        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._stack (fldOffset=0x8)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._current (fldOffset=0x10)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V19._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[000..008)"
 ;* V34 tmp33        [V34    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[008..016)"
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[016..024)"
-;  V36 tmp35        [V36,T09] (  2,  1   )     int  ->  r14         "V09.[024..028)"
+;  V36 tmp35        [V36,T11] (  2,  1   )     int  ->  r14         "V09.[024..028)"
+;  V37 rat0         [V37,T02] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V38 rat1         [V38,T06] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 192
 
 G_M12866_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 192
        lea      rbp, [rsp+0xE0]
        vxorps   xmm8, xmm8, xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        vmovdqa  xmmword ptr [rax+rbp], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      rbx, rdi
 						;; size=64 bbWeight=1 PerfScore 13.83
 G_M12866_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rbx, gword ptr [rbx+0x08]
        test     rbx, rbx
        je       G_M12866_IG09
        mov      gword ptr [rbp-0xE0], rbx
        xor      rax, rax
        mov      gword ptr [rbp-0xD0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC8], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xD8], rsi
        mov      rsi, gword ptr [rbp-0xE0]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M12866_IG06
 						;; size=92 bbWeight=1 PerfScore 17.50
 G_M12866_IG03:
        mov      r14d, dword ptr [rbp-0xC8]
        cmp      r14d, -1
        je       SHORT G_M12866_IG04
        lea      rsi, [rbp-0xD8]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M12866_IG04
        mov      rdi, gword ptr [rbp-0xD8]
        mov      dword ptr [rdi+0x10], r14d
        jmp      SHORT G_M12866_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M12866_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD8], rdi
        mov      r14d, dword ptr [rbp-0xC8]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        movzx    rsi, byte  ptr [rbx+0x1D]
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r13
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [rbx+0x10], r14d
        mov      gword ptr [rbp-0xD8], rbx
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M12866_IG05:
        lea      rdi, [rbp-0xE0]
        mov      rsi, gword ptr [rbp-0xE0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M12866_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xE0]
        vmovdqu  ymmword ptr [rbp-0xB0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M12866_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x90], ymm0
        vmovdqu  ymmword ptr [rbp-0x70], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
        mov      dword ptr [rbp-0xB8], -1
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xC0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 5
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xC0]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r15
-						;; size=116 bbWeight=1 PerfScore 46.83
+						;; size=64 bbWeight=1 PerfScore 10.83
 G_M12866_IG08:
        vzeroupper 
        add      rsp, 192
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=19 bbWeight=1 PerfScore 4.75
 G_M12866_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 523, prolog size 61, PerfScore 103.29, instruction count 109, allocated bytes for code 523 (MethodHash=8ba9cdbd) for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 471, prolog size 61, PerfScore 67.29, instruction count 95, allocated bytes for code 471 (MethodHash=8ba9cdbd) for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-52 (-9.35 % of base) - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V03 tmp2         [V03    ] (  5, 10   )  struct (160) [rbp-0xC8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V04 tmp3         [V04,T01] (  4,  7   )     ref  ->  r14         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;  V05 tmp4         [V05    ] ( 14, 20   )  struct (32) [rbp-0xE8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V06 tmp5         [V06    ] (  0,  0   )   byref  ->  zero-ref   
-;  V07 tmp6         [V07,T06] (  2,  2   )   byref  ->  rcx         single-def
-;  V08 tmp7         [V08,T08] (  2,  2   )     int  ->  rdi        
+;  V07 tmp6         [V07,T08] (  2,  2   )   byref  ->  rdi         single-def
+;  V08 tmp7         [V08,T10] (  2,  2   )     int  ->  rsi        
 ;* V09 tmp8         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V10 tmp9         [V10,T05] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
-;  V11 tmp10        [V11,T04] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;* V12 tmp11        [V12,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp9         [V10,T07] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
+;  V11 tmp10        [V11,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
+;* V12 tmp11        [V12,T12] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V14 tmp13        [V14,T07] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V14 tmp13        [V14,T09] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V15 tmp14        [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
-;  V17 tmp16        [V17,T03] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V17 tmp16        [V17,T04] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V21 tmp20        [V21    ] (  5,  5.50)     ref  ->  [rbp-0xE8]  do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
 ;  V22 tmp21        [V22    ] (  7,  6   )     ref  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
 ;  V23 tmp22        [V23    ] (  3,  4   )     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
 ;  V24 tmp23        [V24    ] (  5,  5   )     int  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
 ;* V25 tmp24        [V25    ] (  0,  0   )     ref  ->  zero-ref    "field V13._root (fldOffset=0x0)" P-INDEP
 ;* V26 tmp25        [V26    ] (  0,  0   )     ref  ->  zero-ref    "field V13._stack (fldOffset=0x8)" P-INDEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V13._current (fldOffset=0x10)" P-INDEP
-;  V28 tmp27        [V28,T09] (  3,  1.50)     int  ->  r13         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+;  V28 tmp27        [V28,T11] (  3,  1.50)     int  ->  r13         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._root (fldOffset=0x0)" P-INDEP
 ;* V30 tmp29        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._stack (fldOffset=0x8)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._current (fldOffset=0x10)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V19._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[000..008)"
 ;* V34 tmp33        [V34    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[008..016)"
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[016..024)"
-;  V36 tmp35        [V36,T11] (  2,  1   )     int  ->  r13         "V09.[024..028)"
+;  V36 tmp35        [V36,T13] (  2,  1   )     int  ->  r13         "V09.[024..028)"
+;  V37 rat0         [V37,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V38 rat1         [V38,T06] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 200
 
 G_M25738_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 200
        lea      rbp, [rsp+0xF0]
        xor      eax, eax
        mov      qword ptr [rbp-0xE8], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0xE0], ymm8
        vmovdqu  ymmword ptr [rbp-0xC0], ymm8
        vmovdqu  ymmword ptr [rbp-0xA0], ymm8
        vmovdqu  ymmword ptr [rbp-0x80], ymm8
        vmovdqu  ymmword ptr [rbp-0x60], ymm8
        vmovdqa  xmmword ptr [rbp-0x40], xmm8
        mov      qword ptr [rbp-0x30], rax
        mov      rbx, rdi
 						;; size=85 bbWeight=1 PerfScore 21.58
 G_M25738_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      r14, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xC8], rbx
        test     r14, r14
        je       G_M25738_IG09
        mov      gword ptr [rbp-0xE8], r14
        xor      rax, rax
        mov      gword ptr [rbp-0xD8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xD0], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xE0], rsi
        mov      rsi, gword ptr [rbp-0xE8]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M25738_IG06
 						;; size=99 bbWeight=1 PerfScore 18.50
 G_M25738_IG03:
        mov      r13d, dword ptr [rbp-0xD0]
        cmp      r13d, -1
        je       SHORT G_M25738_IG04
        lea      rsi, [rbp-0xE0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M25738_IG04
        mov      rdi, gword ptr [rbp-0xE0]
        mov      dword ptr [rdi+0x10], r13d
        jmp      SHORT G_M25738_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M25738_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xE0], rdi
        mov      r13d, dword ptr [rbp-0xD0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r12, rax
        movzx    rsi, byte  ptr [r14+0x1D]
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        lea      rdi, bword ptr [r14+0x08]
        mov      rsi, r12
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [r14+0x10], r13d
        mov      gword ptr [rbp-0xE0], r14
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M25738_IG05:
        lea      rdi, [rbp-0xE8]
        mov      rsi, gword ptr [rbp-0xE8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M25738_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xE8]
        vmovdqu  ymmword ptr [rbp-0xB8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M25738_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x98], ymm0
        vmovdqu  ymmword ptr [rbp-0x78], ymm0
        vmovdqu  ymmword ptr [rbp-0x58], ymm0
        vmovdqu  xmmword ptr [rbp-0x38], xmm0
-       lea      rcx, bword ptr [rbp-0xC8]
-       mov      edi, dword ptr [rbx+0x2C]
-       mov      dword ptr [rcx+0x08], edi
+       lea      rdi, bword ptr [rbp-0xC8]
+       mov      esi, dword ptr [rbx+0x2C]
+       mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xC8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 5
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xC8]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r15
-						;; size=119 bbWeight=1 PerfScore 49.33
+						;; size=67 bbWeight=1 PerfScore 13.33
 G_M25738_IG08:
        vzeroupper 
        add      rsp, 200
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M25738_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 556, prolog size 82, PerfScore 115.04, instruction count 117, allocated bytes for code 556 (MethodHash=b1859b75) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:this (FullOpts)
+; Total bytes of code 504, prolog size 82, PerfScore 79.04, instruction count 103, allocated bytes for code 504 (MethodHash=b1859b75) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:this (FullOpts)
-52 (-8.87 % of base) - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 14 single block inlinees; 7 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V03 tmp2         [V03,T03] (  3,  6   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.DictionaryEnumerator`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V04 tmp3         [V04    ] (  5, 10   )  struct (160) [rbp-0xC8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V05 tmp4         [V05,T01] (  4,  7   )     ref  ->  r14         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;  V06 tmp5         [V06    ] ( 14, 20   )  struct (32) [rbp-0xE8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V07 tmp6         [V07    ] (  0,  0   )   byref  ->  zero-ref   
-;  V08 tmp7         [V08,T08] (  2,  2   )   byref  ->  rcx         single-def
-;  V09 tmp8         [V09,T10] (  2,  2   )     int  ->  rdi        
+;  V08 tmp7         [V08,T10] (  2,  2   )   byref  ->  rdi         single-def
+;  V09 tmp8         [V09,T12] (  2,  2   )     int  ->  rsi        
 ;* V10 tmp9         [V10    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V11 tmp10        [V11,T07] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
-;  V12 tmp11        [V12,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;* V13 tmp12        [V13,T12] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V11 tmp10        [V11,T09] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
+;  V12 tmp11        [V12,T06] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
+;* V13 tmp12        [V13,T14] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V14 tmp13        [V14    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V15 tmp14        [V15,T09] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V15 tmp14        [V15,T11] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V16 tmp15        [V16    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V17 tmp16        [V17    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
-;  V18 tmp17        [V18,T04] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V18 tmp17        [V18,T05] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V21 tmp20        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;  V22 tmp21        [V22,T06] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
+;  V22 tmp21        [V22,T07] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V23 tmp22        [V23    ] (  5,  5.50)     ref  ->  [rbp-0xE8]  do-not-enreg[X] addr-exposed "field V06._root (fldOffset=0x0)" P-DEP
 ;  V24 tmp23        [V24    ] (  7,  6   )     ref  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V06._stack (fldOffset=0x8)" P-DEP
 ;  V25 tmp24        [V25    ] (  3,  4   )     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V06._current (fldOffset=0x10)" P-DEP
 ;  V26 tmp25        [V26    ] (  5,  5   )     int  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V06._poolUserId (fldOffset=0x18)" P-DEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V14._root (fldOffset=0x0)" P-INDEP
 ;* V28 tmp27        [V28    ] (  0,  0   )     ref  ->  zero-ref    "field V14._stack (fldOffset=0x8)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    "field V14._current (fldOffset=0x10)" P-INDEP
-;  V30 tmp29        [V30,T11] (  3,  1.50)     int  ->  r13         "field V14._poolUserId (fldOffset=0x18)" P-INDEP
+;  V30 tmp29        [V30,T13] (  3,  1.50)     int  ->  r13         "field V14._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V20._root (fldOffset=0x0)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V20._stack (fldOffset=0x8)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V20._current (fldOffset=0x10)" P-INDEP
 ;* V34 tmp33        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V20._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V10.[000..008)"
 ;* V36 tmp35        [V36    ] (  0,  0   )     ref  ->  zero-ref    single-def "V10.[008..016)"
 ;* V37 tmp36        [V37    ] (  0,  0   )     ref  ->  zero-ref    single-def "V10.[016..024)"
-;  V38 tmp37        [V38,T13] (  2,  1   )     int  ->  r13         "V10.[024..028)"
+;  V38 tmp37        [V38,T15] (  2,  1   )     int  ->  r13         "V10.[024..028)"
+;  V39 rat0         [V39,T04] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V40 rat1         [V40,T08] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 200
 
 G_M59174_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 200
        lea      rbp, [rsp+0xF0]
        xor      eax, eax
        mov      qword ptr [rbp-0xE8], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0xE0], ymm8
        vmovdqu  ymmword ptr [rbp-0xC0], ymm8
        vmovdqu  ymmword ptr [rbp-0xA0], ymm8
        vmovdqu  ymmword ptr [rbp-0x80], ymm8
        vmovdqu  ymmword ptr [rbp-0x60], ymm8
        vmovdqa  xmmword ptr [rbp-0x40], xmm8
        mov      qword ptr [rbp-0x30], rax
        mov      rbx, rdi
 						;; size=85 bbWeight=1 PerfScore 21.58
 G_M59174_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      r14, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xC8], rbx
        test     r14, r14
        je       G_M59174_IG09
        mov      gword ptr [rbp-0xE8], r14
        xor      rax, rax
        mov      gword ptr [rbp-0xD8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xD0], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xE0], rsi
        mov      rsi, gword ptr [rbp-0xE8]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M59174_IG06
 						;; size=99 bbWeight=1 PerfScore 18.50
 G_M59174_IG03:
        mov      r13d, dword ptr [rbp-0xD0]
        cmp      r13d, -1
        je       SHORT G_M59174_IG04
        lea      rsi, [rbp-0xE0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M59174_IG04
        mov      rdi, gword ptr [rbp-0xE0]
        mov      dword ptr [rdi+0x10], r13d
        jmp      SHORT G_M59174_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M59174_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xE0], rdi
        mov      r13d, dword ptr [rbp-0xD0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r12, rax
        movzx    rsi, byte  ptr [r14+0x1D]
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        lea      rdi, bword ptr [r14+0x08]
        mov      rsi, r12
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [r14+0x10], r13d
        mov      gword ptr [rbp-0xE0], r14
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M59174_IG05:
        lea      rdi, [rbp-0xE8]
        mov      rsi, gword ptr [rbp-0xE8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M59174_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xE8]
        vmovdqu  ymmword ptr [rbp-0xB8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M59174_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x98], ymm0
        vmovdqu  ymmword ptr [rbp-0x78], ymm0
        vmovdqu  ymmword ptr [rbp-0x58], ymm0
        vmovdqu  xmmword ptr [rbp-0x38], xmm0
-       lea      rcx, bword ptr [rbp-0xC8]
-       mov      edi, dword ptr [rbx+0x2C]
-       mov      dword ptr [rcx+0x08], edi
+       lea      rdi, bword ptr [rbp-0xC8]
+       mov      esi, dword ptr [rbx+0x2C]
+       mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xC8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 5
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xC8]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.DictionaryEnumerator`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rsi, r15
        lea      rdi, bword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, rbx
-						;; size=149 bbWeight=1 PerfScore 52.58
+						;; size=97 bbWeight=1 PerfScore 16.58
 G_M59174_IG08:
        vzeroupper 
        add      rsp, 200
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M59174_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 586, prolog size 82, PerfScore 118.29, instruction count 123, allocated bytes for code 586 (MethodHash=716d18d9) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
+; Total bytes of code 534, prolog size 82, PerfScore 82.29, instruction count 109, allocated bytes for code 534 (MethodHash=716d18d9) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
-52 (-9.35 % of base) - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V03 tmp2         [V03    ] (  5, 10   )  struct (160) [rbp-0xC8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
 ;  V04 tmp3         [V04,T01] (  4,  7   )     ref  ->  r14         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;  V05 tmp4         [V05    ] ( 14, 20   )  struct (32) [rbp-0xE8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V06 tmp5         [V06    ] (  0,  0   )   byref  ->  zero-ref   
-;  V07 tmp6         [V07,T06] (  2,  2   )   byref  ->  rcx         single-def
-;  V08 tmp7         [V08,T08] (  2,  2   )     int  ->  rdi        
+;  V07 tmp6         [V07,T08] (  2,  2   )   byref  ->  rdi         single-def
+;  V08 tmp7         [V08,T10] (  2,  2   )     int  ->  rsi        
 ;* V09 tmp8         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V10 tmp9         [V10,T05] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
-;  V11 tmp10        [V11,T04] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;* V12 tmp11        [V12,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp9         [V10,T07] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
+;  V11 tmp10        [V11,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
+;* V12 tmp11        [V12,T12] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;  V14 tmp13        [V14,T07] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V14 tmp13        [V14,T09] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V15 tmp14        [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
-;  V17 tmp16        [V17,T03] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+;  V17 tmp16        [V17,T04] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V21 tmp20        [V21    ] (  5,  5.50)     ref  ->  [rbp-0xE8]  do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
 ;  V22 tmp21        [V22    ] (  7,  6   )     ref  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
 ;  V23 tmp22        [V23    ] (  3,  4   )     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
 ;  V24 tmp23        [V24    ] (  5,  5   )     int  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
 ;* V25 tmp24        [V25    ] (  0,  0   )     ref  ->  zero-ref    "field V13._root (fldOffset=0x0)" P-INDEP
 ;* V26 tmp25        [V26    ] (  0,  0   )     ref  ->  zero-ref    "field V13._stack (fldOffset=0x8)" P-INDEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V13._current (fldOffset=0x10)" P-INDEP
-;  V28 tmp27        [V28,T09] (  3,  1.50)     int  ->  r13         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+;  V28 tmp27        [V28,T11] (  3,  1.50)     int  ->  r13         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._root (fldOffset=0x0)" P-INDEP
 ;* V30 tmp29        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._stack (fldOffset=0x8)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._current (fldOffset=0x10)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V19._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[000..008)"
 ;* V34 tmp33        [V34    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[008..016)"
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[016..024)"
-;  V36 tmp35        [V36,T11] (  2,  1   )     int  ->  r13         "V09.[024..028)"
+;  V36 tmp35        [V36,T13] (  2,  1   )     int  ->  r13         "V09.[024..028)"
+;  V37 rat0         [V37,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V38 rat1         [V38,T06] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 200
 
 G_M53000_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 200
        lea      rbp, [rsp+0xF0]
        xor      eax, eax
        mov      qword ptr [rbp-0xE8], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0xE0], ymm8
        vmovdqu  ymmword ptr [rbp-0xC0], ymm8
        vmovdqu  ymmword ptr [rbp-0xA0], ymm8
        vmovdqu  ymmword ptr [rbp-0x80], ymm8
        vmovdqu  ymmword ptr [rbp-0x60], ymm8
        vmovdqa  xmmword ptr [rbp-0x40], xmm8
        mov      qword ptr [rbp-0x30], rax
        mov      rbx, rdi
 						;; size=85 bbWeight=1 PerfScore 21.58
 G_M53000_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      r14, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xC8], rbx
        test     r14, r14
        je       G_M53000_IG09
        mov      gword ptr [rbp-0xE8], r14
        xor      rax, rax
        mov      gword ptr [rbp-0xD8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xD0], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xE0], rsi
        mov      rsi, gword ptr [rbp-0xE8]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M53000_IG06
 						;; size=99 bbWeight=1 PerfScore 18.50
 G_M53000_IG03:
        mov      r13d, dword ptr [rbp-0xD0]
        cmp      r13d, -1
        je       SHORT G_M53000_IG04
        lea      rsi, [rbp-0xE0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M53000_IG04
        mov      rdi, gword ptr [rbp-0xE0]
        mov      dword ptr [rdi+0x10], r13d
        jmp      SHORT G_M53000_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M53000_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xE0], rdi
        mov      r13d, dword ptr [rbp-0xD0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r12, rax
        movzx    rsi, byte  ptr [r14+0x1D]
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        lea      rdi, bword ptr [r14+0x08]
        mov      rsi, r12
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [r14+0x10], r13d
        mov      gword ptr [rbp-0xE0], r14
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M53000_IG05:
        lea      rdi, [rbp-0xE8]
        mov      rsi, gword ptr [rbp-0xE8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M53000_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xE8]
        vmovdqu  ymmword ptr [rbp-0xB8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M53000_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x98], ymm0
        vmovdqu  ymmword ptr [rbp-0x78], ymm0
        vmovdqu  ymmword ptr [rbp-0x58], ymm0
        vmovdqu  xmmword ptr [rbp-0x38], xmm0
-       lea      rcx, bword ptr [rbp-0xC8]
-       mov      edi, dword ptr [rbx+0x2C]
-       mov      dword ptr [rcx+0x08], edi
+       lea      rdi, bword ptr [rbp-0xC8]
+       mov      esi, dword ptr [rbx+0x2C]
+       mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xC8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 5
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xC8]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r15
-						;; size=119 bbWeight=1 PerfScore 49.33
+						;; size=67 bbWeight=1 PerfScore 13.33
 G_M53000_IG08:
        vzeroupper 
        add      rsp, 200
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M53000_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 556, prolog size 82, PerfScore 115.04, instruction count 117, allocated bytes for code 556 (MethodHash=cf0b30f7) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 504, prolog size 82, PerfScore 79.04, instruction count 103, allocated bytes for code 504 (MethodHash=cf0b30f7) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-52 (-9.67 % of base) - System.Collections.Immutable.ImmutableHashSet`1[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 11 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T02] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableHashSet`1[System.Numerics.Vector`1[float]]>
+;  V00 this         [V00,T03] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableHashSet`1[System.Numerics.Vector`1[float]]>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V03 tmp2         [V03    ] (  4,  8   )  struct (152) [rbp-0xB8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V04 tmp3         [V04,T00] (  4,  7   )     ref  ->  rbx         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;  V05 tmp4         [V05    ] ( 14, 20   )  struct (32) [rbp-0xD8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V06 tmp5         [V06    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V07 tmp6         [V07    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V08 tmp7         [V08    ] (  0,  0   )     int  ->  zero-ref   
 ;* V09 tmp8         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V10 tmp9         [V10,T05] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
-;  V11 tmp10        [V11,T04] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;* V12 tmp11        [V12,T08] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp9         [V10,T07] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
+;  V11 tmp10        [V11,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
+;* V12 tmp11        [V12,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V14 tmp13        [V14,T06] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V14 tmp13        [V14,T08] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V15 tmp14        [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
-;  V17 tmp16        [V17,T03] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V17 tmp16        [V17,T04] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V21 tmp20        [V21    ] (  5,  5.50)     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
 ;  V22 tmp21        [V22    ] (  7,  6   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
 ;  V23 tmp22        [V23    ] (  3,  4   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
 ;  V24 tmp23        [V24    ] (  5,  5   )     int  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
 ;* V25 tmp24        [V25    ] (  0,  0   )     ref  ->  zero-ref    "field V13._root (fldOffset=0x0)" P-INDEP
 ;* V26 tmp25        [V26    ] (  0,  0   )     ref  ->  zero-ref    "field V13._stack (fldOffset=0x8)" P-INDEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V13._current (fldOffset=0x10)" P-INDEP
-;  V28 tmp27        [V28,T07] (  3,  1.50)     int  ->  r14         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+;  V28 tmp27        [V28,T09] (  3,  1.50)     int  ->  r14         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._root (fldOffset=0x0)" P-INDEP
 ;* V30 tmp29        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._stack (fldOffset=0x8)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._current (fldOffset=0x10)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V19._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[000..008)"
 ;* V34 tmp33        [V34    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[008..016)"
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[016..024)"
-;  V36 tmp35        [V36,T09] (  2,  1   )     int  ->  r14         "V09.[024..028)"
+;  V36 tmp35        [V36,T11] (  2,  1   )     int  ->  r14         "V09.[024..028)"
+;  V37 rat0         [V37,T02] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V38 rat1         [V38,T06] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 192
 
 G_M34779_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 192
        lea      rbp, [rsp+0xE0]
        xor      eax, eax
        mov      qword ptr [rbp-0xD8], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0xD0], ymm8
        vmovdqu  ymmword ptr [rbp-0xB0], ymm8
        vmovdqu  ymmword ptr [rbp-0x90], ymm8
        vmovdqu  ymmword ptr [rbp-0x70], ymm8
        vmovdqu  ymmword ptr [rbp-0x50], ymm8
        vmovdqa  xmmword ptr [rbp-0x30], xmm8
        mov      rbx, rdi
 						;; size=79 bbWeight=1 PerfScore 19.58
 G_M34779_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rbx, gword ptr [rbx+0x10]
        test     rbx, rbx
        je       G_M34779_IG09
        mov      gword ptr [rbp-0xD8], rbx
        xor      rax, rax
        mov      gword ptr [rbp-0xC8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC0], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xD0], rsi
        mov      rsi, gword ptr [rbp-0xD8]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M34779_IG06
 						;; size=92 bbWeight=1 PerfScore 17.50
 G_M34779_IG03:
        mov      r14d, dword ptr [rbp-0xC0]
        cmp      r14d, -1
        je       SHORT G_M34779_IG04
        lea      rsi, [rbp-0xD0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M34779_IG04
        mov      rdi, gword ptr [rbp-0xD0]
        mov      dword ptr [rdi+0x10], r14d
        jmp      SHORT G_M34779_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M34779_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
        mov      r14d, dword ptr [rbp-0xC0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        movzx    rsi, byte  ptr [rbx+0x1D]
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r13
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [rbx+0x10], r14d
        mov      gword ptr [rbp-0xD0], rbx
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M34779_IG05:
        lea      rdi, [rbp-0xD8]
        mov      rsi, gword ptr [rbp-0xD8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M34779_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xA8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M34779_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x88], ymm0
        vmovdqu  ymmword ptr [rbp-0x68], ymm0
        vmovdqu  ymmword ptr [rbp-0x48], ymm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
        mov      dword ptr [rbp-0xB0], -1
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xB8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 4
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB8]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r15
-						;; size=116 bbWeight=1 PerfScore 46.83
+						;; size=64 bbWeight=1 PerfScore 10.83
 G_M34779_IG08:
        vzeroupper 
        add      rsp, 192
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=19 bbWeight=1 PerfScore 4.75
 G_M34779_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 538, prolog size 76, PerfScore 109.04, instruction count 111, allocated bytes for code 538 (MethodHash=14857824) for method System.Collections.Immutable.ImmutableHashSet`1[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 486, prolog size 76, PerfScore 73.04, instruction count 97, allocated bytes for code 486 (MethodHash=14857824) for method System.Collections.Immutable.ImmutableHashSet`1[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-52 (-9.47 % of base) - System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]:System.Collections.Generic.IEnumerable.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Numerics.Vector`1[float]]:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Numerics.Vector`1[float]]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V03 tmp2         [V03    ] (  5, 10   )  struct (152) [rbp-0xC0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V04 tmp3         [V04,T01] (  4,  7   )     ref  ->  r14         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;  V05 tmp4         [V05    ] ( 14, 20   )  struct (32) [rbp-0xE0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V06 tmp5         [V06    ] (  0,  0   )   byref  ->  zero-ref   
-;  V07 tmp6         [V07,T06] (  2,  2   )   byref  ->  rcx         single-def
-;  V08 tmp7         [V08,T08] (  2,  2   )     int  ->  rdi        
+;  V07 tmp6         [V07,T08] (  2,  2   )   byref  ->  rdi         single-def
+;  V08 tmp7         [V08,T10] (  2,  2   )     int  ->  rsi        
 ;* V09 tmp8         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V10 tmp9         [V10,T05] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
-;  V11 tmp10        [V11,T04] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;* V12 tmp11        [V12,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp9         [V10,T07] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
+;  V11 tmp10        [V11,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
+;* V12 tmp11        [V12,T12] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V14 tmp13        [V14,T07] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V14 tmp13        [V14,T09] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V15 tmp14        [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
-;  V17 tmp16        [V17,T03] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V17 tmp16        [V17,T04] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V21 tmp20        [V21    ] (  5,  5.50)     ref  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
 ;  V22 tmp21        [V22    ] (  7,  6   )     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
 ;  V23 tmp22        [V23    ] (  3,  4   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
 ;  V24 tmp23        [V24    ] (  5,  5   )     int  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
 ;* V25 tmp24        [V25    ] (  0,  0   )     ref  ->  zero-ref    "field V13._root (fldOffset=0x0)" P-INDEP
 ;* V26 tmp25        [V26    ] (  0,  0   )     ref  ->  zero-ref    "field V13._stack (fldOffset=0x8)" P-INDEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V13._current (fldOffset=0x10)" P-INDEP
-;  V28 tmp27        [V28,T09] (  3,  1.50)     int  ->  r13         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+;  V28 tmp27        [V28,T11] (  3,  1.50)     int  ->  r13         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._root (fldOffset=0x0)" P-INDEP
 ;* V30 tmp29        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._stack (fldOffset=0x8)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._current (fldOffset=0x10)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V19._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[000..008)"
 ;* V34 tmp33        [V34    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[008..016)"
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[016..024)"
-;  V36 tmp35        [V36,T11] (  2,  1   )     int  ->  r13         "V09.[024..028)"
+;  V36 tmp35        [V36,T13] (  2,  1   )     int  ->  r13         "V09.[024..028)"
+;  V37 rat0         [V37,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V38 rat1         [V38,T06] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 184
 
 G_M37555_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 184
        lea      rbp, [rsp+0xE0]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0xE0], ymm8
        vmovdqu  ymmword ptr [rbp-0xC0], ymm8
        vmovdqu  ymmword ptr [rbp-0xA0], ymm8
        vmovdqu  ymmword ptr [rbp-0x80], ymm8
        vmovdqu  ymmword ptr [rbp-0x60], ymm8
        vmovdqa  xmmword ptr [rbp-0x40], xmm8
        xor      eax, eax
        mov      qword ptr [rbp-0x30], rax
        mov      rbx, rdi
 						;; size=78 bbWeight=1 PerfScore 20.58
 G_M37555_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      r14, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xC0], rbx
        test     r14, r14
        je       G_M37555_IG09
        mov      gword ptr [rbp-0xE0], r14
        xor      rax, rax
        mov      gword ptr [rbp-0xD0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC8], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xD8], rsi
        mov      rsi, gword ptr [rbp-0xE0]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M37555_IG06
 						;; size=99 bbWeight=1 PerfScore 18.50
 G_M37555_IG03:
        mov      r13d, dword ptr [rbp-0xC8]
        cmp      r13d, -1
        je       SHORT G_M37555_IG04
        lea      rsi, [rbp-0xD8]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M37555_IG04
        mov      rdi, gword ptr [rbp-0xD8]
        mov      dword ptr [rdi+0x10], r13d
        jmp      SHORT G_M37555_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M37555_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD8], rdi
        mov      r13d, dword ptr [rbp-0xC8]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r12, rax
        movzx    rsi, byte  ptr [r14+0x1D]
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        lea      rdi, bword ptr [r14+0x08]
        mov      rsi, r12
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [r14+0x10], r13d
        mov      gword ptr [rbp-0xD8], r14
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M37555_IG05:
        lea      rdi, [rbp-0xE0]
        mov      rsi, gword ptr [rbp-0xE0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M37555_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xE0]
        vmovdqu  ymmword ptr [rbp-0xB0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M37555_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x90], ymm0
        vmovdqu  ymmword ptr [rbp-0x70], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        vmovdqu  xmmword ptr [rbp-0x38], xmm0
-       lea      rcx, bword ptr [rbp-0xC0]
-       mov      edi, dword ptr [rbx+0x2C]
-       mov      dword ptr [rcx+0x08], edi
+       lea      rdi, bword ptr [rbp-0xC0]
+       mov      esi, dword ptr [rbx+0x2C]
+       mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xC0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 4
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xC0]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r15
-						;; size=119 bbWeight=1 PerfScore 49.33
+						;; size=67 bbWeight=1 PerfScore 13.33
 G_M37555_IG08:
        vzeroupper 
        add      rsp, 184
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M37555_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 549, prolog size 75, PerfScore 114.04, instruction count 116, allocated bytes for code 549 (MethodHash=e25b6d4c) for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Numerics.Vector`1[float]]:this (FullOpts)
+; Total bytes of code 497, prolog size 75, PerfScore 78.04, instruction count 102, allocated bytes for code 497 (MethodHash=e25b6d4c) for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Numerics.Vector`1[float]]:this (FullOpts)
-52 (-9.47 % of base) - System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V03 tmp2         [V03    ] (  5, 10   )  struct (152) [rbp-0xC0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V04 tmp3         [V04,T01] (  4,  7   )     ref  ->  r14         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;  V05 tmp4         [V05    ] ( 14, 20   )  struct (32) [rbp-0xE0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V06 tmp5         [V06    ] (  0,  0   )   byref  ->  zero-ref   
-;  V07 tmp6         [V07,T06] (  2,  2   )   byref  ->  rcx         single-def
-;  V08 tmp7         [V08,T08] (  2,  2   )     int  ->  rdi        
+;  V07 tmp6         [V07,T08] (  2,  2   )   byref  ->  rdi         single-def
+;  V08 tmp7         [V08,T10] (  2,  2   )     int  ->  rsi        
 ;* V09 tmp8         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V10 tmp9         [V10,T05] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
-;  V11 tmp10        [V11,T04] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;* V12 tmp11        [V12,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp9         [V10,T07] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
+;  V11 tmp10        [V11,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
+;* V12 tmp11        [V12,T12] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V14 tmp13        [V14,T07] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V14 tmp13        [V14,T09] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V15 tmp14        [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
-;  V17 tmp16        [V17,T03] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V17 tmp16        [V17,T04] (  4,  4   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V21 tmp20        [V21    ] (  5,  5.50)     ref  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
 ;  V22 tmp21        [V22    ] (  7,  6   )     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
 ;  V23 tmp22        [V23    ] (  3,  4   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
 ;  V24 tmp23        [V24    ] (  5,  5   )     int  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
 ;* V25 tmp24        [V25    ] (  0,  0   )     ref  ->  zero-ref    "field V13._root (fldOffset=0x0)" P-INDEP
 ;* V26 tmp25        [V26    ] (  0,  0   )     ref  ->  zero-ref    "field V13._stack (fldOffset=0x8)" P-INDEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V13._current (fldOffset=0x10)" P-INDEP
-;  V28 tmp27        [V28,T09] (  3,  1.50)     int  ->  r13         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+;  V28 tmp27        [V28,T11] (  3,  1.50)     int  ->  r13         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._root (fldOffset=0x0)" P-INDEP
 ;* V30 tmp29        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._stack (fldOffset=0x8)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._current (fldOffset=0x10)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V19._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[000..008)"
 ;* V34 tmp33        [V34    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[008..016)"
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[016..024)"
-;  V36 tmp35        [V36,T11] (  2,  1   )     int  ->  r13         "V09.[024..028)"
+;  V36 tmp35        [V36,T13] (  2,  1   )     int  ->  r13         "V09.[024..028)"
+;  V37 rat0         [V37,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V38 rat1         [V38,T06] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 184
 
 G_M37841_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 184
        lea      rbp, [rsp+0xE0]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0xE0], ymm8
        vmovdqu  ymmword ptr [rbp-0xC0], ymm8
        vmovdqu  ymmword ptr [rbp-0xA0], ymm8
        vmovdqu  ymmword ptr [rbp-0x80], ymm8
        vmovdqu  ymmword ptr [rbp-0x60], ymm8
        vmovdqa  xmmword ptr [rbp-0x40], xmm8
        xor      eax, eax
        mov      qword ptr [rbp-0x30], rax
        mov      rbx, rdi
 						;; size=78 bbWeight=1 PerfScore 20.58
 G_M37841_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      r14, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xC0], rbx
        test     r14, r14
        je       G_M37841_IG09
        mov      gword ptr [rbp-0xE0], r14
        xor      rax, rax
        mov      gword ptr [rbp-0xD0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC8], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xD8], rsi
        mov      rsi, gword ptr [rbp-0xE0]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M37841_IG06
 						;; size=99 bbWeight=1 PerfScore 18.50
 G_M37841_IG03:
        mov      r13d, dword ptr [rbp-0xC8]
        cmp      r13d, -1
        je       SHORT G_M37841_IG04
        lea      rsi, [rbp-0xD8]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M37841_IG04
        mov      rdi, gword ptr [rbp-0xD8]
        mov      dword ptr [rdi+0x10], r13d
        jmp      SHORT G_M37841_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M37841_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD8], rdi
        mov      r13d, dword ptr [rbp-0xC8]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r12, rax
        movzx    rsi, byte  ptr [r14+0x1D]
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        lea      rdi, bword ptr [r14+0x08]
        mov      rsi, r12
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [r14+0x10], r13d
        mov      gword ptr [rbp-0xD8], r14
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M37841_IG05:
        lea      rdi, [rbp-0xE0]
        mov      rsi, gword ptr [rbp-0xE0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M37841_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xE0]
        vmovdqu  ymmword ptr [rbp-0xB0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M37841_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x90], ymm0
        vmovdqu  ymmword ptr [rbp-0x70], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        vmovdqu  xmmword ptr [rbp-0x38], xmm0
-       lea      rcx, bword ptr [rbp-0xC0]
-       mov      edi, dword ptr [rbx+0x2C]
-       mov      dword ptr [rcx+0x08], edi
+       lea      rdi, bword ptr [rbp-0xC0]
+       mov      esi, dword ptr [rbx+0x2C]
+       mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xC0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 4
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xC0]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r15
-						;; size=119 bbWeight=1 PerfScore 49.33
+						;; size=67 bbWeight=1 PerfScore 13.33
 G_M37841_IG08:
        vzeroupper 
        add      rsp, 184
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M37841_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 549, prolog size 75, PerfScore 114.04, instruction count 116, allocated bytes for code 549 (MethodHash=59956c2e) for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 497, prolog size 75, PerfScore 78.04, instruction count 102, allocated bytes for code 497 (MethodHash=59956c2e) for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-52 (-9.68 % of base) - System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.Numerics.Vector`1[float]]:System.Collections.Generic.IEnumerable.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Numerics.Vector`1[float]]:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.Numerics.Vector`1[float]]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Numerics.Vector`1[float]]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 11 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T02] (  3,  3   )   byref  ->  rbx         this single-def
+;  V00 this         [V00,T03] (  3,  3   )   byref  ->  rbx         this single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V03 tmp2         [V03    ] (  4,  8   )  struct (152) [rbp-0xB8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V04 tmp3         [V04,T00] (  4,  7   )     ref  ->  rbx         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;  V05 tmp4         [V05    ] ( 14, 20   )  struct (32) [rbp-0xD8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V06 tmp5         [V06    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V07 tmp6         [V07    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V08 tmp7         [V08    ] (  0,  0   )     int  ->  zero-ref   
 ;* V09 tmp8         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V10 tmp9         [V10,T05] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
-;  V11 tmp10        [V11,T04] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;* V12 tmp11        [V12,T08] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp9         [V10,T07] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
+;  V11 tmp10        [V11,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
+;* V12 tmp11        [V12,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V14 tmp13        [V14,T06] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V14 tmp13        [V14,T08] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V15 tmp14        [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
-;  V17 tmp16        [V17,T03] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V17 tmp16        [V17,T04] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V21 tmp20        [V21    ] (  5,  5.50)     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
 ;  V22 tmp21        [V22    ] (  7,  6   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
 ;  V23 tmp22        [V23    ] (  3,  4   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
 ;  V24 tmp23        [V24    ] (  5,  5   )     int  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
 ;* V25 tmp24        [V25    ] (  0,  0   )     ref  ->  zero-ref    "field V13._root (fldOffset=0x0)" P-INDEP
 ;* V26 tmp25        [V26    ] (  0,  0   )     ref  ->  zero-ref    "field V13._stack (fldOffset=0x8)" P-INDEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V13._current (fldOffset=0x10)" P-INDEP
-;  V28 tmp27        [V28,T07] (  3,  1.50)     int  ->  r14         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+;  V28 tmp27        [V28,T09] (  3,  1.50)     int  ->  r14         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._root (fldOffset=0x0)" P-INDEP
 ;* V30 tmp29        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._stack (fldOffset=0x8)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._current (fldOffset=0x10)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V19._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[000..008)"
 ;* V34 tmp33        [V34    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[008..016)"
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[016..024)"
-;  V36 tmp35        [V36,T09] (  2,  1   )     int  ->  r14         "V09.[024..028)"
+;  V36 tmp35        [V36,T11] (  2,  1   )     int  ->  r14         "V09.[024..028)"
+;  V37 rat0         [V37,T02] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V38 rat1         [V38,T06] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 192
 
 G_M14684_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 192
        lea      rbp, [rsp+0xE0]
        xor      eax, eax
        mov      qword ptr [rbp-0xD8], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0xD0], ymm8
        vmovdqu  ymmword ptr [rbp-0xB0], ymm8
        vmovdqu  ymmword ptr [rbp-0x90], ymm8
        vmovdqu  ymmword ptr [rbp-0x70], ymm8
        vmovdqu  ymmword ptr [rbp-0x50], ymm8
        vmovdqa  xmmword ptr [rbp-0x30], xmm8
        mov      rbx, rdi
 						;; size=79 bbWeight=1 PerfScore 19.58
 G_M14684_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rbx, gword ptr [rbx]
        test     rbx, rbx
        je       G_M14684_IG09
        mov      gword ptr [rbp-0xD8], rbx
        xor      rax, rax
        mov      gword ptr [rbp-0xC8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC0], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xD0], rsi
        mov      rsi, gword ptr [rbp-0xD8]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M14684_IG06
 						;; size=91 bbWeight=1 PerfScore 17.50
 G_M14684_IG03:
        mov      r14d, dword ptr [rbp-0xC0]
        cmp      r14d, -1
        je       SHORT G_M14684_IG04
        lea      rsi, [rbp-0xD0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M14684_IG04
        mov      rdi, gword ptr [rbp-0xD0]
        mov      dword ptr [rdi+0x10], r14d
        jmp      SHORT G_M14684_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M14684_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
        mov      r14d, dword ptr [rbp-0xC0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        movzx    rsi, byte  ptr [rbx+0x1D]
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r13
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [rbx+0x10], r14d
        mov      gword ptr [rbp-0xD0], rbx
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M14684_IG05:
        lea      rdi, [rbp-0xD8]
        mov      rsi, gword ptr [rbp-0xD8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M14684_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xA8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M14684_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x88], ymm0
        vmovdqu  ymmword ptr [rbp-0x68], ymm0
        vmovdqu  ymmword ptr [rbp-0x48], ymm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
        mov      dword ptr [rbp-0xB0], -1
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xB8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 4
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB8]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r15
-						;; size=116 bbWeight=1 PerfScore 46.83
+						;; size=64 bbWeight=1 PerfScore 10.83
 G_M14684_IG08:
        vzeroupper 
        add      rsp, 192
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=19 bbWeight=1 PerfScore 4.75
 G_M14684_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 537, prolog size 76, PerfScore 109.04, instruction count 111, allocated bytes for code 537 (MethodHash=30f8c6a3) for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.Numerics.Vector`1[float]]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Numerics.Vector`1[float]]:this (FullOpts)
+; Total bytes of code 485, prolog size 76, PerfScore 73.04, instruction count 97, allocated bytes for code 485 (MethodHash=30f8c6a3) for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.Numerics.Vector`1[float]]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Numerics.Vector`1[float]]:this (FullOpts)
-52 (-9.68 % of base) - System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 11 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T02] (  3,  3   )   byref  ->  rbx         this single-def
+;  V00 this         [V00,T03] (  3,  3   )   byref  ->  rbx         this single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V03 tmp2         [V03    ] (  4,  8   )  struct (152) [rbp-0xB8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]>
 ;  V04 tmp3         [V04,T00] (  4,  7   )     ref  ->  rbx         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;  V05 tmp4         [V05    ] ( 14, 20   )  struct (32) [rbp-0xD8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V06 tmp5         [V06    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V07 tmp6         [V07    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V08 tmp7         [V08    ] (  0,  0   )     int  ->  zero-ref   
 ;* V09 tmp8         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V10 tmp9         [V10,T05] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
-;  V11 tmp10        [V11,T04] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;* V12 tmp11        [V12,T08] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V10 tmp9         [V10,T07] (  3,  3   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]>
+;  V11 tmp10        [V11,T05] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
+;* V12 tmp11        [V12,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp12        [V13    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
-;  V14 tmp13        [V14,T06] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V14 tmp13        [V14,T08] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V15 tmp14        [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
-;  V17 tmp16        [V17,T03] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
+;  V17 tmp16        [V17,T04] (  4,  4   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]>
 ;* V19 tmp18        [V19    ] (  0,  0   )  struct (32) zero-ref    ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V21 tmp20        [V21    ] (  5,  5.50)     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
 ;  V22 tmp21        [V22    ] (  7,  6   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
 ;  V23 tmp22        [V23    ] (  3,  4   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
 ;  V24 tmp23        [V24    ] (  5,  5   )     int  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
 ;* V25 tmp24        [V25    ] (  0,  0   )     ref  ->  zero-ref    "field V13._root (fldOffset=0x0)" P-INDEP
 ;* V26 tmp25        [V26    ] (  0,  0   )     ref  ->  zero-ref    "field V13._stack (fldOffset=0x8)" P-INDEP
 ;* V27 tmp26        [V27    ] (  0,  0   )     ref  ->  zero-ref    "field V13._current (fldOffset=0x10)" P-INDEP
-;  V28 tmp27        [V28,T07] (  3,  1.50)     int  ->  r14         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+;  V28 tmp27        [V28,T09] (  3,  1.50)     int  ->  r14         "field V13._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V29 tmp28        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._root (fldOffset=0x0)" P-INDEP
 ;* V30 tmp29        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._stack (fldOffset=0x8)" P-INDEP
 ;* V31 tmp30        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def "field V19._current (fldOffset=0x10)" P-INDEP
 ;* V32 tmp31        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V19._poolUserId (fldOffset=0x18)" P-INDEP
 ;* V33 tmp32        [V33    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[000..008)"
 ;* V34 tmp33        [V34    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[008..016)"
 ;* V35 tmp34        [V35    ] (  0,  0   )     ref  ->  zero-ref    single-def "V09.[016..024)"
-;  V36 tmp35        [V36,T09] (  2,  1   )     int  ->  r14         "V09.[024..028)"
+;  V36 tmp35        [V36,T11] (  2,  1   )     int  ->  r14         "V09.[024..028)"
+;  V37 rat0         [V37,T02] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V38 rat1         [V38,T06] (  2,  4   )   byref  ->  rdi         "argument with side effect"
 ;
 ; Lcl frame size = 192
 
 G_M47102_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 192
        lea      rbp, [rsp+0xE0]
        xor      eax, eax
        mov      qword ptr [rbp-0xD8], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0xD0], ymm8
        vmovdqu  ymmword ptr [rbp-0xB0], ymm8
        vmovdqu  ymmword ptr [rbp-0x90], ymm8
        vmovdqu  ymmword ptr [rbp-0x70], ymm8
        vmovdqu  ymmword ptr [rbp-0x50], ymm8
        vmovdqa  xmmword ptr [rbp-0x30], xmm8
        mov      rbx, rdi
 						;; size=79 bbWeight=1 PerfScore 19.58
 G_M47102_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.Numerics.Vector`1[float]]
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rbx, gword ptr [rbx]
        test     rbx, rbx
        je       G_M47102_IG09
        mov      gword ptr [rbp-0xD8], rbx
        xor      rax, rax
        mov      gword ptr [rbp-0xC8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC0], eax
        xor      rsi, rsi
        mov      gword ptr [rbp-0xD0], rsi
        mov      rsi, gword ptr [rbp-0xD8]
        cmp      gword ptr [rsi+0x08], 0
        je       G_M47102_IG06
 						;; size=91 bbWeight=1 PerfScore 17.50
 G_M47102_IG03:
        mov      r14d, dword ptr [rbp-0xC0]
        cmp      r14d, -1
        je       SHORT G_M47102_IG04
        lea      rsi, [rbp-0xD0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M47102_IG04
        mov      rdi, gword ptr [rbp-0xD0]
        mov      dword ptr [rdi+0x10], r14d
        jmp      SHORT G_M47102_IG05
 						;; size=59 bbWeight=0.50 PerfScore 5.75
 G_M47102_IG04:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
        mov      r14d, dword ptr [rbp-0xC0]
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        movzx    rsi, byte  ptr [rbx+0x1D]
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]]]]
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        lea      rdi, bword ptr [rbx+0x08]
        mov      rsi, r13
        call     CORINFO_HELP_ASSIGN_REF
        mov      dword ptr [rbx+0x10], r14d
        mov      gword ptr [rbp-0xD0], rbx
 						;; size=95 bbWeight=0.50 PerfScore 7.25
 G_M47102_IG05:
        lea      rdi, [rbp-0xD8]
        mov      rsi, gword ptr [rbp-0xD8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.Numerics.Vector`1[float]]]):this
 						;; size=26 bbWeight=0.50 PerfScore 2.38
 G_M47102_IG06:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xA8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M47102_IG07:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x88], ymm0
        vmovdqu  ymmword ptr [rbp-0x68], ymm0
        vmovdqu  ymmword ptr [rbp-0x48], ymm0
        vmovdqu  xmmword ptr [rbp-0x30], xmm0
        mov      dword ptr [rbp-0xB0], -1
        lea      rdi, bword ptr [r15+0x08]
-       lea      rsi, bword ptr [rbp-0xB8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       mov      ecx, 4
-       rep movsq 
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB8]
+       mov      edx, 72
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r15
-						;; size=116 bbWeight=1 PerfScore 46.83
+						;; size=64 bbWeight=1 PerfScore 10.83
 G_M47102_IG08:
        vzeroupper 
        add      rsp, 192
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=19 bbWeight=1 PerfScore 4.75
 G_M47102_IG09:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 537, prolog size 76, PerfScore 109.04, instruction count 111, allocated bytes for code 537 (MethodHash=48134801) for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 485, prolog size 76, PerfScore 73.04, instruction count 97, allocated bytes for code 485 (MethodHash=48134801) for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.Numerics.Vector`1[float]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-51 (-5.34 % of base) - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 6 single block inlinees; 5 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]>
 ;  V01 OutArgs      [V01    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V03 tmp2         [V03    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V04 tmp3         [V04,T03] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.DictionaryEnumerator`2[System.__Canon,System.Nullable`1[int]]>
 ;* V05 tmp4         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V06 tmp5         [V06    ] (  4,  8   )  struct (136) [rbp-0xB8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V07 tmp6         [V07    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V08 tmp7         [V08,T01] (  4,  7   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
 ;  V09 tmp8         [V09    ] ( 14, 20   )  struct (32) [rbp-0xD8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V10 tmp9         [V10,T08] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V10 tmp9         [V10,T09] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V11 tmp10        [V11    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V12 tmp11        [V12    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V13 tmp12        [V13    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V14 tmp13        [V14    ] (  0,  0   )     int  ->  zero-ref   
-;  V15 tmp14        [V15,T07] (  7,  5.40)    long  ->  r13         "Inlining Arg"
+;  V15 tmp14        [V15,T08] (  7,  5.40)    long  ->  r13         "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V17 tmp16        [V17    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V18 tmp17        [V18,T27] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V19 tmp18        [V19,T16] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V18 tmp17        [V18,T29] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;  V19 tmp18        [V19,T18] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V21 tmp20        [V21    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V22 tmp21        [V22,T13] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;* V23 tmp22        [V23,T35] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V22 tmp21        [V22,T14] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;* V23 tmp22        [V23,T37] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V24 tmp23        [V24    ] (  3,  3   )  struct (32) [rbp-0x118]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V25 tmp24        [V25,T15] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
+;  V25 tmp24        [V25,T17] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
 ;* V26 tmp25        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V27 tmp26        [V27,T28] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
+;  V27 tmp26        [V27,T30] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
 ;* V28 tmp27        [V28    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V29 tmp28        [V29    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V30 tmp29        [V30,T29] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
-;  V31 tmp30        [V31,T26] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V32 tmp31        [V32,T30] (  2,  2   )     int  ->  rax         "Inlining Arg"
-;  V33 tmp32        [V33,T14] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
+;  V30 tmp29        [V30,T31] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
+;  V31 tmp30        [V31,T28] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V32 tmp31        [V32,T32] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V33 tmp32        [V33,T15] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V34 tmp33        [V34    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V35 tmp34        [V35    ] (  7,  7.50)     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V09._root (fldOffset=0x0)" P-DEP
 ;  V36 tmp35        [V36    ] (  9,  8   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V09._stack (fldOffset=0x8)" P-DEP
 ;  V37 tmp36        [V37    ] (  5,  6   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V09._current (fldOffset=0x10)" P-DEP
 ;  V38 tmp37        [V38    ] (  5,  6   )     int  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V09._poolUserId (fldOffset=0x18)" P-DEP
-;  V39 tmp38        [V39,T31] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V40 tmp39        [V40,T32] (  2,  2   )    long  ->  r12         "argument with side effect"
-;  V41 cse0         [V41,T17] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
-;  V42 cse1         [V42,T33] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
-;  V43 cse2         [V43,T34] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
-;  V44 rat0         [V44,T09] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V45 rat1         [V45,T11] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V46 rat2         [V46,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V47 rat3         [V47,T05] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V48 rat4         [V48,T22] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V49 rat5         [V49,T18] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V50 rat6         [V50,T23] (  3,  2   )    long  ->  registers   "runtime lookup"
-;  V51 rat7         [V51,T19] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
-;  V52 rat8         [V52,T24] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V53 rat9         [V53,T20] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V54 rat10        [V54,T25] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V55 rat11        [V55,T21] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V56 rat12        [V56,T10] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V57 rat13        [V57,T12] (  3,  4   )    long  ->  rsi         "runtime lookup"
-;  V58 rat14        [V58,T06] (  3,  5.60)    long  ->  rsi         "fgMakeTemp is creating a new local variable"
+;  V39 tmp38        [V39,T33] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V40 tmp39        [V40,T34] (  2,  2   )    long  ->  r12         "argument with side effect"
+;  V41 cse0         [V41,T19] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
+;  V42 cse1         [V42,T35] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
+;  V43 cse2         [V43,T36] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
+;  V44 rat0         [V44,T04] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V45 rat1         [V45,T16] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V46 rat2         [V46,T10] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V47 rat3         [V47,T12] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V48 rat4         [V48,T05] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V49 rat5         [V49,T06] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V50 rat6         [V50,T24] (  3,  2   )    long  ->  r12         "runtime lookup"
+;  V51 rat7         [V51,T20] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V52 rat8         [V52,T25] (  3,  2   )    long  ->  registers   "runtime lookup"
+;  V53 rat9         [V53,T21] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V54 rat10        [V54,T26] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V55 rat11        [V55,T22] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V56 rat12        [V56,T27] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V57 rat13        [V57,T23] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V58 rat14        [V58,T11] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V59 rat15        [V59,T13] (  3,  4   )    long  ->  rsi         "runtime lookup"
+;  V60 rat16        [V60,T07] (  3,  5.60)    long  ->  rsi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 296
 
 G_M53417_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 296
        lea      rbp, [rsp+0x150]
        xor      eax, eax
        mov      qword ptr [rbp-0x118], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rdi
        mov      rbx, rdi
 						;; size=96 bbWeight=1 PerfScore 21.08
 G_M53417_IG02:
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0xB8]
        test     r15, r15
        je       SHORT G_M53417_IG04
 						;; size=22 bbWeight=1 PerfScore 9.25
 G_M53417_IG03:
        jmp      SHORT G_M53417_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M53417_IG04:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M53417_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      r15, gword ptr [rbx+0x08]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r13, qword ptr [rsi+0x18]
        test     r13, r13
        je       SHORT G_M53417_IG07
 						;; size=34 bbWeight=1 PerfScore 11.00
 G_M53417_IG06:
        jmp      SHORT G_M53417_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M53417_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M53417_IG08:
        test     r15, r15
        je       G_M53417_IG34
        mov      gword ptr [rbp-0xD8], r15
        xor      rax, rax
        mov      gword ptr [rbp-0xC8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC0], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
        mov      rdi, gword ptr [rbp-0xD8]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M53417_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M53417_IG09:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M53417_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M53417_IG10:
        jmp      SHORT G_M53417_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M53417_IG11:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M53417_IG12:
        mov      rax, r12
        mov      qword ptr [rbp-0x120], rax
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M53417_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0x118], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M53417_IG14:
        mov      rdi, qword ptr [rax+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rcx, qword ptr [rdi+0x18]
        test     rcx, rcx
        je       SHORT G_M53417_IG16
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M53417_IG15:
        jmp      SHORT G_M53417_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M53417_IG16:
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rcx, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M53417_IG17:
        mov      qword ptr [rbp-0x128], rcx
        mov      rdx, rcx
        lea      rdi, [rbp-0x118]
        call     rdx
        cmp      eax, -1
        je       SHORT G_M53417_IG21
        mov      rdi, qword ptr [rbp-0x120]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rax, qword ptr [rsi+0x20]
        test     rax, rax
        je       SHORT G_M53417_IG19
 						;; size=47 bbWeight=0.50 PerfScore 7.12
 G_M53417_IG18:
        mov      rdi, rax
        jmp      SHORT G_M53417_IG20
 						;; size=5 bbWeight=0.40 PerfScore 0.90
 G_M53417_IG19:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M53417_IG20:
        lea      rsi, [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M53417_IG21
        mov      r15, qword ptr [rbp-0x128]
        mov      r12, gword ptr [rbp-0xD0]
        lea      rdi, [rbp-0x118]
        call     r15
        mov      dword ptr [r12+0x10], eax
        jmp      G_M53417_IG27
 						;; size=57 bbWeight=0.50 PerfScore 6.75
 G_M53417_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M53417_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xF8], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M53417_IG23:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M53417_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M53417_IG24:
        jmp      SHORT G_M53417_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M53417_IG25:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M53417_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x130], rax
        movzx    rsi, byte  ptr [r15+0x1D]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF8]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r12
        mov      rsi, gword ptr [rbp-0x130]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xD0], rax
 						;; size=121 bbWeight=0.50 PerfScore 12.75
 G_M53417_IG27:
        lea      rdi, [rbp-0xD8]
        mov      rsi, r13
        mov      rdx, gword ptr [rbp-0xD8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M53417_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xA8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M53417_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x88], ymm0
        vmovdqu  ymmword ptr [rbp-0x68], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        mov      dword ptr [rbp-0xB0], -1
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB8]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rsi, qword ptr [rsi+0xD8]
        test     rsi, rsi
        je       SHORT G_M53417_IG31
-						;; size=129 bbWeight=1 PerfScore 31.58
+						;; size=78 bbWeight=1 PerfScore 18.83
 G_M53417_IG30:
        jmp      SHORT G_M53417_IG32
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M53417_IG31:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rsi, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M53417_IG32:
        mov      rdi, rsi
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rsi, r14
        lea      rdi, bword ptr [r15+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, r15
 						;; size=26 bbWeight=1 PerfScore 3.50
 G_M53417_IG33:
        vzeroupper 
        add      rsp, 296
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M53417_IG34:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 955, prolog size 93, PerfScore 156.59, instruction count 214, allocated bytes for code 955 (MethodHash=cc5f2f56) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
+; Total bytes of code 904, prolog size 93, PerfScore 143.84, instruction count 200, allocated bytes for code 904 (MethodHash=cc5f2f56) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
-51 (-5.73 % of base) - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 4 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  4,  4   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]>
 ;  V01 OutArgs      [V01    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V03 tmp2         [V03    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V04 tmp3         [V04    ] (  4,  8   )  struct (136) [rbp-0xB8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V05 tmp4         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V06 tmp5         [V06,T00] (  4,  7   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
 ;  V07 tmp6         [V07    ] ( 14, 20   )  struct (32) [rbp-0xD8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V08 tmp7         [V08,T06] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V08 tmp7         [V08,T07] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V09 tmp8         [V09    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V10 tmp9         [V10    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V11 tmp10        [V11    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V12 tmp11        [V12    ] (  0,  0   )     int  ->  zero-ref   
-;  V13 tmp12        [V13,T05] (  7,  5.40)    long  ->  r13         "Inlining Arg"
+;  V13 tmp12        [V13,T06] (  7,  5.40)    long  ->  r13         "Inlining Arg"
 ;* V14 tmp13        [V14    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V15 tmp14        [V15    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V16 tmp15        [V16,T22] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V17 tmp16        [V17,T11] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V16 tmp15        [V16,T24] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;  V17 tmp16        [V17,T13] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V19 tmp18        [V19    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V20 tmp19        [V20,T09] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;* V21 tmp20        [V21,T30] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V20 tmp19        [V20,T10] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;* V21 tmp20        [V21,T32] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V22 tmp21        [V22    ] (  3,  3   )  struct (32) [rbp-0x118]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V23 tmp22        [V23,T10] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
+;  V23 tmp22        [V23,T12] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
 ;* V24 tmp23        [V24    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V25 tmp24        [V25,T23] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
+;  V25 tmp24        [V25,T25] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
 ;* V26 tmp25        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V27 tmp26        [V27    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V28 tmp27        [V28,T24] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
-;  V29 tmp28        [V29,T21] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V30 tmp29        [V30,T25] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V28 tmp27        [V28,T26] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
+;  V29 tmp28        [V29,T23] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V30 tmp29        [V30,T27] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;  V31 tmp30        [V31    ] (  7,  7.50)     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V07._root (fldOffset=0x0)" P-DEP
 ;  V32 tmp31        [V32    ] (  9,  8   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V07._stack (fldOffset=0x8)" P-DEP
 ;  V33 tmp32        [V33    ] (  5,  6   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V07._current (fldOffset=0x10)" P-DEP
 ;  V34 tmp33        [V34    ] (  5,  6   )     int  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V07._poolUserId (fldOffset=0x18)" P-DEP
-;  V35 tmp34        [V35,T26] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V36 tmp35        [V36,T27] (  2,  2   )    long  ->  r12         "argument with side effect"
-;  V37 cse0         [V37,T12] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
-;  V38 cse1         [V38,T28] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
-;  V39 cse2         [V39,T29] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
-;  V40 rat0         [V40,T07] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V41 rat1         [V41,T08] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V42 rat2         [V42,T03] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V43 rat3         [V43,T04] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V44 rat4         [V44,T17] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V45 rat5         [V45,T13] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V46 rat6         [V46,T18] (  3,  2   )    long  ->  registers   "runtime lookup"
-;  V47 rat7         [V47,T14] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
-;  V48 rat8         [V48,T19] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V49 rat9         [V49,T15] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V50 rat10        [V50,T20] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V51 rat11        [V51,T16] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V35 tmp34        [V35,T28] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V36 tmp35        [V36,T29] (  2,  2   )    long  ->  r12         "argument with side effect"
+;  V37 cse0         [V37,T14] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
+;  V38 cse1         [V38,T30] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
+;  V39 cse2         [V39,T31] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
+;  V40 rat0         [V40,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V41 rat1         [V41,T11] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V42 rat2         [V42,T08] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V43 rat3         [V43,T09] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V44 rat4         [V44,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V45 rat5         [V45,T05] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V46 rat6         [V46,T19] (  3,  2   )    long  ->  r12         "runtime lookup"
+;  V47 rat7         [V47,T15] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V48 rat8         [V48,T20] (  3,  2   )    long  ->  registers   "runtime lookup"
+;  V49 rat9         [V49,T16] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V50 rat10        [V50,T21] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V51 rat11        [V51,T17] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V52 rat12        [V52,T22] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V53 rat13        [V53,T18] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 296
 
 G_M18311_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 296
        lea      rbp, [rsp+0x150]
        xor      eax, eax
        mov      qword ptr [rbp-0x118], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rdi
        mov      rbx, rdi
 						;; size=96 bbWeight=1 PerfScore 21.08
 G_M18311_IG02:
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0xB8]
        test     r15, r15
        je       SHORT G_M18311_IG04
 						;; size=22 bbWeight=1 PerfScore 9.25
 G_M18311_IG03:
        jmp      SHORT G_M18311_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M18311_IG04:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M18311_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      r15, gword ptr [rbx+0x08]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r13, qword ptr [rsi+0x18]
        test     r13, r13
        je       SHORT G_M18311_IG07
 						;; size=34 bbWeight=1 PerfScore 11.00
 G_M18311_IG06:
        jmp      SHORT G_M18311_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M18311_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M18311_IG08:
        test     r15, r15
        je       G_M18311_IG31
        mov      gword ptr [rbp-0xD8], r15
        xor      rax, rax
        mov      gword ptr [rbp-0xC8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC0], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
        mov      rdi, gword ptr [rbp-0xD8]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M18311_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M18311_IG09:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M18311_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M18311_IG10:
        jmp      SHORT G_M18311_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M18311_IG11:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M18311_IG12:
        mov      rax, r12
        mov      qword ptr [rbp-0x120], rax
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M18311_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0x118], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M18311_IG14:
        mov      rdi, qword ptr [rax+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rcx, qword ptr [rdi+0x18]
        test     rcx, rcx
        je       SHORT G_M18311_IG16
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M18311_IG15:
        jmp      SHORT G_M18311_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M18311_IG16:
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rcx, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M18311_IG17:
        mov      qword ptr [rbp-0x128], rcx
        mov      rdx, rcx
        lea      rdi, [rbp-0x118]
        call     rdx
        cmp      eax, -1
        je       SHORT G_M18311_IG21
        mov      rdi, qword ptr [rbp-0x120]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rax, qword ptr [rsi+0x20]
        test     rax, rax
        je       SHORT G_M18311_IG19
 						;; size=47 bbWeight=0.50 PerfScore 7.12
 G_M18311_IG18:
        mov      rdi, rax
        jmp      SHORT G_M18311_IG20
 						;; size=5 bbWeight=0.40 PerfScore 0.90
 G_M18311_IG19:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M18311_IG20:
        lea      rsi, [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M18311_IG21
        mov      r15, qword ptr [rbp-0x128]
        mov      r12, gword ptr [rbp-0xD0]
        lea      rdi, [rbp-0x118]
        call     r15
        mov      dword ptr [r12+0x10], eax
        jmp      G_M18311_IG27
 						;; size=57 bbWeight=0.50 PerfScore 6.75
 G_M18311_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M18311_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xF8], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M18311_IG23:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M18311_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M18311_IG24:
        jmp      SHORT G_M18311_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M18311_IG25:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M18311_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x130], rax
        movzx    rsi, byte  ptr [r15+0x1D]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF8]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r12
        mov      rsi, gword ptr [rbp-0x130]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xD0], rax
 						;; size=121 bbWeight=0.50 PerfScore 12.75
 G_M18311_IG27:
        lea      rdi, [rbp-0xD8]
        mov      rsi, r13
        mov      rdx, gword ptr [rbp-0xD8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M18311_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xA8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M18311_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x88], ymm0
        vmovdqu  ymmword ptr [rbp-0x68], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        mov      dword ptr [rbp-0xB0], -1
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB8]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r14
-						;; size=110 bbWeight=1 PerfScore 22.58
+						;; size=59 bbWeight=1 PerfScore 9.83
 G_M18311_IG30:
        vzeroupper 
        add      rsp, 296
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M18311_IG31:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 890, prolog size 93, PerfScore 142.19, instruction count 198, allocated bytes for code 890 (MethodHash=a943b878) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 839, prolog size 93, PerfScore 129.44, instruction count 184, allocated bytes for code 839 (MethodHash=a943b878) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-51 (-5.69 % of base) - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  6,  6   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]>
 ;  V01 OutArgs      [V01    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V03 tmp2         [V03    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V04 tmp3         [V04    ] (  5, 10   )  struct (136) [rbp-0xB8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V05 tmp4         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V06 tmp5         [V06,T01] (  4,  7   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
 ;  V07 tmp6         [V07    ] ( 14, 20   )  struct (32) [rbp-0xD8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V08 tmp7         [V08,T06] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V08 tmp7         [V08,T07] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V09 tmp8         [V09    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V10 tmp9         [V10    ] (  0,  0   )   byref  ->  zero-ref   
-;  V11 tmp10        [V11,T21] (  2,  2   )   byref  ->  rdi         single-def
-;  V12 tmp11        [V12,T23] (  2,  2   )     int  ->  rsi        
-;  V13 tmp12        [V13,T05] (  7,  5.40)    long  ->  r13         "Inlining Arg"
+;  V11 tmp10        [V11,T23] (  2,  2   )   byref  ->  rdi         single-def
+;  V12 tmp11        [V12,T25] (  2,  2   )     int  ->  rsi        
+;  V13 tmp12        [V13,T06] (  7,  5.40)    long  ->  r13         "Inlining Arg"
 ;* V14 tmp13        [V14    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V15 tmp14        [V15    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V16 tmp15        [V16,T24] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V17 tmp16        [V17,T11] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V16 tmp15        [V16,T26] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;  V17 tmp16        [V17,T13] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V19 tmp18        [V19    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V20 tmp19        [V20,T09] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;* V21 tmp20        [V21,T32] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V20 tmp19        [V20,T10] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;* V21 tmp20        [V21,T34] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V22 tmp21        [V22    ] (  3,  3   )  struct (32) [rbp-0x118]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V23 tmp22        [V23,T10] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
+;  V23 tmp22        [V23,T12] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
 ;* V24 tmp23        [V24    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V25 tmp24        [V25,T25] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
+;  V25 tmp24        [V25,T27] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
 ;* V26 tmp25        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V27 tmp26        [V27    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V28 tmp27        [V28,T26] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
-;  V29 tmp28        [V29,T22] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V30 tmp29        [V30,T27] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V28 tmp27        [V28,T28] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
+;  V29 tmp28        [V29,T24] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V30 tmp29        [V30,T29] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;  V31 tmp30        [V31    ] (  7,  7.50)     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V07._root (fldOffset=0x0)" P-DEP
 ;  V32 tmp31        [V32    ] (  9,  8   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V07._stack (fldOffset=0x8)" P-DEP
 ;  V33 tmp32        [V33    ] (  5,  6   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V07._current (fldOffset=0x10)" P-DEP
 ;  V34 tmp33        [V34    ] (  5,  6   )     int  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V07._poolUserId (fldOffset=0x18)" P-DEP
-;  V35 tmp34        [V35,T28] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V36 tmp35        [V36,T29] (  2,  2   )    long  ->  r12         "argument with side effect"
-;  V37 cse0         [V37,T12] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
-;  V38 cse1         [V38,T30] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
-;  V39 cse2         [V39,T31] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
-;  V40 rat0         [V40,T07] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V41 rat1         [V41,T08] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V42 rat2         [V42,T03] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V43 rat3         [V43,T04] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V44 rat4         [V44,T17] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V45 rat5         [V45,T13] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V46 rat6         [V46,T18] (  3,  2   )    long  ->  registers   "runtime lookup"
-;  V47 rat7         [V47,T14] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
-;  V48 rat8         [V48,T19] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V49 rat9         [V49,T15] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V50 rat10        [V50,T20] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V51 rat11        [V51,T16] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V35 tmp34        [V35,T30] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V36 tmp35        [V36,T31] (  2,  2   )    long  ->  r12         "argument with side effect"
+;  V37 cse0         [V37,T14] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
+;  V38 cse1         [V38,T32] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
+;  V39 cse2         [V39,T33] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
+;  V40 rat0         [V40,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V41 rat1         [V41,T11] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V42 rat2         [V42,T08] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V43 rat3         [V43,T09] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V44 rat4         [V44,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V45 rat5         [V45,T05] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V46 rat6         [V46,T19] (  3,  2   )    long  ->  r12         "runtime lookup"
+;  V47 rat7         [V47,T15] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V48 rat8         [V48,T20] (  3,  2   )    long  ->  registers   "runtime lookup"
+;  V49 rat9         [V49,T16] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V50 rat10        [V50,T21] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V51 rat11        [V51,T17] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V52 rat12        [V52,T22] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V53 rat13        [V53,T18] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 296
 
 G_M57386_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 296
        lea      rbp, [rsp+0x150]
        xor      eax, eax
        mov      qword ptr [rbp-0x118], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rdi
        mov      rbx, rdi
 						;; size=96 bbWeight=1 PerfScore 21.08
 G_M57386_IG02:
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0x60]
        test     r15, r15
        je       SHORT G_M57386_IG04
 						;; size=19 bbWeight=1 PerfScore 9.25
 G_M57386_IG03:
        jmp      SHORT G_M57386_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M57386_IG04:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M57386_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      r15, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xB8], rbx
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r13, qword ptr [rsi+0x18]
        test     r13, r13
        je       SHORT G_M57386_IG07
 						;; size=41 bbWeight=1 PerfScore 12.00
 G_M57386_IG06:
        jmp      SHORT G_M57386_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M57386_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M57386_IG08:
        test     r15, r15
        je       G_M57386_IG31
        mov      gword ptr [rbp-0xD8], r15
        xor      rax, rax
        mov      gword ptr [rbp-0xC8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC0], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
        mov      rdi, gword ptr [rbp-0xD8]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M57386_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M57386_IG09:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M57386_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M57386_IG10:
        jmp      SHORT G_M57386_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M57386_IG11:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M57386_IG12:
        mov      rax, r12
        mov      qword ptr [rbp-0x120], rax
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M57386_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0x118], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M57386_IG14:
        mov      rdi, qword ptr [rax+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rcx, qword ptr [rdi+0x18]
        test     rcx, rcx
        je       SHORT G_M57386_IG16
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M57386_IG15:
        jmp      SHORT G_M57386_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M57386_IG16:
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rcx, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M57386_IG17:
        mov      qword ptr [rbp-0x128], rcx
        mov      rdx, rcx
        lea      rdi, [rbp-0x118]
        call     rdx
        cmp      eax, -1
        je       SHORT G_M57386_IG21
        mov      rdi, qword ptr [rbp-0x120]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rax, qword ptr [rsi+0x20]
        test     rax, rax
        je       SHORT G_M57386_IG19
 						;; size=47 bbWeight=0.50 PerfScore 7.12
 G_M57386_IG18:
        mov      rdi, rax
        jmp      SHORT G_M57386_IG20
 						;; size=5 bbWeight=0.40 PerfScore 0.90
 G_M57386_IG19:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M57386_IG20:
        lea      rsi, [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M57386_IG21
        mov      r15, qword ptr [rbp-0x128]
        mov      r12, gword ptr [rbp-0xD0]
        lea      rdi, [rbp-0x118]
        call     r15
        mov      dword ptr [r12+0x10], eax
        jmp      G_M57386_IG27
 						;; size=57 bbWeight=0.50 PerfScore 6.75
 G_M57386_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M57386_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xF8], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M57386_IG23:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M57386_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M57386_IG24:
        jmp      SHORT G_M57386_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M57386_IG25:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M57386_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x130], rax
        movzx    rsi, byte  ptr [r15+0x1D]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF8]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r12
        mov      rsi, gword ptr [rbp-0x130]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xD0], rax
 						;; size=121 bbWeight=0.50 PerfScore 12.75
 G_M57386_IG27:
        lea      rdi, [rbp-0xD8]
        mov      rsi, r13
        mov      rdx, gword ptr [rbp-0xD8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M57386_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xA8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M57386_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x88], ymm0
        vmovdqu  ymmword ptr [rbp-0x68], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        lea      rdi, bword ptr [rbp-0xB8]
        mov      esi, dword ptr [rbx+0x2C]
        mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB8]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r14
-						;; size=113 bbWeight=1 PerfScore 25.08
+						;; size=62 bbWeight=1 PerfScore 12.33
 G_M57386_IG30:
        vzeroupper 
        add      rsp, 296
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M57386_IG31:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 897, prolog size 93, PerfScore 145.69, instruction count 201, allocated bytes for code 897 (MethodHash=4a901fd5) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]:this (FullOpts)
+; Total bytes of code 846, prolog size 93, PerfScore 132.94, instruction count 187, allocated bytes for code 846 (MethodHash=4a901fd5) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]:this (FullOpts)
-51 (-5.32 % of base) - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 7 single block inlinees; 5 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  7,  7   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]>
 ;  V01 OutArgs      [V01    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V03 tmp2         [V03    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V04 tmp3         [V04,T03] (  3,  6   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.DictionaryEnumerator`2[System.__Canon,System.Nullable`1[int]]>
 ;* V05 tmp4         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V06 tmp5         [V06    ] (  5, 10   )  struct (136) [rbp-0xB8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V07 tmp6         [V07    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V08 tmp7         [V08,T01] (  4,  7   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
 ;  V09 tmp8         [V09    ] ( 14, 20   )  struct (32) [rbp-0xD8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V10 tmp9         [V10,T08] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V10 tmp9         [V10,T09] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V11 tmp10        [V11    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V12 tmp11        [V12    ] (  0,  0   )   byref  ->  zero-ref   
-;  V13 tmp12        [V13,T26] (  2,  2   )   byref  ->  rdi         single-def
-;  V14 tmp13        [V14,T28] (  2,  2   )     int  ->  rsi        
-;  V15 tmp14        [V15,T07] (  7,  5.40)    long  ->  r13         "Inlining Arg"
+;  V13 tmp12        [V13,T28] (  2,  2   )   byref  ->  rdi         single-def
+;  V14 tmp13        [V14,T30] (  2,  2   )     int  ->  rsi        
+;  V15 tmp14        [V15,T08] (  7,  5.40)    long  ->  r13         "Inlining Arg"
 ;* V16 tmp15        [V16    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V17 tmp16        [V17    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V18 tmp17        [V18,T29] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V19 tmp18        [V19,T16] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V18 tmp17        [V18,T31] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;  V19 tmp18        [V19,T18] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V20 tmp19        [V20    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V21 tmp20        [V21    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V22 tmp21        [V22,T13] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;* V23 tmp22        [V23,T37] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V22 tmp21        [V22,T14] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;* V23 tmp22        [V23,T39] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V24 tmp23        [V24    ] (  3,  3   )  struct (32) [rbp-0x118]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V25 tmp24        [V25,T15] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
+;  V25 tmp24        [V25,T17] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
 ;* V26 tmp25        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V27 tmp26        [V27,T30] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
+;  V27 tmp26        [V27,T32] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
 ;* V28 tmp27        [V28    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V29 tmp28        [V29    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V30 tmp29        [V30,T31] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
-;  V31 tmp30        [V31,T27] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V32 tmp31        [V32,T32] (  2,  2   )     int  ->  rax         "Inlining Arg"
-;  V33 tmp32        [V33,T14] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
+;  V30 tmp29        [V30,T33] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
+;  V31 tmp30        [V31,T29] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V32 tmp31        [V32,T34] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V33 tmp32        [V33,T15] (  2,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V34 tmp33        [V34    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V35 tmp34        [V35    ] (  7,  7.50)     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V09._root (fldOffset=0x0)" P-DEP
 ;  V36 tmp35        [V36    ] (  9,  8   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V09._stack (fldOffset=0x8)" P-DEP
 ;  V37 tmp36        [V37    ] (  5,  6   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V09._current (fldOffset=0x10)" P-DEP
 ;  V38 tmp37        [V38    ] (  5,  6   )     int  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V09._poolUserId (fldOffset=0x18)" P-DEP
-;  V39 tmp38        [V39,T33] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V40 tmp39        [V40,T34] (  2,  2   )    long  ->  r12         "argument with side effect"
-;  V41 cse0         [V41,T17] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
-;  V42 cse1         [V42,T35] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
-;  V43 cse2         [V43,T36] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
-;  V44 rat0         [V44,T09] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V45 rat1         [V45,T11] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V46 rat2         [V46,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V47 rat3         [V47,T05] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V48 rat4         [V48,T22] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V49 rat5         [V49,T18] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V50 rat6         [V50,T23] (  3,  2   )    long  ->  registers   "runtime lookup"
-;  V51 rat7         [V51,T19] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
-;  V52 rat8         [V52,T24] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V53 rat9         [V53,T20] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V54 rat10        [V54,T25] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V55 rat11        [V55,T21] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V56 rat12        [V56,T10] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V57 rat13        [V57,T12] (  3,  4   )    long  ->  rsi         "runtime lookup"
-;  V58 rat14        [V58,T06] (  3,  5.60)    long  ->  rsi         "fgMakeTemp is creating a new local variable"
+;  V39 tmp38        [V39,T35] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V40 tmp39        [V40,T36] (  2,  2   )    long  ->  r12         "argument with side effect"
+;  V41 cse0         [V41,T19] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
+;  V42 cse1         [V42,T37] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
+;  V43 cse2         [V43,T38] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
+;  V44 rat0         [V44,T04] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V45 rat1         [V45,T16] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V46 rat2         [V46,T10] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V47 rat3         [V47,T12] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V48 rat4         [V48,T05] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V49 rat5         [V49,T06] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V50 rat6         [V50,T24] (  3,  2   )    long  ->  r12         "runtime lookup"
+;  V51 rat7         [V51,T20] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V52 rat8         [V52,T25] (  3,  2   )    long  ->  registers   "runtime lookup"
+;  V53 rat9         [V53,T21] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V54 rat10        [V54,T26] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V55 rat11        [V55,T22] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V56 rat12        [V56,T27] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V57 rat13        [V57,T23] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V58 rat14        [V58,T11] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V59 rat15        [V59,T13] (  3,  4   )    long  ->  rsi         "runtime lookup"
+;  V60 rat16        [V60,T07] (  3,  5.60)    long  ->  rsi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 296
 
 G_M43043_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 296
        lea      rbp, [rsp+0x150]
        xor      eax, eax
        mov      qword ptr [rbp-0x118], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rdi
        mov      rbx, rdi
 						;; size=96 bbWeight=1 PerfScore 21.08
 G_M43043_IG02:
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0x60]
        test     r15, r15
        je       SHORT G_M43043_IG04
 						;; size=19 bbWeight=1 PerfScore 9.25
 G_M43043_IG03:
        jmp      SHORT G_M43043_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M43043_IG04:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M43043_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      r15, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xB8], rbx
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r13, qword ptr [rsi+0x18]
        test     r13, r13
        je       SHORT G_M43043_IG07
 						;; size=41 bbWeight=1 PerfScore 12.00
 G_M43043_IG06:
        jmp      SHORT G_M43043_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M43043_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M43043_IG08:
        test     r15, r15
        je       G_M43043_IG34
        mov      gword ptr [rbp-0xD8], r15
        xor      rax, rax
        mov      gword ptr [rbp-0xC8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC0], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
        mov      rdi, gword ptr [rbp-0xD8]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M43043_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M43043_IG09:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M43043_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M43043_IG10:
        jmp      SHORT G_M43043_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M43043_IG11:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M43043_IG12:
        mov      rax, r12
        mov      qword ptr [rbp-0x120], rax
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M43043_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0x118], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M43043_IG14:
        mov      rdi, qword ptr [rax+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rcx, qword ptr [rdi+0x18]
        test     rcx, rcx
        je       SHORT G_M43043_IG16
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M43043_IG15:
        jmp      SHORT G_M43043_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M43043_IG16:
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rcx, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M43043_IG17:
        mov      qword ptr [rbp-0x128], rcx
        mov      rdx, rcx
        lea      rdi, [rbp-0x118]
        call     rdx
        cmp      eax, -1
        je       SHORT G_M43043_IG21
        mov      rdi, qword ptr [rbp-0x120]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rax, qword ptr [rsi+0x20]
        test     rax, rax
        je       SHORT G_M43043_IG19
 						;; size=47 bbWeight=0.50 PerfScore 7.12
 G_M43043_IG18:
        mov      rdi, rax
        jmp      SHORT G_M43043_IG20
 						;; size=5 bbWeight=0.40 PerfScore 0.90
 G_M43043_IG19:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M43043_IG20:
        lea      rsi, [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M43043_IG21
        mov      r15, qword ptr [rbp-0x128]
        mov      r12, gword ptr [rbp-0xD0]
        lea      rdi, [rbp-0x118]
        call     r15
        mov      dword ptr [r12+0x10], eax
        jmp      G_M43043_IG27
 						;; size=57 bbWeight=0.50 PerfScore 6.75
 G_M43043_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M43043_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xF8], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M43043_IG23:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M43043_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M43043_IG24:
        jmp      SHORT G_M43043_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M43043_IG25:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M43043_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x130], rax
        movzx    rsi, byte  ptr [r15+0x1D]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF8]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r12
        mov      rsi, gword ptr [rbp-0x130]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xD0], rax
 						;; size=121 bbWeight=0.50 PerfScore 12.75
 G_M43043_IG27:
        lea      rdi, [rbp-0xD8]
        mov      rsi, r13
        mov      rdx, gword ptr [rbp-0xD8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M43043_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xA8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M43043_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x88], ymm0
        vmovdqu  ymmword ptr [rbp-0x68], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        lea      rdi, bword ptr [rbp-0xB8]
        mov      esi, dword ptr [rbx+0x2C]
        mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB8]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rsi, qword ptr [rsi+0x68]
        test     rsi, rsi
        je       SHORT G_M43043_IG31
-						;; size=129 bbWeight=1 PerfScore 34.08
+						;; size=78 bbWeight=1 PerfScore 21.33
 G_M43043_IG30:
        jmp      SHORT G_M43043_IG32
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M43043_IG31:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rsi, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M43043_IG32:
        mov      rdi, rsi
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rsi, r14
        lea      rdi, bword ptr [r15+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, r15
 						;; size=26 bbWeight=1 PerfScore 3.50
 G_M43043_IG33:
        vzeroupper 
        add      rsp, 296
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M43043_IG34:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 959, prolog size 93, PerfScore 160.09, instruction count 217, allocated bytes for code 959 (MethodHash=4b2d57dc) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
+; Total bytes of code 908, prolog size 93, PerfScore 147.34, instruction count 203, allocated bytes for code 908 (MethodHash=4b2d57dc) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
-51 (-5.69 % of base) - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  6,  6   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]>
 ;  V01 OutArgs      [V01    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V03 tmp2         [V03    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V04 tmp3         [V04    ] (  5, 10   )  struct (136) [rbp-0xB8]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
 ;* V05 tmp4         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V06 tmp5         [V06,T01] (  4,  7   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
 ;  V07 tmp6         [V07    ] ( 14, 20   )  struct (32) [rbp-0xD8]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V08 tmp7         [V08,T06] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V08 tmp7         [V08,T07] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V09 tmp8         [V09    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V10 tmp9         [V10    ] (  0,  0   )   byref  ->  zero-ref   
-;  V11 tmp10        [V11,T21] (  2,  2   )   byref  ->  rdi         single-def
-;  V12 tmp11        [V12,T23] (  2,  2   )     int  ->  rsi        
-;  V13 tmp12        [V13,T05] (  7,  5.40)    long  ->  r13         "Inlining Arg"
+;  V11 tmp10        [V11,T23] (  2,  2   )   byref  ->  rdi         single-def
+;  V12 tmp11        [V12,T25] (  2,  2   )     int  ->  rsi        
+;  V13 tmp12        [V13,T06] (  7,  5.40)    long  ->  r13         "Inlining Arg"
 ;* V14 tmp13        [V14    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V15 tmp14        [V15    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V16 tmp15        [V16,T24] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V17 tmp16        [V17,T11] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V16 tmp15        [V16,T26] (  2,  2   )  struct (32) [rbp-0xF8]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;  V17 tmp16        [V17,T13] (  3,  3   )     ref  ->  [rbp-0x130]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V19 tmp18        [V19    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V20 tmp19        [V20,T09] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;* V21 tmp20        [V21,T32] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V20 tmp19        [V20,T10] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
+;* V21 tmp20        [V21,T34] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V22 tmp21        [V22    ] (  3,  3   )  struct (32) [rbp-0x118]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-;  V23 tmp22        [V23,T10] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
+;  V23 tmp22        [V23,T12] (  5,  3.40)    long  ->  [rbp-0x120]  spill-single-def "Inlining Arg"
 ;* V24 tmp23        [V24    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V25 tmp24        [V25,T25] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
+;  V25 tmp24        [V25,T27] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
 ;* V26 tmp25        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V27 tmp26        [V27    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V28 tmp27        [V28,T26] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
-;  V29 tmp28        [V29,T22] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V30 tmp29        [V30,T27] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V28 tmp27        [V28,T28] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
+;  V29 tmp28        [V29,T24] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V30 tmp29        [V30,T29] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;  V31 tmp30        [V31    ] (  7,  7.50)     ref  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V07._root (fldOffset=0x0)" P-DEP
 ;  V32 tmp31        [V32    ] (  9,  8   )     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V07._stack (fldOffset=0x8)" P-DEP
 ;  V33 tmp32        [V33    ] (  5,  6   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V07._current (fldOffset=0x10)" P-DEP
 ;  V34 tmp33        [V34    ] (  5,  6   )     int  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V07._poolUserId (fldOffset=0x18)" P-DEP
-;  V35 tmp34        [V35,T28] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V36 tmp35        [V36,T29] (  2,  2   )    long  ->  r12         "argument with side effect"
-;  V37 cse0         [V37,T12] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
-;  V38 cse1         [V38,T30] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
-;  V39 cse2         [V39,T31] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
-;  V40 rat0         [V40,T07] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V41 rat1         [V41,T08] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V42 rat2         [V42,T03] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V43 rat3         [V43,T04] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V44 rat4         [V44,T17] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V45 rat5         [V45,T13] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V46 rat6         [V46,T18] (  3,  2   )    long  ->  registers   "runtime lookup"
-;  V47 rat7         [V47,T14] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
-;  V48 rat8         [V48,T19] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V49 rat9         [V49,T15] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V50 rat10        [V50,T20] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V51 rat11        [V51,T16] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V35 tmp34        [V35,T30] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V36 tmp35        [V36,T31] (  2,  2   )    long  ->  r12         "argument with side effect"
+;  V37 cse0         [V37,T14] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
+;  V38 cse1         [V38,T32] (  3,  1.50)    long  ->  [rbp-0x128]  spill-single-def "CSE #03: moderate"
+;  V39 cse2         [V39,T33] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
+;  V40 rat0         [V40,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V41 rat1         [V41,T11] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V42 rat2         [V42,T08] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V43 rat3         [V43,T09] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V44 rat4         [V44,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V45 rat5         [V45,T05] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V46 rat6         [V46,T19] (  3,  2   )    long  ->  r12         "runtime lookup"
+;  V47 rat7         [V47,T15] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V48 rat8         [V48,T20] (  3,  2   )    long  ->  registers   "runtime lookup"
+;  V49 rat9         [V49,T16] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V50 rat10        [V50,T21] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V51 rat11        [V51,T17] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V52 rat12        [V52,T22] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V53 rat13        [V53,T18] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 296
 
 G_M62477_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 296
        lea      rbp, [rsp+0x150]
        xor      eax, eax
        mov      qword ptr [rbp-0x118], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rdi
        mov      rbx, rdi
 						;; size=96 bbWeight=1 PerfScore 21.08
 G_M62477_IG02:
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0x60]
        test     r15, r15
        je       SHORT G_M62477_IG04
 						;; size=19 bbWeight=1 PerfScore 9.25
 G_M62477_IG03:
        jmp      SHORT G_M62477_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M62477_IG04:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M62477_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      r15, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xB8], rbx
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r13, qword ptr [rsi+0x18]
        test     r13, r13
        je       SHORT G_M62477_IG07
 						;; size=41 bbWeight=1 PerfScore 12.00
 G_M62477_IG06:
        jmp      SHORT G_M62477_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M62477_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M62477_IG08:
        test     r15, r15
        je       G_M62477_IG31
        mov      gword ptr [rbp-0xD8], r15
        xor      rax, rax
        mov      gword ptr [rbp-0xC8], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xC0], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
        mov      rdi, gword ptr [rbp-0xD8]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M62477_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M62477_IG09:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M62477_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M62477_IG10:
        jmp      SHORT G_M62477_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M62477_IG11:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M62477_IG12:
        mov      rax, r12
        mov      qword ptr [rbp-0x120], rax
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M62477_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0x118], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M62477_IG14:
        mov      rdi, qword ptr [rax+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rcx, qword ptr [rdi+0x18]
        test     rcx, rcx
        je       SHORT G_M62477_IG16
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M62477_IG15:
        jmp      SHORT G_M62477_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M62477_IG16:
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rcx, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M62477_IG17:
        mov      qword ptr [rbp-0x128], rcx
        mov      rdx, rcx
        lea      rdi, [rbp-0x118]
        call     rdx
        cmp      eax, -1
        je       SHORT G_M62477_IG21
        mov      rdi, qword ptr [rbp-0x120]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rax, qword ptr [rsi+0x20]
        test     rax, rax
        je       SHORT G_M62477_IG19
 						;; size=47 bbWeight=0.50 PerfScore 7.12
 G_M62477_IG18:
        mov      rdi, rax
        jmp      SHORT G_M62477_IG20
 						;; size=5 bbWeight=0.40 PerfScore 0.90
 G_M62477_IG19:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M62477_IG20:
        lea      rsi, [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M62477_IG21
        mov      r15, qword ptr [rbp-0x128]
        mov      r12, gword ptr [rbp-0xD0]
        lea      rdi, [rbp-0x118]
        call     r15
        mov      dword ptr [r12+0x10], eax
        jmp      G_M62477_IG27
 						;; size=57 bbWeight=0.50 PerfScore 6.75
 G_M62477_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xD0], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M62477_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xF8], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M62477_IG23:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M62477_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M62477_IG24:
        jmp      SHORT G_M62477_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M62477_IG25:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M62477_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x130], rax
        movzx    rsi, byte  ptr [r15+0x1D]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF8]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r12
        mov      rsi, gword ptr [rbp-0x130]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xD0], rax
 						;; size=121 bbWeight=0.50 PerfScore 12.75
 G_M62477_IG27:
        lea      rdi, [rbp-0xD8]
        mov      rsi, r13
        mov      rdx, gword ptr [rbp-0xD8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M62477_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD8]
        vmovdqu  ymmword ptr [rbp-0xA8], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M62477_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x88], ymm0
        vmovdqu  ymmword ptr [rbp-0x68], ymm0
        vmovdqu  ymmword ptr [rbp-0x50], ymm0
        lea      rdi, bword ptr [rbp-0xB8]
        mov      esi, dword ptr [rbx+0x2C]
        mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB8]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB8]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r14
-						;; size=113 bbWeight=1 PerfScore 25.08
+						;; size=62 bbWeight=1 PerfScore 12.33
 G_M62477_IG30:
        vzeroupper 
        add      rsp, 296
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M62477_IG31:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 897, prolog size 93, PerfScore 145.69, instruction count 201, allocated bytes for code 897 (MethodHash=4ddb0bf2) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 846, prolog size 93, PerfScore 132.94, instruction count 187, allocated bytes for code 846 (MethodHash=4ddb0bf2) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-49 (-5.59 % of base) - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 4 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  4,  4   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]>
 ;  V01 OutArgs      [V01    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V03 tmp2         [V03    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V04 tmp3         [V04    ] (  4,  8   )  struct (128) [rbp-0xB0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V05 tmp4         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V06 tmp5         [V06,T00] (  4,  7   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
 ;  V07 tmp6         [V07    ] ( 14, 20   )  struct (32) [rbp-0xD0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V08 tmp7         [V08,T06] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V08 tmp7         [V08,T07] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V09 tmp8         [V09    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V10 tmp9         [V10    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V11 tmp10        [V11    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V12 tmp11        [V12    ] (  0,  0   )     int  ->  zero-ref   
-;  V13 tmp12        [V13,T05] (  7,  5.40)    long  ->  r13         "Inlining Arg"
+;  V13 tmp12        [V13,T06] (  7,  5.40)    long  ->  r13         "Inlining Arg"
 ;* V14 tmp13        [V14    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V15 tmp14        [V15    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V16 tmp15        [V16,T22] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V17 tmp16        [V17,T11] (  3,  3   )     ref  ->  [rbp-0x128]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V16 tmp15        [V16,T24] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;  V17 tmp16        [V17,T13] (  3,  3   )     ref  ->  [rbp-0x128]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V19 tmp18        [V19    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V20 tmp19        [V20,T09] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;* V21 tmp20        [V21,T30] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V20 tmp19        [V20,T10] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;* V21 tmp20        [V21,T32] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V22 tmp21        [V22    ] (  3,  3   )  struct (32) [rbp-0x110]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V23 tmp22        [V23,T10] (  5,  3.40)    long  ->  [rbp-0x118]  spill-single-def "Inlining Arg"
+;  V23 tmp22        [V23,T12] (  5,  3.40)    long  ->  [rbp-0x118]  spill-single-def "Inlining Arg"
 ;* V24 tmp23        [V24    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V25 tmp24        [V25,T23] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
+;  V25 tmp24        [V25,T25] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
 ;* V26 tmp25        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V27 tmp26        [V27    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V28 tmp27        [V28,T24] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
-;  V29 tmp28        [V29,T21] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V30 tmp29        [V30,T25] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V28 tmp27        [V28,T26] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
+;  V29 tmp28        [V29,T23] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V30 tmp29        [V30,T27] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;  V31 tmp30        [V31    ] (  7,  7.50)     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V07._root (fldOffset=0x0)" P-DEP
 ;  V32 tmp31        [V32    ] (  9,  8   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V07._stack (fldOffset=0x8)" P-DEP
 ;  V33 tmp32        [V33    ] (  5,  6   )     ref  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V07._current (fldOffset=0x10)" P-DEP
 ;  V34 tmp33        [V34    ] (  5,  6   )     int  ->  [rbp-0xB8]  do-not-enreg[X] addr-exposed "field V07._poolUserId (fldOffset=0x18)" P-DEP
-;  V35 tmp34        [V35,T26] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V36 tmp35        [V36,T27] (  2,  2   )    long  ->  r12         "argument with side effect"
-;  V37 cse0         [V37,T12] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
-;  V38 cse1         [V38,T28] (  3,  1.50)    long  ->  [rbp-0x120]  spill-single-def "CSE #03: moderate"
-;  V39 cse2         [V39,T29] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
-;  V40 rat0         [V40,T07] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V41 rat1         [V41,T08] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V42 rat2         [V42,T03] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V43 rat3         [V43,T04] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V44 rat4         [V44,T17] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V45 rat5         [V45,T13] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V46 rat6         [V46,T18] (  3,  2   )    long  ->  registers   "runtime lookup"
-;  V47 rat7         [V47,T14] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
-;  V48 rat8         [V48,T19] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V49 rat9         [V49,T15] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V50 rat10        [V50,T20] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V51 rat11        [V51,T16] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V35 tmp34        [V35,T28] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V36 tmp35        [V36,T29] (  2,  2   )    long  ->  r12         "argument with side effect"
+;  V37 cse0         [V37,T14] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
+;  V38 cse1         [V38,T30] (  3,  1.50)    long  ->  [rbp-0x120]  spill-single-def "CSE #03: moderate"
+;  V39 cse2         [V39,T31] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
+;  V40 rat0         [V40,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V41 rat1         [V41,T11] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V42 rat2         [V42,T08] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V43 rat3         [V43,T09] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V44 rat4         [V44,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V45 rat5         [V45,T05] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V46 rat6         [V46,T19] (  3,  2   )    long  ->  r12         "runtime lookup"
+;  V47 rat7         [V47,T15] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V48 rat8         [V48,T20] (  3,  2   )    long  ->  registers   "runtime lookup"
+;  V49 rat9         [V49,T16] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V50 rat10        [V50,T21] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V51 rat11        [V51,T17] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V52 rat12        [V52,T22] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V53 rat13        [V53,T18] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 296
 
 G_M9054_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 296
        lea      rbp, [rsp+0x150]
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rdi
        mov      rbx, rdi
 						;; size=87 bbWeight=1 PerfScore 19.83
 G_M9054_IG02:
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0x90]
        test     r15, r15
        je       SHORT G_M9054_IG04
 						;; size=22 bbWeight=1 PerfScore 9.25
 G_M9054_IG03:
        jmp      SHORT G_M9054_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M9054_IG04:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M9054_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      r15, gword ptr [rbx+0x10]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r13, qword ptr [rsi+0x10]
        test     r13, r13
        je       SHORT G_M9054_IG07
 						;; size=34 bbWeight=1 PerfScore 11.00
 G_M9054_IG06:
        jmp      SHORT G_M9054_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M9054_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M9054_IG08:
        test     r15, r15
        je       G_M9054_IG31
        mov      gword ptr [rbp-0xD0], r15
        xor      rax, rax
        mov      gword ptr [rbp-0xC0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xB8], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
        mov      rdi, gword ptr [rbp-0xD0]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M9054_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M9054_IG09:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M9054_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M9054_IG10:
        jmp      SHORT G_M9054_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M9054_IG11:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M9054_IG12:
        mov      rax, r12
        mov      qword ptr [rbp-0x118], rax
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M9054_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0x110], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M9054_IG14:
        mov      rdi, qword ptr [rax+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rcx, qword ptr [rdi+0x18]
        test     rcx, rcx
        je       SHORT G_M9054_IG16
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M9054_IG15:
        jmp      SHORT G_M9054_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M9054_IG16:
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rcx, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M9054_IG17:
        mov      qword ptr [rbp-0x120], rcx
        mov      rdx, rcx
        lea      rdi, [rbp-0x110]
        call     rdx
        cmp      eax, -1
        je       SHORT G_M9054_IG21
        mov      rdi, qword ptr [rbp-0x118]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rax, qword ptr [rsi+0x20]
        test     rax, rax
        je       SHORT G_M9054_IG19
 						;; size=47 bbWeight=0.50 PerfScore 7.12
 G_M9054_IG18:
        mov      rdi, rax
        jmp      SHORT G_M9054_IG20
 						;; size=5 bbWeight=0.40 PerfScore 0.90
 G_M9054_IG19:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M9054_IG20:
        lea      rsi, [rbp-0xC8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M9054_IG21
        mov      r15, qword ptr [rbp-0x120]
        mov      r12, gword ptr [rbp-0xC8]
        lea      rdi, [rbp-0x110]
        call     r15
        mov      dword ptr [r12+0x10], eax
        jmp      G_M9054_IG27
 						;; size=57 bbWeight=0.50 PerfScore 6.75
 G_M9054_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M9054_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xF0], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M9054_IG23:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M9054_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M9054_IG24:
        jmp      SHORT G_M9054_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M9054_IG25:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M9054_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x128], rax
        movzx    rsi, byte  ptr [r15+0x1D]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF0]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r12
        mov      rsi, gword ptr [rbp-0x128]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xC8], rax
 						;; size=121 bbWeight=0.50 PerfScore 12.75
 G_M9054_IG27:
        lea      rdi, [rbp-0xD0]
        mov      rsi, r13
        mov      rdx, gword ptr [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M9054_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xA0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M9054_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x80], ymm0
        vmovdqu  ymmword ptr [rbp-0x60], ymm0
        vmovdqu  xmmword ptr [rbp-0x40], xmm0
        mov      dword ptr [rbp-0xA8], -1
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB0]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r14
-						;; size=105 bbWeight=1 PerfScore 21.58
+						;; size=56 bbWeight=1 PerfScore 9.83
 G_M9054_IG30:
        vzeroupper 
        add      rsp, 296
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M9054_IG31:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 876, prolog size 84, PerfScore 139.94, instruction count 195, allocated bytes for code 876 (MethodHash=c07bdca1) for method System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 827, prolog size 84, PerfScore 128.19, instruction count 182, allocated bytes for code 827 (MethodHash=c07bdca1) for method System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-49 (-5.55 % of base) - System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]:System.Collections.Generic.IEnumerable.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  6,  6   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]>
 ;  V01 OutArgs      [V01    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V03 tmp2         [V03    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V04 tmp3         [V04    ] (  5, 10   )  struct (128) [rbp-0xB0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V05 tmp4         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V06 tmp5         [V06,T01] (  4,  7   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
 ;  V07 tmp6         [V07    ] ( 14, 20   )  struct (32) [rbp-0xD0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V08 tmp7         [V08,T06] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V08 tmp7         [V08,T07] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V09 tmp8         [V09    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V10 tmp9         [V10    ] (  0,  0   )   byref  ->  zero-ref   
-;  V11 tmp10        [V11,T21] (  2,  2   )   byref  ->  rdi         single-def
-;  V12 tmp11        [V12,T23] (  2,  2   )     int  ->  rsi        
-;  V13 tmp12        [V13,T05] (  7,  5.40)    long  ->  r13         "Inlining Arg"
+;  V11 tmp10        [V11,T23] (  2,  2   )   byref  ->  rdi         single-def
+;  V12 tmp11        [V12,T25] (  2,  2   )     int  ->  rsi        
+;  V13 tmp12        [V13,T06] (  7,  5.40)    long  ->  r13         "Inlining Arg"
 ;* V14 tmp13        [V14    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V15 tmp14        [V15    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V16 tmp15        [V16,T24] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V17 tmp16        [V17,T11] (  3,  3   )     ref  ->  [rbp-0x128]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V16 tmp15        [V16,T26] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;  V17 tmp16        [V17,T13] (  3,  3   )     ref  ->  [rbp-0x128]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V19 tmp18        [V19    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V20 tmp19        [V20,T09] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;* V21 tmp20        [V21,T32] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V20 tmp19        [V20,T10] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;* V21 tmp20        [V21,T34] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V22 tmp21        [V22    ] (  3,  3   )  struct (32) [rbp-0x110]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V23 tmp22        [V23,T10] (  5,  3.40)    long  ->  [rbp-0x118]  spill-single-def "Inlining Arg"
+;  V23 tmp22        [V23,T12] (  5,  3.40)    long  ->  [rbp-0x118]  spill-single-def "Inlining Arg"
 ;* V24 tmp23        [V24    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V25 tmp24        [V25,T25] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
+;  V25 tmp24        [V25,T27] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
 ;* V26 tmp25        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V27 tmp26        [V27    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V28 tmp27        [V28,T26] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
-;  V29 tmp28        [V29,T22] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V30 tmp29        [V30,T27] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V28 tmp27        [V28,T28] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
+;  V29 tmp28        [V29,T24] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V30 tmp29        [V30,T29] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;  V31 tmp30        [V31    ] (  7,  7.50)     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V07._root (fldOffset=0x0)" P-DEP
 ;  V32 tmp31        [V32    ] (  9,  8   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V07._stack (fldOffset=0x8)" P-DEP
 ;  V33 tmp32        [V33    ] (  5,  6   )     ref  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V07._current (fldOffset=0x10)" P-DEP
 ;  V34 tmp33        [V34    ] (  5,  6   )     int  ->  [rbp-0xB8]  do-not-enreg[X] addr-exposed "field V07._poolUserId (fldOffset=0x18)" P-DEP
-;  V35 tmp34        [V35,T28] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V36 tmp35        [V36,T29] (  2,  2   )    long  ->  r12         "argument with side effect"
-;  V37 cse0         [V37,T12] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
-;  V38 cse1         [V38,T30] (  3,  1.50)    long  ->  [rbp-0x120]  spill-single-def "CSE #03: moderate"
-;  V39 cse2         [V39,T31] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
-;  V40 rat0         [V40,T07] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V41 rat1         [V41,T08] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V42 rat2         [V42,T03] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V43 rat3         [V43,T04] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V44 rat4         [V44,T17] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V45 rat5         [V45,T13] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V46 rat6         [V46,T18] (  3,  2   )    long  ->  registers   "runtime lookup"
-;  V47 rat7         [V47,T14] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
-;  V48 rat8         [V48,T19] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V49 rat9         [V49,T15] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V50 rat10        [V50,T20] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V51 rat11        [V51,T16] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V35 tmp34        [V35,T30] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V36 tmp35        [V36,T31] (  2,  2   )    long  ->  r12         "argument with side effect"
+;  V37 cse0         [V37,T14] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
+;  V38 cse1         [V38,T32] (  3,  1.50)    long  ->  [rbp-0x120]  spill-single-def "CSE #03: moderate"
+;  V39 cse2         [V39,T33] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
+;  V40 rat0         [V40,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V41 rat1         [V41,T11] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V42 rat2         [V42,T08] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V43 rat3         [V43,T09] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V44 rat4         [V44,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V45 rat5         [V45,T05] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V46 rat6         [V46,T19] (  3,  2   )    long  ->  r12         "runtime lookup"
+;  V47 rat7         [V47,T15] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V48 rat8         [V48,T20] (  3,  2   )    long  ->  registers   "runtime lookup"
+;  V49 rat9         [V49,T16] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V50 rat10        [V50,T21] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V51 rat11        [V51,T17] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V52 rat12        [V52,T22] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V53 rat13        [V53,T18] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 296
 
 G_M26739_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 296
        lea      rbp, [rsp+0x150]
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rdi
        mov      rbx, rdi
 						;; size=87 bbWeight=1 PerfScore 19.83
 G_M26739_IG02:
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0x38]
        test     r15, r15
        je       SHORT G_M26739_IG04
 						;; size=19 bbWeight=1 PerfScore 9.25
 G_M26739_IG03:
        jmp      SHORT G_M26739_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M26739_IG04:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M26739_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      r15, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xB0], rbx
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r13, qword ptr [rsi+0x10]
        test     r13, r13
        je       SHORT G_M26739_IG07
 						;; size=41 bbWeight=1 PerfScore 12.00
 G_M26739_IG06:
        jmp      SHORT G_M26739_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M26739_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M26739_IG08:
        test     r15, r15
        je       G_M26739_IG31
        mov      gword ptr [rbp-0xD0], r15
        xor      rax, rax
        mov      gword ptr [rbp-0xC0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xB8], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
        mov      rdi, gword ptr [rbp-0xD0]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M26739_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M26739_IG09:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M26739_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M26739_IG10:
        jmp      SHORT G_M26739_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M26739_IG11:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M26739_IG12:
        mov      rax, r12
        mov      qword ptr [rbp-0x118], rax
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M26739_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0x110], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M26739_IG14:
        mov      rdi, qword ptr [rax+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rcx, qword ptr [rdi+0x18]
        test     rcx, rcx
        je       SHORT G_M26739_IG16
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M26739_IG15:
        jmp      SHORT G_M26739_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M26739_IG16:
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rcx, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M26739_IG17:
        mov      qword ptr [rbp-0x120], rcx
        mov      rdx, rcx
        lea      rdi, [rbp-0x110]
        call     rdx
        cmp      eax, -1
        je       SHORT G_M26739_IG21
        mov      rdi, qword ptr [rbp-0x118]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rax, qword ptr [rsi+0x20]
        test     rax, rax
        je       SHORT G_M26739_IG19
 						;; size=47 bbWeight=0.50 PerfScore 7.12
 G_M26739_IG18:
        mov      rdi, rax
        jmp      SHORT G_M26739_IG20
 						;; size=5 bbWeight=0.40 PerfScore 0.90
 G_M26739_IG19:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M26739_IG20:
        lea      rsi, [rbp-0xC8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M26739_IG21
        mov      r15, qword ptr [rbp-0x120]
        mov      r12, gword ptr [rbp-0xC8]
        lea      rdi, [rbp-0x110]
        call     r15
        mov      dword ptr [r12+0x10], eax
        jmp      G_M26739_IG27
 						;; size=57 bbWeight=0.50 PerfScore 6.75
 G_M26739_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M26739_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xF0], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M26739_IG23:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M26739_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M26739_IG24:
        jmp      SHORT G_M26739_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M26739_IG25:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M26739_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x128], rax
        movzx    rsi, byte  ptr [r15+0x1D]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF0]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r12
        mov      rsi, gword ptr [rbp-0x128]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xC8], rax
 						;; size=121 bbWeight=0.50 PerfScore 12.75
 G_M26739_IG27:
        lea      rdi, [rbp-0xD0]
        mov      rsi, r13
        mov      rdx, gword ptr [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M26739_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xA0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M26739_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x80], ymm0
        vmovdqu  ymmword ptr [rbp-0x60], ymm0
        vmovdqu  xmmword ptr [rbp-0x40], xmm0
        lea      rdi, bword ptr [rbp-0xB0]
        mov      esi, dword ptr [rbx+0x2C]
        mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB0]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r14
-						;; size=108 bbWeight=1 PerfScore 24.08
+						;; size=59 bbWeight=1 PerfScore 12.33
 G_M26739_IG30:
        vzeroupper 
        add      rsp, 296
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M26739_IG31:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 883, prolog size 84, PerfScore 143.44, instruction count 198, allocated bytes for code 883 (MethodHash=1a92978c) for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this (FullOpts)
+; Total bytes of code 834, prolog size 84, PerfScore 131.69, instruction count 185, allocated bytes for code 834 (MethodHash=1a92978c) for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this (FullOpts)
-49 (-5.55 % of base) - System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  6,  6   )     ref  ->  rbx         this class-hnd single-def <System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]>
 ;  V01 OutArgs      [V01    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V03 tmp2         [V03    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V04 tmp3         [V04    ] (  5, 10   )  struct (128) [rbp-0xB0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V05 tmp4         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V06 tmp5         [V06,T01] (  4,  7   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
 ;  V07 tmp6         [V07    ] ( 14, 20   )  struct (32) [rbp-0xD0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V08 tmp7         [V08,T06] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V08 tmp7         [V08,T07] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V09 tmp8         [V09    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V10 tmp9         [V10    ] (  0,  0   )   byref  ->  zero-ref   
-;  V11 tmp10        [V11,T21] (  2,  2   )   byref  ->  rdi         single-def
-;  V12 tmp11        [V12,T23] (  2,  2   )     int  ->  rsi        
-;  V13 tmp12        [V13,T05] (  7,  5.40)    long  ->  r13         "Inlining Arg"
+;  V11 tmp10        [V11,T23] (  2,  2   )   byref  ->  rdi         single-def
+;  V12 tmp11        [V12,T25] (  2,  2   )     int  ->  rsi        
+;  V13 tmp12        [V13,T06] (  7,  5.40)    long  ->  r13         "Inlining Arg"
 ;* V14 tmp13        [V14    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V15 tmp14        [V15    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V16 tmp15        [V16,T24] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V17 tmp16        [V17,T11] (  3,  3   )     ref  ->  [rbp-0x128]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V16 tmp15        [V16,T26] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;  V17 tmp16        [V17,T13] (  3,  3   )     ref  ->  [rbp-0x128]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V18 tmp17        [V18    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V19 tmp18        [V19    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V20 tmp19        [V20,T09] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;* V21 tmp20        [V21,T32] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V20 tmp19        [V20,T10] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;* V21 tmp20        [V21,T34] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V22 tmp21        [V22    ] (  3,  3   )  struct (32) [rbp-0x110]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V23 tmp22        [V23,T10] (  5,  3.40)    long  ->  [rbp-0x118]  spill-single-def "Inlining Arg"
+;  V23 tmp22        [V23,T12] (  5,  3.40)    long  ->  [rbp-0x118]  spill-single-def "Inlining Arg"
 ;* V24 tmp23        [V24    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V25 tmp24        [V25,T25] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
+;  V25 tmp24        [V25,T27] (  2,  2   )    long  ->  rdx         "Indirect call through function pointer"
 ;* V26 tmp25        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V27 tmp26        [V27    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V28 tmp27        [V28,T26] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
-;  V29 tmp28        [V29,T22] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V30 tmp29        [V30,T27] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V28 tmp27        [V28,T28] (  2,  2   )    long  ->  r15         "Indirect call through function pointer"
+;  V29 tmp28        [V29,T24] (  2,  2   )     ref  ->  r12         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V30 tmp29        [V30,T29] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;  V31 tmp30        [V31    ] (  7,  7.50)     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V07._root (fldOffset=0x0)" P-DEP
 ;  V32 tmp31        [V32    ] (  9,  8   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V07._stack (fldOffset=0x8)" P-DEP
 ;  V33 tmp32        [V33    ] (  5,  6   )     ref  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V07._current (fldOffset=0x10)" P-DEP
 ;  V34 tmp33        [V34    ] (  5,  6   )     int  ->  [rbp-0xB8]  do-not-enreg[X] addr-exposed "field V07._poolUserId (fldOffset=0x18)" P-DEP
-;  V35 tmp34        [V35,T28] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V36 tmp35        [V36,T29] (  2,  2   )    long  ->  r12         "argument with side effect"
-;  V37 cse0         [V37,T12] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
-;  V38 cse1         [V38,T30] (  3,  1.50)    long  ->  [rbp-0x120]  spill-single-def "CSE #03: moderate"
-;  V39 cse2         [V39,T31] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
-;  V40 rat0         [V40,T07] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
-;  V41 rat1         [V41,T08] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V42 rat2         [V42,T03] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V43 rat3         [V43,T04] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V44 rat4         [V44,T17] (  3,  2   )    long  ->  r12         "runtime lookup"
-;  V45 rat5         [V45,T13] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V46 rat6         [V46,T18] (  3,  2   )    long  ->  registers   "runtime lookup"
-;  V47 rat7         [V47,T14] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
-;  V48 rat8         [V48,T19] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V49 rat9         [V49,T15] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V50 rat10        [V50,T20] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V51 rat11        [V51,T16] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V35 tmp34        [V35,T30] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V36 tmp35        [V36,T31] (  2,  2   )    long  ->  r12         "argument with side effect"
+;  V37 cse0         [V37,T14] (  3,  3   )    long  ->  r15         "CSE #02: moderate"
+;  V38 cse1         [V38,T32] (  3,  1.50)    long  ->  [rbp-0x120]  spill-single-def "CSE #03: moderate"
+;  V39 cse2         [V39,T33] (  3,  1.50)    long  ->  r12         "CSE #04: moderate"
+;  V40 rat0         [V40,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V41 rat1         [V41,T11] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V42 rat2         [V42,T08] (  3,  4.40)    long  ->  rdi         "Spilling to split statement for tree"
+;  V43 rat3         [V43,T09] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V44 rat4         [V44,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V45 rat5         [V45,T05] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V46 rat6         [V46,T19] (  3,  2   )    long  ->  r12         "runtime lookup"
+;  V47 rat7         [V47,T15] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V48 rat8         [V48,T20] (  3,  2   )    long  ->  registers   "runtime lookup"
+;  V49 rat9         [V49,T16] (  3,  2.80)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V50 rat10        [V50,T21] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V51 rat11        [V51,T17] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V52 rat12        [V52,T22] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V53 rat13        [V53,T18] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 296
 
 G_M30100_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 296
        lea      rbp, [rsp+0x150]
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rdi
        mov      rbx, rdi
 						;; size=87 bbWeight=1 PerfScore 19.83
 G_M30100_IG02:
        mov      rdi, qword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0x38]
        test     r15, r15
        je       SHORT G_M30100_IG04
 						;; size=19 bbWeight=1 PerfScore 9.25
 G_M30100_IG03:
        jmp      SHORT G_M30100_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M30100_IG04:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M30100_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      r15, gword ptr [rbx+0x08]
        mov      gword ptr [rbp-0xB0], rbx
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r13, qword ptr [rsi+0x10]
        test     r13, r13
        je       SHORT G_M30100_IG07
 						;; size=41 bbWeight=1 PerfScore 12.00
 G_M30100_IG06:
        jmp      SHORT G_M30100_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M30100_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M30100_IG08:
        test     r15, r15
        je       G_M30100_IG31
        mov      gword ptr [rbp-0xD0], r15
        xor      rax, rax
        mov      gword ptr [rbp-0xC0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xB8], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
        mov      rdi, gword ptr [rbp-0xD0]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M30100_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M30100_IG09:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M30100_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M30100_IG10:
        jmp      SHORT G_M30100_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M30100_IG11:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M30100_IG12:
        mov      rax, r12
        mov      qword ptr [rbp-0x118], rax
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M30100_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0x110], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M30100_IG14:
        mov      rdi, qword ptr [rax+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rcx, qword ptr [rdi+0x18]
        test     rcx, rcx
        je       SHORT G_M30100_IG16
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M30100_IG15:
        jmp      SHORT G_M30100_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M30100_IG16:
        mov      rdi, rax
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rcx, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M30100_IG17:
        mov      qword ptr [rbp-0x120], rcx
        mov      rdx, rcx
        lea      rdi, [rbp-0x110]
        call     rdx
        cmp      eax, -1
        je       SHORT G_M30100_IG21
        mov      rdi, qword ptr [rbp-0x118]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      rax, qword ptr [rsi+0x20]
        test     rax, rax
        je       SHORT G_M30100_IG19
 						;; size=47 bbWeight=0.50 PerfScore 7.12
 G_M30100_IG18:
        mov      rdi, rax
        jmp      SHORT G_M30100_IG20
 						;; size=5 bbWeight=0.40 PerfScore 0.90
 G_M30100_IG19:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M30100_IG20:
        lea      rsi, [rbp-0xC8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M30100_IG21
        mov      r15, qword ptr [rbp-0x120]
        mov      r12, gword ptr [rbp-0xC8]
        lea      rdi, [rbp-0x110]
        call     r15
        mov      dword ptr [r12+0x10], eax
        jmp      G_M30100_IG27
 						;; size=57 bbWeight=0.50 PerfScore 6.75
 G_M30100_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M30100_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xF0], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M30100_IG23:
        mov      rdi, qword ptr [r13+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M30100_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M30100_IG24:
        jmp      SHORT G_M30100_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M30100_IG25:
        mov      rdi, r13
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M30100_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x128], rax
        movzx    rsi, byte  ptr [r15+0x1D]
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF0]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r12
        mov      rsi, gword ptr [rbp-0x128]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xC8], rax
 						;; size=121 bbWeight=0.50 PerfScore 12.75
 G_M30100_IG27:
        lea      rdi, [rbp-0xD0]
        mov      rsi, r13
        mov      rdx, gword ptr [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M30100_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xA0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M30100_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x80], ymm0
        vmovdqu  ymmword ptr [rbp-0x60], ymm0
        vmovdqu  xmmword ptr [rbp-0x40], xmm0
        lea      rdi, bword ptr [rbp-0xB0]
        mov      esi, dword ptr [rbx+0x2C]
        mov      dword ptr [rdi+0x08], esi
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB0]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r14
-						;; size=108 bbWeight=1 PerfScore 24.08
+						;; size=59 bbWeight=1 PerfScore 12.33
 G_M30100_IG30:
        vzeroupper 
        add      rsp, 296
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M30100_IG31:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 883, prolog size 84, PerfScore 143.44, instruction count 198, allocated bytes for code 883 (MethodHash=65018a6b) for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 834, prolog size 84, PerfScore 131.69, instruction count 185, allocated bytes for code 834 (MethodHash=65018a6b) for method System.Collections.Immutable.ImmutableHashSet`1+Builder[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
-49 (-5.79 % of base) - System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.__Canon]:System.Collections.Generic.IEnumerable.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.__Canon]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 4 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T06] (  3,  3   )   byref  ->  rbx         this single-def
+;  V00 this         [V00,T07] (  3,  3   )   byref  ->  rbx         this single-def
 ;  V01 TypeCtx      [V01,T01] (  5,  4.20)    long  ->  rsi         single-def
 ;  V02 OutArgs      [V02    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V04 tmp2         [V04    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V05 tmp3         [V05    ] (  4,  8   )  struct (128) [rbp-0xB0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V06 tmp4         [V06    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp5         [V07    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V08 tmp6         [V08,T00] (  4,  7   )     ref  ->  rbx         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
 ;  V09 tmp7         [V09    ] ( 14, 20   )  struct (32) [rbp-0xD0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V10 tmp8         [V10,T07] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V10 tmp8         [V10,T08] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V11 tmp9         [V11    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V13 tmp11        [V13    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V14 tmp12        [V14    ] (  0,  0   )     int  ->  zero-ref   
-;  V15 tmp13        [V15,T05] (  7,  5.40)    long  ->  r15         "Inlining Arg"
+;  V15 tmp13        [V15,T06] (  7,  5.40)    long  ->  r15         "Inlining Arg"
 ;* V16 tmp14        [V16    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V18 tmp16        [V18,T22] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V19 tmp17        [V19,T11] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V18 tmp16        [V18,T24] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;  V19 tmp17        [V19,T13] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V20 tmp18        [V20    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V21 tmp19        [V21    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V22 tmp20        [V22,T09] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;* V23 tmp21        [V23,T30] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V22 tmp20        [V22,T10] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;* V23 tmp21        [V23,T32] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V24 tmp22        [V24    ] (  3,  3   )  struct (32) [rbp-0x110]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V25 tmp23        [V25,T10] (  5,  3.40)    long  ->  r12         "Inlining Arg"
+;  V25 tmp23        [V25,T12] (  5,  3.40)    long  ->  r12         "Inlining Arg"
 ;* V26 tmp24        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V27 tmp25        [V27,T23] (  2,  2   )    long  ->  rcx         "Indirect call through function pointer"
+;  V27 tmp25        [V27,T25] (  2,  2   )    long  ->  rcx         "Indirect call through function pointer"
 ;* V28 tmp26        [V28    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V29 tmp27        [V29    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V30 tmp28        [V30,T24] (  2,  2   )    long  ->  rbx         "Indirect call through function pointer"
-;  V31 tmp29        [V31,T21] (  2,  2   )     ref  ->  r13         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V32 tmp30        [V32,T25] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V30 tmp28        [V30,T26] (  2,  2   )    long  ->  rbx         "Indirect call through function pointer"
+;  V31 tmp29        [V31,T23] (  2,  2   )     ref  ->  r13         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V32 tmp30        [V32,T27] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;  V33 tmp31        [V33    ] (  7,  7.50)     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V09._root (fldOffset=0x0)" P-DEP
 ;  V34 tmp32        [V34    ] (  9,  8   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V09._stack (fldOffset=0x8)" P-DEP
 ;  V35 tmp33        [V35    ] (  5,  6   )     ref  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V09._current (fldOffset=0x10)" P-DEP
 ;  V36 tmp34        [V36    ] (  5,  6   )     int  ->  [rbp-0xB8]  do-not-enreg[X] addr-exposed "field V09._poolUserId (fldOffset=0x18)" P-DEP
-;  V37 tmp35        [V37,T26] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V38 tmp36        [V38,T27] (  2,  2   )    long  ->  r13         "argument with side effect"
-;  V39 cse0         [V39,T12] (  3,  3   )    long  ->  r15         "CSE #01: moderate"
-;  V40 cse1         [V40,T28] (  3,  1.50)    long  ->  [rbp-0x118]  spill-single-def "CSE #02: moderate"
-;  V41 cse2         [V41,T29] (  3,  1.50)    long  ->  r13         "CSE #03: moderate"
-;  V42 rat0         [V42,T08] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V43 rat1         [V43,T03] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V44 rat2         [V44,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V45 rat3         [V45,T17] (  3,  2   )    long  ->  r13         "runtime lookup"
-;  V46 rat4         [V46,T13] (  3,  2.80)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V47 rat5         [V47,T18] (  3,  2   )    long  ->  rax         "runtime lookup"
-;  V48 rat6         [V48,T14] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V49 rat7         [V49,T19] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V50 rat8         [V50,T15] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V51 rat9         [V51,T20] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V52 rat10        [V52,T16] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V37 tmp35        [V37,T28] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V38 tmp36        [V38,T29] (  2,  2   )    long  ->  r13         "argument with side effect"
+;  V39 cse0         [V39,T14] (  3,  3   )    long  ->  r15         "CSE #01: moderate"
+;  V40 cse1         [V40,T30] (  3,  1.50)    long  ->  [rbp-0x118]  spill-single-def "CSE #02: moderate"
+;  V41 cse2         [V41,T31] (  3,  1.50)    long  ->  r13         "CSE #03: moderate"
+;  V42 rat0         [V42,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V43 rat1         [V43,T11] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V44 rat2         [V44,T09] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V45 rat3         [V45,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V46 rat4         [V46,T05] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V47 rat5         [V47,T19] (  3,  2   )    long  ->  r13         "runtime lookup"
+;  V48 rat6         [V48,T15] (  3,  2.80)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V49 rat7         [V49,T20] (  3,  2   )    long  ->  rax         "runtime lookup"
+;  V50 rat8         [V50,T16] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V51 rat9         [V51,T21] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V52 rat10        [V52,T17] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V53 rat11        [V53,T22] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V54 rat12        [V54,T18] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 280
 
 G_M60892_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 280
        lea      rbp, [rsp+0x140]
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rsi
        mov      rbx, rdi
 						;; size=87 bbWeight=1 PerfScore 19.83
 G_M60892_IG02:
        mov      rdi, qword ptr [rsi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r15, qword ptr [rdi+0x18]
        test     r15, r15
        je       SHORT G_M60892_IG04
 						;; size=16 bbWeight=1 PerfScore 7.25
 G_M60892_IG03:
        jmp      SHORT G_M60892_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M60892_IG04:
        mov      rdi, rsi
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=21 bbWeight=0.20 PerfScore 0.35
 G_M60892_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      rbx, gword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0x10]
        test     r15, r15
        je       SHORT G_M60892_IG07
 						;; size=33 bbWeight=1 PerfScore 11.00
 G_M60892_IG06:
        jmp      SHORT G_M60892_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M60892_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M60892_IG08:
        test     rbx, rbx
        je       G_M60892_IG31
        mov      gword ptr [rbp-0xD0], rbx
        xor      rax, rax
        mov      gword ptr [rbp-0xC0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xB8], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
        mov      rdi, gword ptr [rbp-0xD0]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M60892_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M60892_IG09:
        mov      rdi, qword ptr [r15+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r13, qword ptr [rdi+0x18]
        test     r13, r13
        je       SHORT G_M60892_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M60892_IG10:
        jmp      SHORT G_M60892_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M60892_IG11:
        mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M60892_IG12:
        mov      r12, r13
 						;; size=3 bbWeight=0.50 PerfScore 0.12
 G_M60892_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0x110], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M60892_IG14:
        mov      rdi, qword ptr [r12+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rax, qword ptr [rdi+0x18]
        test     rax, rax
        je       SHORT G_M60892_IG16
 						;; size=17 bbWeight=0.50 PerfScore 3.62
 G_M60892_IG15:
        jmp      SHORT G_M60892_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M60892_IG16:
        mov      rdi, r12
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M60892_IG17:
        mov      qword ptr [rbp-0x118], rax
        mov      rcx, rax
        lea      rdi, [rbp-0x110]
        call     rcx
        cmp      eax, -1
        je       SHORT G_M60892_IG21
        mov      rdi, qword ptr [r12+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M60892_IG19
 						;; size=41 bbWeight=0.50 PerfScore 6.62
 G_M60892_IG18:
        jmp      SHORT G_M60892_IG20
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M60892_IG19:
        mov      rdi, r12
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M60892_IG20:
        lea      rsi, [rbp-0xC8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M60892_IG21
        mov      rbx, qword ptr [rbp-0x118]
        mov      r13, gword ptr [rbp-0xC8]
        lea      rdi, [rbp-0x110]
        call     rbx
        mov      dword ptr [r13+0x10], eax
        jmp      G_M60892_IG27
 						;; size=55 bbWeight=0.50 PerfScore 6.75
 G_M60892_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M60892_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xF0], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M60892_IG23:
        mov      rdi, qword ptr [r15+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M60892_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M60892_IG24:
        jmp      SHORT G_M60892_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M60892_IG25:
        mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M60892_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      r12, rax
        movzx    rsi, byte  ptr [rbx+0x1D]
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF0]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r13
        mov      rsi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xC8], rax
 						;; size=113 bbWeight=0.50 PerfScore 12.00
 G_M60892_IG27:
        lea      rdi, [rbp-0xD0]
        mov      rsi, r15
        mov      rdx, gword ptr [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M60892_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xA0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M60892_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x80], ymm0
        vmovdqu  ymmword ptr [rbp-0x60], ymm0
        vmovdqu  xmmword ptr [rbp-0x40], xmm0
        mov      dword ptr [rbp-0xA8], -1
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB0]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r14
-						;; size=105 bbWeight=1 PerfScore 21.58
+						;; size=56 bbWeight=1 PerfScore 9.83
 G_M60892_IG30:
        vzeroupper 
        add      rsp, 280
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M60892_IG31:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 847, prolog size 84, PerfScore 136.14, instruction count 192, allocated bytes for code 847 (MethodHash=b1201223) for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.__Canon]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this (FullOpts)
+; Total bytes of code 798, prolog size 84, PerfScore 124.39, instruction count 179, allocated bytes for code 798 (MethodHash=b1201223) for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.__Canon]:System.Collections.Generic.IEnumerable<T>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this (FullOpts)
-49 (-5.79 % of base) - System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this
 ; Assembly listing for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 4 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T06] (  3,  3   )   byref  ->  rbx         this single-def
+;  V00 this         [V00,T07] (  3,  3   )   byref  ->  rbx         this single-def
 ;  V01 TypeCtx      [V01,T01] (  5,  4.20)    long  ->  rsi         single-def
 ;  V02 OutArgs      [V02    ] (  1,  1   )  struct (32) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T02] (  3,  6   )     ref  ->  r14         class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V04 tmp2         [V04    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V05 tmp3         [V05    ] (  4,  8   )  struct (128) [rbp-0xB0]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableHashSet`1+Enumerator[System.__Canon]>
 ;* V06 tmp4         [V06    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp5         [V07    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V08 tmp6         [V08,T00] (  4,  7   )     ref  ->  rbx         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
 ;  V09 tmp7         [V09    ] ( 14, 20   )  struct (32) [rbp-0xD0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V10 tmp8         [V10,T07] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
+;  V10 tmp8         [V10,T08] (  3,  4.40)    long  ->  rdi         "Inlining Arg"
 ;* V11 tmp9         [V11    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V13 tmp11        [V13    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V14 tmp12        [V14    ] (  0,  0   )     int  ->  zero-ref   
-;  V15 tmp13        [V15,T05] (  7,  5.40)    long  ->  r15         "Inlining Arg"
+;  V15 tmp13        [V15,T06] (  7,  5.40)    long  ->  r15         "Inlining Arg"
 ;* V16 tmp14        [V16    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V18 tmp16        [V18,T22] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V19 tmp17        [V19,T11] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+;  V18 tmp16        [V18,T24] (  2,  2   )  struct (32) [rbp-0xF0]  do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;  V19 tmp17        [V19,T13] (  3,  3   )     ref  ->  r12         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
 ;* V20 tmp18        [V20    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V21 tmp19        [V21    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V22 tmp20        [V22,T09] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;* V23 tmp21        [V23,T30] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V22 tmp20        [V22,T10] (  2,  4   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
+;* V23 tmp21        [V23,T32] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V24 tmp22        [V24    ] (  3,  3   )  struct (32) [rbp-0x110]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]>
-;  V25 tmp23        [V25,T10] (  5,  3.40)    long  ->  r12         "Inlining Arg"
+;  V25 tmp23        [V25,T12] (  5,  3.40)    long  ->  r12         "Inlining Arg"
 ;* V26 tmp24        [V26    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V27 tmp25        [V27,T23] (  2,  2   )    long  ->  rcx         "Indirect call through function pointer"
+;  V27 tmp25        [V27,T25] (  2,  2   )    long  ->  rcx         "Indirect call through function pointer"
 ;* V28 tmp26        [V28    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V29 tmp27        [V29    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V30 tmp28        [V30,T24] (  2,  2   )    long  ->  rbx         "Indirect call through function pointer"
-;  V31 tmp29        [V31,T21] (  2,  2   )     ref  ->  r13         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
-;  V32 tmp30        [V32,T25] (  2,  2   )     int  ->  rax         "Inlining Arg"
+;  V30 tmp28        [V30,T26] (  2,  2   )    long  ->  rbx         "Indirect call through function pointer"
+;  V31 tmp29        [V31,T23] (  2,  2   )     ref  ->  r13         class-hnd exact single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+;  V32 tmp30        [V32,T27] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;  V33 tmp31        [V33    ] (  7,  7.50)     ref  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V09._root (fldOffset=0x0)" P-DEP
 ;  V34 tmp32        [V34    ] (  9,  8   )     ref  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V09._stack (fldOffset=0x8)" P-DEP
 ;  V35 tmp33        [V35    ] (  5,  6   )     ref  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V09._current (fldOffset=0x10)" P-DEP
 ;  V36 tmp34        [V36    ] (  5,  6   )     int  ->  [rbp-0xB8]  do-not-enreg[X] addr-exposed "field V09._poolUserId (fldOffset=0x18)" P-DEP
-;  V37 tmp35        [V37,T26] (  2,  2   )    long  ->  rdi         "argument with side effect"
-;  V38 tmp36        [V38,T27] (  2,  2   )    long  ->  r13         "argument with side effect"
-;  V39 cse0         [V39,T12] (  3,  3   )    long  ->  r15         "CSE #01: moderate"
-;  V40 cse1         [V40,T28] (  3,  1.50)    long  ->  [rbp-0x118]  spill-single-def "CSE #02: moderate"
-;  V41 cse2         [V41,T29] (  3,  1.50)    long  ->  r13         "CSE #03: moderate"
-;  V42 rat0         [V42,T08] (  3,  4   )    long  ->  r15         "runtime lookup"
-;  V43 rat1         [V43,T03] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V44 rat2         [V44,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
-;  V45 rat3         [V45,T17] (  3,  2   )    long  ->  r13         "runtime lookup"
-;  V46 rat4         [V46,T13] (  3,  2.80)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V47 rat5         [V47,T18] (  3,  2   )    long  ->  rax         "runtime lookup"
-;  V48 rat6         [V48,T14] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V49 rat7         [V49,T19] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V50 rat8         [V50,T15] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V51 rat9         [V51,T20] (  3,  2   )    long  ->  rdi         "runtime lookup"
-;  V52 rat10        [V52,T16] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V37 tmp35        [V37,T28] (  2,  2   )    long  ->  rdi         "argument with side effect"
+;  V38 tmp36        [V38,T29] (  2,  2   )    long  ->  r13         "argument with side effect"
+;  V39 cse0         [V39,T14] (  3,  3   )    long  ->  r15         "CSE #01: moderate"
+;  V40 cse1         [V40,T30] (  3,  1.50)    long  ->  [rbp-0x118]  spill-single-def "CSE #02: moderate"
+;  V41 cse2         [V41,T31] (  3,  1.50)    long  ->  r13         "CSE #03: moderate"
+;  V42 rat0         [V42,T03] (  3,  6   )   byref  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V43 rat1         [V43,T11] (  2,  4   )   byref  ->  rdi         "argument with side effect"
+;  V44 rat2         [V44,T09] (  3,  4   )    long  ->  r15         "runtime lookup"
+;  V45 rat3         [V45,T04] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V46 rat4         [V46,T05] (  3,  5.60)    long  ->  r15         "fgMakeTemp is creating a new local variable"
+;  V47 rat5         [V47,T19] (  3,  2   )    long  ->  r13         "runtime lookup"
+;  V48 rat6         [V48,T15] (  3,  2.80)    long  ->  r13         "fgMakeTemp is creating a new local variable"
+;  V49 rat7         [V49,T20] (  3,  2   )    long  ->  rax         "runtime lookup"
+;  V50 rat8         [V50,T16] (  3,  2.80)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;  V51 rat9         [V51,T21] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V52 rat10        [V52,T17] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V53 rat11        [V53,T22] (  3,  2   )    long  ->  rdi         "runtime lookup"
+;  V54 rat12        [V54,T18] (  3,  2.80)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 280
 
 G_M47259_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 280
        lea      rbp, [rsp+0x140]
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x110], xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x30], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x30], rsi
        mov      rbx, rdi
 						;; size=87 bbWeight=1 PerfScore 19.83
 G_M47259_IG02:
        mov      rdi, qword ptr [rsi+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r15, qword ptr [rdi+0x18]
        test     r15, r15
        je       SHORT G_M47259_IG04
 						;; size=16 bbWeight=1 PerfScore 7.25
 G_M47259_IG03:
        jmp      SHORT G_M47259_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M47259_IG04:
        mov      rdi, rsi
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=21 bbWeight=0.20 PerfScore 0.35
 G_M47259_IG05:
        mov      rdi, r15
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, r15
        mov      rbx, gword ptr [rbx]
        mov      rsi, qword ptr [rdi+0x30]
        mov      rsi, qword ptr [rsi]
        mov      r15, qword ptr [rsi+0x10]
        test     r15, r15
        je       SHORT G_M47259_IG07
 						;; size=33 bbWeight=1 PerfScore 11.00
 G_M47259_IG06:
        jmp      SHORT G_M47259_IG08
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M47259_IG07:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r15, rax
 						;; size=18 bbWeight=0.20 PerfScore 0.30
 G_M47259_IG08:
        test     rbx, rbx
        je       G_M47259_IG31
        mov      gword ptr [rbp-0xD0], rbx
        xor      rax, rax
        mov      gword ptr [rbp-0xC0], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
        call     [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
        mov      dword ptr [rbp-0xB8], eax
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
        mov      rdi, gword ptr [rbp-0xD0]
        cmp      gword ptr [rdi+0x08], 0
        je       G_M47259_IG28
 						;; size=70 bbWeight=1 PerfScore 14.00
 G_M47259_IG09:
        mov      rdi, qword ptr [r15+0x30]
        mov      rdi, qword ptr [rdi]
        mov      r13, qword ptr [rdi+0x18]
        test     r13, r13
        je       SHORT G_M47259_IG11
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M47259_IG10:
        jmp      SHORT G_M47259_IG12
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M47259_IG11:
        mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      r13, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M47259_IG12:
        mov      r12, r13
 						;; size=3 bbWeight=0.50 PerfScore 0.12
 G_M47259_IG13:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0x110], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M47259_IG14:
        mov      rdi, qword ptr [r12+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rax, qword ptr [rdi+0x18]
        test     rax, rax
        je       SHORT G_M47259_IG16
 						;; size=17 bbWeight=0.50 PerfScore 3.62
 G_M47259_IG15:
        jmp      SHORT G_M47259_IG17
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M47259_IG16:
        mov      rdi, r12
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
 						;; size=18 bbWeight=0.10 PerfScore 0.15
 G_M47259_IG17:
        mov      qword ptr [rbp-0x118], rax
        mov      rcx, rax
        lea      rdi, [rbp-0x110]
        call     rcx
        cmp      eax, -1
        je       SHORT G_M47259_IG21
        mov      rdi, qword ptr [r12+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M47259_IG19
 						;; size=41 bbWeight=0.50 PerfScore 6.62
 G_M47259_IG18:
        jmp      SHORT G_M47259_IG20
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M47259_IG19:
        mov      rdi, r12
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M47259_IG20:
        lea      rsi, [rbp-0xC8]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        call     [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
        test     eax, eax
        je       SHORT G_M47259_IG21
        mov      rbx, qword ptr [rbp-0x118]
        mov      r13, gword ptr [rbp-0xC8]
        lea      rdi, [rbp-0x110]
        call     rbx
        mov      dword ptr [r13+0x10], eax
        jmp      G_M47259_IG27
 						;; size=55 bbWeight=0.50 PerfScore 6.75
 G_M47259_IG21:
        xor      rdi, rdi
        mov      gword ptr [rbp-0xC8], rdi
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M47259_IG22:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xF0], ymm0
 						;; size=16 bbWeight=0.50 PerfScore 2.50
 G_M47259_IG23:
        mov      rdi, qword ptr [r15+0x30]
        mov      rdi, qword ptr [rdi]
        mov      rdi, qword ptr [rdi+0x20]
        test     rdi, rdi
        je       SHORT G_M47259_IG25
 						;; size=16 bbWeight=0.50 PerfScore 3.62
 G_M47259_IG24:
        jmp      SHORT G_M47259_IG26
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M47259_IG25:
        mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_CLASS
        mov      rdi, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M47259_IG26:
        call     CORINFO_HELP_NEWSFAST
        mov      r12, rax
        movzx    rsi, byte  ptr [rbx+0x1D]
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        call     [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
        lea      rdi, [rsp]
        lea      rsi, [rbp-0xF0]
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x08], rcx
        add      rsi, 8
        add      rdi, 8
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rsp+0x10], rcx
        add      rsi, 8
        add      rdi, 8
        movsq    
        mov      rdi, r13
        mov      rsi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        call     [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
        mov      gword ptr [rbp-0xC8], rax
 						;; size=113 bbWeight=0.50 PerfScore 12.00
 G_M47259_IG27:
        lea      rdi, [rbp-0xD0]
        mov      rsi, r15
        mov      rdx, gword ptr [rbp-0xD0]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
        call     [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableHashSet`1+HashBucket[System.__Canon]]):this
 						;; size=29 bbWeight=0.50 PerfScore 2.50
 G_M47259_IG28:
        vmovdqu  ymm0, ymmword ptr [rbp-0xD0]
        vmovdqu  ymmword ptr [rbp-0xA0], ymm0
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M47259_IG29:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x80], ymm0
        vmovdqu  ymmword ptr [rbp-0x60], ymm0
        vmovdqu  xmmword ptr [rbp-0x40], xmm0
        mov      dword ptr [rbp-0xA8], -1
        lea      rdi, bword ptr [r14+0x08]
-       lea      rsi, bword ptr [rbp-0xB0]
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       call     CORINFO_HELP_ASSIGN_BYREF
-       movsq    
-       movsq    
-       movsq    
+       cmp      byte  ptr [rdi], dil
+       lea      rsi, [rbp-0xB0]
+       mov      edx, 80
+       call     CORINFO_HELP_ASSIGN_STRUCT
        mov      rax, r14
-						;; size=105 bbWeight=1 PerfScore 21.58
+						;; size=56 bbWeight=1 PerfScore 9.83
 G_M47259_IG30:
        vzeroupper 
        add      rsp, 280
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M47259_IG31:
        mov      edi, 0x45F
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        call     [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 847, prolog size 84, PerfScore 136.14, instruction count 192, allocated bytes for code 847 (MethodHash=8d914764) for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 798, prolog size 84, PerfScore 124.39, instruction count 179, allocated bytes for code 798 (MethodHash=8d914764) for method System.Collections.Immutable.ImmutableHashSet`1+NodeEnumerable[System.__Canon]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment