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] [MichalPetryka] Move GetMethodTable to JIT #543
Comments
Top method regressions180 (48.39 % of base) - System.StubHelpers.AsAnyMarshaler:ConvertLayoutToNative(System.Object,int):long:this ; Assembly listing for method System.StubHelpers.AsAnyMarshaler:ConvertLayoutToNative(System.Object,int):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; 7 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 10 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 6, 4.50) byref -> [rbp-0x88] this single-def
-; V01 arg1 [V01,T03] ( 4, 3.50) ref -> [rbp-0x90] class-hnd single-def <System.Object>
-; V02 arg2 [V02,T02] ( 4, 4 ) int -> r15 single-def
-; V03 loc0 [V03,T09] ( 3, 2.50) long -> rbx
+; V00 this [V00,T01] ( 6, 4.50) byref -> [rbp-0x98] this single-def
+; V01 arg1 [V01,T02] ( 6, 4.50) ref -> [rbp-0xA0] class-hnd single-def <System.Object>
+; V02 arg2 [V02,T03] ( 4, 4 ) int -> r14 single-def
+; V03 loc0 [V03,T08] ( 4, 3 ) long -> rbx
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V05 tmp1 [V05 ] ( 4, 8 ) ref -> [rbp-0x30] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType>
; V06 tmp2 [V06 ] ( 4, 8 ) struct (16) [rbp-0x40] do-not-enreg[SFA] multireg-arg ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle>
; V07 tmp3 [V07,T04] ( 3, 5 ) ref -> rdi class-hnd exact single-def "dup spill" <System.RuntimeType>
;* V08 tmp4 [V08 ] ( 0, 0 ) byref -> zero-ref
;* V09 tmp5 [V09 ] ( 0, 0 ) ref -> zero-ref single-def
;* V10 tmp6 [V10 ] ( 0, 0 ) byref -> zero-ref
; V11 tmp7 [V11,T10] ( 3, 2 ) long -> rsi
;* V12 tmp8 [V12 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V13 tmp9 [V13 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.Runtime.CompilerServices.QCallTypeHandle>
;* V14 tmp10 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V15 tmp11 [V15 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V16 tmp12 [V16,T07] ( 2, 4 ) long -> rax "Single return block return value"
-; V17 FramesRoot [V17,T01] ( 6, 6 ) long -> r13 "Pinvoke FrameListRoot"
-; V18 PInvokeFrame [V18 ] ( 8, 8 ) struct (64) [rbp-0x80] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
-; V19 tmp15 [V19,T05] ( 3, 5 ) long -> [rbp-0x40] do-not-enreg[] "field V06._ptr (fldOffset=0x0)" P-DEP
-; V20 tmp16 [V20,T06] ( 3, 5 ) long -> [rbp-0x38] do-not-enreg[] "field V06._handle (fldOffset=0x8)" P-DEP
-;* V21 tmp17 [V21 ] ( 0, 0 ) long -> zero-ref "field V13._ptr (fldOffset=0x0)" P-INDEP
-;* V22 tmp18 [V22 ] ( 0, 0 ) long -> zero-ref "field V13._handle (fldOffset=0x8)" P-INDEP
-; V23 cse0 [V23,T08] ( 3, 3 ) ref -> [rbp-0x98] spill-single-def "CSE #01: aggressive"
+; V16 tmp12 [V16 ] ( 3, 1.50) long -> [rbp-0x48] do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
+; V17 tmp13 [V17 ] ( 2, 1 ) long -> [rbp-0x50] do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
+; V18 tmp14 [V18,T12] ( 2, 1 ) long -> rax "Inline stloc first use temp"
+; V19 tmp15 [V19,T11] ( 2, 2 ) byref -> [rbp-0xA8] spill-single-def "Inlining Arg"
+;* V20 tmp16 [V20 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V21 tmp17 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Runtime.CompilerServices.RawData>
+;* V22 tmp18 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Runtime.CompilerServices.RawData>
+; V23 tmp19 [V23,T07] ( 2, 4 ) long -> rax "Single return block return value"
+; V24 FramesRoot [V24,T00] ( 10, 8 ) long -> r13 "Pinvoke FrameListRoot"
+; V25 PInvokeFrame [V25 ] ( 12, 10 ) struct (64) [rbp-0x90] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
+; V26 tmp22 [V26,T05] ( 3, 5 ) long -> [rbp-0x40] do-not-enreg[] "field V06._ptr (fldOffset=0x0)" P-DEP
+; V27 tmp23 [V27,T06] ( 3, 5 ) long -> [rbp-0x38] do-not-enreg[] "field V06._handle (fldOffset=0x8)" P-DEP
+;* V28 tmp24 [V28 ] ( 0, 0 ) long -> zero-ref "field V13._ptr (fldOffset=0x0)" P-INDEP
+;* V29 tmp25 [V29 ] ( 0, 0 ) long -> zero-ref "field V13._handle (fldOffset=0x8)" P-INDEP
+; V30 cse0 [V30,T09] ( 3, 3 ) ref -> [rbp-0xB0] spill-single-def "CSE #02: aggressive"
;
-; Lcl frame size = 120
+; Lcl frame size = 136
G_M52896_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 120
+ sub rsp, 136
vzeroupper
- lea rbp, [rsp+0xA0]
+ lea rbp, [rsp+0xB0]
xor eax, eax
mov qword ptr [rbp-0x30], rax
- mov bword ptr [rbp-0x88], rdi
- mov r14, rsi
- mov r15d, edx
- ;; size=44 bbWeight=1 PerfScore 10.50
+ mov bword ptr [rbp-0x98], rdi
+ mov r15, rsi
+ mov r14d, edx
+ ;; size=47 bbWeight=1 PerfScore 10.50
G_M52896_IG02:
- lea rdi, [rbp-0x78]
+ lea rdi, [rbp-0x88]
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r13, rax
mov rdi, rsp
- mov qword ptr [rbp-0x60], rdi
+ mov qword ptr [rbp-0x70], rdi
mov rdi, rbp
- mov qword ptr [rbp-0x50], rdi
- mov gword ptr [rbp-0x90], r14
- mov rdi, r14
+ mov qword ptr [rbp-0x60], rdi
+ mov gword ptr [rbp-0xA0], r15
+ mov rdi, r15
call System.Object:GetType():System.Type:this
mov r12, rax
- mov gword ptr [rbp-0x98], r12
+ mov gword ptr [rbp-0xB0], r12
mov gword ptr [rbp-0x30], r12
vxorps xmm0, xmm0, xmm0
vmovups xmmword ptr [rbp-0x40], xmm0
lea rdi, [rbp-0x30]
mov qword ptr [rbp-0x40], rdi
mov rdi, gword ptr [rbp-0x30]
test rdi, rdi
jne SHORT G_M52896_IG04
- ;; size=81 bbWeight=1 PerfScore 13.83
+ ;; size=84 bbWeight=1 PerfScore 13.83
G_M52896_IG03:
xor esi, esi
jmp SHORT G_M52896_IG05
;; size=4 bbWeight=0.50 PerfScore 1.12
G_M52896_IG04:
mov rsi, qword ptr [rdi+0x18]
;; size=4 bbWeight=0.50 PerfScore 1.00
G_M52896_IG05:
mov qword ptr [rbp-0x38], rsi
lea rdi, [rbp-0x30]
mov rsi, qword ptr [rbp-0x38]
xor edx, edx
mov rax, 0xD1FFAB1E ; function address
- mov qword ptr [rbp-0x68], rax
+ mov qword ptr [rbp-0x78], rax
lea rax, G_M52896_IG08
- mov qword ptr [rbp-0x58], rax
- lea rax, [rbp-0x78]
+ mov qword ptr [rbp-0x68], rax
+ lea rax, [rbp-0x88]
mov qword ptr [r13+0x08], rax
mov byte ptr [r13+0x04], 0
- ;; size=52 bbWeight=1 PerfScore 8.50
+ ;; size=55 bbWeight=1 PerfScore 8.50
G_M52896_IG06:
mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:<SizeOfHelper>g____PInvoke|1_0(System.Runtime.CompilerServices.QCallTypeHandle,int):int
;; size=10 bbWeight=1 PerfScore 0.25
G_M52896_IG07:
call [rax]System.Runtime.InteropServices.Marshal:<SizeOfHelper>g____PInvoke|1_0(System.Runtime.CompilerServices.QCallTypeHandle,int):int
;; size=2 bbWeight=1 PerfScore 3.00
G_M52896_IG08:
mov byte ptr [r13+0x04], 1
mov rcx, 0xD1FFAB1E ; function address
cmp dword ptr [rcx], 0
je SHORT G_M52896_IG09
mov rdi, 0xD1FFAB1E
call [rdi]CORINFO_HELP_STOP_FOR_GC
;; size=32 bbWeight=1 PerfScore 8.50
G_M52896_IG09:
- mov rdi, qword ptr [rbp-0x70]
+ mov rdi, qword ptr [rbp-0x80]
mov qword ptr [r13+0x08], rdi
mov edi, eax
mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.NativeMemory:Alloc(ulong):ulong
call [rax]System.Runtime.InteropServices.NativeMemory:Alloc(ulong):ulong
mov rbx, rax
- test r15d, 0xD1FFAB1E
- je SHORT G_M52896_IG11
- ;; size=34 bbWeight=1 PerfScore 7.00
+ test r14d, 0xD1FFAB1E
+ je G_M52896_IG16
+ ;; size=38 bbWeight=1 PerfScore 7.00
G_M52896_IG10:
- mov r14, bword ptr [rbp-0x88]
- cmp byte ptr [r14], r14b
- lea rdx, bword ptr [r14+0x08]
- mov rdi, gword ptr [rbp-0x90]
- mov rsi, rbx
- mov rax, 0xD1FFAB1E ; code for System.StubHelpers.StubHelpers:FmtClassUpdateNativeInternal(System.Object,ulong,byref)
- call [rax]System.StubHelpers.StubHelpers:FmtClassUpdateNativeInternal(System.Object,ulong,byref)
- mov bword ptr [rbp-0x88], r14
- ;; size=43 bbWeight=0.50 PerfScore 5.00
+ mov r15, bword ptr [rbp-0x98]
+ cmp byte ptr [r15], r15b
+ mov bword ptr [rbp-0x98], r15
+ lea r12, bword ptr [r15+0x08]
+ mov bword ptr [rbp-0xA8], r12
+ mov rdi, gword ptr [rbp-0xA0]
+ mov rdi, qword ptr [rdi]
+ lea rsi, [rbp-0x48]
+ lea rdx, [rbp-0x50]
+ mov rax, 0xD1FFAB1E ; function address
+ mov qword ptr [rbp-0x78], rax
+ lea rax, G_M52896_IG13
+ mov qword ptr [rbp-0x68], rax
+ lea rax, [rbp-0x88]
+ mov qword ptr [r13+0x08], rax
+ mov byte ptr [r13+0x04], 0
+ ;; size=87 bbWeight=0.50 PerfScore 8.12
G_M52896_IG11:
- test r15d, 0xD1FFAB1E
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.Marshal:<TryGetStructMarshalStub>g____PInvoke|23_0(long,ulong,ulong):int
+ ;; size=10 bbWeight=0.50 PerfScore 0.12
+G_M52896_IG12:
+ call [rax]System.Runtime.InteropServices.Marshal:<TryGetStructMarshalStub>g____PInvoke|23_0(long,ulong,ulong):int
+ ;; size=2 bbWeight=0.50 PerfScore 1.50
+G_M52896_IG13:
+ mov byte ptr [r13+0x04], 1
+ mov rcx, 0xD1FFAB1E ; function address
+ cmp dword ptr [rcx], 0
+ je SHORT G_M52896_IG14
+ mov rdi, 0xD1FFAB1E
+ call [rdi]CORINFO_HELP_STOP_FOR_GC
+ ;; size=32 bbWeight=0.50 PerfScore 4.25
+G_M52896_IG14:
+ mov rdi, qword ptr [rbp-0x80]
+ mov qword ptr [r13+0x08], rdi
+ cmp qword ptr [rbp-0x48], 0
je SHORT G_M52896_IG15
+ mov rax, qword ptr [rbp-0x48]
+ mov r15, gword ptr [rbp-0xA0]
+ lea rdi, bword ptr [r15+0x08]
+ mov rsi, rbx
+ mov rcx, bword ptr [rbp-0xA8]
+ xor edx, edx
+ call rax
+ jmp SHORT G_M52896_IG16
+ ;; size=46 bbWeight=0.50 PerfScore 7.00
+G_M52896_IG15:
+ mov r15, gword ptr [rbp-0xA0]
+ lea rsi, bword ptr [r15+0x08]
+ mov rdi, rbx
+ mov rdx, qword ptr [rbp-0x50]
+ mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
+ call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
+ ;; size=30 bbWeight=0.50 PerfScore 3.00
+G_M52896_IG16:
+ test r14d, 0xD1FFAB1E
+ je SHORT G_M52896_IG20
;; size=9 bbWeight=1 PerfScore 1.25
-G_M52896_IG12:
- mov r14, bword ptr [rbp-0x88]
- mov dword ptr [r14+0x18], 2
+G_M52896_IG17:
+ mov r15, bword ptr [rbp-0x98]
+ mov dword ptr [r15+0x18], 2
;; size=15 bbWeight=0.50 PerfScore 1.00
-G_M52896_IG13:
- mov rsi, gword ptr [rbp-0x98]
- mov rdi, r14
+G_M52896_IG18:
+ mov rsi, gword ptr [rbp-0xB0]
+ mov rdi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov rax, rbx
;; size=18 bbWeight=1 PerfScore 2.50
-G_M52896_IG14:
- add rsp, 120
+G_M52896_IG19:
+ add rsp, 136
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=1 PerfScore 4.25
-G_M52896_IG15:
- mov r14, bword ptr [rbp-0x88]
- jmp SHORT G_M52896_IG13
+ ;; size=18 bbWeight=1 PerfScore 4.25
+G_M52896_IG20:
+ mov r15, bword ptr [rbp-0x98]
+ jmp SHORT G_M52896_IG18
;; size=9 bbWeight=0.50 PerfScore 1.50
-; Total bytes of code 372, prolog size 31, PerfScore 69.21, instruction count 90, allocated bytes for code 372 (MethodHash=1187315f) for method System.StubHelpers.AsAnyMarshaler:ConvertLayoutToNative(System.Object,int):long:this (FullOpts)
+; Total bytes of code 552, prolog size 34, PerfScore 88.21, instruction count 124, allocated bytes for code 552 (MethodHash=1187315f) for method System.StubHelpers.AsAnyMarshaler:ConvertLayoutToNative(System.Object,int):long:this (FullOpts) 129 (87.76 % of base) - System.Array:CopyImplCastCheckEachElement(System.Array,int,System.Array,int,int) ; Assembly listing for method System.Array:CopyImplCastCheckEachElement(System.Array,int,System.Array,int,int) (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
-; partially interruptible
+; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 5 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 8 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T04] ( 4, 4 ) ref -> rdi class-hnd single-def <System.Array>
-; V01 arg1 [V01,T05] ( 3, 3 ) int -> rsi single-def
-; V02 arg2 [V02,T03] ( 5, 5 ) ref -> rdx class-hnd single-def <System.Array>
-; V03 arg3 [V03,T06] ( 3, 3 ) int -> rcx single-def
-; V04 arg4 [V04,T02] ( 4, 7 ) int -> rbx single-def
-; V05 loc0 [V05,T09] ( 2, 5 ) long -> r15
-; V06 loc1 [V06,T07] ( 2, 5 ) byref -> r14 single-def
-; V07 loc2 [V07,T08] ( 2, 5 ) byref -> r13 single-def
-; V08 loc3 [V08,T00] ( 5, 17 ) int -> r12
-;* V09 loc4 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object>
+; V00 arg0 [V00,T13] ( 4, 4 ) ref -> rdi class-hnd single-def <System.Array>
+; V01 arg1 [V01,T15] ( 3, 3 ) int -> rsi single-def
+; V02 arg2 [V02,T14] ( 4, 4 ) ref -> rdx class-hnd single-def <System.Array>
+; V03 arg3 [V03,T16] ( 3, 3 ) int -> rcx single-def
+; V04 arg4 [V04,T11] ( 4, 7 ) int -> rbx single-def
+; V05 loc0 [V05,T10] ( 5, 14 ) long -> r15
+; V06 loc1 [V06,T17] ( 2, 5 ) byref -> r14 single-def
+; V07 loc2 [V07,T18] ( 2, 5 ) byref -> r13 single-def
+; V08 loc3 [V08,T06] ( 6, 21 ) int -> r12
+; V09 loc4 [V09,T09] ( 5, 14 ) ref -> rsi class-hnd <System.Object>
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V11 tmp1 [V11 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
-;* V12 tmp2 [V12 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
-; V13 cse0 [V13,T01] ( 3, 12 ) long -> [rbp-0x30] spill-single-def "CSE #01: aggressive"
+; V11 tmp1 [V11,T12] ( 3, 8 ) ref -> rsi class-hnd "Inline return value spill temp" <System.Object>
+; V12 tmp2 [V12,T07] ( 4, 21 ) long -> rdi "Inline stloc first use temp"
+; V13 tmp3 [V13,T19] ( 2, 4 ) int -> r10 "Inline return value spill temp"
+;* V14 tmp4 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <int[]>
+; V15 tmp5 [V15,T04] ( 4, 34 ) byref -> rax "Inline stloc first use temp"
+; V16 tmp6 [V16,T03] ( 4, 49 ) int -> rcx "Inline stloc first use temp"
+; V17 tmp7 [V17,T01] ( 5, 65 ) int -> rdx "Inline stloc first use temp"
+; V18 tmp8 [V18,T02] ( 5, 58 ) byref -> r8 "Inline stloc first use temp"
+; V19 tmp9 [V19,T00] ( 5, 66 ) int -> r9 "Inline stloc first use temp"
+; V20 tmp10 [V20,T05] ( 2, 32 ) long -> r10 "Inline stloc first use temp"
+; V21 tmp11 [V21,T08] ( 3, 18 ) long -> r10 "Inline stloc first use temp"
+;* V22 tmp12 [V22 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+; V23 tmp13 [V23,T21] ( 2, 2 ) ref -> rax "Field obj"
+; V24 cse0 [V24,T20] ( 3, 3 ) long -> rax "CSE #01: moderate"
;
; Lcl frame size = 8
G_M43951_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
lea rbp, [rsp+0x30]
mov ebx, r8d
;; size=19 bbWeight=1 PerfScore 7.75
G_M43951_IG02:
mov rax, qword ptr [rdx]
mov r15, qword ptr [rax+0x30]
- lea rax, bword ptr [rdi+0x08]
+ lea r8, bword ptr [rdi+0x08]
mov rdi, qword ptr [rdi]
mov edi, dword ptr [rdi+0x04]
add rdi, -16
- add rdi, rax
+ add rdi, r8
movsxd rsi, esi
lea r14, bword ptr [rdi+8*rsi]
- lea rsi, bword ptr [rdx+0x08]
- mov rdi, qword ptr [rdx]
- mov edi, dword ptr [rdi+0x04]
+ add rdx, 8
+ mov edi, dword ptr [rax+0x04]
add rdi, -16
- add rsi, rdi
- movsxd rdi, ecx
- lea r13, bword ptr [rsi+8*rdi]
+ add rdi, rdx
+ movsxd rsi, ecx
+ lea r13, bword ptr [rdi+8*rsi]
xor r12d, r12d
test ebx, ebx
- jle SHORT G_M43951_IG04
- ;; size=62 bbWeight=1 PerfScore 17.00
+ jle G_M43951_IG13
+ ;; size=63 bbWeight=1 PerfScore 14.75
G_M43951_IG03:
- movsxd rax, r12d
- mov qword ptr [rbp-0x30], rax
- mov rsi, gword ptr [r14+8*rax]
+ movsxd rdi, r12d
+ mov rsi, gword ptr [r14+8*rdi]
+ test rsi, rsi
+ je SHORT G_M43951_IG09
+ ;; size=12 bbWeight=4 PerfScore 14.00
+G_M43951_IG04:
+ mov rdi, qword ptr [rsi]
+ cmp rdi, r15
+ je SHORT G_M43951_IG09
+ ;; size=8 bbWeight=2 PerfScore 6.50
+G_M43951_IG05:
+ mov rax, 0xD1FFAB1E ; data for System.Runtime.CompilerServices.CastHelpers:s_table
+ mov rax, gword ptr [rax]
+ add rax, 16
+ rorx rcx, rdi, 32
+ xor rcx, r15
+ mov rdx, 0xD1FFAB1E
+ imul rcx, rdx
+ mov edx, dword ptr [rax]
+ shrx rcx, rcx, rdx
+ xor edx, edx
+ align [0 bytes for IG06]
+ ;; size=49 bbWeight=1 PerfScore 8.25
+G_M43951_IG06:
+ lea r8d, [rcx+0x01]
+ movsxd r8, r8d
+ lea r8, [r8+2*r8]
+ lea r8, bword ptr [rax+8*r8]
+ mov r9d, dword ptr [r8]
+ mov r10, qword ptr [r8+0x08]
+ and r9d, -2
+ cmp r10, rdi
+ jne SHORT G_M43951_IG10
+ ;; size=31 bbWeight=16 PerfScore 116.00
+G_M43951_IG07:
+ mov r10, r15
+ xor r10, qword ptr [r8+0x10]
+ cmp r10, 1
+ ja SHORT G_M43951_IG10
+ ;; size=13 bbWeight=8 PerfScore 36.00
+G_M43951_IG08:
+ cmp r9d, dword ptr [r8]
+ jne SHORT G_M43951_IG11
+ cmp r10d, 1
+ jne SHORT G_M43951_IG11
+ ;; size=11 bbWeight=2 PerfScore 10.50
+G_M43951_IG09:
+ jmp SHORT G_M43951_IG12
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M43951_IG10:
+ test r9d, r9d
+ je SHORT G_M43951_IG11
+ inc edx
+ add ecx, edx
+ and ecx, dword ptr [rax+0x04]
+ cmp edx, 8
+ jl SHORT G_M43951_IG06
+ ;; size=17 bbWeight=16 PerfScore 96.00
+G_M43951_IG11:
mov rdi, r15
- mov rcx, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.CastHelpers:ChkCastAny(ulong,System.Object):System.Object
- call [rcx]System.Runtime.CompilerServices.CastHelpers:ChkCastAny(ulong,System.Object):System.Object
- mov rdi, qword ptr [rbp-0x30]
- lea rdi, bword ptr [r13+8*rdi]
+ call System.Runtime.CompilerServices.CastHelpers:ChkCastAny_NoCacheLookup(ulong,System.Object):System.Object
mov rsi, rax
+ ;; size=11 bbWeight=2 PerfScore 3.00
+G_M43951_IG12:
+ movsxd rdi, r12d
+ lea rdi, bword ptr [r13+8*rdi]
call CORINFO_HELP_CHECKED_ASSIGN_REF
inc r12d
cmp r12d, ebx
- jl SHORT G_M43951_IG03
- ;; size=51 bbWeight=4 PerfScore 50.00
-G_M43951_IG04:
+ jl G_M43951_IG03
+ ;; size=25 bbWeight=4 PerfScore 19.00
+G_M43951_IG13:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
-; Total bytes of code 147, prolog size 16, PerfScore 79.00, instruction count 49, allocated bytes for code 147 (MethodHash=e2b95450) for method System.Array:CopyImplCastCheckEachElement(System.Array,int,System.Array,int,int) (FullOpts)
+; Total bytes of code 276, prolog size 19, PerfScore 340.00, instruction count 87, allocated bytes for code 280 (MethodHash=e2b95450) for method System.Array:CopyImplCastCheckEachElement(System.Array,int,System.Array,int,int) (FullOpts) 45 (5.74 % of base) - System.Xml.Schema.TypedObject:Equals(System.Xml.Schema.TypedObject):ubyte:this ; Assembly listing for method System.Xml.Schema.TypedObject:Equals(System.Xml.Schema.TypedObject):ubyte:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 58 single block inlinees; 12 inlinees without PGO data
+; 0 inlinees with PGO data; 50 single block inlinees; 12 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 14, 8.50) ref -> rbx this class-hnd single-def <System.Xml.Schema.TypedObject>
; V01 arg1 [V01,T01] ( 14, 8.50) ref -> r15 class-hnd single-def <System.Xml.Schema.TypedObject>
-; V02 loc0 [V02,T04] ( 8, 4 ) ref -> rax class-hnd single-def <System.Array>
-; V03 loc1 [V03,T02] ( 9, 4.50) ref -> rdi class-hnd exact single-def <System.Xml.Schema.XmlAtomicValue[]>
-; V04 loc2 [V04,T05] ( 8, 4 ) ref -> rax class-hnd single-def <System.Array>
-; V05 loc3 [V05,T03] ( 9, 4.50) ref -> rdi class-hnd exact single-def <System.Xml.Schema.XmlAtomicValue[]>
+; V02 loc0 [V02,T10] ( 7, 3.50) ref -> rax class-hnd single-def <System.Array>
+; V03 loc1 [V03,T02] ( 8, 4 ) ref -> rdi class-hnd exact single-def <System.Xml.Schema.XmlAtomicValue[]>
+; V04 loc2 [V04,T11] ( 7, 3.50) ref -> rax class-hnd single-def <System.Array>
+; V05 loc3 [V05,T03] ( 8, 4 ) ref -> rdi class-hnd exact single-def <System.Xml.Schema.XmlAtomicValue[]>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V07 tmp1 [V07 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
;* V08 tmp2 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Xml.Schema.XmlSchemaDatatype>
;* V09 tmp3 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Object>
;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Object>
;* V11 tmp5 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Object>
;* V12 tmp6 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Object>
;* V13 tmp7 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Object>
;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Xml.Schema.XmlSchemaDatatype>
;* V15 tmp9 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Object>
;* V16 tmp10 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Xml.Schema.XmlSchemaDatatype>
;* V17 tmp11 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Xml.Schema.TypedObject+DecimalStruct>
;* V18 tmp12 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Xml.Schema.TypedObject+DecimalStruct>
-; V19 tmp13 [V19,T36] ( 2, 1 ) int -> rsi "Inline return value spill temp"
+; V19 tmp13 [V19,T37] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V20 tmp14 [V20 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V21 tmp15 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
-; V22 tmp16 [V22,T23] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
+; V21 tmp15 [V21,T20] ( 3, 3 ) int -> rsi "impAppendStmt"
+; V22 tmp16 [V22,T24] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
;* V23 tmp17 [V23 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
-; V24 tmp18 [V24,T06] ( 4, 4 ) int -> rsi "Inlining Arg"
+; V24 tmp18 [V24,T04] ( 4, 4 ) int -> rsi "Inlining Arg"
;* V25 tmp19 [V25 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-; V26 tmp20 [V26,T24] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
-; V27 tmp21 [V27,T37] ( 2, 1 ) int -> rdi "Inline return value spill temp"
+;* V26 tmp20 [V26,T43] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V27 tmp21 [V27,T38] ( 2, 1 ) int -> rcx "Inline return value spill temp"
;* V28 tmp22 [V28 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V29 tmp23 [V29,T20] ( 3, 3 ) int -> rdi "impAppendStmt"
+; V29 tmp23 [V29,T21] ( 3, 3 ) int -> rcx "impAppendStmt"
; V30 tmp24 [V30,T25] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
;* V31 tmp25 [V31 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
-; V32 tmp26 [V32,T07] ( 4, 4 ) int -> rdi "Inlining Arg"
+; V32 tmp26 [V32,T05] ( 4, 4 ) int -> rcx "Inlining Arg"
;* V33 tmp27 [V33 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-; V34 tmp28 [V34,T26] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V35 tmp29 [V35,T38] ( 2, 1 ) int -> rsi "Inline return value spill temp"
+;* V34 tmp28 [V34,T44] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V35 tmp29 [V35,T39] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V36 tmp30 [V36 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V37 tmp31 [V37,T21] ( 3, 3 ) int -> rsi "impAppendStmt"
-; V38 tmp32 [V38,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V37 tmp31 [V37,T22] ( 3, 3 ) int -> rsi "impAppendStmt"
+; V38 tmp32 [V38,T26] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
;* V39 tmp33 [V39 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
-; V40 tmp34 [V40,T08] ( 4, 4 ) int -> rsi "Inlining Arg"
+; V40 tmp34 [V40,T06] ( 4, 4 ) int -> rsi "Inlining Arg"
;* V41 tmp35 [V41 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-; V42 tmp36 [V42,T28] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
-; V43 tmp37 [V43,T39] ( 2, 1 ) int -> rdi "Inline return value spill temp"
+;* V42 tmp36 [V42,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V43 tmp37 [V43,T40] ( 2, 1 ) int -> rcx "Inline return value spill temp"
;* V44 tmp38 [V44 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V45 tmp39 [V45,T22] ( 3, 3 ) int -> rdi "impAppendStmt"
-; V46 tmp40 [V46,T29] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V45 tmp39 [V45,T23] ( 3, 3 ) int -> rcx "impAppendStmt"
+; V46 tmp40 [V46,T27] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
;* V47 tmp41 [V47 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
-; V48 tmp42 [V48,T09] ( 4, 4 ) int -> rdi "Inlining Arg"
+; V48 tmp42 [V48,T07] ( 4, 4 ) int -> rcx "Inlining Arg"
;* V49 tmp43 [V49 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-; V50 tmp44 [V50,T30] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V51 tmp45 [V51,T31] ( 2, 2 ) int -> rax "Single return block return value"
-; V52 tmp46 [V52,T12] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
-; V53 tmp47 [V53,T13] ( 3, 3 ) ref -> rax single-def "argument with side effect"
-; V54 tmp48 [V54,T14] ( 3, 3 ) ref -> rax single-def "argument with side effect"
-; V55 tmp49 [V55,T15] ( 3, 3 ) ref -> rax single-def "argument with side effect"
-; V56 tmp50 [V56,T16] ( 3, 3 ) ref -> rax single-def "argument with side effect"
-; V57 tmp51 [V57,T17] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
-; V58 cse0 [V58,T32] ( 3, 1.50) ref -> rdi "CSE #01: moderate"
-; V59 cse1 [V59,T33] ( 3, 1.50) ref -> rsi "CSE #02: moderate"
-; V60 cse2 [V60,T34] ( 3, 1.50) int -> rsi "CSE #04: moderate"
-; V61 cse3 [V61,T35] ( 3, 1.50) int -> rsi "CSE #07: moderate"
-; V62 rat0 [V62,T10] ( 5, 3.75) ref -> rdi "replacement local"
-; V63 rat1 [V63,T40] ( 2, 1 ) long -> rsi "CSE for expectedClsNode"
-; V64 rat2 [V64,T11] ( 5, 3.75) ref -> rdi "replacement local"
-; V65 rat3 [V65,T41] ( 2, 1 ) long -> rsi "CSE for expectedClsNode"
-; V66 rat4 [V66,T18] ( 3, 3 ) ref -> rdi "virtual vtable call"
+;* V50 tmp44 [V50,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V51 tmp45 [V51,T28] ( 2, 2 ) int -> rax "Single return block return value"
+; V52 tmp46 [V52,T13] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
+; V53 tmp47 [V53,T14] ( 3, 3 ) ref -> rax single-def "argument with side effect"
+; V54 tmp48 [V54,T15] ( 3, 3 ) ref -> rax single-def "argument with side effect"
+; V55 tmp49 [V55,T16] ( 3, 3 ) ref -> rax single-def "argument with side effect"
+; V56 tmp50 [V56,T17] ( 3, 3 ) ref -> rax single-def "argument with side effect"
+; V57 tmp51 [V57,T18] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
+; V58 cse0 [V58,T12] ( 6, 3 ) int -> r14 multi-def "CSE #04: moderate"
+; V59 cse1 [V59,T31] ( 3, 1.50) int -> rdi "CSE #06: moderate"
+; V60 cse2 [V60,T32] ( 3, 1.50) int -> rdi "CSE #13: moderate"
+; V61 cse3 [V61,T29] ( 3, 1.50) ref -> rdi "CSE #01: moderate"
+; V62 cse4 [V62,T30] ( 3, 1.50) ref -> rsi "CSE #02: moderate"
+; V63 cse5 [V63,T33] ( 3, 1.50) int -> rsi "CSE #07: moderate"
+; V64 cse6 [V64,T34] ( 3, 1.50) int -> rsi "CSE #14: moderate"
+; V65 cse7 [V65,T35] ( 2, 1 ) long -> rdi "CSE #05: moderate"
+; V66 cse8 [V66,T36] ( 2, 1 ) long -> rdi "CSE #12: moderate"
+; V67 rat0 [V67,T08] ( 5, 3.75) ref -> rdi "replacement local"
+; V68 rat1 [V68,T41] ( 2, 1 ) long -> rsi "CSE for expectedClsNode"
+; V69 rat2 [V69,T09] ( 5, 3.75) ref -> rdi "replacement local"
+; V70 rat3 [V70,T42] ( 2, 1 ) long -> rsi "CSE for expectedClsNode"
+; V71 rat4 [V71,T19] ( 3, 3 ) ref -> rdi "virtual vtable call"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M7783_IG01:
push rbp
push r15
+ push r14
push rbx
- lea rbp, [rsp+0x10]
+ push rax
+ lea rbp, [rsp+0x20]
mov rbx, rdi
mov r15, rsi
- ;; size=15 bbWeight=1 PerfScore 4.00
+ ;; size=18 bbWeight=1 PerfScore 6.00
G_M7783_IG02:
mov edi, dword ptr [rbx+0x28]
cmp edi, dword ptr [r15+0x28]
jne G_M7783_IG28
;; size=13 bbWeight=1 PerfScore 6.00
G_M7783_IG03:
mov rdi, gword ptr [rbx+0x20]
mov rsi, gword ptr [r15+0x20]
cmp rdi, rsi
je SHORT G_M7783_IG05
mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+0x58]
call [rax+0x18]System.Xml.Schema.XmlSchemaDatatype:IsComparable(System.Xml.Schema.XmlSchemaDatatype):ubyte:this
test eax, eax
je G_M7783_IG28
mov rdi, r15
mov rax, 0xD1FFAB1E ; code for System.Xml.Schema.TypedObject:SetDecimal():this
call [rax]System.Xml.Schema.TypedObject:SetDecimal():this
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Xml.Schema.TypedObject:SetDecimal():this
call [rax]System.Xml.Schema.TypedObject:SetDecimal():this
mov rdi, gword ptr [rbx+0x08]
cmp byte ptr [rdi+0x10], 0
je SHORT G_M7783_IG05
mov rdi, gword ptr [r15+0x08]
cmp byte ptr [rdi+0x10], 0
je SHORT G_M7783_IG05
mov rdi, rbx
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for System.Xml.Schema.TypedObject:ListDValueEquals(System.Xml.Schema.TypedObject):ubyte:this
;; size=97 bbWeight=0.50 PerfScore 16.62
G_M7783_IG04:
+ add rsp, 8
pop rbx
+ pop r14
pop r15
pop rbp
tail.jmp [rax]System.Xml.Schema.TypedObject:ListDValueEquals(System.Xml.Schema.TypedObject):ubyte:this
- ;; size=7 bbWeight=0.50 PerfScore 1.75
+ ;; size=13 bbWeight=0.50 PerfScore 2.12
G_M7783_IG05:
cmp byte ptr [rbx+0x2C], 0
je SHORT G_M7783_IG07
cmp byte ptr [r15+0x2C], 0
je G_M7783_IG20
mov rdi, gword ptr [rbx+0x20]
mov rsi, gword ptr [rbx+0x10]
mov rdx, gword ptr [r15+0x10]
mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+0x50]
call [rax+0x08]System.Xml.Schema.XmlSchemaDatatype:Compare(System.Object,System.Object):int:this
test eax, eax
sete al
movzx rax, al
;; size=47 bbWeight=0.50 PerfScore 11.25
G_M7783_IG06:
+ add rsp, 8
pop rbx
+ pop r14
pop r15
pop rbp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.25
+ ;; size=11 bbWeight=0.50 PerfScore 1.62
G_M7783_IG07:
cmp byte ptr [r15+0x2C], 0
je SHORT G_M7783_IG11
mov rsi, gword ptr [r15+0x10]
mov rdi, 0xD1FFAB1E ; System.Array
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
mov rdi, rax
test rdi, rdi
je SHORT G_M7783_IG10
;; size=41 bbWeight=0.50 PerfScore 5.50
G_M7783_IG08:
mov rsi, 0xD1FFAB1E ; System.Xml.Schema.XmlAtomicValue[]
cmp qword ptr [rdi], rsi
je SHORT G_M7783_IG10
;; size=15 bbWeight=0.25 PerfScore 1.06
G_M7783_IG09:
xor rdi, rdi
;; size=2 bbWeight=0.12 PerfScore 0.03
G_M7783_IG10:
test rdi, rdi
je SHORT G_M7783_IG13
cmp dword ptr [rdi+0x08], 1
jne G_M7783_IG28
mov rsi, qword ptr [rdi]
- mov esi, dword ptr [rsi+0x04]
- add esi, -24
+ mov r14d, dword ptr [rsi+0x04]
+ lea esi, [r14-0x18]
shr esi, 3
je G_M7783_IG17
cmp esi, 1
je G_M7783_IG17
jmp G_M7783_IG34
- ;; size=47 bbWeight=0.50 PerfScore 7.12
+ ;; size=49 bbWeight=0.50 PerfScore 7.25
G_M7783_IG11:
mov rdi, gword ptr [rbx+0x10]
mov rsi, gword ptr [r15+0x10]
mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+0x40]
;; size=15 bbWeight=0.50 PerfScore 4.00
G_M7783_IG12:
+ add rsp, 8
pop rbx
+ pop r14
pop r15
pop rbp
tail.jmp [rax+0x10]System.Object:Equals(System.Object):ubyte:this
- ;; size=8 bbWeight=0.50 PerfScore 1.75
+ ;; size=14 bbWeight=0.50 PerfScore 2.12
G_M7783_IG13:
mov esi, dword ptr [rax+0x08]
test esi, esi
jl G_M7783_IG35
mov edi, esi
cmp edi, 1
jne G_M7783_IG28
mov rdi, qword ptr [rax]
mov edi, dword ptr [rdi+0x04]
- add edi, -24
- shr edi, 3
+ lea ecx, [rdi-0x18]
+ shr ecx, 3
je SHORT G_M7783_IG14
- cmp edi, 1
+ cmp ecx, 1
jne G_M7783_IG34
- ;; size=45 bbWeight=0.50 PerfScore 5.88
+ ;; size=45 bbWeight=0.50 PerfScore 6.00
G_M7783_IG14:
- xor edi, edi
- mov rcx, qword ptr [rax]
- cmp dword ptr [rcx+0x04], 24
+ xor ecx, ecx
+ cmp edi, 24
jbe SHORT G_M7783_IG15
- mov edi, dword ptr [rax+0x14]
- neg edi
- ;; size=16 bbWeight=0.50 PerfScore 4.25
+ mov ecx, dword ptr [rax+0x14]
+ neg ecx
+ ;; size=12 bbWeight=0.50 PerfScore 1.88
G_M7783_IG15:
mov esi, esi
- cmp edi, esi
+ cmp ecx, esi
jae G_M7783_IG33
- movsxd rsi, edi
+ movsxd rsi, ecx
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Array:InternalGetValue(long):System.Object:this
call [rax]System.Array:InternalGetValue(long):System.Object:this
mov rdi, rax
mov rsi, gword ptr [rbx+0x10]
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
;; size=42 bbWeight=0.50 PerfScore 5.75
G_M7783_IG16:
+ add rsp, 8
pop rbx
+ pop r14
pop r15
pop rbp
tail.jmp [rax+0x10]System.Object:Equals(System.Object):ubyte:this
- ;; size=8 bbWeight=0.50 PerfScore 1.75
+ ;; size=14 bbWeight=0.50 PerfScore 2.12
G_M7783_IG17:
xor esi, esi
- mov rax, qword ptr [rdi]
- cmp dword ptr [rax+0x04], 24
+ cmp r14d, 24
jbe SHORT G_M7783_IG18
mov esi, dword ptr [rdi+0x14]
neg esi
- ;; size=16 bbWeight=0.50 PerfScore 4.25
+ ;; size=13 bbWeight=0.50 PerfScore 1.88
G_M7783_IG18:
mov eax, dword ptr [rdi+0x08]
cmp esi, eax
jae G_M7783_IG33
movsxd rsi, esi
mov rax, 0xD1FFAB1E ; code for System.Array:InternalGetValue(long):System.Object:this
call [rax]System.Array:InternalGetValue(long):System.Object:this
mov rdi, rax
mov rsi, gword ptr [rbx+0x10]
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
;; size=40 bbWeight=0.50 PerfScore 6.50
G_M7783_IG19:
+ add rsp, 8
pop rbx
+ pop r14
pop r15
pop rbp
tail.jmp [rax+0x10]System.Object:Equals(System.Object):ubyte:this
- ;; size=8 bbWeight=0.50 PerfScore 1.75
+ ;; size=14 bbWeight=0.50 PerfScore 2.12
G_M7783_IG20:
mov rsi, gword ptr [rbx+0x10]
mov rdi, 0xD1FFAB1E ; System.Array
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
mov rdi, rax
test rdi, rdi
je SHORT G_M7783_IG23
;; size=34 bbWeight=0.50 PerfScore 3.50
G_M7783_IG21:
mov rsi, 0xD1FFAB1E ; System.Xml.Schema.XmlAtomicValue[]
cmp qword ptr [rdi], rsi
je SHORT G_M7783_IG23
;; size=15 bbWeight=0.25 PerfScore 1.06
G_M7783_IG22:
xor rdi, rdi
;; size=2 bbWeight=0.12 PerfScore 0.03
G_M7783_IG23:
test rdi, rdi
je SHORT G_M7783_IG24
cmp dword ptr [rdi+0x08], 1
jne G_M7783_IG28
mov rax, qword ptr [rdi]
- mov esi, dword ptr [rax+0x04]
- add esi, -24
+ mov r14d, dword ptr [rax+0x04]
+ lea esi, [r14-0x18]
shr esi, 3
- je SHORT G_M7783_IG30
+ je G_M7783_IG30
cmp esi, 1
je SHORT G_M7783_IG30
jmp G_M7783_IG34
- ;; size=39 bbWeight=0.50 PerfScore 7.12
+ ;; size=45 bbWeight=0.50 PerfScore 7.25
G_M7783_IG24:
mov esi, dword ptr [rax+0x08]
test esi, esi
jl G_M7783_IG35
mov edi, esi
cmp edi, 1
jne SHORT G_M7783_IG28
mov rdi, qword ptr [rax]
mov edi, dword ptr [rdi+0x04]
- add edi, -24
- shr edi, 3
+ lea ecx, [rdi-0x18]
+ shr ecx, 3
je SHORT G_M7783_IG25
- cmp edi, 1
+ cmp ecx, 1
jne G_M7783_IG34
- ;; size=41 bbWeight=0.50 PerfScore 5.88
+ ;; size=41 bbWeight=0.50 PerfScore 6.00
G_M7783_IG25:
- xor edi, edi
- mov rcx, qword ptr [rax]
- cmp dword ptr [rcx+0x04], 24
+ xor ecx, ecx
+ cmp edi, 24
jbe SHORT G_M7783_IG26
- mov edi, dword ptr [rax+0x14]
- neg edi
- ;; size=16 bbWeight=0.50 PerfScore 4.25
+ mov ecx, dword ptr [rax+0x14]
+ neg ecx
+ ;; size=12 bbWeight=0.50 PerfScore 1.88
G_M7783_IG26:
mov esi, esi
- cmp edi, esi
+ cmp ecx, esi
jae SHORT G_M7783_IG33
- movsxd rsi, edi
+ movsxd rsi, ecx
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Array:InternalGetValue(long):System.Object:this
call [rax]System.Array:InternalGetValue(long):System.Object:this
mov rdi, rax
mov rsi, gword ptr [r15+0x10]
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
;; size=38 bbWeight=0.50 PerfScore 5.75
G_M7783_IG27:
+ add rsp, 8
pop rbx
+ pop r14
pop r15
pop rbp
tail.jmp [rax+0x10]System.Object:Equals(System.Object):ubyte:this
- ;; size=8 bbWeight=0.50 PerfScore 1.75
+ ;; size=14 bbWeight=0.50 PerfScore 2.12
G_M7783_IG28:
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M7783_IG29:
+ add rsp, 8
pop rbx
+ pop r14
pop r15
pop rbp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.25
+ ;; size=11 bbWeight=0.50 PerfScore 1.62
G_M7783_IG30:
xor esi, esi
- mov rax, qword ptr [rdi]
- cmp dword ptr [rax+0x04], 24
+ cmp r14d, 24
jbe SHORT G_M7783_IG31
mov esi, dword ptr [rdi+0x14]
neg esi
- ;; size=16 bbWeight=0.50 PerfScore 4.25
+ ;; size=13 bbWeight=0.50 PerfScore 1.88
G_M7783_IG31:
mov eax, dword ptr [rdi+0x08]
cmp esi, eax
jae SHORT G_M7783_IG33
movsxd rsi, esi
mov rax, 0xD1FFAB1E ; code for System.Array:InternalGetValue(long):System.Object:this
call [rax]System.Array:InternalGetValue(long):System.Object:this
mov rdi, rax
mov rsi, gword ptr [r15+0x10]
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
;; size=36 bbWeight=0.50 PerfScore 6.50
G_M7783_IG32:
+ add rsp, 8
pop rbx
+ pop r14
pop r15
pop rbp
tail.jmp [rax+0x10]System.Object:Equals(System.Object):ubyte:this
- ;; size=8 bbWeight=0.50 PerfScore 1.75
+ ;; size=14 bbWeight=0.50 PerfScore 2.12
G_M7783_IG33:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowIndexOutOfRangeException()
call [rax]System.ThrowHelper:ThrowIndexOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M7783_IG34:
mov edi, 58
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException(int)
call [rax]System.ThrowHelper:ThrowArgumentException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
G_M7783_IG35:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 784, prolog size 15, PerfScore 133.69, instruction count 232, allocated bytes for code 784 (MethodHash=7608e198) for method System.Xml.Schema.TypedObject:Equals(System.Xml.Schema.TypedObject):ubyte:this (FullOpts)
+; Total bytes of code 829, prolog size 18, PerfScore 129.69, instruction count 246, allocated bytes for code 829 (MethodHash=7608e198) for method System.Xml.Schema.TypedObject:Equals(System.Xml.Schema.TypedObject):ubyte: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/1adba84dbb9a3d5f61ca461625587e45 |
Top method improvements-22 (-3.69 % of base) - Microsoft.VisualBasic.CompilerServices.Utils:CopyArray(System.Array,System.Array):System.Array ; Assembly listing for method Microsoft.VisualBasic.CompilerServices.Utils:CopyArray(System.Array,System.Array):System.Array (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; 19 single block inlinees; 5 inlinees without PGO data
+; 0 inlinees with PGO data; 14 single block inlinees; 5 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T02] ( 15, 16 ) ref -> rbx class-hnd single-def <System.Array>
-; V01 arg1 [V01,T03] ( 12, 14.50) ref -> r15 class-hnd single-def <System.Array>
+; V00 arg0 [V00,T02] ( 13, 15 ) ref -> rbx class-hnd single-def <System.Array>
+; V01 arg1 [V01,T03] ( 11, 14 ) ref -> r15 class-hnd single-def <System.Array>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Array>
; V03 loc1 [V03,T09] ( 6, 3 ) int -> r14
-; V04 loc2 [V04,T00] ( 6, 20.50) int -> r12
+; V04 loc2 [V04,T00] ( 6, 20.50) int -> [rbp-0x2C]
; V05 loc3 [V05,T06] ( 3, 5 ) int -> r13 single-def
;* V06 loc4 [V06 ] ( 0, 0 ) int -> zero-ref single-def
-; V07 loc5 [V07,T04] ( 5, 6 ) int -> r13 single-def
-; V08 loc6 [V08,T05] ( 5, 6 ) int -> r14 single-def
+; V07 loc5 [V07,T04] ( 5, 6 ) int -> r14 single-def
+; V08 loc6 [V08,T05] ( 5, 6 ) int -> r13 single-def
; V09 loc7 [V09,T08] ( 2, 4.50) int -> r12 single-def
-; V10 loc8 [V10,T01] ( 6, 20.50) int -> [rbp-0x2C]
-; V11 loc9 [V11,T07] ( 3, 5 ) int -> [rbp-0x30] spill-single-def
+; V10 loc8 [V10,T01] ( 6, 20.50) int -> [rbp-0x30]
+; V11 loc9 [V11,T07] ( 3, 5 ) int -> [rbp-0x34] spill-single-def
;# V12 OutArgs [V12 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V13 tmp1 [V13,T20] ( 2, 2 ) int -> rdi "impAppendStmt"
+; V13 tmp1 [V13,T18] ( 2, 2 ) int -> rdi "impAppendStmt"
;* V14 tmp2 [V14 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
-; V15 tmp3 [V15,T28] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <System.ArrayTypeMismatchException>
-; V16 tmp4 [V16,T23] ( 2, 1 ) int -> r12
-; V17 tmp5 [V17,T29] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.InvalidCastException>
+; V15 tmp3 [V15,T31] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <System.ArrayTypeMismatchException>
+; V16 tmp4 [V16,T24] ( 2, 1 ) int -> r12
+; V17 tmp5 [V17,T32] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.InvalidCastException>
;* V18 tmp6 [V18 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V19 tmp7 [V19,T10] ( 3, 3 ) int -> rdi "impAppendStmt"
; V20 tmp8 [V20,T15] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V21 tmp9 [V21,T24] ( 2, 1 ) int -> rsi "Inline return value spill temp"
+; V21 tmp9 [V21,T25] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V22 tmp10 [V22 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V23 tmp11 [V23,T11] ( 3, 3 ) int -> rsi "impAppendStmt"
; V24 tmp12 [V24,T16] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V25 tmp13 [V25,T25] ( 2, 1 ) int -> r13 "Inline return value spill temp"
+; V25 tmp13 [V25,T26] ( 2, 1 ) int -> r13 "Inline return value spill temp"
;* V26 tmp14 [V26 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V27 tmp15 [V27,T12] ( 3, 3 ) int -> r13 "impAppendStmt"
-; V28 tmp16 [V28,T17] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V29 tmp17 [V29,T26] ( 2, 1 ) int -> rsi "Inline return value spill temp"
+;* V28 tmp16 [V28,T29] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V29 tmp17 [V29,T27] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V30 tmp18 [V30 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V31 tmp19 [V31,T13] ( 3, 3 ) int -> rsi "impAppendStmt"
-; V32 tmp20 [V32,T18] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V33 tmp21 [V33,T27] ( 2, 1 ) int -> r14 "Inline return value spill temp"
+; V32 tmp20 [V32,T17] ( 2, 2 ) byref -> r12 single-def "Inlining Arg"
+; V33 tmp21 [V33,T28] ( 2, 1 ) int -> r13 "Inline return value spill temp"
;* V34 tmp22 [V34 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-; V35 tmp23 [V35,T14] ( 3, 3 ) int -> r14 "impAppendStmt"
-; V36 tmp24 [V36,T19] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V37 cse0 [V37,T21] ( 3, 1.50) int -> rsi "CSE #02: moderate"
-; V38 cse1 [V38,T22] ( 3, 1.50) int -> r14 "CSE #03: moderate"
-; TEMP_01 int -> [rbp-0x34]
+; V35 tmp23 [V35,T19] ( 2, 2 ) int -> r13 "impAppendStmt"
+;* V36 tmp24 [V36,T30] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V37 cse0 [V37,T20] ( 3, 1.50) int -> r13 "CSE #04: moderate"
+; V38 cse1 [V38,T21] ( 3, 1.50) int -> r13 "CSE #10: moderate"
+; V39 cse2 [V39,T22] ( 3, 1.50) int -> rsi "CSE #06: moderate"
+; V40 cse3 [V40,T23] ( 3, 1.50) int -> r13 "CSE #11: moderate"
+; V41 cse4 [V41,T14] ( 3, 1.50) long -> r12 "CSE #07: moderate"
+; TEMP_01 int -> [rbp-0x38]
;
; Lcl frame size = 24
G_M17495_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 24
lea rbp, [rsp+0x40]
mov rbx, rdi
mov r15, rsi
;; size=25 bbWeight=1 PerfScore 7.25
G_M17495_IG02:
test rbx, rbx
je G_M17495_IG07
;; size=9 bbWeight=1 PerfScore 1.25
G_M17495_IG03:
mov edi, dword ptr [rbx+0x08]
test edi, edi
jl G_M17495_IG12
mov r14d, edi
test r14d, r14d
je G_M17495_IG07
mov rdi, qword ptr [r15]
- mov edi, dword ptr [rdi+0x04]
- add edi, -24
- shr edi, 3
+ mov r13d, dword ptr [rdi+0x04]
+ add r13d, -24
+ shr r13d, 3
+ mov edi, r13d
mov esi, 1
test edi, edi
cmove edi, esi
- mov rsi, qword ptr [rbx]
+ mov r12, qword ptr [rbx]
+ mov rsi, r12
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov eax, 1
test esi, esi
cmove esi, eax
cmp edi, esi
jne G_M17495_IG11
- mov rdi, qword ptr [r15]
- mov r13d, dword ptr [rdi+0x04]
- add r13d, -24
- shr r13d, 3
mov edi, 1
test r13d, r13d
cmove r13d, edi
sub r13d, 2
jo G_M17495_IG12
- xor r12d, r12d
+ xor eax, eax
test r13d, r13d
jl SHORT G_M17495_IG05
- ;; size=120 bbWeight=0.50 PerfScore 12.62
+ ;; size=113 bbWeight=0.50 PerfScore 10.50
G_M17495_IG04:
mov rdi, r15
- mov esi, r12d
- mov rax, 0xD1FFAB1E ; code for System.Array:GetUpperBound(int):int:this
- call [rax]System.Array:GetUpperBound(int):int:this
- mov dword ptr [rbp-0x34], eax
+ mov dword ptr [rbp-0x2C], eax
+ mov esi, eax
+ mov rcx, 0xD1FFAB1E ; code for System.Array:GetUpperBound(int):int:this
+ call [rcx]System.Array:GetUpperBound(int):int:this
+ mov dword ptr [rbp-0x38], eax
mov rdi, rbx
- mov esi, r12d
+ mov esi, dword ptr [rbp-0x2C]
mov rcx, 0xD1FFAB1E ; code for System.Array:GetUpperBound(int):int:this
call [rcx]System.Array:GetUpperBound(int):int:this
- cmp dword ptr [rbp-0x34], eax
+ cmp dword ptr [rbp-0x38], eax
jne G_M17495_IG10
- add r12d, 1
+ mov esi, dword ptr [rbp-0x2C]
+ add esi, 1
jo G_M17495_IG12
- cmp r12d, r13d
+ cmp esi, r13d
+ mov eax, esi
jle SHORT G_M17495_IG04
- ;; size=63 bbWeight=4 PerfScore 56.00
+ ;; size=69 bbWeight=4 PerfScore 68.00
G_M17495_IG05:
mov esi, dword ptr [r15+0x08]
test esi, esi
jl G_M17495_IG12
cmp r14d, esi
cmovg r14d, esi
- mov rsi, qword ptr [rbx]
- mov esi, dword ptr [rsi+0x04]
- add esi, -24
- shr esi, 3
+ mov r13d, dword ptr [r12+0x04]
+ add r13d, -24
+ shr r13d, 3
+ mov esi, r13d
+ test esi, esi
je G_M17495_IG09
cmp esi, 1
jle G_M17495_IG09
- mov rsi, qword ptr [rbx]
- mov r14d, dword ptr [rsi+0x04]
- add r14d, -24
- shr r14d, 3
- mov esi, 1
- test r14d, r14d
- cmove r14d, esi
- sub r14d, 1
+ sub r13d, 1
jo G_M17495_IG12
- mov esi, r14d
+ mov esi, r13d
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Array:GetLength(int):int:this
call [rax]System.Array:GetLength(int):int:this
- mov r13d, eax
- mov esi, r14d
+ mov r14d, eax
+ mov esi, r13d
mov rdi, r15
mov rax, 0xD1FFAB1E ; code for System.Array:GetLength(int):int:this
call [rax]System.Array:GetLength(int):int:this
- mov r14d, eax
- test r14d, r14d
+ mov r13d, eax
+ test r13d, r13d
je SHORT G_M17495_IG07
- cmp r13d, r14d
- mov r12d, r13d
- cmovg r12d, r14d
+ cmp r14d, r13d
+ mov r12d, r14d
+ cmovg r12d, r13d
mov eax, dword ptr [rbx+0x08]
test eax, eax
jl G_M17495_IG12
cdq
- idiv edx:eax, r13d
+ idiv edx:eax, r14d
sub eax, 1
jo G_M17495_IG12
- mov dword ptr [rbp-0x30], eax
+ mov dword ptr [rbp-0x34], eax
xor r9d, r9d
test eax, eax
jl SHORT G_M17495_IG07
- ;; size=174 bbWeight=0.50 PerfScore 30.00
+ ;; size=153 bbWeight=0.50 PerfScore 26.50
G_M17495_IG06:
mov ecx, r9d
- imul ecx, r14d
+ imul ecx, r13d
jo G_M17495_IG12
- mov dword ptr [rbp-0x2C], r9d
+ mov dword ptr [rbp-0x30], r9d
mov esi, r9d
- imul esi, r13d
+ imul esi, r14d
jo G_M17495_IG12
mov rdi, rbx
mov rdx, r15
mov r8d, r12d
mov r10, 0xD1FFAB1E ; code for System.Array:Copy(System.Array,int,System.Array,int,int)
call [r10]System.Array:Copy(System.Array,int,System.Array,int,int)
- mov r9d, dword ptr [rbp-0x2C]
+ mov r9d, dword ptr [rbp-0x30]
add r9d, 1
jo G_M17495_IG12
- mov eax, dword ptr [rbp-0x30]
+ mov eax, dword ptr [rbp-0x34]
cmp r9d, eax
jle SHORT G_M17495_IG06
;; size=74 bbWeight=4 PerfScore 64.00
G_M17495_IG07:
mov rax, r15
;; size=3 bbWeight=1 PerfScore 0.25
G_M17495_IG08:
add rsp, 24
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
G_M17495_IG09:
mov rdi, rbx
mov rsi, r15
mov edx, r14d
mov rax, 0xD1FFAB1E ; code for System.Array:Copy(System.Array,System.Array,int)
call [rax]System.Array:Copy(System.Array,System.Array,int)
jmp SHORT G_M17495_IG07
;; size=23 bbWeight=0.50 PerfScore 3.00
G_M17495_IG10:
mov rdi, 0xD1FFAB1E ; System.ArrayTypeMismatchException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.ArrayTypeMismatchException:.ctor():this
call [rax]System.ArrayTypeMismatchException:.ctor():this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=42 bbWeight=0 PerfScore 0.00
G_M17495_IG11:
mov rdi, 0xD1FFAB1E ; System.InvalidCastException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.InvalidCastException:.ctor():this
call [rax]System.InvalidCastException:.ctor():this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=42 bbWeight=0 PerfScore 0.00
G_M17495_IG12:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 596, prolog size 19, PerfScore 178.62, instruction count 161, allocated bytes for code 596 (MethodHash=39a4bba8) for method Microsoft.VisualBasic.CompilerServices.Utils:CopyArray(System.Array,System.Array):System.Array (FullOpts)
+; Total bytes of code 574, prolog size 19, PerfScore 185.00, instruction count 156, allocated bytes for code 574 (MethodHash=39a4bba8) for method Microsoft.VisualBasic.CompilerServices.Utils:CopyArray(System.Array,System.Array):System.Array (FullOpts) -18 (-2.46 % of base) - Microsoft.VisualBasic.Information:TypeName(System.Object):System.String ; Assembly listing for method Microsoft.VisualBasic.Information:TypeName(System.Object):System.String (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; 19 single block inlinees; 9 inlinees without PGO data
+; 0 inlinees with PGO data; 17 single block inlinees; 9 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T02] ( 5, 4 ) ref -> rbx class-hnd single-def <System.Object>
; V01 loc0 [V01,T07] ( 3, 2 ) ref -> rax class-hnd <System.String>
; V02 loc1 [V02,T00] ( 27, 13.50) ref -> [rbp-0x30] class-hnd <System.String>
-; V03 loc2 [V03,T21] ( 2, 1 ) ubyte -> r15 must-init single-def
+; V03 loc2 [V03,T20] ( 2, 1 ) ubyte -> r15 must-init single-def
; V04 loc3 [V04,T01] ( 12, 6 ) ref -> r14 class-hnd <System.Type>
;* V05 loc4 [V05 ] ( 0, 0 ) int -> zero-ref
-; V06 loc5 [V06,T16] ( 3, 1.50) int -> rsi single-def
-; V07 loc6 [V07,T05] ( 5, 2.50) ref -> rax class-hnd single-def <System.Array>
+; V06 loc5 [V06,T15] ( 3, 1.50) int -> rsi single-def
+; V07 loc6 [V07,T05] ( 4, 2 ) ref -> rax class-hnd single-def <System.Array>
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V09 tmp1 [V09,T22] ( 2, 1 ) int -> rax "Inline return value spill temp"
+; V09 tmp1 [V09,T21] ( 2, 1 ) int -> rax "Inline return value spill temp"
;* V10 tmp2 [V10 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V11 tmp3 [V11 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp"
;* V12 tmp4 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType>
;* V13 tmp5 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType>
;* V14 tmp6 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.RuntimeType[]>
;* V15 tmp7 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle>
;* V16 tmp8 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.RuntimeType>
;* V17 tmp9 [V17 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle>
;* V18 tmp10 [V18 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V19 tmp11 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String>
-; V20 tmp12 [V20,T15] ( 2, 1 ) ref -> r12 class-hnd "Inline stloc first use temp" <System.String>
-; V21 tmp13 [V21,T20] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.String>
-;* V22 tmp14 [V22,T26] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V23 tmp15 [V23,T27] ( 0, 0 ) long -> zero-ref single-def "Inline stloc first use temp"
+; V20 tmp12 [V20,T14] ( 2, 1 ) ref -> r12 class-hnd "Inline stloc first use temp" <System.String>
+; V21 tmp13 [V21,T19] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.String>
+;* V22 tmp14 [V22,T27] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V23 tmp15 [V23,T28] ( 0, 0 ) long -> zero-ref single-def "Inline stloc first use temp"
; V24 tmp16 [V24,T03] ( 4, 4 ) ref -> rax class-hnd exact single-def "dup spill" <System.String>
;* V25 tmp17 [V25 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V26 tmp18 [V26 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
; V27 tmp19 [V27,T08] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V28 tmp20 [V28,T12] ( 2, 2 ) int -> rdx "Inlining Arg"
-; V29 tmp21 [V29,T23] ( 2, 1 ) int -> rax single-def "Inline return value spill temp"
-; V30 tmp22 [V30,T24] ( 2, 1 ) int -> rdi "Inline return value spill temp"
-; V31 tmp23 [V31,T17] ( 3, 1.50) int -> rdi single-def "Inline stloc first use temp"
-; V32 tmp24 [V32,T13] ( 2, 2 ) int -> rdi "impAppendStmt"
+; V28 tmp20 [V28,T11] ( 2, 2 ) int -> rdx "Inlining Arg"
+; V29 tmp21 [V29,T22] ( 2, 1 ) int -> rax single-def "Inline return value spill temp"
+; V30 tmp22 [V30,T23] ( 2, 1 ) int -> rdi "Inline return value spill temp"
+; V31 tmp23 [V31,T16] ( 3, 1.50) int -> rdi single-def "Inline stloc first use temp"
+; V32 tmp24 [V32,T12] ( 2, 2 ) int -> rdi "impAppendStmt"
; V33 tmp25 [V33,T09] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V34 tmp26 [V34,T25] ( 2, 1 ) int -> rsi "Inline return value spill temp"
-; V35 tmp27 [V35,T18] ( 3, 1.50) int -> rsi single-def "Inline stloc first use temp"
-; V36 tmp28 [V36,T14] ( 2, 2 ) int -> rsi "impAppendStmt"
-; V37 tmp29 [V37,T10] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V34 tmp26 [V34,T24] ( 2, 1 ) int -> rsi "Inline return value spill temp"
+; V35 tmp27 [V35,T25] ( 2, 1 ) int -> rsi single-def "Inline stloc first use temp"
+; V36 tmp28 [V36,T13] ( 2, 2 ) int -> rsi "impAppendStmt"
+;* V37 tmp29 [V37,T26] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V38 tmp30 [V38 ] ( 0, 0 ) long -> zero-ref "field V15.m_asTAddr (fldOffset=0x0)" P-INDEP
;* V39 tmp31 [V39 ] ( 0, 0 ) long -> zero-ref "field V17.m_asTAddr (fldOffset=0x0)" P-INDEP
;* V40 tmp32 [V40 ] ( 0, 0 ) int -> zero-ref "index expr"
-; V41 tmp33 [V41,T11] ( 2, 2 ) ref -> rdx single-def "argument with side effect"
-; V42 cse0 [V42,T19] ( 3, 1.50) long -> r12 "CSE #04: moderate"
-; V43 cse1 [V43,T06] ( 5, 2.50) long -> r13 "CSE #02: moderate"
-; V44 rat0 [V44,T04] ( 3, 2.94) int -> rax "ReplaceWithLclVar is creating a new local variable"
+; V41 tmp33 [V41,T10] ( 2, 2 ) ref -> rdx single-def "argument with side effect"
+; V42 cse0 [V42,T17] ( 3, 1.50) int -> rsi "CSE #09: moderate"
+; V43 cse1 [V43,T18] ( 3, 1.50) long -> r12 "CSE #04: moderate"
+; V44 cse2 [V44,T06] ( 5, 2.50) long -> r13 "CSE #02: moderate"
+; V45 rat0 [V45,T04] ( 3, 2.94) int -> rax "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 8
G_M18802_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
lea rbp, [rsp+0x30]
mov rbx, rdi
xor r15d, r15d
;; size=22 bbWeight=1 PerfScore 8.00
G_M18802_IG02:
test rbx, rbx
jne SHORT G_M18802_IG04
;; size=5 bbWeight=1 PerfScore 1.25
G_M18802_IG03:
mov rax, 0xD1FFAB1E ; 'Nothing'
jmp G_M18802_IG27
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG04:
mov rdi, rbx
call System.Object:GetType():System.Type:this
mov r14, rax
mov rdi, r14
mov rax, qword ptr [r14]
mov rax, qword ptr [rax+0x58]
call [rax+0x10]System.Type:IsArrayImpl():ubyte:this
test eax, eax
je SHORT G_M18802_IG05
mov r15d, 1
mov rdi, r14
mov rax, qword ptr [r14]
mov rax, qword ptr [rax+0x68]
call [rax+0x08]System.Type:GetElementType():System.Type:this
mov r14, rax
;; size=50 bbWeight=0.50 PerfScore 8.88
G_M18802_IG05:
mov rdi, r14
mov r13, qword ptr [r14]
mov r12, qword ptr [r13+0x70]
call [r12+0x30]System.Type:get_IsEnum():ubyte:this
test eax, eax
je SHORT G_M18802_IG07
mov rdi, r14
mov rax, qword ptr [r13+0x40]
call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this
mov r12, rax
;; size=32 bbWeight=0.50 PerfScore 7.00
G_M18802_IG06:
lea rdi, bword ptr [r12+0x0C]
mov edx, dword ptr [r12+0x08]
mov esi, 43
mov rax, 0xD1FFAB1E ; code for System.PackedSpanHelpers:IndexOf[System.SpanHelpers+DontNegate`1[short],System.PackedSpanHelpers+NopTransform](byref,short,int):int
call [rax]System.PackedSpanHelpers:IndexOf[System.SpanHelpers+DontNegate`1[short],System.PackedSpanHelpers+NopTransform](byref,short,int):int
mov esi, eax
test esi, esi
jl G_M18802_IG22
add esi, 1
jo G_M18802_IG28
mov rdi, r12
mov rax, 0xD1FFAB1E ; code for System.String:Substring(int):System.String:this
call [rax]System.String:Substring(int):System.String:this
mov r12, rax
jmp G_M18802_IG22
;; size=69 bbWeight=0.50 PerfScore 7.25
G_M18802_IG07:
mov rdi, r14
mov rax, qword ptr [r13+0x98]
call [rax+0x10]System.Type:GetTypeCodeImpl():int:this
add eax, -2
cmp eax, 16
ja G_M18802_IG18
;; size=25 bbWeight=0.50 PerfScore 3.38
G_M18802_IG08:
mov eax, eax
lea rcx, [reloc @RWD00]
mov ecx, dword ptr [rcx+4*rax]
lea rdx, G_M18802_IG02
add rcx, rdx
jmp rcx
;; size=24 bbWeight=0.47 PerfScore 2.83
G_M18802_IG09:
mov r12, 0xD1FFAB1E ; 'String'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG10:
mov r12, 0xD1FFAB1E ; 'Date'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG11:
mov r12, 0xD1FFAB1E ; 'Decimal'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG12:
mov r12, 0xD1FFAB1E ; 'Double'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG13:
mov r12, 0xD1FFAB1E ; 'Single'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG14:
mov r12, 0xD1FFAB1E ; 'Long'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG15:
mov r12, 0xD1FFAB1E ; 'Integer'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG16:
mov r12, 0xD1FFAB1E ; 'Short'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG17:
mov r12, 0xD1FFAB1E ; 'Byte'
jmp G_M18802_IG22
;; size=15 bbWeight=0.50 PerfScore 1.12
G_M18802_IG18:
mov rdi, r14
mov rax, qword ptr [r13+0x40]
call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this
mov gword ptr [rbp-0x30], rax
mov rdi, r14
call [r12+0x20]System.Type:IsCOMObjectImpl():ubyte:this
test eax, eax
mov r12, gword ptr [rbp-0x30]
je G_M18802_IG06
mov rdi, r12
mov rsi, 0xD1FFAB1E ; '__ComObject'
mov rax, 0xD1FFAB1E ; code for System.String:CompareOrdinal(System.String,System.String):int
call [rax]System.String:CompareOrdinal(System.String,System.String):int
test eax, eax
jne G_M18802_IG06
mov edi, 10
call System.String:FastAllocateString(int):System.String
cmp byte ptr [rax], al
lea rsi, bword ptr [rax+0x0C]
mov rdi, 0xD1FFAB1E
vmovdqu xmm0, xmmword ptr [rdi]
vmovdqu xmm1, xmmword ptr [rdi+0x04]
vmovdqu xmmword ptr [rsi], xmm0
vmovdqu xmmword ptr [rsi+0x04], xmm1
mov r12, rax
jmp G_M18802_IG06
;; size=119 bbWeight=0.50 PerfScore 18.00
G_M18802_IG19:
mov r12, 0xD1FFAB1E ; 'Char'
jmp SHORT G_M18802_IG22
;; size=12 bbWeight=0.50 PerfScore 1.12
G_M18802_IG20:
mov r12, 0xD1FFAB1E ; 'Boolean'
jmp SHORT G_M18802_IG22
;; size=12 bbWeight=0.50 PerfScore 1.12
G_M18802_IG21:
mov r12, 0xD1FFAB1E ; 'DBNull'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M18802_IG22:
test r15d, r15d
je G_M18802_IG26
mov rsi, rbx
mov rdi, 0xD1FFAB1E ; System.Array
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
call [rax]CORINFO_HELP_CHKCASTCLASS
mov rdi, qword ptr [rax]
- mov edi, dword ptr [rdi+0x04]
- add edi, -24
- shr edi, 3
+ mov esi, dword ptr [rdi+0x04]
+ add esi, -24
+ shr esi, 3
+ mov edi, esi
+ test edi, edi
je SHORT G_M18802_IG23
cmp edi, 1
jne SHORT G_M18802_IG24
- ;; size=53 bbWeight=0.50 PerfScore 6.00
+ ;; size=57 bbWeight=0.50 PerfScore 6.25
G_M18802_IG23:
mov rdi, r12
mov rsi, 0xD1FFAB1E ; '[]'
mov rax, 0xD1FFAB1E ; code for System.String:Concat(System.String,System.String):System.String
call [rax]System.String:Concat(System.String,System.String):System.String
mov r12, rax
jmp SHORT G_M18802_IG25
;; size=30 bbWeight=0.50 PerfScore 3.00
G_M18802_IG24:
- mov rsi, qword ptr [rax]
- mov esi, dword ptr [rsi+0x04]
- add esi, -24
- shr esi, 3
- mov edi, 1
- test esi, esi
- cmove esi, edi
sub esi, 1
jo SHORT G_M18802_IG28
mov edi, 44
call System.String:.ctor(ushort,int):this
mov rdx, rax
mov rdi, r12
mov rsi, 0xD1FFAB1E ; '['
mov rcx, 0xD1FFAB1E ; ']'
mov rax, 0xD1FFAB1E ; code for System.String:Concat(System.String,System.String,System.String,System.String):System.String
call [rax]System.String:Concat(System.String,System.String,System.String,System.String):System.String
mov r12, rax
- ;; size=78 bbWeight=0.50 PerfScore 6.25
+ ;; size=56 bbWeight=0.50 PerfScore 3.50
G_M18802_IG25:
mov rdi, r12
mov rax, 0xD1FFAB1E ; code for Microsoft.VisualBasic.Information:OldVBFriendlyNameOfTypeName(System.String):System.String
call [rax]Microsoft.VisualBasic.Information:OldVBFriendlyNameOfTypeName(System.String):System.String
mov r12, rax
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M18802_IG26:
mov rax, r12
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M18802_IG27:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
G_M18802_IG28:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
RWD00 dd G_M18802_IG21 - G_M18802_IG02
dd G_M18802_IG20 - G_M18802_IG02
dd G_M18802_IG19 - G_M18802_IG02
dd G_M18802_IG18 - G_M18802_IG02
dd G_M18802_IG17 - G_M18802_IG02
dd G_M18802_IG16 - G_M18802_IG02
dd G_M18802_IG18 - G_M18802_IG02
dd G_M18802_IG15 - G_M18802_IG02
dd G_M18802_IG18 - G_M18802_IG02
dd G_M18802_IG14 - G_M18802_IG02
dd G_M18802_IG18 - G_M18802_IG02
dd G_M18802_IG13 - G_M18802_IG02
dd G_M18802_IG12 - G_M18802_IG02
dd G_M18802_IG11 - G_M18802_IG02
dd G_M18802_IG10 - G_M18802_IG02
dd G_M18802_IG18 - G_M18802_IG02
dd G_M18802_IG09 - G_M18802_IG02
-; Total bytes of code 733, prolog size 16, PerfScore 91.71, instruction count 167, allocated bytes for code 733 (MethodHash=0ea9b68d) for method Microsoft.VisualBasic.Information:TypeName(System.Object):System.String (FullOpts)
+; Total bytes of code 715, prolog size 16, PerfScore 89.21, instruction count 162, allocated bytes for code 715 (MethodHash=0ea9b68d) for method Microsoft.VisualBasic.Information:TypeName(System.Object):System.String (FullOpts) -13 (-2.51 % of base) - System.Composition.TypedParts.Discovery.TypeInspector:AddMetadata(System.Collections.Generic.IDictionary`2[System.String,System.Object],System.String,System.Type,System.Object) ; Assembly listing for method System.Composition.TypedParts.Discovery.TypeInspector:AddMetadata(System.Collections.Generic.IDictionary`2[System.String,System.Object],System.String,System.Type,System.Object) (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; 19 single block inlinees; 6 inlinees without PGO data
+; 0 inlinees with PGO data; 15 single block inlinees; 6 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4.50) ref -> rbx class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
-; V01 arg1 [V01,T02] ( 6, 4.50) ref -> r15 class-hnd single-def <System.String>
+; V00 arg0 [V00,T00] ( 6, 4.50) ref -> rbx class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
+; V01 arg1 [V01,T01] ( 6, 4.50) ref -> r15 class-hnd single-def <System.String>
; V02 arg2 [V02,T04] ( 4, 3 ) ref -> r13 class-hnd single-def <System.Type>
; V03 arg3 [V03,T03] ( 5, 3.50) ref -> r14 class-hnd single-def <System.Object>
; V04 loc0 [V04 ] ( 3, 2 ) ref -> [rbp-0x30] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.Object>
; V05 loc1 [V05,T07] ( 6, 3 ) ref -> r12 class-hnd single-def <System.Array>
-; V06 loc2 [V06,T10] ( 4, 2 ) ref -> r13 class-hnd single-def <System.Array>
-; V07 loc3 [V07,T00] ( 14, 7 ) ref -> r13 class-hnd single-def <System.Array>
+; V06 loc2 [V06,T11] ( 4, 2 ) ref -> r13 class-hnd single-def <System.Array>
+; V07 loc3 [V07,T02] ( 11, 5.50) ref -> r13 class-hnd single-def <System.Array>
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V09 tmp1 [V09,T11] ( 2, 2 ) ref -> rsi class-hnd single-def "Inlining Arg" <System.Object>
-; V10 tmp2 [V10,T16] ( 2, 1 ) int -> rdx "Inline return value spill temp"
+; V09 tmp1 [V09,T12] ( 2, 2 ) ref -> rsi class-hnd single-def "Inlining Arg" <System.Object>
+; V10 tmp2 [V10,T17] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V11 tmp3 [V11 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-; V12 tmp4 [V12,T08] ( 3, 3 ) int -> rdx "impAppendStmt"
-; V13 tmp5 [V13,T12] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
+; V12 tmp4 [V12,T08] ( 3, 3 ) int -> rdi "impAppendStmt"
+; V13 tmp5 [V13,T13] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
;* V14 tmp6 [V14 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
-; V15 tmp7 [V15,T05] ( 4, 4 ) int -> rdx "Inlining Arg"
+; V15 tmp7 [V15,T05] ( 4, 4 ) int -> rdi "Inlining Arg"
;* V16 tmp8 [V16 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-; V17 tmp9 [V17,T13] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V18 tmp10 [V18,T17] ( 2, 1 ) int -> rdx "Inline return value spill temp"
+;* V17 tmp9 [V17,T19] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V18 tmp10 [V18,T18] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V19 tmp11 [V19 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-; V20 tmp12 [V20,T09] ( 3, 3 ) int -> rdx "impAppendStmt"
-; V21 tmp13 [V21,T14] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
+; V20 tmp12 [V20,T09] ( 3, 3 ) int -> rdi "impAppendStmt"
+; V21 tmp13 [V21,T14] ( 2, 2 ) byref -> r12 single-def "Inlining Arg"
;* V22 tmp14 [V22 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
-; V23 tmp15 [V23,T06] ( 4, 4 ) int -> rdx "Inlining Arg"
+; V23 tmp15 [V23,T06] ( 4, 4 ) int -> rdi "Inlining Arg"
;* V24 tmp16 [V24 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-; V25 tmp17 [V25,T15] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+;* V25 tmp17 [V25,T20] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V26 cse0 [V26,T15] ( 3, 1.50) int -> rdx "CSE #02: moderate"
+; V27 cse1 [V27,T16] ( 3, 1.50) int -> rdx "CSE #03: moderate"
+; V28 cse2 [V28,T10] ( 3, 1.50) long -> r12 "CSE #01: moderate"
;
; Lcl frame size = 8
G_M22168_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
lea rbp, [rsp+0x30]
xor eax, eax
mov qword ptr [rbp-0x30], rax
mov rbx, rdi
mov r15, rsi
mov r13, rdx
mov r14, rcx
;; size=34 bbWeight=1 PerfScore 9.75
G_M22168_IG02:
lea rdx, [rbp-0x30]
mov rdi, rbx
mov rsi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon]:TryGetValue(System.__Canon,byref):ubyte:this
call [r11]System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon]:TryGetValue(System.__Canon,byref):ubyte:this
test eax, eax
jne SHORT G_M22168_IG05
;; size=27 bbWeight=1 PerfScore 5.50
G_M22168_IG03:
mov rdi, rbx
mov rdx, r14
mov rsi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon]:Add(System.__Canon,System.__Canon):this
call [r11]System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon]:Add(System.__Canon,System.__Canon):this
nop
;; size=23 bbWeight=0.50 PerfScore 2.12
G_M22168_IG04:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M22168_IG05:
mov rsi, gword ptr [rbp-0x30]
mov rdi, 0xD1FFAB1E ; System.Array
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
mov r12, rax
test r12, r12
je G_M22168_IG07
mov esi, dword ptr [r12+0x08]
test esi, esi
jl G_M22168_IG15
inc esi
mov rdi, r13
mov rax, 0xD1FFAB1E ; code for System.Array:CreateInstance(System.Type,int):System.Array
call [rax]System.Array:CreateInstance(System.Type,int):System.Array
mov r13, rax
mov edx, dword ptr [r12+0x08]
test edx, edx
jl G_M22168_IG15
mov rdi, r12
mov rsi, r13
mov rax, 0xD1FFAB1E ; code for System.Array:Copy(System.Array,System.Array,int)
call [rax]System.Array:Copy(System.Array,System.Array,int)
mov edx, dword ptr [r12+0x08]
test edx, edx
jl G_M22168_IG15
mov rdi, r13
mov rsi, r14
mov rax, 0xD1FFAB1E ; code for System.Array:SetValue(System.Object,int):this
cmp dword ptr [rdi], edi
call [rax]System.Array:SetValue(System.Object,int):this
mov rdi, rbx
mov rdx, r13
mov rsi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon]:set_Item(System.__Canon,System.__Canon):this
call [r11]System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon]:set_Item(System.__Canon,System.__Canon):this
nop
;; size=158 bbWeight=0.50 PerfScore 17.25
G_M22168_IG06:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M22168_IG07:
mov rdi, r13
mov esi, 2
mov rax, 0xD1FFAB1E ; code for System.Array:CreateInstance(System.Type,int):System.Array
call [rax]System.Array:CreateInstance(System.Type,int):System.Array
mov r13, rax
mov rsi, gword ptr [rbp-0x30]
- mov rdx, qword ptr [r13]
+ mov r12, qword ptr [r13]
+ mov rdx, r12
mov edx, dword ptr [rdx+0x04]
- add edx, -24
- shr edx, 3
+ lea edi, [rdx-0x18]
+ shr edi, 3
je SHORT G_M22168_IG08
- cmp edx, 1
+ cmp edi, 1
jne G_M22168_IG14
- ;; size=51 bbWeight=0.50 PerfScore 6.00
+ ;; size=54 bbWeight=0.50 PerfScore 6.25
G_M22168_IG08:
- xor edx, edx
- mov rdi, qword ptr [r13]
- cmp dword ptr [rdi+0x04], 24
+ xor edi, edi
+ cmp edx, 24
jbe SHORT G_M22168_IG09
- mov edx, dword ptr [r13+0x14]
- neg edx
- ;; size=18 bbWeight=0.50 PerfScore 4.25
+ mov edi, dword ptr [r13+0x14]
+ neg edi
+ ;; size=13 bbWeight=0.50 PerfScore 1.88
G_M22168_IG09:
- mov edi, dword ptr [r13+0x08]
- cmp edx, edi
- jae G_M22168_IG13
- movsxd rdx, edx
+ mov edx, dword ptr [r13+0x08]
+ cmp edi, edx
+ jae SHORT G_M22168_IG13
+ movsxd rdx, edi
mov rdi, r13
mov rax, 0xD1FFAB1E ; code for System.Array:InternalSetValue(System.Object,long):this
call [rax]System.Array:InternalSetValue(System.Object,long):this
- mov rdx, qword ptr [r13]
- mov edx, dword ptr [rdx+0x04]
- add edx, -24
- shr edx, 3
+ mov edx, dword ptr [r12+0x04]
+ lea edi, [rdx-0x18]
+ shr edi, 3
je SHORT G_M22168_IG10
- cmp edx, 1
+ cmp edi, 1
jne SHORT G_M22168_IG14
- ;; size=50 bbWeight=0.50 PerfScore 7.00
+ ;; size=44 bbWeight=0.50 PerfScore 6.12
G_M22168_IG10:
- mov edx, 1
- mov rdi, qword ptr [r13]
- cmp dword ptr [rdi+0x04], 24
+ mov edi, 1
+ cmp edx, 24
jbe SHORT G_M22168_IG11
- mov edx, dword ptr [r13+0x14]
- neg edx
- inc edx
- ;; size=23 bbWeight=0.50 PerfScore 4.38
+ mov edi, dword ptr [r13+0x14]
+ neg edi
+ inc edi
+ ;; size=18 bbWeight=0.50 PerfScore 2.00
G_M22168_IG11:
- mov edi, dword ptr [r13+0x08]
- cmp edx, edi
+ mov edx, dword ptr [r13+0x08]
+ cmp edi, edx
jae SHORT G_M22168_IG13
- movsxd rdx, edx
+ movsxd rdx, edi
mov rdi, r13
mov rsi, r14
mov rax, 0xD1FFAB1E ; code for System.Array:InternalSetValue(System.Object,long):this
call [rax]System.Array:InternalSetValue(System.Object,long):this
mov rdi, rbx
mov rdx, r13
mov rsi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon]:set_Item(System.__Canon,System.__Canon):this
call [r11]System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon]:set_Item(System.__Canon,System.__Canon):this
nop
;; size=52 bbWeight=0.50 PerfScore 5.75
G_M22168_IG12:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M22168_IG13:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowIndexOutOfRangeException()
call [rax]System.ThrowHelper:ThrowIndexOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M22168_IG14:
mov edi, 58
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException(int)
call [rax]System.ThrowHelper:ThrowArgumentException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
G_M22168_IG15:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 518, prolog size 22, PerfScore 68.38, instruction count 150, allocated bytes for code 518 (MethodHash=4d95a967) for method System.Composition.TypedParts.Discovery.TypeInspector:AddMetadata(System.Collections.Generic.IDictionary`2[System.String,System.Object],System.String,System.Type,System.Object) (FullOpts)
+; Total bytes of code 505, prolog size 22, PerfScore 63.00, instruction count 148, allocated bytes for code 505 (MethodHash=4d95a967) for method System.Composition.TypedParts.Discovery.TypeInspector:AddMetadata(System.Collections.Generic.IDictionary`2[System.String,System.Object],System.String,System.Type,System.Object) (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/4f6a2bc13c8d1bb81e412143cc807700 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 16 minutes.
dotnet/runtime#105098
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: