forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[X64] [EgorBo] JIT: Bulk copy of byrefs #362
Comments
Top method improvements-52 (-9.40 % of base) - System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 13 single block inlinees; 7 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T03] ( 3, 3 ) ref -> rbx this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
+; V00 this [V00,T04] ( 3, 3 ) ref -> rbx this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V02 tmp1 [V02,T01] ( 3, 6 ) ref -> r15 class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
; V03 tmp2 [V03,T02] ( 3, 6 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.DictionaryEnumerator`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
; V04 tmp3 [V04 ] ( 4, 8 ) struct (160) [rbp-0xC0] do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
; V05 tmp4 [V05,T00] ( 4, 7 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
; V06 tmp5 [V06 ] ( 14, 20 ) struct (32) [rbp-0xE0] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
;* V07 tmp6 [V07 ] ( 0, 0 ) byref -> zero-ref
;* V08 tmp7 [V08 ] ( 0, 0 ) byref -> zero-ref
;* V09 tmp8 [V09 ] ( 0, 0 ) int -> zero-ref
;* V10 tmp9 [V10 ] ( 0, 0 ) struct (32) zero-ref do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-; V11 tmp10 [V11,T07] ( 3, 3 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
-; V12 tmp11 [V12,T05] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;* V13 tmp12 [V13,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+; V11 tmp10 [V11,T09] ( 3, 3 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
+; V12 tmp11 [V12,T06] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
+;* V13 tmp12 [V13,T12] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V14 tmp13 [V14 ] ( 0, 0 ) struct (32) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-; V15 tmp14 [V15,T08] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+; V15 tmp14 [V15,T10] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V16 tmp15 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V17 tmp16 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
-; V18 tmp17 [V18,T04] ( 4, 4 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+; V18 tmp17 [V18,T05] ( 4, 4 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V19 tmp18 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V20 tmp19 [V20 ] ( 0, 0 ) struct (32) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
;* V21 tmp20 [V21 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V22 tmp21 [V22,T06] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
+; V22 tmp21 [V22,T07] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
; V23 tmp22 [V23 ] ( 5, 5.50) ref -> [rbp-0xE0] do-not-enreg[X] addr-exposed "field V06._root (fldOffset=0x0)" P-DEP
; V24 tmp23 [V24 ] ( 7, 6 ) ref -> [rbp-0xD8] do-not-enreg[X] addr-exposed "field V06._stack (fldOffset=0x8)" P-DEP
; V25 tmp24 [V25 ] ( 3, 4 ) ref -> [rbp-0xD0] do-not-enreg[X] addr-exposed "field V06._current (fldOffset=0x10)" P-DEP
; V26 tmp25 [V26 ] ( 5, 5 ) int -> [rbp-0xC8] do-not-enreg[X] addr-exposed "field V06._poolUserId (fldOffset=0x18)" P-DEP
;* V27 tmp26 [V27 ] ( 0, 0 ) ref -> zero-ref "field V14._root (fldOffset=0x0)" P-INDEP
;* V28 tmp27 [V28 ] ( 0, 0 ) ref -> zero-ref "field V14._stack (fldOffset=0x8)" P-INDEP
;* V29 tmp28 [V29 ] ( 0, 0 ) ref -> zero-ref "field V14._current (fldOffset=0x10)" P-INDEP
-; V30 tmp29 [V30,T09] ( 3, 1.50) int -> r14 "field V14._poolUserId (fldOffset=0x18)" P-INDEP
+; V30 tmp29 [V30,T11] ( 3, 1.50) int -> r14 "field V14._poolUserId (fldOffset=0x18)" P-INDEP
;* V31 tmp30 [V31 ] ( 0, 0 ) ref -> zero-ref single-def "field V20._root (fldOffset=0x0)" P-INDEP
;* V32 tmp31 [V32 ] ( 0, 0 ) ref -> zero-ref single-def "field V20._stack (fldOffset=0x8)" P-INDEP
;* V33 tmp32 [V33 ] ( 0, 0 ) ref -> zero-ref single-def "field V20._current (fldOffset=0x10)" P-INDEP
;* V34 tmp33 [V34 ] ( 0, 0 ) int -> zero-ref "field V20._poolUserId (fldOffset=0x18)" P-INDEP
;* V35 tmp34 [V35 ] ( 0, 0 ) ref -> zero-ref single-def "V10.[000..008)"
;* V36 tmp35 [V36 ] ( 0, 0 ) ref -> zero-ref single-def "V10.[008..016)"
;* V37 tmp36 [V37 ] ( 0, 0 ) ref -> zero-ref single-def "V10.[016..024)"
-; V38 tmp37 [V38,T11] ( 2, 1 ) int -> r14 "V10.[024..028)"
+; V38 tmp37 [V38,T13] ( 2, 1 ) int -> r14 "V10.[024..028)"
+; V39 rat0 [V39,T03] ( 3, 6 ) byref -> rdi "fgMakeTemp is creating a new local variable"
+; V40 rat1 [V40,T08] ( 2, 4 ) byref -> rdi "argument with side effect"
;
; Lcl frame size = 192
G_M46956_IG01:
push rbp
push r15
push r14
push r13
push rbx
sub rsp, 192
lea rbp, [rsp+0xE0]
vxorps xmm8, xmm8, xmm8
mov rax, -192
vmovdqa xmmword ptr [rbp+rax-0x20], xmm8
vmovdqa xmmword ptr [rbp+rax-0x10], xmm8
vmovdqa xmmword ptr [rax+rbp], xmm8
add rax, 48
jne SHORT -5 instr
mov rbx, rdi
;; size=64 bbWeight=1 PerfScore 13.83
G_M46956_IG02:
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov rbx, gword ptr [rbx+0x08]
test rbx, rbx
je G_M46956_IG09
mov gword ptr [rbp-0xE0], rbx
xor rax, rax
mov gword ptr [rbp-0xD0], rax
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
call [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
mov dword ptr [rbp-0xC8], eax
xor rsi, rsi
mov gword ptr [rbp-0xD8], rsi
mov rsi, gword ptr [rbp-0xE0]
cmp gword ptr [rsi+0x08], 0
je G_M46956_IG06
;; size=92 bbWeight=1 PerfScore 17.50
G_M46956_IG03:
mov r14d, dword ptr [rbp-0xC8]
cmp r14d, -1
je SHORT G_M46956_IG04
lea rsi, [rbp-0xD8]
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
call [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
test eax, eax
je SHORT G_M46956_IG04
mov rdi, gword ptr [rbp-0xD8]
mov dword ptr [rdi+0x10], r14d
jmp SHORT G_M46956_IG05
;; size=59 bbWeight=0.50 PerfScore 5.75
G_M46956_IG04:
xor rdi, rdi
mov gword ptr [rbp-0xD8], rdi
mov r14d, dword ptr [rbp-0xC8]
mov rdi, 0xD1FFAB1E ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]
call CORINFO_HELP_NEWSFAST
mov r13, rax
movzx rsi, byte ptr [rbx+0x1D]
mov rdi, r13
mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
call [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]
call CORINFO_HELP_NEWSFAST
mov rbx, rax
lea rdi, bword ptr [rbx+0x08]
mov rsi, r13
call CORINFO_HELP_ASSIGN_REF
mov dword ptr [rbx+0x10], r14d
mov gword ptr [rbp-0xD8], rbx
;; size=95 bbWeight=0.50 PerfScore 7.25
G_M46956_IG05:
lea rdi, [rbp-0xE0]
mov rsi, gword ptr [rbp-0xE0]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
call [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
;; size=26 bbWeight=0.50 PerfScore 2.38
G_M46956_IG06:
vmovdqu ymm0, ymmword ptr [rbp-0xE0]
vmovdqu ymmword ptr [rbp-0xB0], ymm0
;; size=16 bbWeight=1 PerfScore 5.00
G_M46956_IG07:
vxorps ymm0, ymm0, ymm0
vmovdqu ymmword ptr [rbp-0x90], ymm0
vmovdqu ymmword ptr [rbp-0x70], ymm0
vmovdqu ymmword ptr [rbp-0x50], ymm0
vmovdqu xmmword ptr [rbp-0x30], xmm0
mov dword ptr [rbp-0xB8], -1
lea rdi, bword ptr [r15+0x08]
- lea rsi, bword ptr [rbp-0xC0]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- mov ecx, 5
- rep movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- movsq
+ cmp byte ptr [rdi], dil
+ lea rsi, [rbp-0xC0]
+ mov edx, 72
+ call CORINFO_HELP_ASSIGN_STRUCT
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.DictionaryEnumerator`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rsi, r15
lea rdi, bword ptr [rbx+0x08]
call CORINFO_HELP_ASSIGN_REF
mov rax, rbx
- ;; size=146 bbWeight=1 PerfScore 50.08
+ ;; size=94 bbWeight=1 PerfScore 14.08
G_M46956_IG08:
vzeroupper
add rsp, 192
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=19 bbWeight=1 PerfScore 4.75
G_M46956_IG09:
mov edi, 0x45F
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
call [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
int3
;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 553, prolog size 61, PerfScore 106.54, instruction count 115, allocated bytes for code 553 (MethodHash=0c354893) for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts)
+; Total bytes of code 501, prolog size 61, PerfScore 70.54, instruction count 101, allocated bytes for code 501 (MethodHash=0c354893) for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IDictionary.GetEnumerator():System.Collections.IDictionaryEnumerator:this (FullOpts) -52 (-9.94 % of base) - System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 11 single block inlinees; 6 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 3, 3 ) ref -> rbx this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
+; V00 this [V00,T03] ( 3, 3 ) ref -> rbx this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V02 tmp1 [V02,T01] ( 3, 6 ) ref -> r15 class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
; V03 tmp2 [V03 ] ( 4, 8 ) struct (160) [rbp-0xC0] do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
; V04 tmp3 [V04,T00] ( 4, 7 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
; V05 tmp4 [V05 ] ( 14, 20 ) struct (32) [rbp-0xE0] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
;* V06 tmp5 [V06 ] ( 0, 0 ) byref -> zero-ref
;* V07 tmp6 [V07 ] ( 0, 0 ) byref -> zero-ref
;* V08 tmp7 [V08 ] ( 0, 0 ) int -> zero-ref
;* V09 tmp8 [V09 ] ( 0, 0 ) struct (32) zero-ref do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-; V10 tmp9 [V10,T05] ( 3, 3 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
-; V11 tmp10 [V11,T04] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;* V12 tmp11 [V12,T08] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+; V10 tmp9 [V10,T07] ( 3, 3 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
+; V11 tmp10 [V11,T05] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
+;* V12 tmp11 [V12,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V13 tmp12 [V13 ] ( 0, 0 ) struct (32) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-; V14 tmp13 [V14,T06] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+; V14 tmp13 [V14,T08] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V15 tmp14 [V15 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V16 tmp15 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
-; V17 tmp16 [V17,T03] ( 4, 4 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+; V17 tmp16 [V17,T04] ( 4, 4 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V18 tmp17 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V19 tmp18 [V19 ] ( 0, 0 ) struct (32) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V21 tmp20 [V21 ] ( 5, 5.50) ref -> [rbp-0xE0] do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
; V22 tmp21 [V22 ] ( 7, 6 ) ref -> [rbp-0xD8] do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
; V23 tmp22 [V23 ] ( 3, 4 ) ref -> [rbp-0xD0] do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
; V24 tmp23 [V24 ] ( 5, 5 ) int -> [rbp-0xC8] do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
;* V25 tmp24 [V25 ] ( 0, 0 ) ref -> zero-ref "field V13._root (fldOffset=0x0)" P-INDEP
;* V26 tmp25 [V26 ] ( 0, 0 ) ref -> zero-ref "field V13._stack (fldOffset=0x8)" P-INDEP
;* V27 tmp26 [V27 ] ( 0, 0 ) ref -> zero-ref "field V13._current (fldOffset=0x10)" P-INDEP
-; V28 tmp27 [V28,T07] ( 3, 1.50) int -> r14 "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+; V28 tmp27 [V28,T09] ( 3, 1.50) int -> r14 "field V13._poolUserId (fldOffset=0x18)" P-INDEP
;* V29 tmp28 [V29 ] ( 0, 0 ) ref -> zero-ref single-def "field V19._root (fldOffset=0x0)" P-INDEP
;* V30 tmp29 [V30 ] ( 0, 0 ) ref -> zero-ref single-def "field V19._stack (fldOffset=0x8)" P-INDEP
;* V31 tmp30 [V31 ] ( 0, 0 ) ref -> zero-ref single-def "field V19._current (fldOffset=0x10)" P-INDEP
;* V32 tmp31 [V32 ] ( 0, 0 ) int -> zero-ref "field V19._poolUserId (fldOffset=0x18)" P-INDEP
;* V33 tmp32 [V33 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[000..008)"
;* V34 tmp33 [V34 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[008..016)"
;* V35 tmp34 [V35 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[016..024)"
-; V36 tmp35 [V36,T09] ( 2, 1 ) int -> r14 "V09.[024..028)"
+; V36 tmp35 [V36,T11] ( 2, 1 ) int -> r14 "V09.[024..028)"
+; V37 rat0 [V37,T02] ( 3, 6 ) byref -> rdi "fgMakeTemp is creating a new local variable"
+; V38 rat1 [V38,T06] ( 2, 4 ) byref -> rdi "argument with side effect"
;
; Lcl frame size = 192
G_M12866_IG01:
push rbp
push r15
push r14
push r13
push rbx
sub rsp, 192
lea rbp, [rsp+0xE0]
vxorps xmm8, xmm8, xmm8
mov rax, -192
vmovdqa xmmword ptr [rbp+rax-0x20], xmm8
vmovdqa xmmword ptr [rbp+rax-0x10], xmm8
vmovdqa xmmword ptr [rax+rbp], xmm8
add rax, 48
jne SHORT -5 instr
mov rbx, rdi
;; size=64 bbWeight=1 PerfScore 13.83
G_M12866_IG02:
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov rbx, gword ptr [rbx+0x08]
test rbx, rbx
je G_M12866_IG09
mov gword ptr [rbp-0xE0], rbx
xor rax, rax
mov gword ptr [rbp-0xD0], rax
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
call [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
mov dword ptr [rbp-0xC8], eax
xor rsi, rsi
mov gword ptr [rbp-0xD8], rsi
mov rsi, gword ptr [rbp-0xE0]
cmp gword ptr [rsi+0x08], 0
je G_M12866_IG06
;; size=92 bbWeight=1 PerfScore 17.50
G_M12866_IG03:
mov r14d, dword ptr [rbp-0xC8]
cmp r14d, -1
je SHORT G_M12866_IG04
lea rsi, [rbp-0xD8]
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
call [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
test eax, eax
je SHORT G_M12866_IG04
mov rdi, gword ptr [rbp-0xD8]
mov dword ptr [rdi+0x10], r14d
jmp SHORT G_M12866_IG05
;; size=59 bbWeight=0.50 PerfScore 5.75
G_M12866_IG04:
xor rdi, rdi
mov gword ptr [rbp-0xD8], rdi
mov r14d, dword ptr [rbp-0xC8]
mov rdi, 0xD1FFAB1E ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]
call CORINFO_HELP_NEWSFAST
mov r13, rax
movzx rsi, byte ptr [rbx+0x1D]
mov rdi, r13
mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
call [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]
call CORINFO_HELP_NEWSFAST
mov rbx, rax
lea rdi, bword ptr [rbx+0x08]
mov rsi, r13
call CORINFO_HELP_ASSIGN_REF
mov dword ptr [rbx+0x10], r14d
mov gword ptr [rbp-0xD8], rbx
;; size=95 bbWeight=0.50 PerfScore 7.25
G_M12866_IG05:
lea rdi, [rbp-0xE0]
mov rsi, gword ptr [rbp-0xE0]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
call [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
;; size=26 bbWeight=0.50 PerfScore 2.38
G_M12866_IG06:
vmovdqu ymm0, ymmword ptr [rbp-0xE0]
vmovdqu ymmword ptr [rbp-0xB0], ymm0
;; size=16 bbWeight=1 PerfScore 5.00
G_M12866_IG07:
vxorps ymm0, ymm0, ymm0
vmovdqu ymmword ptr [rbp-0x90], ymm0
vmovdqu ymmword ptr [rbp-0x70], ymm0
vmovdqu ymmword ptr [rbp-0x50], ymm0
vmovdqu xmmword ptr [rbp-0x30], xmm0
mov dword ptr [rbp-0xB8], -1
lea rdi, bword ptr [r15+0x08]
- lea rsi, bword ptr [rbp-0xC0]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- mov ecx, 5
- rep movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- movsq
+ cmp byte ptr [rdi], dil
+ lea rsi, [rbp-0xC0]
+ mov edx, 72
+ call CORINFO_HELP_ASSIGN_STRUCT
mov rax, r15
- ;; size=116 bbWeight=1 PerfScore 46.83
+ ;; size=64 bbWeight=1 PerfScore 10.83
G_M12866_IG08:
vzeroupper
add rsp, 192
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=19 bbWeight=1 PerfScore 4.75
G_M12866_IG09:
mov edi, 0x45F
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
call [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
int3
;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 523, prolog size 61, PerfScore 103.29, instruction count 109, allocated bytes for code 523 (MethodHash=8ba9cdbd) for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts)
+; Total bytes of code 471, prolog size 61, PerfScore 67.29, instruction count 95, allocated bytes for code 471 (MethodHash=8ba9cdbd) for method System.Collections.Immutable.ImmutableDictionary`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.IEnumerable.GetEnumerator():System.Collections.IEnumerator:this (FullOpts) -52 (-9.35 % of base) - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:this ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 5, 5 ) ref -> rbx this class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V02 tmp1 [V02,T02] ( 3, 6 ) ref -> r15 class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
; V03 tmp2 [V03 ] ( 5, 10 ) struct (160) [rbp-0xC8] do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]>
; V04 tmp3 [V04,T01] ( 4, 7 ) ref -> r14 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
; V05 tmp4 [V05 ] ( 14, 20 ) struct (32) [rbp-0xE8] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
;* V06 tmp5 [V06 ] ( 0, 0 ) byref -> zero-ref
-; V07 tmp6 [V07,T06] ( 2, 2 ) byref -> rcx single-def
-; V08 tmp7 [V08,T08] ( 2, 2 ) int -> rdi
+; V07 tmp6 [V07,T08] ( 2, 2 ) byref -> rdi single-def
+; V08 tmp7 [V08,T10] ( 2, 2 ) int -> rsi
;* V09 tmp8 [V09 ] ( 0, 0 ) struct (32) zero-ref do-not-enreg[S] "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-; V10 tmp9 [V10,T05] ( 3, 3 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
-; V11 tmp10 [V11,T04] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-;* V12 tmp11 [V12,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+; V10 tmp9 [V10,T07] ( 3, 3 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]>
+; V11 tmp10 [V11,T05] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
+;* V12 tmp11 [V12,T12] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V13 tmp12 [V13 ] ( 0, 0 ) struct (32) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
-; V14 tmp13 [V14,T07] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+; V14 tmp13 [V14,T09] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V15 tmp14 [V15 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V16 tmp15 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
-; V17 tmp16 [V17,T03] ( 4, 4 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
+; V17 tmp16 [V17,T04] ( 4, 4 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V18 tmp17 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]>
;* V19 tmp18 [V19 ] ( 0, 0 ) struct (32) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]>
;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V21 tmp20 [V21 ] ( 5, 5.50) ref -> [rbp-0xE8] do-not-enreg[X] addr-exposed "field V05._root (fldOffset=0x0)" P-DEP
; V22 tmp21 [V22 ] ( 7, 6 ) ref -> [rbp-0xE0] do-not-enreg[X] addr-exposed "field V05._stack (fldOffset=0x8)" P-DEP
; V23 tmp22 [V23 ] ( 3, 4 ) ref -> [rbp-0xD8] do-not-enreg[X] addr-exposed "field V05._current (fldOffset=0x10)" P-DEP
; V24 tmp23 [V24 ] ( 5, 5 ) int -> [rbp-0xD0] do-not-enreg[X] addr-exposed "field V05._poolUserId (fldOffset=0x18)" P-DEP
;* V25 tmp24 [V25 ] ( 0, 0 ) ref -> zero-ref "field V13._root (fldOffset=0x0)" P-INDEP
;* V26 tmp25 [V26 ] ( 0, 0 ) ref -> zero-ref "field V13._stack (fldOffset=0x8)" P-INDEP
;* V27 tmp26 [V27 ] ( 0, 0 ) ref -> zero-ref "field V13._current (fldOffset=0x10)" P-INDEP
-; V28 tmp27 [V28,T09] ( 3, 1.50) int -> r13 "field V13._poolUserId (fldOffset=0x18)" P-INDEP
+; V28 tmp27 [V28,T11] ( 3, 1.50) int -> r13 "field V13._poolUserId (fldOffset=0x18)" P-INDEP
;* V29 tmp28 [V29 ] ( 0, 0 ) ref -> zero-ref single-def "field V19._root (fldOffset=0x0)" P-INDEP
;* V30 tmp29 [V30 ] ( 0, 0 ) ref -> zero-ref single-def "field V19._stack (fldOffset=0x8)" P-INDEP
;* V31 tmp30 [V31 ] ( 0, 0 ) ref -> zero-ref single-def "field V19._current (fldOffset=0x10)" P-INDEP
;* V32 tmp31 [V32 ] ( 0, 0 ) int -> zero-ref "field V19._poolUserId (fldOffset=0x18)" P-INDEP
;* V33 tmp32 [V33 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[000..008)"
;* V34 tmp33 [V34 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[008..016)"
;* V35 tmp34 [V35 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[016..024)"
-; V36 tmp35 [V36,T11] ( 2, 1 ) int -> r13 "V09.[024..028)"
+; V36 tmp35 [V36,T13] ( 2, 1 ) int -> r13 "V09.[024..028)"
+; V37 rat0 [V37,T03] ( 3, 6 ) byref -> rdi "fgMakeTemp is creating a new local variable"
+; V38 rat1 [V38,T06] ( 2, 4 ) byref -> rdi "argument with side effect"
;
; Lcl frame size = 200
G_M25738_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 200
lea rbp, [rsp+0xF0]
xor eax, eax
mov qword ptr [rbp-0xE8], rax
vxorps xmm8, xmm8, xmm8
vmovdqu ymmword ptr [rbp-0xE0], ymm8
vmovdqu ymmword ptr [rbp-0xC0], ymm8
vmovdqu ymmword ptr [rbp-0xA0], ymm8
vmovdqu ymmword ptr [rbp-0x80], ymm8
vmovdqu ymmword ptr [rbp-0x60], ymm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0x30], rax
mov rbx, rdi
;; size=85 bbWeight=1 PerfScore 21.58
G_M25738_IG02:
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.Numerics.Vector`1[float],System.Nullable`1[int]]
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov r14, gword ptr [rbx+0x08]
mov gword ptr [rbp-0xC8], rbx
test r14, r14
je G_M25738_IG09
mov gword ptr [rbp-0xE8], r14
xor rax, rax
mov gword ptr [rbp-0xD8], rax
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
call [rax]System.Collections.Immutable.SecureObjectPool:NewId():int
mov dword ptr [rbp-0xD0], eax
xor rsi, rsi
mov gword ptr [rbp-0xE0], rsi
mov rsi, gword ptr [rbp-0xE8]
cmp gword ptr [rsi+0x08], 0
je G_M25738_IG06
;; size=99 bbWeight=1 PerfScore 18.50
G_M25738_IG03:
mov r13d, dword ptr [rbp-0xD0]
cmp r13d, -1
je SHORT G_M25738_IG04
lea rsi, [rbp-0xE0]
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.AllocFreeConcurrentStack`1[System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
call [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
test eax, eax
je SHORT G_M25738_IG04
mov rdi, gword ptr [rbp-0xE0]
mov dword ptr [rdi+0x10], r13d
jmp SHORT G_M25738_IG05
;; size=59 bbWeight=0.50 PerfScore 5.75
G_M25738_IG04:
xor rdi, rdi
mov gword ptr [rbp-0xE0], rdi
mov r13d, dword ptr [rbp-0xD0]
mov rdi, 0xD1FFAB1E ; System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]
call CORINFO_HELP_NEWSFAST
mov r12, rax
movzx rsi, byte ptr [r14+0x1D]
mov rdi, r12
mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
call [rax]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.SecurePooledObject`1[System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]]]]
call CORINFO_HELP_NEWSFAST
mov r14, rax
lea rdi, bword ptr [r14+0x08]
mov rsi, r12
call CORINFO_HELP_ASSIGN_REF
mov dword ptr [r14+0x10], r13d
mov gword ptr [rbp-0xE0], r14
;; size=95 bbWeight=0.50 PerfScore 7.25
G_M25738_IG05:
lea rdi, [rbp-0xE8]
mov rsi, gword ptr [rbp-0xE8]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
call [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.Numerics.Vector`1[float],System.Nullable`1[int]]]):this
;; size=26 bbWeight=0.50 PerfScore 2.38
G_M25738_IG06:
vmovdqu ymm0, ymmword ptr [rbp-0xE8]
vmovdqu ymmword ptr [rbp-0xB8], ymm0
;; size=16 bbWeight=1 PerfScore 5.00
G_M25738_IG07:
vxorps ymm0, ymm0, ymm0
vmovdqu ymmword ptr [rbp-0x98], ymm0
vmovdqu ymmword ptr [rbp-0x78], ymm0
vmovdqu ymmword ptr [rbp-0x58], ymm0
vmovdqu xmmword ptr [rbp-0x38], xmm0
- lea rcx, bword ptr [rbp-0xC8]
- mov edi, dword ptr [rbx+0x2C]
- mov dword ptr [rcx+0x08], edi
+ lea rdi, bword ptr [rbp-0xC8]
+ mov esi, dword ptr [rbx+0x2C]
+ mov dword ptr [rdi+0x08], esi
lea rdi, bword ptr [r15+0x08]
- lea rsi, bword ptr [rbp-0xC8]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- mov ecx, 5
- rep movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- movsq
+ cmp byte ptr [rdi], dil
+ lea rsi, [rbp-0xC8]
+ mov edx, 72
+ call CORINFO_HELP_ASSIGN_STRUCT
mov rax, r15
- ;; size=119 bbWeight=1 PerfScore 49.33
+ ;; size=67 bbWeight=1 PerfScore 13.33
G_M25738_IG08:
vzeroupper
add rsp, 200
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=21 bbWeight=1 PerfScore 5.25
G_M25738_IG09:
mov edi, 0x45F
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
call [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
int3
;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 556, prolog size 82, PerfScore 115.04, instruction count 117, allocated bytes for code 556 (MethodHash=b1859b75) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:this (FullOpts)
+; Total bytes of code 504, prolog size 82, PerfScore 79.04, instruction count 103, allocated bytes for code 504 (MethodHash=b1859b75) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TValue>>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]]:this (FullOpts) Larger list of diffs: https://gist.github.com/MihuBot/9664169c61236544050564bd3af95e49 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Build completed in 32 minutes.
dotnet/runtime#101761
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: