-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)