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
[JitDiff X64] [hez2010] JIT: Devirtualization and inlining for GVM #999
Comments
Top method regressions514 (158.15 % of base) - Microsoft.Extensions.Hosting.Internal.ConsoleLifetime:OnApplicationStarted():this ; Assembly listing for method Microsoft.Extensions.Hosting.Internal.ConsoleLifetime:OnApplicationStarted():this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 18 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 21 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 7, 7 ) ref -> rbx this class-hnd single-def <Microsoft.Extensions.Hosting.Internal.ConsoleLifetime>
-; V01 OutArgs [V01 ] ( 1, 1 ) struct ( 8) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <UNNAMED>
-; V02 tmp1 [V02,T03] ( 2, 4 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
-; V03 tmp2 [V03,T01] ( 3, 6 ) ref -> r14 class-hnd exact single-def "NewArr temp" <System.Object[]>
-; V04 tmp3 [V04,T04] ( 2, 4 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
-; V05 tmp4 [V05,T05] ( 2, 4 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.String>
-; V06 tmp5 [V06,T02] ( 3, 6 ) ref -> r14 class-hnd exact single-def "NewArr temp" <System.Object[]>
-; V07 tmp6 [V07,T06] ( 2, 4 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
-; V08 tmp7 [V08,T07] ( 2, 4 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.String>
-; V09 tmp8 [V09,T08] ( 2, 4 ) ref -> rdx class-hnd single-def "Inlining Arg" <System.Object[]>
+; V01 OutArgs [V01 ] ( 1, 1 ) struct (24) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <UNNAMED>
+; V02 tmp1 [V02,T01] ( 4, 8 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
+; V03 tmp2 [V03,T04] ( 3, 6 ) ref -> r13 class-hnd exact single-def "NewArr temp" <System.Object[]>
+; V04 tmp3 [V04,T02] ( 4, 8 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
+; V05 tmp4 [V05,T08] ( 2, 4 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.String>
+; V06 tmp5 [V06,T05] ( 3, 6 ) ref -> r13 class-hnd exact single-def "NewArr temp" <System.Object[]>
+; V07 tmp6 [V07,T03] ( 4, 8 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
+; V08 tmp7 [V08,T09] ( 2, 4 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.String>
+; V09 tmp8 [V09,T10] ( 2, 4 ) ref -> rdx class-hnd single-def "Inlining Arg" <System.Object[]>
;* V10 tmp9 [V10 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <Microsoft.Extensions.Logging.EventId>
;* V11 tmp10 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.EventId>
-;* V12 tmp11 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <Microsoft.Extensions.Logging.EventId>
-;* V13 tmp12 [V13 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.EventId>
+; V12 tmp11 [V12 ] ( 2, 4 ) struct (24) [rbp-0x40] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.FormattedLogValues>
+; V13 tmp12 [V13,T14] ( 2, 4 ) long -> r13 "VirtualCall through function pointer"
;* V14 tmp13 [V14 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <Microsoft.Extensions.Logging.EventId>
;* V15 tmp14 [V15 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.EventId>
-;* V16 tmp15 [V16 ] ( 0, 0 ) ref -> zero-ref "field V10.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V17 tmp16 [V17 ] ( 0, 0 ) int -> zero-ref "field V10.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
-;* V18 tmp17 [V18,T09] ( 0, 0 ) ref -> zero-ref single-def "field V11.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V19 tmp18 [V19,T12] ( 0, 0 ) int -> zero-ref single-def "field V11.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
-;* V20 tmp19 [V20 ] ( 0, 0 ) ref -> zero-ref "field V12.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V21 tmp20 [V21 ] ( 0, 0 ) int -> zero-ref "field V12.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
-;* V22 tmp21 [V22,T10] ( 0, 0 ) ref -> zero-ref single-def "field V13.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V23 tmp22 [V23,T13] ( 0, 0 ) int -> zero-ref single-def "field V13.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
-;* V24 tmp23 [V24 ] ( 0, 0 ) ref -> zero-ref "field V14.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V25 tmp24 [V25 ] ( 0, 0 ) int -> zero-ref "field V14.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
-;* V26 tmp25 [V26,T11] ( 0, 0 ) ref -> zero-ref single-def "field V15.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V27 tmp26 [V27,T14] ( 0, 0 ) int -> zero-ref single-def "field V15.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V16 tmp15 [V16 ] ( 2, 4 ) struct (24) [rbp-0x58] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.FormattedLogValues>
+; V17 tmp16 [V17,T15] ( 2, 4 ) long -> rax "VirtualCall through function pointer"
+;* V18 tmp17 [V18 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <Microsoft.Extensions.Logging.EventId>
+;* V19 tmp18 [V19 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.EventId>
+; V20 tmp19 [V20 ] ( 2, 4 ) struct (24) [rbp-0x70] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.FormattedLogValues>
+; V21 tmp20 [V21,T16] ( 2, 4 ) long -> rax "VirtualCall through function pointer"
+;* V22 tmp21 [V22 ] ( 0, 0 ) ref -> zero-ref single-def "field V10.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V23 tmp22 [V23 ] ( 0, 0 ) int -> zero-ref single-def "field V10.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+;* V24 tmp23 [V24,T20] ( 0, 0 ) ref -> zero-ref single-def "field V11.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V25 tmp24 [V25,T24] ( 0, 0 ) int -> zero-ref single-def "field V11.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V26 tmp25 [V26 ] ( 2, 4 ) ref -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V12._formatter (fldOffset=0x0)" P-DEP
+; V27 tmp26 [V27 ] ( 2, 4 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V12._values (fldOffset=0x8)" P-DEP
+; V28 tmp27 [V28 ] ( 2, 4 ) ref -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V12._originalMessage (fldOffset=0x10)" P-DEP
+;* V29 tmp28 [V29 ] ( 0, 0 ) ref -> zero-ref single-def "field V14.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V30 tmp29 [V30 ] ( 0, 0 ) int -> zero-ref single-def "field V14.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+;* V31 tmp30 [V31,T21] ( 0, 0 ) ref -> zero-ref single-def "field V15.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V32 tmp31 [V32,T25] ( 0, 0 ) int -> zero-ref single-def "field V15.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V33 tmp32 [V33 ] ( 2, 4 ) ref -> [rbp-0x58] do-not-enreg[X] addr-exposed "field V16._formatter (fldOffset=0x0)" P-DEP
+; V34 tmp33 [V34 ] ( 2, 4 ) ref -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V16._values (fldOffset=0x8)" P-DEP
+; V35 tmp34 [V35 ] ( 2, 4 ) ref -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V16._originalMessage (fldOffset=0x10)" P-DEP
+;* V36 tmp35 [V36 ] ( 0, 0 ) ref -> zero-ref single-def "field V18.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V37 tmp36 [V37 ] ( 0, 0 ) int -> zero-ref single-def "field V18.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+;* V38 tmp37 [V38,T22] ( 0, 0 ) ref -> zero-ref single-def "field V19.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V39 tmp38 [V39,T26] ( 0, 0 ) int -> zero-ref single-def "field V19.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V40 tmp39 [V40 ] ( 2, 4 ) ref -> [rbp-0x70] do-not-enreg[X] addr-exposed "field V20._formatter (fldOffset=0x0)" P-DEP
+; V41 tmp40 [V41 ] ( 2, 4 ) ref -> [rbp-0x68] do-not-enreg[X] addr-exposed "field V20._values (fldOffset=0x8)" P-DEP
+; V42 tmp41 [V42 ] ( 2, 4 ) ref -> [rbp-0x60] do-not-enreg[X] addr-exposed "field V20._originalMessage (fldOffset=0x10)" P-DEP
+; V43 tmp42 [V43,T11] ( 2, 4 ) ref -> r9 single-def "argument with side effect"
+; V44 tmp43 [V44,T17] ( 2, 4 ) struct (24) [rbp-0x88] do-not-enreg[S] must-init single-def "argument with side effect" <Microsoft.Extensions.Logging.FormattedLogValues>
+; V45 tmp44 [V45,T12] ( 2, 4 ) ref -> r9 single-def "argument with side effect"
+; V46 tmp45 [V46,T18] ( 2, 4 ) struct (24) [rbp-0xA0] do-not-enreg[S] must-init single-def "argument with side effect" <Microsoft.Extensions.Logging.FormattedLogValues>
+; V47 tmp46 [V47,T13] ( 2, 4 ) ref -> r9 single-def "argument with side effect"
+; V48 tmp47 [V48,T19] ( 2, 4 ) struct (24) [rbp-0xB8] do-not-enreg[S] must-init single-def "argument with side effect" <Microsoft.Extensions.Logging.FormattedLogValues>
+;* V49 cse0 [V49,T23] ( 0, 0 ) byref -> zero-ref "CSE #03: moderate"
+; V50 cse1 [V50,T06] ( 4, 4 ) long -> r14 "CSE #01: moderate"
+; V51 cse2 [V51,T07] ( 4, 4 ) long -> r12 "CSE #04: moderate"
;
-; Lcl frame size = 8
+; Lcl frame size = 168
G_M28826_IG01:
push rbp
push r15
push r14
+ push r13
+ push r12
push rbx
- push rax
- lea rbp, [rsp+0x20]
+ sub rsp, 168
+ lea rbp, [rsp+0xD0]
+ xor eax, eax
+ mov qword ptr [rbp-0xB8], rax
+ vxorps xmm8, xmm8, xmm8
+ vmovdqu32 zmmword ptr [rbp-0xB0], zmm8
+ vmovdqu32 zmmword ptr [rbp-0x70], zmm8
+ mov qword ptr [rbp-0x30], rax
mov rbx, rdi
- ;; size=15 bbWeight=1 PerfScore 5.75
+ ;; size=66 bbWeight=1 PerfScore 13.58
G_M28826_IG02:
mov r15, gword ptr [rbx+0x28]
mov rdi, 0xD1FFAB1E ; global ptr
test byte ptr [rdi], 1
- je G_M28826_IG05
+ je G_M28826_IG14
;; size=23 bbWeight=1 PerfScore 6.25
G_M28826_IG03:
- mov rdx, 0xD1FFAB1E ; data for System.Array+EmptyArray`1[System.Object]:Value
- mov rdx, gword ptr [rdx]
- mov gword ptr [rsp], rdx
+ mov rdi, 0xD1FFAB1E ; data for System.Array+EmptyArray`1[System.Object]:Value
+ mov rdx, gword ptr [rdi]
+ test r15, r15
+ jne SHORT G_M28826_IG05
+ ;; size=18 bbWeight=1 PerfScore 3.50
+G_M28826_IG04:
+ mov edi, 401
+ mov rsi, 0xD1FFAB1E
+ call CORINFO_HELP_STRCNS
+ mov rdi, rax
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:Throw(System.String)
+ call [rax]System.ThrowHelper:Throw(System.String)
+ int3
+ ;; size=36 bbWeight=0.50 PerfScore 2.62
+G_M28826_IG05:
+ lea rdi, [rbp-0x40]
+ mov rsi, 0xD1FFAB1E ; 'Application started. Press Ctrl+C to shut down.'
+ mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ call [rax]Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ mov rdi, r15
+ mov r14, 0xD1FFAB1E ; Microsoft.Extensions.Logging.ILogger
+ mov rsi, r14
+ mov rdx, 0xD1FFAB1E ; token handle
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
+ call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ mov r13, rax
+ ;; size=67 bbWeight=1 PerfScore 8.50
+G_M28826_IG06:
+ vmovdqu xmm0, xmmword ptr [rbp-0x40]
+ vmovdqu xmmword ptr [rbp-0x88], xmm0
+ mov rdi, qword ptr [rbp-0x30]
+ mov qword ptr [rbp-0x78], rdi
+ ;; size=21 bbWeight=1 PerfScore 6.00
+G_M28826_IG07:
+ mov rdi, 0xD1FFAB1E ; global ptr
+ test byte ptr [rdi], 1
+ je G_M28826_IG15
+ ;; size=19 bbWeight=1 PerfScore 4.25
+G_M28826_IG08:
+ mov r12, 0xD1FFAB1E ; data for Microsoft.Extensions.Logging.LoggerExtensions:_messageFormatter
+ mov r9, gword ptr [r12]
+ lea rdi, [rsp]
+ lea rsi, [rbp-0x88]
+ 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
xor rdx, rdx
xor ecx, ecx
mov rdi, r15
mov esi, 2
xor r8, r8
- mov r9, 0xD1FFAB1E ; 'Application started. Press Ctrl+C to shut down.'
- mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
- call [rax]Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
+ call r13
mov r15, gword ptr [rbx+0x28]
mov rdi, 0xD1FFAB1E ; System.Object[]
mov esi, 1
call CORINFO_HELP_NEWARR_1_OBJ
- mov r14, rax
+ mov r13, rax
mov rdi, gword ptr [rbx+0x10]
mov r11, 0xD1FFAB1E ; code for Microsoft.Extensions.Hosting.IHostEnvironment:get_EnvironmentName():System.String:this
call [r11]Microsoft.Extensions.Hosting.IHostEnvironment:get_EnvironmentName():System.String:this
- lea rdi, bword ptr [r14+0x10]
+ lea rdi, bword ptr [r13+0x10]
mov rsi, rax
call CORINFO_HELP_ASSIGN_REF
- mov gword ptr [rsp], r14
+ test r15, r15
+ je G_M28826_IG04
+ lea rdi, [rbp-0x58]
+ mov rdx, r13
+ mov rsi, 0xD1FFAB1E ; 'Hosting environment: {EnvName}'
+ mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ call [rax]Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ mov rdi, r15
+ mov rsi, r14
+ mov rdx, 0xD1FFAB1E ; token handle
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
+ call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ ;; size=204 bbWeight=1 PerfScore 37.75
+G_M28826_IG09:
+ vmovdqu xmm0, xmmword ptr [rbp-0x58]
+ vmovdqu xmmword ptr [rbp-0xA0], xmm0
+ mov r9, qword ptr [rbp-0x48]
+ mov qword ptr [rbp-0x90], r9
+ ;; size=24 bbWeight=1 PerfScore 6.00
+G_M28826_IG10:
+ mov r9, gword ptr [r12]
+ lea rdi, [rsp]
+ lea rsi, [rbp-0xA0]
+ 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
xor rdx, rdx
xor ecx, ecx
mov rdi, r15
mov esi, 2
xor r8, r8
- mov r9, 0xD1FFAB1E ; 'Hosting environment: {EnvName}'
- mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
- call [rax]Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
+ call rax
mov r15, gword ptr [rbx+0x28]
mov rdi, 0xD1FFAB1E ; System.Object[]
mov esi, 1
call CORINFO_HELP_NEWARR_1_OBJ
- mov r14, rax
+ mov r13, rax
mov rdi, gword ptr [rbx+0x10]
mov r11, 0xD1FFAB1E ; code for Microsoft.Extensions.Hosting.IHostEnvironment:get_ContentRootPath():System.String:this
call [r11]Microsoft.Extensions.Hosting.IHostEnvironment:get_ContentRootPath():System.String:this
- lea rdi, bword ptr [r14+0x10]
+ lea rdi, bword ptr [r13+0x10]
mov rsi, rax
call CORINFO_HELP_ASSIGN_REF
- mov gword ptr [rsp], r14
+ test r15, r15
+ je G_M28826_IG04
+ lea rdi, [rbp-0x70]
+ mov rdx, r13
+ mov rsi, 0xD1FFAB1E ; 'Content root path: {ContentRoot}'
+ mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ call [rax]Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ mov rdi, r15
+ mov rsi, r14
+ mov rdx, 0xD1FFAB1E ; token handle
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
+ call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ ;; size=193 bbWeight=1 PerfScore 37.50
+G_M28826_IG11:
+ vmovdqu xmm0, xmmword ptr [rbp-0x70]
+ vmovdqu xmmword ptr [rbp-0xB8], xmm0
+ mov r9, qword ptr [rbp-0x60]
+ mov qword ptr [rbp-0xA8], r9
+ ;; size=24 bbWeight=1 PerfScore 6.00
+G_M28826_IG12:
+ mov r9, gword ptr [r12]
+ lea rdi, [rsp]
+ lea rsi, [rbp-0xB8]
+ 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
xor rdx, rdx
xor ecx, ecx
mov rdi, r15
mov esi, 2
xor r8, r8
- mov r9, 0xD1FFAB1E ; 'Content root path: {ContentRoot}'
- mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
- call [rax]Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
+ call rax
nop
- ;; size=249 bbWeight=1 PerfScore 41.25
-G_M28826_IG04:
- add rsp, 8
+ ;; size=72 bbWeight=1 PerfScore 17.50
+G_M28826_IG13:
+ add rsp, 168
pop rbx
+ pop r12
+ pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.25
-G_M28826_IG05:
+ ;; size=18 bbWeight=1 PerfScore 4.25
+G_M28826_IG14:
mov rdi, 0xD1FFAB1E ; System.Array+EmptyArray`1[System.Object]
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
jmp G_M28826_IG03
;; size=27 bbWeight=0 PerfScore 0.00
+G_M28826_IG15:
+ mov rdi, 0xD1FFAB1E ; Microsoft.Extensions.Logging.LoggerExtensions
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
+ call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
+ jmp G_M28826_IG08
+ ;; size=27 bbWeight=0 PerfScore 0.00
-; Total bytes of code 325, prolog size 12, PerfScore 56.50, instruction count 73, allocated bytes for code 325 (MethodHash=31b08f65) for method Microsoft.Extensions.Hosting.Internal.ConsoleLifetime:OnApplicationStarted():this (FullOpts)
+; Total bytes of code 839, prolog size 63, PerfScore 153.71, instruction count 177, allocated bytes for code 839 (MethodHash=31b08f65) for method Microsoft.Extensions.Hosting.Internal.ConsoleLifetime:OnApplicationStarted():this (FullOpts)
; ============================================================ 241 (219.09 % of base) - Microsoft.Extensions.Logging.LoggerMessage+<>c__DisplayClass12_0`2[System.__Canon,System.Nullable`1[int]]:b__1(Microsoft.Extensions.Logging.ILogger,System.__Canon,System.Nullable`1[int],System.Exception):this ; Assembly listing for method Microsoft.Extensions.Logging.LoggerMessage+<>c__DisplayClass12_0`2[System.__Canon,System.Nullable`1[int]]:<Define>b__1(Microsoft.Extensions.Logging.ILogger,System.__Canon,System.Nullable`1[int],System.Exception):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 4, 3.50) ref -> rbx this class-hnd single-def <Microsoft.Extensions.Logging.LoggerMessage+<>c__DisplayClass12_0`2[System.__Canon,System.Nullable`1[int]]>
-; V01 arg1 [V01,T01] ( 4, 3.50) ref -> r15 class-hnd single-def <Microsoft.Extensions.Logging.ILogger>
+; V00 this [V00,T00] ( 9, 6 ) ref -> rbx this class-hnd single-def <Microsoft.Extensions.Logging.LoggerMessage+<>c__DisplayClass12_0`2[System.__Canon,System.Nullable`1[int]]>
+; V01 arg1 [V01,T01] ( 5, 4 ) ref -> r15 class-hnd single-def <Microsoft.Extensions.Logging.ILogger>
; V02 arg2 [V02,T02] ( 3, 2.50) ref -> r14 class-hnd single-def <System.__Canon>
-; V03 arg3 [V03,T04] ( 3, 2.50) struct ( 8) [rbp-0x28] do-not-enreg[S] single-def <System.Nullable`1[int]>
+; V03 arg3 [V03,T04] ( 3, 2.50) struct ( 8) r12 single-def <System.Nullable`1[int]>
; V04 arg4 [V04,T03] ( 3, 2.50) ref -> r13 class-hnd single-def <System.Exception>
-;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+; V05 OutArgs [V05 ] ( 1, 1 ) struct (24) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <UNNAMED>
+; V06 tmp1 [V06,T05] ( 4, 4 ) struct (24) [rbp-0x48] do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.LoggerMessage+LogValues`2[System.__Canon,System.Nullable`1[int]]>
+;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+; V08 tmp3 [V08,T13] ( 2, 2 ) int -> [rbp-0x4C] spill-single-def "impAppendStmt"
+;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <Microsoft.Extensions.Logging.EventId>
+; V10 tmp5 [V10,T10] ( 3, 2 ) long -> r14 "spilling helperCall"
+;* V11 tmp6 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+; V12 tmp7 [V12,T14] ( 2, 2 ) long -> r12 "VirtualCall through function pointer"
+;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.Extensions.Logging.LogValuesFormatter>
+; V14 tmp9 [V14,T16] ( 2, 1 ) ref -> [rbp-0x58] spill-single-def "field V09.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+; V15 tmp10 [V15,T17] ( 2, 1 ) int -> [rbp-0x50] spill-single-def "field V09.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V16 tmp11 [V16,T15] ( 2, 2 ) long -> r8 "argument with side effect"
+; V17 tmp12 [V17,T12] ( 2, 2 ) ref -> r9 single-def "argument with side effect"
+; V18 rat0 [V18,T08] ( 3, 2.20) long -> rdi "Spilling to split statement for tree"
+; V19 rat1 [V19,T06] ( 3, 2.80) long -> r14 "fgMakeTemp is creating a new local variable"
+; V20 rat2 [V20,T09] ( 3, 2.20) long -> rdi "Spilling to split statement for tree"
+; V21 rat3 [V21,T11] ( 3, 2 ) long -> r8 "runtime lookup"
+; V22 rat4 [V22,T07] ( 3, 2.80) long -> r8 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 72
G_M24721_IG01:
push rbp
push r15
push r14
push r13
+ push r12
push rbx
- sub rsp, 16
- lea rbp, [rsp+0x30]
- mov qword ptr [rbp-0x28], rcx
+ sub rsp, 72
+ lea rbp, [rsp+0x70]
+ vxorps xmm8, xmm8, xmm8
+ vmovdqu xmmword ptr [rbp-0x48], xmm8
+ xor eax, eax
+ mov qword ptr [rbp-0x38], rax
+ mov qword ptr [rbp-0x30], rdi
mov rbx, rdi
mov r15, rsi
mov r14, rdx
+ mov r12, rcx
mov r13, r8
- ;; size=33 bbWeight=1 PerfScore 7.75
+ ;; size=54 bbWeight=1 PerfScore 12.58
G_M24721_IG02:
mov esi, dword ptr [rbx+0x10]
mov rdi, r15
mov r11, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.ILogger:IsEnabled(int):ubyte:this
call [r11]Microsoft.Extensions.Logging.ILogger:IsEnabled(int):ubyte:this
test eax, eax
- jne SHORT G_M24721_IG04
- ;; size=23 bbWeight=1 PerfScore 6.75
+ je G_M24721_IG06
+ ;; size=27 bbWeight=1 PerfScore 6.75
G_M24721_IG03:
- add rsp, 16
+ mov eax, dword ptr [rbx+0x10]
+ mov dword ptr [rbp-0x4C], eax
+ mov rcx, gword ptr [rbx+0x18]
+ mov gword ptr [rbp-0x58], rcx
+ mov edx, dword ptr [rbx+0x20]
+ mov dword ptr [rbp-0x50], edx
+ mov rdi, gword ptr [rbx+0x08]
+ mov gword ptr [rbp-0x48], rdi
+ mov gword ptr [rbp-0x40], r14
+ mov qword ptr [rbp-0x38], r12
+ mov rdi, qword ptr [rbx]
+ mov rsi, qword ptr [rdi+0x30]
+ mov rsi, qword ptr [rsi]
+ mov r14, qword ptr [rsi+0x18]
+ test r14, r14
+ je G_M24721_IG08
+ ;; size=59 bbWeight=0.50 PerfScore 11.62
+G_M24721_IG04:
+ mov rdi, qword ptr [rbx]
+ mov rsi, qword ptr [rdi+0x30]
+ mov rsi, qword ptr [rsi]
+ mov r8, qword ptr [rsi+0x20]
+ test r8, r8
+ je G_M24721_IG09
+ ;; size=23 bbWeight=0.50 PerfScore 4.62
+G_M24721_IG05:
+ mov rdx, r8
+ mov rdi, r15
+ mov rsi, 0xD1FFAB1E ; Microsoft.Extensions.Logging.ILogger
+ mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
+ call [r8]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ mov r12, rax
+ mov rdi, r14
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
+ call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
+ mov r9, gword ptr [rax]
+ lea rdi, [rsp]
+ lea rsi, [rbp-0x48]
+ 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
+ movsq
+ mov rdx, gword ptr [rbp-0x58]
+ mov ecx, dword ptr [rbp-0x50]
+ mov esi, dword ptr [rbp-0x4C]
+ mov r8, r13
+ mov rdi, r15
+ call r12
+ ;; size=110 bbWeight=0.50 PerfScore 12.62
+G_M24721_IG06:
+ nop
+ ;; size=1 bbWeight=1 PerfScore 0.25
+G_M24721_IG07:
+ add rsp, 72
pop rbx
+ pop r12
pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
-G_M24721_IG04:
- mov rdi, rbx
- mov rsi, r15
- mov rdx, r14
- mov rcx, qword ptr [rbp-0x28]
- mov r8, r13
- mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.LoggerMessage+<>c__DisplayClass12_0`2[System.__Canon,System.Nullable`1[int]]:<Define>g__Log|0(Microsoft.Extensions.Logging.ILogger,System.__Canon,System.Nullable`1[int],System.Exception):this
- ;; size=26 bbWeight=0.50 PerfScore 1.12
-G_M24721_IG05:
- add rsp, 16
- pop rbx
- pop r13
- pop r14
- pop r15
- pop rbp
- tail.jmp [rax]Microsoft.Extensions.Logging.LoggerMessage+<>c__DisplayClass12_0`2[System.__Canon,System.Nullable`1[int]]:<Define>g__Log|0(Microsoft.Extensions.Logging.ILogger,System.__Canon,System.Nullable`1[int],System.Exception):this
- ;; size=15 bbWeight=0.50 PerfScore 2.38
+ ;; size=15 bbWeight=1 PerfScore 4.25
+G_M24721_IG08:
+ mov rsi, 0xD1FFAB1E ; global ptr
+ mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ call [r8]CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ mov r14, rax
+ jmp G_M24721_IG04
+ ;; size=31 bbWeight=0.10 PerfScore 0.58
+G_M24721_IG09:
+ mov rsi, 0xD1FFAB1E ; global ptr
+ mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ call [r8]CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ mov r8, rax
+ jmp G_M24721_IG05
+ ;; size=31 bbWeight=0.10 PerfScore 0.58
-; Total bytes of code 110, prolog size 17, PerfScore 19.88, instruction count 38, allocated bytes for code 110 (MethodHash=e0179f6e) for method Microsoft.Extensions.Logging.LoggerMessage+<>c__DisplayClass12_0`2[System.__Canon,System.Nullable`1[int]]:<Define>b__1(Microsoft.Extensions.Logging.ILogger,System.__Canon,System.Nullable`1[int],System.Exception):this (FullOpts)
+; Total bytes of code 351, prolog size 39, PerfScore 53.86, instruction count 92, allocated bytes for code 351 (MethodHash=e0179f6e) for method Microsoft.Extensions.Logging.LoggerMessage+<>c__DisplayClass12_0`2[System.__Canon,System.Nullable`1[int]]:<Define>b__1(Microsoft.Extensions.Logging.ILogger,System.__Canon,System.Nullable`1[int],System.Exception):this (FullOpts)
; ============================================================ 237 (150.96 % of base) - Microsoft.Extensions.Hosting.Systemd.SystemdLifetime:OnApplicationStopping():this ; Assembly listing for method Microsoft.Extensions.Hosting.Systemd.SystemdLifetime:OnApplicationStopping():this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 7 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 8 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <Microsoft.Extensions.Hosting.Systemd.SystemdLifetime>
-; V01 OutArgs [V01 ] ( 1, 1 ) struct ( 8) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <UNNAMED>
-; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
+; V00 this [V00,T01] ( 4, 4 ) ref -> rbx this class-hnd single-def <Microsoft.Extensions.Hosting.Systemd.SystemdLifetime>
+; V01 OutArgs [V01 ] ( 1, 1 ) struct (24) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <UNNAMED>
+; V02 tmp1 [V02,T00] ( 4, 8 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
; V03 tmp2 [V03,T02] ( 2, 4 ) ref -> rdx class-hnd single-def "Inlining Arg" <System.Object[]>
;* V04 tmp3 [V04 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <Microsoft.Extensions.Logging.EventId>
;* V05 tmp4 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.EventId>
-;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref "field V04.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V07 tmp6 [V07 ] ( 0, 0 ) int -> zero-ref "field V04.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
-;* V08 tmp7 [V08,T03] ( 0, 0 ) ref -> zero-ref single-def "field V05.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V09 tmp8 [V09,T04] ( 0, 0 ) int -> zero-ref "field V05.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V06 tmp5 [V06 ] ( 2, 4 ) struct (24) [rbp-0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.FormattedLogValues>
+; V07 tmp6 [V07,T04] ( 2, 4 ) long -> r14 "VirtualCall through function pointer"
+;* V08 tmp7 [V08 ] ( 0, 0 ) ref -> zero-ref single-def "field V04.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V09 tmp8 [V09 ] ( 0, 0 ) int -> zero-ref "field V04.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+;* V10 tmp9 [V10,T06] ( 0, 0 ) ref -> zero-ref single-def "field V05.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V11 tmp10 [V11,T07] ( 0, 0 ) int -> zero-ref "field V05.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V12 tmp11 [V12 ] ( 2, 4 ) ref -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V06._formatter (fldOffset=0x0)" P-DEP
+; V13 tmp12 [V13 ] ( 2, 4 ) ref -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V06._values (fldOffset=0x8)" P-DEP
+; V14 tmp13 [V14 ] ( 2, 4 ) ref -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V06._originalMessage (fldOffset=0x10)" P-DEP
+; V15 tmp14 [V15,T03] ( 2, 4 ) ref -> r9 single-def "argument with side effect"
+; V16 tmp15 [V16,T05] ( 2, 4 ) struct (24) [rbp-0x48] do-not-enreg[S] must-init single-def "argument with side effect" <Microsoft.Extensions.Logging.FormattedLogValues>
;
-; Lcl frame size = 16
+; Lcl frame size = 72
G_M60675_IG01:
push rbp
push r15
+ push r14
push rbx
- sub rsp, 16
- lea rbp, [rsp+0x20]
+ sub rsp, 72
+ lea rbp, [rsp+0x60]
+ xor eax, eax
+ mov qword ptr [rbp-0x48], rax
+ vxorps xmm8, xmm8, xmm8
+ vmovdqu ymmword ptr [rbp-0x40], ymm8
+ mov qword ptr [rbp-0x20], rax
mov rbx, rdi
- ;; size=16 bbWeight=1 PerfScore 4.00
+ ;; size=38 bbWeight=1 PerfScore 9.58
G_M60675_IG02:
mov r15, gword ptr [rbx+0x18]
mov rdi, 0xD1FFAB1E ; global ptr
test byte ptr [rdi], 1
- je SHORT G_M60675_IG05
- ;; size=19 bbWeight=1 PerfScore 6.25
+ je G_M60675_IG10
+ ;; size=23 bbWeight=1 PerfScore 6.25
G_M60675_IG03:
- mov rdx, 0xD1FFAB1E ; data for System.Array+EmptyArray`1[System.Object]:Value
- mov rdx, gword ptr [rdx]
- mov gword ptr [rsp], rdx
+ mov rdi, 0xD1FFAB1E ; data for System.Array+EmptyArray`1[System.Object]:Value
+ mov rdx, gword ptr [rdi]
+ test r15, r15
+ jne SHORT G_M60675_IG05
+ ;; size=18 bbWeight=1 PerfScore 3.50
+G_M60675_IG04:
+ mov edi, 401
+ mov rsi, 0xD1FFAB1E
+ call CORINFO_HELP_STRCNS
+ mov rdi, rax
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:Throw(System.String)
+ call [rax]System.ThrowHelper:Throw(System.String)
+ int3
+ ;; size=36 bbWeight=0.50 PerfScore 2.62
+G_M60675_IG05:
+ lea rdi, [rbp-0x30]
+ mov rsi, 0xD1FFAB1E ; 'Application is shutting down...'
+ mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ call [rax]Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ mov rdi, r15
+ mov rsi, 0xD1FFAB1E ; Microsoft.Extensions.Logging.ILogger
+ mov rdx, 0xD1FFAB1E ; token handle
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
+ call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ mov r14, rax
+ ;; size=64 bbWeight=1 PerfScore 8.25
+G_M60675_IG06:
+ vmovdqu xmm0, xmmword ptr [rbp-0x30]
+ vmovdqu xmmword ptr [rbp-0x48], xmm0
+ mov rdi, qword ptr [rbp-0x20]
+ mov qword ptr [rbp-0x38], rdi
+ ;; size=18 bbWeight=1 PerfScore 6.00
+G_M60675_IG07:
+ mov rdi, 0xD1FFAB1E ; global ptr
+ test byte ptr [rdi], 1
+ je G_M60675_IG11
+ ;; size=19 bbWeight=1 PerfScore 4.25
+G_M60675_IG08:
+ mov r9, 0xD1FFAB1E ; data for Microsoft.Extensions.Logging.LoggerExtensions:_messageFormatter
+ mov r9, gword ptr [r9]
+ lea rdi, [rsp]
+ lea rsi, [rbp-0x48]
+ 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
xor rdx, rdx
xor ecx, ecx
mov rdi, r15
mov esi, 2
xor r8, r8
- mov r9, 0xD1FFAB1E ; 'Application is shutting down...'
- mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
- call [rax]Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
+ call r14
mov rsi, 0xD1FFAB1E ; box for Microsoft.Extensions.Hosting.Systemd.ServiceState:Stopping
mov rsi, gword ptr [rsi]
mov rsi, gword ptr [rsi+0x08]
mov rdi, gword ptr [rbx+0x20]
mov r11, 0xD1FFAB1E ; code for Microsoft.Extensions.Hosting.Systemd.ISystemdNotifier:Notify(Microsoft.Extensions.Hosting.Systemd.ServiceState):this
- cmp dword ptr [rdi], edi
- ;; size=87 bbWeight=1 PerfScore 17.50
-G_M60675_IG04:
- add rsp, 16
+ call [r11]Microsoft.Extensions.Hosting.Systemd.ISystemdNotifier:Notify(Microsoft.Extensions.Hosting.Systemd.ServiceState):this
+ nop
+ ;; size=113 bbWeight=1 PerfScore 27.25
+G_M60675_IG09:
+ add rsp, 72
pop rbx
+ pop r14
pop r15
pop rbp
- tail.jmp [r11]Microsoft.Extensions.Hosting.Systemd.ISystemdNotifier:Notify(Microsoft.Extensions.Hosting.Systemd.ServiceState):this
- ;; size=11 bbWeight=1 PerfScore 3.75
-G_M60675_IG05:
+ ret
+ ;; size=11 bbWeight=1 PerfScore 3.25
+G_M60675_IG10:
mov rdi, 0xD1FFAB1E ; System.Array+EmptyArray`1[System.Object]
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
- jmp SHORT G_M60675_IG03
- ;; size=24 bbWeight=0 PerfScore 0.00
+ jmp G_M60675_IG03
+ ;; size=27 bbWeight=0 PerfScore 0.00
+G_M60675_IG11:
+ mov rdi, 0xD1FFAB1E ; Microsoft.Extensions.Logging.LoggerExtensions
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
+ call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
+ jmp G_M60675_IG08
+ ;; size=27 bbWeight=0 PerfScore 0.00
-; Total bytes of code 157, prolog size 13, PerfScore 31.50, instruction count 36, allocated bytes for code 157 (MethodHash=5c5c12fc) for method Microsoft.Extensions.Hosting.Systemd.SystemdLifetime:OnApplicationStopping():this (FullOpts)
+; Total bytes of code 394, prolog size 35, PerfScore 70.96, instruction count 85, allocated bytes for code 394 (MethodHash=5c5c12fc) for method Microsoft.Extensions.Hosting.Systemd.SystemdLifetime:OnApplicationStopping():this (FullOpts)
; ============================================================ 236 (126.20 % of base) - Microsoft.Extensions.Hosting.Systemd.SystemdLifetime:OnApplicationStarted():this ; Assembly listing for method Microsoft.Extensions.Hosting.Systemd.SystemdLifetime:OnApplicationStarted():this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 8 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 9 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 6, 6 ) ref -> rbx this class-hnd single-def <Microsoft.Extensions.Hosting.Systemd.SystemdLifetime>
-; V01 OutArgs [V01 ] ( 1, 1 ) struct ( 8) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <UNNAMED>
+; V01 OutArgs [V01 ] ( 1, 1 ) struct (24) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <UNNAMED>
; V02 tmp1 [V02,T01] ( 4, 8 ) ref -> r14 class-hnd exact single-def "NewArr temp" <System.Object[]>
-; V03 tmp2 [V03,T02] ( 2, 4 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
+; V03 tmp2 [V03,T02] ( 4, 8 ) ref -> r15 class-hnd single-def "impAppendStmt" <Microsoft.Extensions.Logging.ILogger>
; V04 tmp3 [V04,T03] ( 2, 4 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.String>
; V05 tmp4 [V05,T04] ( 2, 4 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.String>
;* V06 tmp5 [V06 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <Microsoft.Extensions.Logging.EventId>
;* V07 tmp6 [V07 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.EventId>
-;* V08 tmp7 [V08 ] ( 0, 0 ) ref -> zero-ref "field V06.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V09 tmp8 [V09 ] ( 0, 0 ) int -> zero-ref "field V06.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
-;* V10 tmp9 [V10,T05] ( 0, 0 ) ref -> zero-ref single-def "field V07.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
-;* V11 tmp10 [V11,T06] ( 0, 0 ) int -> zero-ref single-def "field V07.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V08 tmp7 [V08 ] ( 2, 4 ) struct (24) [rbp-0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <Microsoft.Extensions.Logging.FormattedLogValues>
+; V09 tmp8 [V09,T06] ( 2, 4 ) long -> r14 "VirtualCall through function pointer"
+;* V10 tmp9 [V10 ] ( 0, 0 ) ref -> zero-ref single-def "field V06.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V11 tmp10 [V11 ] ( 0, 0 ) int -> zero-ref single-def "field V06.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+;* V12 tmp11 [V12,T08] ( 0, 0 ) ref -> zero-ref single-def "field V07.<Name>k__BackingField (fldOffset=0x0)" P-INDEP
+;* V13 tmp12 [V13,T09] ( 0, 0 ) int -> zero-ref single-def "field V07.<Id>k__BackingField (fldOffset=0x8)" P-INDEP
+; V14 tmp13 [V14 ] ( 2, 4 ) ref -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V08._formatter (fldOffset=0x0)" P-DEP
+; V15 tmp14 [V15 ] ( 2, 4 ) ref -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V08._values (fldOffset=0x8)" P-DEP
+; V16 tmp15 [V16 ] ( 2, 4 ) ref -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V08._originalMessage (fldOffset=0x10)" P-DEP
+; V17 tmp16 [V17,T05] ( 2, 4 ) ref -> r9 single-def "argument with side effect"
+; V18 tmp17 [V18,T07] ( 2, 4 ) struct (24) [rbp-0x48] do-not-enreg[S] must-init single-def "argument with side effect" <Microsoft.Extensions.Logging.FormattedLogValues>
;
-; Lcl frame size = 8
+; Lcl frame size = 72
G_M57866_IG01:
push rbp
push r15
push r14
push rbx
- push rax
- lea rbp, [rsp+0x20]
+ sub rsp, 72
+ lea rbp, [rsp+0x60]
+ xor eax, eax
+ mov qword ptr [rbp-0x48], rax
+ vxorps xmm8, xmm8, xmm8
+ vmovdqu ymmword ptr [rbp-0x40], ymm8
+ mov qword ptr [rbp-0x20], rax
mov rbx, rdi
- ;; size=15 bbWeight=1 PerfScore 5.75
+ ;; size=38 bbWeight=1 PerfScore 9.58
G_M57866_IG02:
mov r15, gword ptr [rbx+0x18]
mov rdi, 0xD1FFAB1E ; System.Object[]
mov esi, 2
call CORINFO_HELP_NEWARR_1_OBJ
mov r14, rax
mov rdi, gword ptr [rbx+0x10]
mov r11, 0xD1FFAB1E ; code for Microsoft.Extensions.Hosting.IHostEnvironment:get_EnvironmentName():System.String:this
call [r11]Microsoft.Extensions.Hosting.IHostEnvironment:get_EnvironmentName():System.String:this
lea rdi, bword ptr [r14+0x10]
mov rsi, rax
call CORINFO_HELP_ASSIGN_REF
mov rdi, gword ptr [rbx+0x10]
mov r11, 0xD1FFAB1E ; code for Microsoft.Extensions.Hosting.IHostEnvironment:get_ContentRootPath():System.String:this
call [r11]Microsoft.Extensions.Hosting.IHostEnvironment:get_ContentRootPath():System.String:this
lea rdi, bword ptr [r14+0x18]
mov rsi, rax
call CORINFO_HELP_ASSIGN_REF
- mov gword ptr [rsp], r14
+ test r15, r15
+ je G_M57866_IG07
+ lea rdi, [rbp-0x30]
+ mov rdx, r14
+ mov rsi, 0xD1FFAB1E ; 'Application started. Hosting environment: {EnvironmentName}; Co'
+ mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ call [rax]Microsoft.Extensions.Logging.FormattedLogValues:.ctor(System.String,System.Object[]):this
+ mov rdi, r15
+ mov rsi, 0xD1FFAB1E ; Microsoft.Extensions.Logging.ILogger
+ mov rdx, 0xD1FFAB1E ; token handle
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
+ call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ mov r14, rax
+ ;; size=161 bbWeight=1 PerfScore 27.50
+G_M57866_IG03:
+ vmovdqu xmm0, xmmword ptr [rbp-0x30]
+ vmovdqu xmmword ptr [rbp-0x48], xmm0
+ mov rdi, qword ptr [rbp-0x20]
+ mov qword ptr [rbp-0x38], rdi
+ ;; size=18 bbWeight=1 PerfScore 6.00
+G_M57866_IG04:
+ mov rdi, 0xD1FFAB1E ; global ptr
+ test byte ptr [rdi], 1
+ je G_M57866_IG08
+ ;; size=19 bbWeight=1 PerfScore 4.25
+G_M57866_IG05:
+ mov r9, 0xD1FFAB1E ; data for Microsoft.Extensions.Logging.LoggerExtensions:_messageFormatter
+ mov r9, gword ptr [r9]
+ lea rdi, [rsp]
+ lea rsi, [rbp-0x48]
+ 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
xor rdx, rdx
xor ecx, ecx
mov rdi, r15
mov esi, 2
xor r8, r8
- mov r9, 0xD1FFAB1E ; 'Application started. Hosting environment: {EnvironmentName}; Co'
- mov rax, 0xD1FFAB1E ; code for Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
- call [rax]Microsoft.Extensions.Logging.LoggerExtensions:Log(Microsoft.Extensions.Logging.ILogger,int,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])
+ call r14
mov rsi, 0xD1FFAB1E ; box for Microsoft.Extensions.Hosting.Systemd.ServiceState:Ready
mov rsi, gword ptr [rsi]
mov rsi, gword ptr [rsi+0x08]
mov rdi, gword ptr [rbx+0x20]
mov r11, 0xD1FFAB1E ; code for Microsoft.Extensions.Hosting.Systemd.ISystemdNotifier:Notify(Microsoft.Extensions.Hosting.Systemd.ServiceState):this
- cmp dword ptr [rdi], edi
- ;; size=159 bbWeight=1 PerfScore 33.00
-G_M57866_IG03:
- add rsp, 8
+ call [r11]Microsoft.Extensions.Hosting.Systemd.ISystemdNotifier:Notify(Microsoft.Extensions.Hosting.Systemd.ServiceState):this
+ nop
+ ;; size=113 bbWeight=1 PerfScore 27.25
+G_M57866_IG06:
+ add rsp, 72
pop rbx
pop r14
pop r15
pop rbp
- tail.jmp [r11]Microsoft.Extensions.Hosting.Systemd.ISystemdNotifier:Notify(Microsoft.Extensions.Hosting.Systemd.ServiceState):this
- ;; size=13 bbWeight=1 PerfScore 4.25
+ ret
+ ;; size=11 bbWeight=1 PerfScore 3.25
+G_M57866_IG07:
+ mov edi, 401
+ mov rsi, 0xD1FFAB1E
+ call CORINFO_HELP_STRCNS
+ mov rdi, rax
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:Throw(System.String)
+ call [rax]System.ThrowHelper:Throw(System.String)
+ int3
+ ;; size=36 bbWeight=0.50 PerfScore 2.62
+G_M57866_IG08:
+ mov rdi, 0xD1FFAB1E ; Microsoft.Extensions.Logging.LoggerExtensions
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
+ call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
+ jmp G_M57866_IG05
+ ;; size=27 bbWeight=0 PerfScore 0.00
-; Total bytes of code 187, prolog size 12, PerfScore 43.00, instruction count 45, allocated bytes for code 187 (MethodHash=db5e1df5) for method Microsoft.Extensions.Hosting.Systemd.SystemdLifetime:OnApplicationStarted():this (FullOpts)
+; Total bytes of code 423, prolog size 35, PerfScore 80.46, instruction count 93, allocated bytes for code 423 (MethodHash=db5e1df5) for method Microsoft.Extensions.Hosting.Systemd.SystemdLifetime:OnApplicationStarted():this (FullOpts)
; ============================================================ Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/e6e4dbba802090e0a9588d160550e30e |
Top method improvements-23 (-10.04 % of base) - System.Text.Json.Nodes.JsonValueOfElement:GetValue[double]():double:this ; Assembly listing for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[double]():double:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 8 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 5, 4.50) ref -> rbx this class-hnd single-def <System.Text.Json.Nodes.JsonValueOfElement>
; V01 loc0 [V01 ] ( 2, 2 ) double -> [rbp-0x10] do-not-enreg[X] addr-exposed ld-addr-op
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-; V03 tmp1 [V03,T04] ( 2, 4 ) long -> rax "VirtualCall through function pointer"
-; V04 tmp2 [V04,T05] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
-; V05 tmp3 [V05,T11] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
+;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "VirtualCall through function pointer"
+; V04 tmp2 [V04,T04] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
+; V05 tmp3 [V05,T10] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
; V06 tmp4 [V06,T02] ( 4, 4 ) ref -> rdi class-hnd exact single-def "dup spill" <System.Text.Json.JsonDocument>
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def
-; V08 tmp6 [V08,T07] ( 2, 2 ) int -> rax "Inlining Arg"
+; V08 tmp6 [V08,T06] ( 2, 2 ) int -> rax "Inlining Arg"
;* V09 tmp7 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
;* V13 tmp11 [V13 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[ubyte]>
; V14 tmp12 [V14,T03] ( 4, 4 ) ref -> rdi class-hnd single-def "Inlining Arg" <ubyte[]>
; V15 tmp13 [V15,T01] ( 5, 5 ) int -> rax "Inlining Arg"
;* V16 tmp14 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
-; V18 tmp16 [V18,T06] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V19 tmp17 [V19,T08] ( 2, 2 ) int -> rcx "Inlining Arg"
+; V18 tmp16 [V18,T05] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V19 tmp17 [V19,T07] ( 2, 2 ) int -> rcx "Inlining Arg"
;* V20 tmp18 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V22 tmp20 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V24 tmp22 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V25 tmp23 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V28 tmp26 [V28 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-; V30 tmp28 [V30,T10] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
-; V31 tmp29 [V31,T12] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T14] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T15] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V30 tmp28 [V30,T09] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
+; V31 tmp29 [V31,T11] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V32 tmp30 [V32,T13] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V33 tmp31 [V33,T14] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
;* V34 tmp32 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
;* V35 tmp33 [V35 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
;* V36 tmp34 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V38 tmp36 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
;* V39 tmp37 [V39 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
;* V40 tmp38 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP
;* V41 tmp39 [V41 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
;* V42 tmp40 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp41 [V43 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
-; V44 tmp42 [V44,T09] ( 2, 2 ) int -> rdi "argument with side effect"
-; V45 cse0 [V45,T13] ( 3, 1.50) int -> rcx "CSE #01: moderate"
+; V44 tmp42 [V44,T08] ( 2, 2 ) int -> rdi "argument with side effect"
+; V45 cse0 [V45,T12] ( 3, 1.50) int -> rcx "CSE #01: moderate"
;
; Lcl frame size = 8
G_M715_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
mov rbx, rdi
;; size=11 bbWeight=1 PerfScore 3.75
G_M715_IG02:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; System.Text.Json.Nodes.JsonValue
- mov rdx, 0xD1FFAB1E ; token handle
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
- call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ cmp byte ptr [rbx], bl
lea rsi, [rbp-0x10]
mov rdi, rbx
- call rax
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[double](byref):ubyte:this
+ call [rax]System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[double](byref):ubyte:this
test eax, eax
je SHORT G_M715_IG04
vmovsd xmm0, qword ptr [rbp-0x10]
- ;; size=53 bbWeight=1 PerfScore 12.00
+ ;; size=30 bbWeight=1 PerfScore 11.25
G_M715_IG03:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=1 PerfScore 2.25
G_M715_IG04:
add rbx, 24
mov rdi, gword ptr [rbx]
test rdi, rdi
je SHORT G_M715_IG10
mov eax, dword ptr [rbx+0x08]
cmp dword ptr [rdi+0x2C], 0
je SHORT G_M715_IG09
mov rdi, gword ptr [rdi+0x30]
add eax, 8
test rdi, rdi
je SHORT G_M715_IG05
mov ecx, dword ptr [rdi+0x08]
cmp ecx, eax
jb SHORT G_M715_IG08
mov edx, eax
lea rdi, bword ptr [rdi+rdx+0x10]
sub ecx, eax
jmp SHORT G_M715_IG06
;; size=51 bbWeight=0.50 PerfScore 9.88
G_M715_IG05:
test eax, eax
jne SHORT G_M715_IG08
xor rdi, rdi
xor ecx, ecx
;; size=8 bbWeight=0.50 PerfScore 0.88
G_M715_IG06:
cmp ecx, 4
jl SHORT G_M715_IG07
mov edi, dword ptr [rdi]
shr edi, 28
movzx rdi, dil
jmp SHORT G_M715_IG11
;; size=16 bbWeight=0.50 PerfScore 3.00
G_M715_IG07:
mov edi, 40
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M715_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M715_IG09:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
call [rax]System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M715_IG10:
xor edi, edi
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M715_IG11:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
call [rax]System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
mov edi, eax
mov rsi, 0xD1FFAB1E ; 'System.Double'
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
call [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
int3
;; size=37 bbWeight=0.50 PerfScore 3.62
-; Total bytes of code 229, prolog size 8, PerfScore 40.88, instruction count 66, allocated bytes for code 229 (MethodHash=7ea7fd34) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[double]():double:this (FullOpts)
+; Total bytes of code 206, prolog size 8, PerfScore 40.12, instruction count 63, allocated bytes for code 206 (MethodHash=7ea7fd34) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[double]():double:this (FullOpts)
; ============================================================ -23 (-10.13 % of base) - System.Text.Json.Nodes.JsonValueOfElement:GetValue[int]():int:this ; Assembly listing for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[int]():int:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 8 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 5, 4.50) ref -> rbx this class-hnd single-def <System.Text.Json.Nodes.JsonValueOfElement>
; V01 loc0 [V01 ] ( 2, 2 ) int -> [rbp-0x10] do-not-enreg[X] addr-exposed ld-addr-op
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-; V03 tmp1 [V03,T04] ( 2, 4 ) long -> rax "VirtualCall through function pointer"
-; V04 tmp2 [V04,T05] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
-; V05 tmp3 [V05,T11] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
+;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "VirtualCall through function pointer"
+; V04 tmp2 [V04,T04] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
+; V05 tmp3 [V05,T10] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
; V06 tmp4 [V06,T02] ( 4, 4 ) ref -> rdi class-hnd exact single-def "dup spill" <System.Text.Json.JsonDocument>
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def
-; V08 tmp6 [V08,T07] ( 2, 2 ) int -> rax "Inlining Arg"
+; V08 tmp6 [V08,T06] ( 2, 2 ) int -> rax "Inlining Arg"
;* V09 tmp7 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
;* V13 tmp11 [V13 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[ubyte]>
; V14 tmp12 [V14,T03] ( 4, 4 ) ref -> rdi class-hnd single-def "Inlining Arg" <ubyte[]>
; V15 tmp13 [V15,T01] ( 5, 5 ) int -> rax "Inlining Arg"
;* V16 tmp14 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
-; V18 tmp16 [V18,T06] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V19 tmp17 [V19,T08] ( 2, 2 ) int -> rcx "Inlining Arg"
+; V18 tmp16 [V18,T05] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V19 tmp17 [V19,T07] ( 2, 2 ) int -> rcx "Inlining Arg"
;* V20 tmp18 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V22 tmp20 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V24 tmp22 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V25 tmp23 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V28 tmp26 [V28 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-; V30 tmp28 [V30,T10] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
-; V31 tmp29 [V31,T12] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T14] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T15] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V30 tmp28 [V30,T09] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
+; V31 tmp29 [V31,T11] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V32 tmp30 [V32,T13] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V33 tmp31 [V33,T14] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
;* V34 tmp32 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
;* V35 tmp33 [V35 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
;* V36 tmp34 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V38 tmp36 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
;* V39 tmp37 [V39 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
;* V40 tmp38 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP
;* V41 tmp39 [V41 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
;* V42 tmp40 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp41 [V43 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
-; V44 tmp42 [V44,T09] ( 2, 2 ) int -> rdi "argument with side effect"
-; V45 cse0 [V45,T13] ( 3, 1.50) int -> rcx "CSE #01: moderate"
+; V44 tmp42 [V44,T08] ( 2, 2 ) int -> rdi "argument with side effect"
+; V45 cse0 [V45,T12] ( 3, 1.50) int -> rcx "CSE #01: moderate"
;
; Lcl frame size = 8
G_M37867_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
mov rbx, rdi
;; size=11 bbWeight=1 PerfScore 3.75
G_M37867_IG02:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; System.Text.Json.Nodes.JsonValue
- mov rdx, 0xD1FFAB1E ; token handle
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
- call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ cmp byte ptr [rbx], bl
lea rsi, [rbp-0x10]
mov rdi, rbx
- call rax
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[int](byref):ubyte:this
+ call [rax]System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[int](byref):ubyte:this
test eax, eax
je SHORT G_M37867_IG04
mov eax, dword ptr [rbp-0x10]
- ;; size=51 bbWeight=1 PerfScore 10.00
+ ;; size=28 bbWeight=1 PerfScore 9.25
G_M37867_IG03:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=1 PerfScore 2.25
G_M37867_IG04:
add rbx, 24
mov rdi, gword ptr [rbx]
test rdi, rdi
je SHORT G_M37867_IG10
mov eax, dword ptr [rbx+0x08]
cmp dword ptr [rdi+0x2C], 0
je SHORT G_M37867_IG09
mov rdi, gword ptr [rdi+0x30]
add eax, 8
test rdi, rdi
je SHORT G_M37867_IG05
mov ecx, dword ptr [rdi+0x08]
cmp ecx, eax
jb SHORT G_M37867_IG08
mov edx, eax
lea rdi, bword ptr [rdi+rdx+0x10]
sub ecx, eax
jmp SHORT G_M37867_IG06
;; size=51 bbWeight=0.50 PerfScore 9.88
G_M37867_IG05:
test eax, eax
jne SHORT G_M37867_IG08
xor rdi, rdi
xor ecx, ecx
;; size=8 bbWeight=0.50 PerfScore 0.88
G_M37867_IG06:
cmp ecx, 4
jl SHORT G_M37867_IG07
mov edi, dword ptr [rdi]
shr edi, 28
movzx rdi, dil
jmp SHORT G_M37867_IG11
;; size=16 bbWeight=0.50 PerfScore 3.00
G_M37867_IG07:
mov edi, 40
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M37867_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M37867_IG09:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
call [rax]System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M37867_IG10:
xor edi, edi
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M37867_IG11:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
call [rax]System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
mov edi, eax
mov rsi, 0xD1FFAB1E ; 'System.Int32'
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
call [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
int3
;; size=37 bbWeight=0.50 PerfScore 3.62
-; Total bytes of code 227, prolog size 8, PerfScore 38.88, instruction count 66, allocated bytes for code 227 (MethodHash=48d36c14) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[int]():int:this (FullOpts)
+; Total bytes of code 204, prolog size 8, PerfScore 38.12, instruction count 63, allocated bytes for code 204 (MethodHash=48d36c14) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[int]():int:this (FullOpts)
; ============================================================ -23 (-10.09 % of base) - System.Text.Json.Nodes.JsonValueOfElement:GetValue[long]():long:this ; Assembly listing for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[long]():long:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 8 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 5, 4.50) ref -> rbx this class-hnd single-def <System.Text.Json.Nodes.JsonValueOfElement>
; V01 loc0 [V01 ] ( 2, 2 ) long -> [rbp-0x10] do-not-enreg[X] addr-exposed ld-addr-op
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-; V03 tmp1 [V03,T04] ( 2, 4 ) long -> rax "VirtualCall through function pointer"
-; V04 tmp2 [V04,T05] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
-; V05 tmp3 [V05,T11] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
+;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "VirtualCall through function pointer"
+; V04 tmp2 [V04,T04] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
+; V05 tmp3 [V05,T10] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
; V06 tmp4 [V06,T02] ( 4, 4 ) ref -> rdi class-hnd exact single-def "dup spill" <System.Text.Json.JsonDocument>
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def
-; V08 tmp6 [V08,T07] ( 2, 2 ) int -> rax "Inlining Arg"
+; V08 tmp6 [V08,T06] ( 2, 2 ) int -> rax "Inlining Arg"
;* V09 tmp7 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
;* V13 tmp11 [V13 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[ubyte]>
; V14 tmp12 [V14,T03] ( 4, 4 ) ref -> rdi class-hnd single-def "Inlining Arg" <ubyte[]>
; V15 tmp13 [V15,T01] ( 5, 5 ) int -> rax "Inlining Arg"
;* V16 tmp14 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
-; V18 tmp16 [V18,T06] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V19 tmp17 [V19,T08] ( 2, 2 ) int -> rcx "Inlining Arg"
+; V18 tmp16 [V18,T05] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V19 tmp17 [V19,T07] ( 2, 2 ) int -> rcx "Inlining Arg"
;* V20 tmp18 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V22 tmp20 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V24 tmp22 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V25 tmp23 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V28 tmp26 [V28 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-; V30 tmp28 [V30,T10] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
-; V31 tmp29 [V31,T12] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T14] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T15] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V30 tmp28 [V30,T09] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
+; V31 tmp29 [V31,T11] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V32 tmp30 [V32,T13] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V33 tmp31 [V33,T14] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
;* V34 tmp32 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
;* V35 tmp33 [V35 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
;* V36 tmp34 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V38 tmp36 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
;* V39 tmp37 [V39 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
;* V40 tmp38 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP
;* V41 tmp39 [V41 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
;* V42 tmp40 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp41 [V43 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
-; V44 tmp42 [V44,T09] ( 2, 2 ) int -> rdi "argument with side effect"
-; V45 cse0 [V45,T13] ( 3, 1.50) int -> rcx "CSE #01: moderate"
+; V44 tmp42 [V44,T08] ( 2, 2 ) int -> rdi "argument with side effect"
+; V45 cse0 [V45,T12] ( 3, 1.50) int -> rcx "CSE #01: moderate"
;
; Lcl frame size = 8
G_M48331_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
mov rbx, rdi
;; size=11 bbWeight=1 PerfScore 3.75
G_M48331_IG02:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; System.Text.Json.Nodes.JsonValue
- mov rdx, 0xD1FFAB1E ; token handle
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
- call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ cmp byte ptr [rbx], bl
lea rsi, [rbp-0x10]
mov rdi, rbx
- call rax
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[long](byref):ubyte:this
+ call [rax]System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[long](byref):ubyte:this
test eax, eax
je SHORT G_M48331_IG04
mov rax, qword ptr [rbp-0x10]
- ;; size=52 bbWeight=1 PerfScore 10.00
+ ;; size=29 bbWeight=1 PerfScore 9.25
G_M48331_IG03:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=1 PerfScore 2.25
G_M48331_IG04:
add rbx, 24
mov rdi, gword ptr [rbx]
test rdi, rdi
je SHORT G_M48331_IG10
mov eax, dword ptr [rbx+0x08]
cmp dword ptr [rdi+0x2C], 0
je SHORT G_M48331_IG09
mov rdi, gword ptr [rdi+0x30]
add eax, 8
test rdi, rdi
je SHORT G_M48331_IG05
mov ecx, dword ptr [rdi+0x08]
cmp ecx, eax
jb SHORT G_M48331_IG08
mov edx, eax
lea rdi, bword ptr [rdi+rdx+0x10]
sub ecx, eax
jmp SHORT G_M48331_IG06
;; size=51 bbWeight=0.50 PerfScore 9.88
G_M48331_IG05:
test eax, eax
jne SHORT G_M48331_IG08
xor rdi, rdi
xor ecx, ecx
;; size=8 bbWeight=0.50 PerfScore 0.88
G_M48331_IG06:
cmp ecx, 4
jl SHORT G_M48331_IG07
mov edi, dword ptr [rdi]
shr edi, 28
movzx rdi, dil
jmp SHORT G_M48331_IG11
;; size=16 bbWeight=0.50 PerfScore 3.00
G_M48331_IG07:
mov edi, 40
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M48331_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M48331_IG09:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
call [rax]System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M48331_IG10:
xor edi, edi
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M48331_IG11:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
call [rax]System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
mov edi, eax
mov rsi, 0xD1FFAB1E ; 'System.Int64'
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
call [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
int3
;; size=37 bbWeight=0.50 PerfScore 3.62
-; Total bytes of code 228, prolog size 8, PerfScore 38.88, instruction count 66, allocated bytes for code 228 (MethodHash=948b4334) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[long]():long:this (FullOpts)
+; Total bytes of code 205, prolog size 8, PerfScore 38.12, instruction count 63, allocated bytes for code 205 (MethodHash=948b4334) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[long]():long:this (FullOpts)
; ============================================================ -23 (-10.04 % of base) - System.Text.Json.Nodes.JsonValueOfElement:GetValue[short]():short:this ; Assembly listing for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[short]():short:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 8 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 5, 4.50) ref -> rbx this class-hnd single-def <System.Text.Json.Nodes.JsonValueOfElement>
; V01 loc0 [V01 ] ( 2, 2 ) short -> [rbp-0x10] do-not-enreg[X] addr-exposed ld-addr-op
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-; V03 tmp1 [V03,T04] ( 2, 4 ) long -> rax "VirtualCall through function pointer"
-; V04 tmp2 [V04,T05] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
-; V05 tmp3 [V05,T11] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
+;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "VirtualCall through function pointer"
+; V04 tmp2 [V04,T04] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
+; V05 tmp3 [V05,T10] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
; V06 tmp4 [V06,T02] ( 4, 4 ) ref -> rdi class-hnd exact single-def "dup spill" <System.Text.Json.JsonDocument>
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def
-; V08 tmp6 [V08,T07] ( 2, 2 ) int -> rax "Inlining Arg"
+; V08 tmp6 [V08,T06] ( 2, 2 ) int -> rax "Inlining Arg"
;* V09 tmp7 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
;* V13 tmp11 [V13 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[ubyte]>
; V14 tmp12 [V14,T03] ( 4, 4 ) ref -> rdi class-hnd single-def "Inlining Arg" <ubyte[]>
; V15 tmp13 [V15,T01] ( 5, 5 ) int -> rax "Inlining Arg"
;* V16 tmp14 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
-; V18 tmp16 [V18,T06] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V19 tmp17 [V19,T08] ( 2, 2 ) int -> rcx "Inlining Arg"
+; V18 tmp16 [V18,T05] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V19 tmp17 [V19,T07] ( 2, 2 ) int -> rcx "Inlining Arg"
;* V20 tmp18 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V22 tmp20 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V24 tmp22 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V25 tmp23 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V28 tmp26 [V28 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-; V30 tmp28 [V30,T10] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
-; V31 tmp29 [V31,T12] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T14] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T15] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V30 tmp28 [V30,T09] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
+; V31 tmp29 [V31,T11] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V32 tmp30 [V32,T13] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V33 tmp31 [V33,T14] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
;* V34 tmp32 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
;* V35 tmp33 [V35 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
;* V36 tmp34 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V38 tmp36 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
;* V39 tmp37 [V39 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
;* V40 tmp38 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP
;* V41 tmp39 [V41 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
;* V42 tmp40 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp41 [V43 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
-; V44 tmp42 [V44,T09] ( 2, 2 ) int -> rdi "argument with side effect"
-; V45 cse0 [V45,T13] ( 3, 1.50) int -> rcx "CSE #01: moderate"
+; V44 tmp42 [V44,T08] ( 2, 2 ) int -> rdi "argument with side effect"
+; V45 cse0 [V45,T12] ( 3, 1.50) int -> rcx "CSE #01: moderate"
;
; Lcl frame size = 8
G_M15051_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
mov rbx, rdi
;; size=11 bbWeight=1 PerfScore 3.75
G_M15051_IG02:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; System.Text.Json.Nodes.JsonValue
- mov rdx, 0xD1FFAB1E ; token handle
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
- call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ cmp byte ptr [rbx], bl
lea rsi, [rbp-0x10]
mov rdi, rbx
- call rax
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[short](byref):ubyte:this
+ call [rax]System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[short](byref):ubyte:this
test eax, eax
je SHORT G_M15051_IG04
movsx rax, word ptr [rbp-0x10]
- ;; size=53 bbWeight=1 PerfScore 12.00
+ ;; size=30 bbWeight=1 PerfScore 11.25
G_M15051_IG03:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=1 PerfScore 2.25
G_M15051_IG04:
add rbx, 24
mov rdi, gword ptr [rbx]
test rdi, rdi
je SHORT G_M15051_IG10
mov eax, dword ptr [rbx+0x08]
cmp dword ptr [rdi+0x2C], 0
je SHORT G_M15051_IG09
mov rdi, gword ptr [rdi+0x30]
add eax, 8
test rdi, rdi
je SHORT G_M15051_IG05
mov ecx, dword ptr [rdi+0x08]
cmp ecx, eax
jb SHORT G_M15051_IG08
mov edx, eax
lea rdi, bword ptr [rdi+rdx+0x10]
sub ecx, eax
jmp SHORT G_M15051_IG06
;; size=51 bbWeight=0.50 PerfScore 9.88
G_M15051_IG05:
test eax, eax
jne SHORT G_M15051_IG08
xor rdi, rdi
xor ecx, ecx
;; size=8 bbWeight=0.50 PerfScore 0.88
G_M15051_IG06:
cmp ecx, 4
jl SHORT G_M15051_IG07
mov edi, dword ptr [rdi]
shr edi, 28
movzx rdi, dil
jmp SHORT G_M15051_IG11
;; size=16 bbWeight=0.50 PerfScore 3.00
G_M15051_IG07:
mov edi, 40
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M15051_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M15051_IG09:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
call [rax]System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M15051_IG10:
xor edi, edi
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M15051_IG11:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
call [rax]System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
mov edi, eax
mov rsi, 0xD1FFAB1E ; 'System.Int16'
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
call [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
int3
;; size=37 bbWeight=0.50 PerfScore 3.62
-; Total bytes of code 229, prolog size 8, PerfScore 40.88, instruction count 66, allocated bytes for code 229 (MethodHash=4815c534) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[short]():short:this (FullOpts)
+; Total bytes of code 206, prolog size 8, PerfScore 40.12, instruction count 63, allocated bytes for code 206 (MethodHash=4815c534) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[short]():short:this (FullOpts)
; ============================================================ -23 (-10.09 % of base) - System.Text.Json.Nodes.JsonValueOfElement:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this ; Assembly listing for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 8 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 5, 4.50) ref -> rbx this class-hnd single-def <System.Text.Json.Nodes.JsonValueOfElement>
; V01 loc0 [V01 ] ( 2, 2 ) struct ( 8) [rbp-0x10] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-; V03 tmp1 [V03,T04] ( 2, 4 ) long -> rax "VirtualCall through function pointer"
-; V04 tmp2 [V04,T05] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
-; V05 tmp3 [V05,T11] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
+;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "VirtualCall through function pointer"
+; V04 tmp2 [V04,T04] ( 3, 3 ) byref -> rbx single-def "Inlining Arg"
+; V05 tmp3 [V05,T10] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
; V06 tmp4 [V06,T02] ( 4, 4 ) ref -> rdi class-hnd exact single-def "dup spill" <System.Text.Json.JsonDocument>
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def
-; V08 tmp6 [V08,T07] ( 2, 2 ) int -> rax "Inlining Arg"
+; V08 tmp6 [V08,T06] ( 2, 2 ) int -> rax "Inlining Arg"
;* V09 tmp7 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
;* V13 tmp11 [V13 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[ubyte]>
; V14 tmp12 [V14,T03] ( 4, 4 ) ref -> rdi class-hnd single-def "Inlining Arg" <ubyte[]>
; V15 tmp13 [V15,T01] ( 5, 5 ) int -> rax "Inlining Arg"
;* V16 tmp14 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
-; V18 tmp16 [V18,T06] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V19 tmp17 [V19,T08] ( 2, 2 ) int -> rcx "Inlining Arg"
+; V18 tmp16 [V18,T05] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V19 tmp17 [V19,T07] ( 2, 2 ) int -> rcx "Inlining Arg"
;* V20 tmp18 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V22 tmp20 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V24 tmp22 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V25 tmp23 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
; V26 tmp24 [V26 ] ( 2, 2 ) ubyte -> [rbp-0x10] do-not-enreg[X] addr-exposed "field V01.hasValue (fldOffset=0x0)" P-DEP
; V27 tmp25 [V27 ] ( 2, 2 ) int -> [rbp-0x0C] do-not-enreg[X] addr-exposed "field V01.value (fldOffset=0x4)" P-DEP
;* V28 tmp26 [V28 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V30 tmp28 [V30 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
;* V31 tmp29 [V31 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T10] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T12] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
-; V34 tmp32 [V34,T14] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
-; V35 tmp33 [V35,T15] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V32 tmp30 [V32,T09] ( 3, 1.50) byref -> rdi "field V13._reference (fldOffset=0x0)" P-INDEP
+; V33 tmp31 [V33,T11] ( 3, 1.50) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V34 tmp32 [V34,T13] ( 2, 1 ) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V35 tmp33 [V35,T14] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
;* V36 tmp34 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
;* V38 tmp36 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V39 tmp37 [V39 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V40 tmp38 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
;* V41 tmp39 [V41 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
;* V42 tmp40 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp41 [V43 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
;* V44 tmp42 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP
;* V45 tmp43 [V45 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
-; V46 tmp44 [V46,T09] ( 2, 2 ) int -> rdi "argument with side effect"
-; V47 cse0 [V47,T13] ( 3, 1.50) int -> rcx "CSE #01: moderate"
+; V46 tmp44 [V46,T08] ( 2, 2 ) int -> rdi "argument with side effect"
+; V47 cse0 [V47,T12] ( 3, 1.50) int -> rcx "CSE #01: moderate"
;
; Lcl frame size = 8
G_M35659_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
mov rbx, rdi
;; size=11 bbWeight=1 PerfScore 3.75
G_M35659_IG02:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; System.Text.Json.Nodes.JsonValue
- mov rdx, 0xD1FFAB1E ; token handle
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_VIRTUAL_FUNC_PTR
- call [rax]CORINFO_HELP_VIRTUAL_FUNC_PTR
+ cmp byte ptr [rbx], bl
lea rsi, [rbp-0x10]
mov rdi, rbx
- call rax
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[System.Nullable`1[int]](byref):ubyte:this
+ call [rax]System.Text.Json.Nodes.JsonValueOfElement:TryGetValue[System.Nullable`1[int]](byref):ubyte:this
test eax, eax
je SHORT G_M35659_IG04
mov rax, qword ptr [rbp-0x10]
- ;; size=52 bbWeight=1 PerfScore 10.00
+ ;; size=29 bbWeight=1 PerfScore 9.25
G_M35659_IG03:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=1 PerfScore 2.25
G_M35659_IG04:
add rbx, 24
mov rdi, gword ptr [rbx]
test rdi, rdi
je SHORT G_M35659_IG10
mov eax, dword ptr [rbx+0x08]
cmp dword ptr [rdi+0x2C], 0
je SHORT G_M35659_IG09
mov rdi, gword ptr [rdi+0x30]
add eax, 8
test rdi, rdi
je SHORT G_M35659_IG05
mov ecx, dword ptr [rdi+0x08]
cmp ecx, eax
jb SHORT G_M35659_IG08
mov edx, eax
lea rdi, bword ptr [rdi+rdx+0x10]
sub ecx, eax
jmp SHORT G_M35659_IG06
;; size=51 bbWeight=0.50 PerfScore 9.88
G_M35659_IG05:
test eax, eax
jne SHORT G_M35659_IG08
xor rdi, rdi
xor ecx, ecx
;; size=8 bbWeight=0.50 PerfScore 0.88
G_M35659_IG06:
cmp ecx, 4
jl SHORT G_M35659_IG07
mov edi, dword ptr [rdi]
shr edi, 28
movzx rdi, dil
jmp SHORT G_M35659_IG11
;; size=16 bbWeight=0.50 PerfScore 3.00
G_M35659_IG07:
mov edi, 40
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M35659_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M35659_IG09:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
call [rax]System.Text.Json.ThrowHelper:ThrowObjectDisposedException_JsonDocument()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M35659_IG10:
xor edi, edi
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M35659_IG11:
mov rax, 0xD1FFAB1E ; code for System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
call [rax]System.Text.Json.JsonReaderHelper:ToValueKind(ubyte):ubyte
mov edi, eax
mov rsi, 0xD1FFAB1E ; 'System.Nullable`1[System.Int32]'
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
call [rax]System.Text.Json.ThrowHelper:ThrowInvalidOperationException_NodeUnableToConvertElement(ubyte,System.Type)
int3
;; size=37 bbWeight=0.50 PerfScore 3.62
-; Total bytes of code 228, prolog size 8, PerfScore 38.88, instruction count 66, allocated bytes for code 228 (MethodHash=e58a74b4) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
+; Total bytes of code 205, prolog size 8, PerfScore 38.12, instruction count 63, allocated bytes for code 205 (MethodHash=e58a74b4) for method System.Text.Json.Nodes.JsonValueOfElement:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
; ============================================================ Larger list of diffs: https://gist.github.com/MihuBot/2133ef17d3acec6edb357e529d4891eb |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 16 minutes 36 seconds (remote runner delay: 1 minute 19 seconds).
dotnet/runtime#112353
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: