Untitled Diff

Created Diff never expires
279 removals
Words removed402
Total words1323
Words removed (%)30.39
228 lines
351 additions
Words added714
Total words1635
Words added (%)43.67
276 lines
; Assembly listing for method PromiseBenchmarks:PromiseField():this
; Assembly listing for method Program+PromiseBenchmarks:PromiseField():this (Tier1)
; Emitting BLENDED_CODE for X64 CPU with AVX - Windows
; Emitting BLENDED_CODE for X64 with AVX - Windows
; Tier-1 compilation
; Tier1 code
; optimized code
; optimized code
; rsp based frame
; rsp based frame
; partially interruptible
; partially interruptible
; No PGO data
; No PGO data
; 0 inlinees with PGO data; 25 single block inlinees; 3 inlinees without PGO data
; 3 inlinees with PGO data; 27 single block inlinees; 5 inlinees without PGO data
; Final local variable assignments
; Final local variable assignments
;
;
; V00 this [V00,T05] ( 3, 3 ) ref -> rsi this class-hnd single-def
; V00 this [V00,T03] ( 6, 6 ) ref -> rbx this class-hnd single-def
;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op
;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op
; V02 OutArgs [V02 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace"
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp"
;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp"
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp"
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp"
; V05 tmp3 [V05,T11] ( 2, 4 ) int -> rdi "impAppendStmt"
; V05 tmp3 [V05,T13] ( 2, 4 ) int -> rbp "impAppendStmt"
;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref "NewObj constructor temp"
;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp"
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill"
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill"
; V08 tmp6 [V08,T01] ( 10, 9 ) ref -> rbx class-hnd "Inline return value spill temp"
; V08 tmp6 [V08,T01] ( 10, 9 ) ref -> rdi class-hnd "Inline return value spill temp"
; V09 tmp7 [V09,T17] ( 3, 2.50) ref -> rbx class-hnd "Inline stloc first use temp"
; V09 tmp7 [V09,T19] ( 3, 2.50) ref -> rdi class-hnd single-def "Inline stloc first use temp"
; V10 tmp8 [V10,T07] ( 4, 4 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp"
; V10 tmp8 [V10,T08] ( 4, 4 ) ref -> rdi class-hnd exact single-def "NewObj constructor temp"
; V11 tmp9 [V11,T18] ( 2, 2 ) ref -> rbx class-hnd single-def "Inline return value spill temp"
;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp"
; V12 tmp10 [V12,T00] ( 6, 12 ) byref -> rdi single-def "Inlining Arg"
; V12 tmp10 [V12,T00] ( 5, 10 ) byref -> rsi single-def "Inlining Arg"
; V13 tmp11 [V13,T16] ( 3, 3 ) ref -> rbx class-hnd "Inline stloc first use temp"
; V13 tmp11 [V13,T17] ( 3, 3 ) ref -> rdi class-hnd single-def "Inline stloc first use temp"
; V14 tmp12 [V14,T06] ( 3, 5 ) byref -> rcx single-def "Inlining Arg"
; V14 tmp12 [V14,T07] ( 3, 5 ) byref -> rcx single-def "Inlining Arg"
; V15 tmp13 [V15,T09] ( 2, 4 ) byref -> rdi single-def "Inlining Arg"
;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
; V16 tmp14 [V16,T08] ( 4, 4 ) struct ( 8) [rsp+20H] do-not-enreg[SF] overlapping-fields "NewObj constructor temp"
;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info"
; V17 tmp15 [V17,T12] ( 2, 4 ) short -> rdi "Inlining Arg"
; V17 tmp15 [V17,T10] ( 4, 4 ) struct ( 8) [rsp+28H] do-not-enreg[SF] ld-addr-op "NewObj constructor temp"
; V18 tmp16 [V18,T13] ( 2, 4 ) int -> rbp "Inlining Arg"
;* V18 tmp16 [V18 ] ( 0, 0 ) short -> zero-ref "Inlining Arg"
; V19 tmp17 [V19,T03] ( 3, 6 ) byref -> rdx single-def "Inlining Arg"
; V19 tmp17 [V19,T14] ( 2, 4 ) int -> r14 "Inlining Arg"
;* V20 tmp18 [V20 ] ( 0, 0 ) struct (16) zero-ref "NewObj constructor temp"
; V20 tmp18 [V20,T04] ( 3, 6 ) byref -> rdx single-def "Inlining Arg"
; V21 tmp19 [V21,T10] ( 2, 4 ) ref -> rcx class-hnd single-def "Inlining Arg"
;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp"
; V22 tmp20 [V22,T14] ( 2, 4 ) short -> rdx "Inlining Arg"
; V22 tmp20 [V22,T11] ( 2, 4 ) ref -> rcx class-hnd single-def "Inlining Arg"
; V23 tmp21 [V23,T15] ( 4, 3 ) ref -> rcx class-hnd "Inline stloc first use temp"
; V23 tmp21 [V23,T15] ( 2, 4 ) short -> rdx "Inlining Arg"
;* V24 tmp22 [V24 ] ( 0, 0 ) ref -> zero-ref single-def V01._ref(offs=0x00) P-INDEP "field V01._ref (fldOffset=0x0)"
; V24 tmp22 [V24,T16] ( 4, 3 ) ref -> rcx class-hnd single-def "Inline stloc first use temp"
; V25 tmp23 [V25,T26] ( 2, 1.50) short -> rdx single-def V01._id(offs=0x08) P-INDEP "field V01._id (fldOffset=0x8)"
; V25 tmp23 [V25,T05] ( 3, 6 ) byref -> rdx single-def "Inlining Arg"
;* V26 tmp24 [V26 ] ( 0, 0 ) ushort -> zero-ref single-def V01._depth(offs=0x0a) P-INDEP "field V01._depth (fldOffset=0xa)"
; V26 tmp24 [V26,T12] ( 2, 4 ) ref -> rdi class-hnd single-def "dup spill"
; V27 tmp25 [V27,T19] ( 2, 2 ) ref -> rdx single-def V03._ref(offs=0x00) P-INDEP "field V03._ref (fldOffset=0x0)"
; V27 tmp25 [V27,T06] ( 6, 5.50) ref -> rdi single-def
; V28 tmp26 [V28,T21] ( 2, 2 ) int -> rbp single-def V03._deferredId(offs=0x08) P-INDEP "field V03._deferredId (fldOffset=0x8)"
; V28 tmp26 [V28,T25] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp"
; V29 tmp27 [V29,T22] ( 2, 2 ) short -> rdi single-def V03._promiseId(offs=0x0c) P-INDEP "field V03._promiseId (fldOffset=0xc)"
; V29 tmp27 [V29,T02] ( 5, 9 ) ref -> rcx class-hnd "Inlining Arg"
; V30 tmp28 [V30,T20] ( 2, 2 ) ref -> rdx single-def V06._ref(offs=0x00) P-INDEP "field V06._ref (fldOffset=0x0)"
;* V30 tmp28 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg"
; V31 tmp29 [V31,T23] ( 2, 2 ) int -> rbp single-def V06._deferredId(offs=0x08) P-INDEP "field V06._deferredId (fldOffset=0x8)"
;* V31 tmp29 [V31 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
; V32 tmp30 [V32,T24] ( 2, 2 ) short -> rdi single-def V06._promiseId(offs=0x0c) P-INDEP "field V06._promiseId (fldOffset=0xc)"
;* V32 tmp30 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info"
;* V33 tmp31 [V33 ] ( 0, 0 ) ref -> zero-ref V20._ref(offs=0x00) P-INDEP "field V20._ref (fldOffset=0x0)"
;* V33 tmp31 [V33 ] ( 0, 0 ) ref -> zero-ref single-def "field V01._ref (fldOffset=0x0)" P-INDEP
; V34 tmp32 [V34,T25] ( 2, 2 ) short -> rdx V20._id(offs=0x08) P-INDEP "field V20._id (fldOffset=0x8)"
; V34 tmp32 [V34,T24] ( 2, 1.50) short -> rdx single-def "field V01._id (fldOffset=0x8)" P-INDEP
;* V35 tmp33 [V35 ] ( 0, 0 ) ushort -> zero-ref V20._depth(offs=0x0a) P-INDEP "field V20._depth (fldOffset=0xa)"
;* V35 tmp33 [V35 ] ( 0, 0 ) ushort -> zero-ref "field V01._depth (fldOffset=0xa)" P-INDEP
; V36 tmp34 [V36,T02] ( 4, 8 ) byref -> rbx single-def "BlockOp address local"
;* V36 tmp34 [V36 ] ( 0, 0 ) ref -> zero-ref "field V03._ref (fldOffset=0x0)" P-INDEP
; V37 cse0 [V37,T04] ( 5, 5 ) byref -> rsi "CSE - aggressive"
;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "field V03._deferredId (fldOffset=0x8)" P-INDEP
;* V38 tmp36 [V38 ] ( 0, 0 ) short -> zero-ref "field V03._promiseId (fldOffset=0xc)" P-INDEP
; V39 tmp37 [V39,T20] ( 2, 2 ) ref -> rdx single-def "field V06._ref (fldOffset=0x0)" P-INDEP
; V40 tmp38 [V40,T21] ( 2, 2 ) int -> r14 single-def "field V06._deferredId (fldOffset=0x8)" P-INDEP
; V41 tmp39 [V41,T22] ( 2, 2 ) short -> rbp single-def "field V06._promiseId (fldOffset=0xc)" P-INDEP
;* V42 tmp40 [V42 ] ( 0, 0 ) ref -> zero-ref single-def "field V21._ref (fldOffset=0x0)" P-INDEP
; V43 tmp41 [V43,T23] ( 2, 2 ) short -> rdx single-def "field V21._id (fldOffset=0x8)" P-INDEP
;* V44 tmp42 [V44 ] ( 0, 0 ) ushort -> zero-ref single-def "field V21._depth (fldOffset=0xa)" P-INDEP
; V45 tmp43 [V45,T26] ( 2, 0 ) ref -> rdx single-def "argument with side effect"
; V46 cse0 [V46,T18] ( 3, 3 ) ref -> rsi "CSE - moderate"
; V47 cse1 [V47,T09] ( 4, 4 ) byref -> rbx "CSE - moderate"
;
;
; Lcl frame size = 40
; Lcl frame size = 48


G_M16091_IG01:
G_M29380_IG01:
push r14
push rdi
push rdi
push rsi
push rsi
push rbp
push rbp
push rbx
push rbx
sub rsp, 40
sub rsp, 48
vzeroupper
mov rbx, rcx
mov rsi, rcx
;; size=13 bbWeight=1 PerfScore 5.50
;; bbWeight=1 PerfScore 5.50
G_M29380_IG02:
G_M16091_IG02:
mov rcx, 0xD1FFAB1E ; box for Proto.Promises.Internal+ObjectPool+Type`1[Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]]:s_pool
mov rcx, 0xD1FFAB1E
mov rsi, gword ptr [rcx]
mov rdi, gword ptr [rcx]
add rsi, 8
add rdi, 8
lea rcx, bword ptr [rsi+08H]
cmp dword ptr [rdi], edi
lea rcx, bword ptr [rdi+8]
lock
lock
or dword ptr [rsp], 0
or dword ptr [rsp], 0
mov eax, 1
mov eax, 1
xchg dword ptr [rcx], eax
xchg dword ptr [rcx], eax
cmp eax, 1
cmp eax, 1
jne SHORT G_M16091_IG04
jne SHORT G_M29380_IG04
;; bbWeight=1 PerfScore 46.50
;; size=38 bbWeight=1 PerfScore 40.50
G_M16091_IG03:
G_M29380_IG03:
call SpinLocker:EnterCore():this
call [Proto.Promises.Internal+SpinLocker:EnterCore():this]
;; bbWeight=0.50 PerfScore 0.50
;; size=6 bbWeight=0.50 PerfScore 1.50
G_M16091_IG04:
G_M29380_IG04:
mov rbx, gword ptr [rdi]
mov rdi, gword ptr [rsi]
mov rdx, gword ptr [rbx+8]
mov rdx, gword ptr [rdi+08H]
mov rcx, rdi
mov rcx, rsi
call CORINFO_HELP_CHECKED_ASSIGN_REF
call CORINFO_HELP_CHECKED_ASSIGN_REF
add rdi, 8
xor ecx, ecx
xor ecx, ecx
mov dword ptr [rdi], ecx
mov dword ptr [rsi+08H], ecx
mov rcx, 0xD1FFAB1E
mov rcx, 0xD1FFAB1E ; const ptr
cmp rbx, gword ptr [rcx]
cmp rdi, gword ptr [rcx]
je SHORT G_M16091_IG06
je SHORT G_M29380_IG06
;; bbWeight=1 PerfScore 10.00
;; size=35 bbWeight=1 PerfScore 10.75
G_M16091_IG05:
G_M29380_IG05:
jmp SHORT G_M16091_IG07
jmp SHORT G_M29380_IG08
;; bbWeight=0.50 PerfScore 1.00
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M16091_IG06:
G_M29380_IG06:
mov rcx, 0xD1FFAB1E
mov rcx, 0xD1FFAB1E ; Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]
call CORINFO_HELP_NEWFAST
call CORINFO_HELP_NEWFAST
mov rbx, rax
mov rdi, rax
xor edx, edx
xor ecx, ecx
mov qword ptr [rsp+20H], rdx
mov qword ptr [rsp+28H], rcx
mov dword ptr [rsp+20H], 1
mov dword ptr [rsp+28H], 1
vxorps xmm0, xmm0
;; size=33 bbWeight=0.50 PerfScore 1.88
vmovss dword ptr [rsp+24H], xmm0
G_M29380_IG07:
mov rdx, qword ptr [rsp+20H]
mov dword ptr [rsp+2CH], ecx
mov qword ptr [rbx+40], rdx
mov rcx, qword ptr [rsp+28H]
mov word ptr [rbx+24], 1
mov qword ptr [rdi+28H], rcx
;; bbWeight=0.50 PerfScore 3.79
mov word ptr [rdi+18H], 1
G_M16091_IG07:
;; size=19 bbWeight=0.50 PerfScore 2.00
mov rdx, 0xD1FFAB1E
G_M29380_IG08:
mov rdx, gword ptr [rdx]
mov rcx, 0xD1FFAB1E ; const ptr
lea rcx, bword ptr [rbx+8]
mov rsi, gword ptr [rcx]
lea rcx, bword ptr [rdi+08H]
mov rdx, rsi
call CORINFO_HELP_ASSIGN_REF
call CORINFO_HELP_ASSIGN_REF
mov byte ptr [rbx+28], 0
mov byte ptr [rdi+1CH], 0
mov byte ptr [rbx+30], 0
mov byte ptr [rdi+1EH], 0
mov byte ptr [rbx+29], 0
mov byte ptr [rdi+1DH], 0
xor edx, edx
xor ecx, ecx
mov dword ptr [rbx+44], edx
mov dword ptr [rdi+2CH], ecx
movsx rdi, word ptr [rbx+24]
movsx rbp, word ptr [rdi+18H]
mov ebp, dword ptr [rbx+40]
mov r14d, dword ptr [rdi+28H]
mov rdx, rdi
lea rcx, bword ptr [rbx+08H]
call CORINFO_HELP_ASSIGN_REF
mov dword ptr [rbx+10H], r14d
mov word ptr [rbx+14H], bp
add rbx, 8
mov rdx, rbx
mov rdx, rbx
add rsi, 8
mov rbx, rsi
mov rcx, rbx
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rbx+8], ebp
mov word ptr [rbx+12], di
mov rdx, rsi
mov rcx, gword ptr [rdx]
mov rcx, gword ptr [rdx]
movsx rdx, word ptr [rdx+12]
movsx rdx, word ptr [rdx+0CH]
test rcx, rcx
test rcx, rcx
je SHORT G_M16091_IG09
je SHORT G_M29380_IG10
;; bbWeight=1 PerfScore 21.50
;; size=91 bbWeight=1 PerfScore 25.75
G_M16091_IG08:
G_M29380_IG09:
movsx rdx, dx
movsx rdx, dx
mov rax, qword ptr [rcx]
mov rax, qword ptr [rcx]
mov rax, qword ptr [rax+80]
mov rax, qword ptr [rax+50H]
call qword ptr [rax+40]PromiseRefBase:Forget(short):this
call [rax+28H]Proto.Promises.Internal+PromiseRefBase:Forget(short):this
;; bbWeight=0.50 PerfScore 3.62
;; size=14 bbWeight=0.50 PerfScore 3.62
G_M16091_IG09:
G_M29380_IG10:
mov rcx, rsi
mov rdx, rbx
call Deferred:Resolve():this
mov rdi, gword ptr [rdx]
xor eax, eax
mov edx, dword ptr [rdx+08H]
mov qword ptr [rsi], rax
mov rcx, rdi
mov qword ptr [rsi+8], rax
mov rax, qword ptr [rdi]
;; bbWeight=1 PerfScore 3.50
mov rax, qword ptr [rax+58H]
G_M16091_IG10:
call [rax+30H]Proto.Promises.Internal+PromiseRefBase+DeferredPromiseBase`1[Proto.Promises.Internal+VoidResult]:TryIncrementDeferredIdAndUnregisterCancelation(int):bool:this
add rsp, 40
test eax, eax
je SHORT G_M29380_IG14
mov rcx, gword ptr [rdi+08H]
cmp rcx, rsi
je SHORT G_M29380_IG12
;; size=35 bbWeight=1 PerfScore 16.00
G_M29380_IG11:
lea rcx, bword ptr [rdi+08H]
mov rdx, 0xD1FFAB1E ; const ptr
mov rdx, gword ptr [rdx]
call System.Threading.Interlocked:Exchange(byref,System.Object):System.Object
mov rcx, rax
;; size=25 bbWeight=0.50 PerfScore 2.00
G_M29380_IG12:
mov rdx, rdi
xor r8, r8
mov r9d, 1
mov rax, qword ptr [rcx]
mov rax, qword ptr [rax+40H]
call [rax+30H]Proto.Promises.Internal+HandleablePromiseBase:Handle(Proto.Promises.Internal+PromiseRefBase,System.Object,ubyte):this
xor ecx, ecx
mov qword ptr [rbx], rcx
mov qword ptr [rbx+08H], rcx
;; size=31 bbWeight=1 PerfScore 10.00
G_M29380_IG13:
add rsp, 48
pop rbx
pop rbx
pop rbp
pop rbp
pop rsi
pop rsi
pop rdi
pop rdi
pop r14
ret
ret
;; bbWeight=1 PerfScore 3.25
;; size=11 bbWeight=1 PerfScore 3.75
G_M29380_IG14:
mov rcx, 0xD1FFAB1E ; Proto.Promises.InvalidOperationException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov ecx, 0x247A
mov rdx, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdx, rax
mov rcx, rbx
xor r8, r8
call [Proto.Promises.InvalidOperationException:.ctor(System.String,System.String):this]
mov rcx, rbx
call CORINFO_HELP_THROW
int3
;; size=62 bbWeight=0 PerfScore 0.00


; Total bytes of code 285, prolog size 11, PerfScore 127.87, instruction count 79, allocated bytes for code 287 (MethodHash=84cbc124) for method PromiseBenchmarks:PromiseField():this
; Total bytes of code 415, prolog size 10, PerfScore 165.75, instruction count 111, allocated bytes for code 415 (MethodHash=b71e8d3b) for method Program+PromiseBenchmarks:PromiseField():this (Tier1)
; ============================================================
; ============================================================


; Assembly listing for method DeferredPromise`1:MaybeDispose():this
; Assembly listing for method Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]:MaybeDispose():this (Tier1)
; Emitting BLENDED_CODE for X64 CPU with AVX - Windows
; Emitting BLENDED_CODE for X64 with AVX - Windows
; Tier-1 compilation
; Tier1 code
; optimized code
; optimized code
; rsp based frame
; rsp based frame
; partially interruptible
; partially interruptible
; No PGO data
; No PGO data
; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data
; 1 inlinees with PGO data; 5 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
; Final local variable assignments
;
;
; V00 this [V00,T00] ( 7, 5.50) ref -> rsi this class-hnd single-def
; V00 this [V00,T00] ( 7, 5.50) ref -> rbx this class-hnd single-def
; V01 OutArgs [V01 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace"
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V02 tmp1 [V02,T01] ( 6, 6 ) byref -> rdi single-def "Inlining Arg"
; V02 tmp1 [V02,T01] ( 5, 5 ) byref -> rsi single-def "Inlining Arg"
; V03 tmp2 [V03,T02] ( 3, 3 ) byref -> rcx single-def "Inlining Arg"
; V03 tmp2 [V03,T02] ( 3, 3 ) byref -> rcx single-def "Inlining Arg"
; V04 tmp3 [V04,T03] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
;* V04 tmp3 [V04 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;
;
; Lcl frame size = 40
; Lcl frame size = 40


G_M10933_IG01:
G_M14430_IG01:
push rdi
push rsi
push rsi
push rbx
sub rsp, 40
sub rsp, 40
mov rsi, rcx
mov rbx, rcx
;; bbWeight=1 PerfScore 2.50
;; size=9 bbWeight=1 PerfScore 2.50
G_M10933_IG02:
G_M14430_IG02:
mov rcx, rsi
mov rcx, rbx
call PromiseRefBase:Dispose():this
call [Proto.Promises.Internal+PromiseRefBase:Dispose():this]
mov byte ptr [rsi+32], 0
mov byte ptr [rbx+20H], 0
cmp byte ptr [reloc classVar[0xd1ffab1e]], 0
cmp byte ptr [(reloc)], 0 ; data for Proto.Promises.Promise+Config:s_objectPoolingEnabled
je SHORT G_M10933_IG06
je SHORT G_M14430_IG06
;; bbWeight=1 PerfScore 4.25
;; size=22 bbWeight=1 PerfScore 8.25
G_M10933_IG03:
G_M14430_IG03:
mov rcx, 0xD1FFAB1E
mov rcx, 0xD1FFAB1E ; box for Proto.Promises.Internal+ObjectPool+Type`1[Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]]:s_pool
mov rdi, gword ptr [rcx]
mov rsi, gword ptr [rcx]
add rdi, 8
add rsi, 8
cmp dword ptr [rdi], edi
lea rcx, bword ptr [rsi+08H]
lea rcx, bword ptr [rdi+8]
lock
lock
or dword ptr [rsp], 0
or dword ptr [rsp], 0
mov eax, 1
mov eax, 1
xchg dword ptr [rcx], eax
xchg dword ptr [rcx], eax
cmp eax, 1
cmp eax, 1
jne SHORT G_M10933_IG04
jne SHORT G_M14430_IG04
call SpinLocker:EnterCore():this
call [Proto.Promises.Internal+SpinLocker:EnterCore():this]
;; bbWeight=0.50 PerfScore 23.75
;; size=44 bbWeight=0.50 PerfScore 21.75
G_M10933_IG04:
G_M14430_IG04:
mov rdx, gword ptr [rdi]
mov rdx, gword ptr [rsi]
lea rcx, bword ptr [rsi+8]
lea rcx, bword ptr [rbx+08H]
call CORINFO_HELP_ASSIGN_REF
call CORINFO_HELP_ASSIGN_REF
mov rcx, rdi
mov rcx, rsi
mov rdx, rsi
mov rdx, rbx
call CORINFO_HELP_CHECKED_ASSIGN_REF
call CORINFO_HELP_CHECKED_ASSIGN_REF
add rdi, 8
xor ecx, ecx
xor ecx, ecx
mov dword ptr [rdi], ecx
mov dword ptr [rsi+08H], ecx
;; bbWeight=0.50 PerfScore 3.25
;; size=28 bbWeight=0.50 PerfScore 3.12
G_M10933_IG05:
G_M14430_IG05:
add rsp, 40
add rsp, 40
pop rbx
pop rsi
pop rsi
pop rdi
ret
ret
;; bbWeight=0.50 PerfScore 1.12
;; size=7 bbWeight=0.50 PerfScore 1.12
G_M10933_IG06:
G_M14430_IG06:
mov rcx, rsi
mov rcx, rbx
;; bbWeight=0.50 PerfScore 0.12
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M10933_IG07:
G_M14430_IG07:
add rsp, 40
add rsp, 40
pop rbx
pop rsi
pop rsi
pop rdi
tail.jmp [System.GC:SuppressFinalize(System.Object)]
jmp GC:SuppressFinalize(Object)
;; size=12 bbWeight=0.50 PerfScore 1.62
;; bbWeight=0.50 PerfScore 1.62


; Total bytes of code 127, prolog size 6, PerfScore 49.33, instruction count 39, allocated bytes for code 127 (MethodHash=09b7d54a) for method DeferredPromise`1:MaybeDispose():this
; Total bytes of code 125, prolog size 6, PerfScore 51.00, instruction count 37, allocated bytes for code 125 (MethodHash=9701c7a1) for method Proto.Promises.Internal+PromiseRefBase+DeferredPromise`1[Proto.Promises.Internal+VoidResult]:MaybeDispose():this (Tier1)
; ============================================================
; ============================================================