forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[X64] [EgorBo] JIT: Pass field's owner to getFieldType #216
Comments
Top method regressions30 (3.65 % of base) - System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) ; Assembly listing for method System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 7 single block inlinees; 8 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T07] ( 22, 23 ) ref -> rbx class-hnd single-def <System.Collections.Generic.List`1[System.String]>
+; V00 arg0 [V00,T07] ( 21, 22.50) ref -> rbx class-hnd single-def <System.Collections.Generic.List`1[System.String]>
; V01 loc0 [V01,T02] ( 13, 47.50) ref -> r15 class-hnd exact single-def <System.String>
-; V02 loc1 [V02 ] ( 19, 53.50) struct (16) [rbp-0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[ushort]>
+; V02 loc1 [V02 ] ( 19, 53.50) struct (16) [rbp-0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[ushort]>
; V03 loc2 [V03,T00] ( 36,151.08) int -> rax
-; V04 loc3 [V04,T20] ( 4, 2 ) int -> rcx
+; V04 loc3 [V04,T22] ( 4, 2 ) int -> rcx
;* V05 loc4 [V05 ] ( 0, 0 ) struct (16) zero-ref <System.Span`1[ushort]>
-; V06 loc5 [V06,T06] ( 9, 25.50) int -> r14
+; V06 loc5 [V06,T06] ( 10, 26 ) int -> r13
;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V08 tmp1 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V09 tmp2 [V09,T04] ( 5, 28 ) ref -> rdi class-hnd exact "impAppendStmt" <System.String>
-; V10 tmp3 [V10,T24] ( 2, 2 ) long -> rax "Inlining Arg"
-; V11 tmp4 [V11,T23] ( 2, 2 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String>
-; V12 tmp5 [V12,T05] ( 5, 28 ) ref -> rsi class-hnd "Inlining Arg" <System.__Canon>
+; V10 tmp3 [V10,T26] ( 2, 2 ) long -> rax "Inlining Arg"
+; V11 tmp4 [V11,T25] ( 2, 2 ) ref -> rax class-hnd exact single-def "Inlining Arg" <System.String>
+; V12 tmp5 [V12,T05] ( 5, 28 ) ref -> rsi class-hnd exact "Inlining Arg" <System.String>
; V13 tmp6 [V13,T14] ( 2, 4 ) ubyte -> rax "Inline return value spill temp"
; V14 tmp7 [V14,T15] ( 2, 8 ) byref -> rdi "impAppendStmt"
-; V15 tmp8 [V15,T25] ( 3, 1.50) ref -> rdi class-hnd single-def "Inline stloc first use temp" <System.String[]>
-; V16 tmp9 [V16,T21] ( 4, 2 ) int -> rsi "Inline stloc first use temp"
-; V17 tmp10 [V17 ] ( 10, 27 ) byref -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V02._reference (fldOffset=0x0)" P-DEP
-; V18 tmp11 [V18 ] ( 10, 27 ) int -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V02._length (fldOffset=0x8)" P-DEP
+; V15 tmp8 [V15,T27] ( 3, 1.50) ref -> rdi class-hnd exact single-def "Inline stloc first use temp" <System.String[]>
+; V16 tmp9 [V16,T23] ( 4, 2 ) int -> rsi "Inline stloc first use temp"
+; V17 tmp10 [V17 ] ( 10, 27 ) byref -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V02._reference (fldOffset=0x0)" P-DEP
+; V18 tmp11 [V18 ] ( 10, 27 ) int -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V02._length (fldOffset=0x8)" P-DEP
;* V19 tmp12 [V19 ] ( 0, 0 ) byref -> zero-ref "field V05._reference (fldOffset=0x0)" P-INDEP
;* V20 tmp13 [V20 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
-; V21 tmp14 [V21,T28] ( 2, 1 ) byref -> rax single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-; V22 tmp15 [V22,T29] ( 2, 1 ) int -> rcx "field V08._length (fldOffset=0x8)" P-INDEP
+; V21 tmp14 [V21,T31] ( 2, 1 ) byref -> rax single-def "field V08._reference (fldOffset=0x0)" P-INDEP
+; V22 tmp15 [V22,T32] ( 2, 1 ) int -> rcx "field V08._length (fldOffset=0x8)" P-INDEP
; V23 tmp16 [V23,T19] ( 3, 3 ) ref -> rax single-def "arr expr"
-; V24 tmp17 [V24,T08] ( 3, 24 ) ref -> rdi "arr expr"
-; V25 tmp18 [V25,T09] ( 2, 16 ) ref -> rsi "arr expr"
-; V26 GsCookie [V26 ] ( 1, 1 ) long -> [rbp-0x30] do-not-enreg[X] addr-exposed "GSSecurityCookie"
-; V27 cse0 [V27,T13] ( 3, 10 ) int -> rcx "CSE - moderate"
-; V28 cse1 [V28,T30] ( 2, 1 ) int -> rax "CSE - moderate"
-; V29 cse2 [V29,T11] ( 3, 12 ) int -> rdx "CSE - moderate"
-; V30 cse3 [V30,T10] ( 3, 12 ) ref -> rsi "CSE - moderate"
-; V31 cse4 [V31,T26] ( 3, 1.50) long -> rdx "CSE - moderate"
-; V32 cse5 [V32,T03] ( 15, 30.54) int -> rdi "CSE - aggressive"
-; V33 cse6 [V33,T16] ( 2, 8 ) int -> rax "CSE - moderate"
-; V34 cse7 [V34,T12] ( 3, 11.88) int -> rcx "CSE - moderate"
-; V35 cse8 [V35,T18] ( 7, 3.50) int -> rsi "CSE - moderate"
-; V36 cse9 [V36,T17] ( 3, 6 ) int -> rdx "CSE - moderate"
-; V37 cse10 [V37,T22] ( 4, 2 ) int -> rcx "CSE - moderate"
-; V38 cse11 [V38,T27] ( 3, 1.50) int -> rax "CSE - moderate"
-; V39 cse12 [V39,T01] ( 3, 48 ) long -> rdx "CSE - aggressive"
+; V24 tmp17 [V24,T20] ( 3, 3 ) ref -> rdi single-def "arr expr"
+; V25 tmp18 [V25,T08] ( 3, 24 ) ref -> rdi "arr expr"
+; V26 tmp19 [V26,T09] ( 2, 16 ) ref -> rsi "arr expr"
+; V27 tmp20 [V27,T21] ( 3, 3 ) ref -> rdi single-def "arr expr"
+; V28 GsCookie [V28 ] ( 1, 1 ) long -> [rbp-0x38] do-not-enreg[X] addr-exposed "GSSecurityCookie"
+; V29 cse0 [V29,T13] ( 3, 10 ) int -> rcx "CSE - moderate"
+; V30 cse1 [V30,T33] ( 2, 1 ) int -> rax "CSE - moderate"
+; V31 cse2 [V31,T11] ( 3, 12 ) int -> rdx "CSE - moderate"
+; V32 cse3 [V32,T10] ( 3, 12 ) ref -> rsi "CSE - moderate"
+; V33 cse4 [V33,T28] ( 3, 1.50) long -> rdx "CSE - moderate"
+; V34 cse5 [V34,T29] ( 3, 1.50) int -> r14 "CSE - moderate"
+; V35 cse6 [V35,T03] ( 15, 30.54) int -> rdi "CSE - aggressive"
+; V36 cse7 [V36,T16] ( 2, 8 ) int -> rax "CSE - moderate"
+; V37 cse8 [V37,T12] ( 3, 11.88) int -> rcx "CSE - moderate"
+; V38 cse9 [V38,T18] ( 7, 3.50) int -> rsi "CSE - moderate"
+; V39 cse10 [V39,T17] ( 3, 6 ) int -> rdx "CSE - moderate"
+; V40 cse11 [V40,T24] ( 4, 2 ) int -> rcx "CSE - moderate"
+; V41 cse12 [V41,T30] ( 3, 1.50) int -> rax "CSE - moderate"
+; V42 cse13 [V42,T01] ( 3, 48 ) long -> rdx "CSE - aggressive"
;
-; Lcl frame size = 24
+; Lcl frame size = 32
G_M28069_IG01:
push rbp
push r15
push r14
+ push r13
push rbx
- sub rsp, 24
- lea rbp, [rsp+0x30]
+ sub rsp, 32
+ lea rbp, [rsp+0x40]
xor eax, eax
- mov qword ptr [rbp-0x28], rax
- mov qword ptr [rbp-0x30], 0xD1FFAB1E
+ mov qword ptr [rbp-0x30], rax
+ mov qword ptr [rbp-0x38], 0xD1FFAB1E
mov rbx, rdi
- ;; size=32 bbWeight=1 PerfScore 7.25
+ ;; size=34 bbWeight=1 PerfScore 8.25
G_M28069_IG02:
cmp dword ptr [rbx+0x10], 0
je G_M28069_IG26
;; size=10 bbWeight=1 PerfScore 4.00
G_M28069_IG03:
mov rax, gword ptr [rbx+0x08]
cmp dword ptr [rax+0x08], 0
jbe G_M28069_IG30
mov r15, gword ptr [rax+0x10]
mov edi, dword ptr [r15+0x08]
cmp edi, 100
jg G_M28069_IG26
lea ecx, [rdi+0x02]
mov eax, ecx
mov esi, 2
mul rdx:rax, rsi
jb G_M28069_IG29
test rax, rax
je SHORT G_M28069_IG05
mov rdx, rax
add rdx, 15
and rdx, -16
neg rdx
add rdx, rsp
jb SHORT G_M28069_IG04
xor edx, edx
;; size=76 bbWeight=0.50 PerfScore 10.00
G_M28069_IG04:
test dword ptr [rsp], esp
sub rsp, 0x1000
cmp rsp, rdx
jae SHORT G_M28069_IG04
mov rsp, rdx
lea rax, [rsp]
;; size=22 bbWeight=0.50 PerfScore 2.62
G_M28069_IG05:
test ecx, ecx
jl G_M28069_IG31
- mov bword ptr [rbp-0x28], rax
- mov dword ptr [rbp-0x20], ecx
+ mov bword ptr [rbp-0x30], rax
+ mov dword ptr [rbp-0x28], ecx
xor eax, eax
test edi, edi
jle G_M28069_IG14
;; size=25 bbWeight=0.50 PerfScore 2.38
G_M28069_IG06:
mov ecx, eax
movzx rcx, word ptr [r15+2*rcx+0x0C]
cmp ecx, 39
jne SHORT G_M28069_IG10
jmp SHORT G_M28069_IG07
align [0 bytes for IG07]
;; size=15 bbWeight=4 PerfScore 22.00
G_M28069_IG07:
- cmp eax, dword ptr [rbp-0x20]
+ cmp eax, dword ptr [rbp-0x28]
jae G_M28069_IG30
- mov rcx, bword ptr [rbp-0x28]
+ mov rcx, bword ptr [rbp-0x30]
mov edx, eax
movzx rsi, word ptr [r15+2*rdx+0x0C]
mov word ptr [rcx+2*rdx], si
inc eax
cmp edi, eax
jle SHORT G_M28069_IG08
mov ecx, eax
cmp word ptr [r15+2*rcx+0x0C], 39
jne SHORT G_M28069_IG07
;; size=42 bbWeight=16 PerfScore 208.00
G_M28069_IG08:
cmp edi, eax
jg SHORT G_M28069_IG11
;; size=4 bbWeight=2 PerfScore 2.50
G_M28069_IG09:
jmp G_M28069_IG26
align [0 bytes for IG16]
;; size=5 bbWeight=0.50 PerfScore 1.00
G_M28069_IG10:
cmp ecx, 121
je SHORT G_M28069_IG13
;; size=5 bbWeight=2 PerfScore 2.50
G_M28069_IG11:
- cmp eax, dword ptr [rbp-0x20]
+ cmp eax, dword ptr [rbp-0x28]
jae G_M28069_IG30
- mov rcx, bword ptr [rbp-0x28]
+ mov rcx, bword ptr [rbp-0x30]
mov edx, eax
mov esi, eax
movzx rsi, word ptr [r15+2*rsi+0x0C]
mov word ptr [rcx+2*rdx], si
inc eax
cmp edi, eax
jg SHORT G_M28069_IG06
;; size=33 bbWeight=4 PerfScore 36.00
G_M28069_IG12:
jmp SHORT G_M28069_IG14
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M28069_IG13:
- cmp eax, dword ptr [rbp-0x20]
+ cmp eax, dword ptr [rbp-0x28]
jae G_M28069_IG30
- mov rcx, bword ptr [rbp-0x28]
+ mov rcx, bword ptr [rbp-0x30]
mov edx, eax
mov word ptr [rcx+2*rdx], 121
;; size=21 bbWeight=0.50 PerfScore 2.62
G_M28069_IG14:
lea ecx, [rdi-0x01]
cmp ecx, eax
jle G_M28069_IG26
lea ecx, [rax+0x01]
cmp ecx, edi
jae G_M28069_IG30
mov edx, ecx
cmp word ptr [r15+2*rdx+0x0C], 121
jne G_M28069_IG26
lea esi, [rax+0x02]
cmp edi, esi
jle SHORT G_M28069_IG15
cmp esi, edi
jae G_M28069_IG30
mov r8d, esi
cmp word ptr [r15+2*r8+0x0C], 121
je G_M28069_IG26
;; size=68 bbWeight=0.50 PerfScore 7.50
G_M28069_IG15:
- cmp ecx, dword ptr [rbp-0x20]
+ cmp ecx, dword ptr [rbp-0x28]
jae G_M28069_IG30
- mov rcx, bword ptr [rbp-0x28]
+ mov rcx, bword ptr [rbp-0x30]
mov word ptr [rcx+2*rdx], 121
- cmp esi, dword ptr [rbp-0x20]
+ cmp esi, dword ptr [rbp-0x28]
jae G_M28069_IG30
- mov rcx, bword ptr [rbp-0x28]
+ mov rcx, bword ptr [rbp-0x30]
mov edx, esi
mov word ptr [rcx+2*rdx], 121
add eax, 3
- cmp eax, dword ptr [rbp-0x20]
+ cmp eax, dword ptr [rbp-0x28]
jae G_M28069_IG30
- mov rcx, bword ptr [rbp-0x28]
+ mov rcx, bword ptr [rbp-0x30]
mov word ptr [rcx+2*rax], 121
mov eax, esi
cmp edi, eax
jle SHORT G_M28069_IG19
test eax, eax
jl SHORT G_M28069_IG18
;; size=72 bbWeight=0.50 PerfScore 9.12
G_M28069_IG16:
lea ecx, [rax+0x02]
- cmp ecx, dword ptr [rbp-0x20]
+ cmp ecx, dword ptr [rbp-0x28]
jae G_M28069_IG30
- mov rdx, bword ptr [rbp-0x28]
+ mov rdx, bword ptr [rbp-0x30]
mov esi, eax
movzx rsi, word ptr [r15+2*rsi+0x0C]
mov word ptr [rdx+2*rcx], si
inc eax
cmp edi, eax
jg SHORT G_M28069_IG16
;; size=34 bbWeight=3.96 PerfScore 36.63
G_M28069_IG17:
jmp SHORT G_M28069_IG19
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M28069_IG18:
lea ecx, [rax+0x02]
- cmp ecx, dword ptr [rbp-0x20]
+ cmp ecx, dword ptr [rbp-0x28]
jae G_M28069_IG30
- mov rcx, bword ptr [rbp-0x28]
+ mov rcx, bword ptr [rbp-0x30]
lea edx, [rax+0x02]
cmp eax, edi
jae G_M28069_IG30
mov esi, eax
movzx rsi, word ptr [r15+2*rsi+0x0C]
mov word ptr [rcx+2*rdx], si
inc eax
cmp edi, eax
jg SHORT G_M28069_IG18
;; size=45 bbWeight=0.04 PerfScore 0.44
G_M28069_IG19:
- lea rdi, [rbp-0x28]
+ lea rdi, [rbp-0x30]
mov rax, 0xD1FFAB1E ; code for System.Span`1[ushort]:ToString():System.String:this
call [rax]System.Span`1[ushort]:ToString():System.String:this
- mov rdx, rax
- cmp dword ptr [rbx+0x10], 0
+ mov r14d, dword ptr [rbx+0x10]
+ test r14d, r14d
je G_M28069_IG32
mov rdi, gword ptr [rbx+0x08]
- xor esi, esi
- call CORINFO_HELP_ARRADDR_ST
+ cmp dword ptr [rdi+0x08], 0
+ jbe G_M28069_IG30
+ lea rdi, bword ptr [rdi+0x10]
+ mov rsi, rax
+ call CORINFO_HELP_ASSIGN_REF
inc dword ptr [rbx+0x14]
- mov r14d, 1
- cmp dword ptr [rbx+0x10], 1
+ mov r13d, 1
+ cmp r14d, 1
jle SHORT G_M28069_IG23
- ;; size=55 bbWeight=0.50 PerfScore 9.25
+ ;; size=70 bbWeight=0.50 PerfScore 9.62
G_M28069_IG20:
mov edx, dword ptr [rbx+0x10]
- cmp r14d, edx
+ cmp r13d, edx
jae G_M28069_IG32
mov rsi, gword ptr [rbx+0x08]
mov rdi, rsi
mov eax, dword ptr [rdi+0x08]
- cmp r14d, eax
+ cmp r13d, eax
jae G_M28069_IG30
- mov eax, r14d
+ mov eax, r13d
mov rdi, gword ptr [rdi+8*rax+0x10]
test edx, edx
je G_M28069_IG32
mov rsi, gword ptr [rsi+0x10]
cmp rdi, rsi
je SHORT G_M28069_IG24
;; size=56 bbWeight=4 PerfScore 62.00
G_M28069_IG21:
test rdi, rdi
je SHORT G_M28069_IG22
test rsi, rsi
je SHORT G_M28069_IG22
mov edx, dword ptr [rdi+0x08]
cmp edx, dword ptr [rsi+0x08]
jne SHORT G_M28069_IG22
add rdi, 12
add edx, edx
add rsi, 12
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
call [rax]System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
test eax, eax
jne SHORT G_M28069_IG24
;; size=44 bbWeight=2 PerfScore 27.50
G_M28069_IG22:
- inc r14d
- cmp r14d, dword ptr [rbx+0x10]
+ inc r13d
+ cmp r13d, dword ptr [rbx+0x10]
jl SHORT G_M28069_IG20
;; size=9 bbWeight=4 PerfScore 17.00
G_M28069_IG23:
inc dword ptr [rbx+0x14]
mov rdi, gword ptr [rbx+0x08]
mov esi, dword ptr [rbx+0x10]
mov eax, dword ptr [rdi+0x08]
cmp eax, esi
jbe SHORT G_M28069_IG25
lea eax, [rsi+0x01]
mov dword ptr [rbx+0x10], eax
lea rdi, bword ptr [rdi+8*rsi+0x10]
mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
jmp SHORT G_M28069_IG26
;; size=38 bbWeight=0.50 PerfScore 8.00
G_M28069_IG24:
- cmp r14d, dword ptr [rbx+0x10]
+ cmp r13d, dword ptr [rbx+0x10]
jae SHORT G_M28069_IG32
mov rdi, gword ptr [rbx+0x08]
- movsxd rsi, r14d
- mov rdx, r15
- call CORINFO_HELP_ARRADDR_ST
+ cmp r13d, dword ptr [rdi+0x08]
+ jae SHORT G_M28069_IG30
+ mov esi, r13d
+ lea rdi, bword ptr [rdi+8*rsi+0x10]
+ mov rsi, r15
+ call CORINFO_HELP_ASSIGN_REF
inc dword ptr [rbx+0x14]
jmp SHORT G_M28069_IG26
- ;; size=26 bbWeight=0.50 PerfScore 6.25
+ ;; size=37 bbWeight=0.50 PerfScore 8.75
G_M28069_IG25:
mov rdi, rbx
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
call [rax]System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M28069_IG26:
- cmp qword ptr [rbp-0x30], 0xD1FFAB1E
+ cmp qword ptr [rbp-0x38], 0xD1FFAB1E
je SHORT G_M28069_IG27
call CORINFO_HELP_FAIL_FAST
;; size=15 bbWeight=1 PerfScore 4.00
G_M28069_IG27:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M28069_IG28:
- lea rsp, [rbp-0x18]
+ lea rsp, [rbp-0x20]
pop rbx
+ pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.50
+ ;; size=13 bbWeight=1 PerfScore 4.00
G_M28069_IG29:
call CORINFO_HELP_OVERFLOW
;; size=5 bbWeight=0 PerfScore 0.00
G_M28069_IG30:
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M28069_IG31:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M28069_IG32:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 822, prolog size 32, PerfScore 578.80, instruction count 233, allocated bytes for code 826 (MethodHash=bd52925a) for method System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
+; Total bytes of code 852, prolog size 34, PerfScore 586.17, instruction count 241, allocated bytes for code 856 (MethodHash=bd52925a) for method System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts) 28 (9.21 % of base) - System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte ; Assembly listing for method System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 5 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T07] ( 3, 3 ) ref -> r14 class-hnd single-def <System.String>
-; V01 arg1 [V01,T08] ( 3, 3 ) ushort -> r13 single-def
-; V02 arg2 [V02,T06] ( 4, 3.50) int -> r15 single-def
-; V03 arg3 [V03,T05] ( 4, 3.50) byref -> rbx single-def
+; V00 arg0 [V00,T10] ( 3, 3 ) ref -> r14 class-hnd single-def <System.String>
+; V01 arg1 [V01,T11] ( 3, 3 ) ushort -> r13 single-def
+; V02 arg2 [V02,T09] ( 4, 3.50) int -> r15 single-def
+; V03 arg3 [V03,T08] ( 4, 3.50) byref -> rbx single-def
; V04 loc0 [V04 ] ( 5, 4.50) struct (16) [rbp-0x38] do-not-enreg[XS] addr-exposed ld-addr-op <System.Globalization.CalendarData+IcuEnumCalendarsData>
-; V05 loc1 [V05,T09] ( 3, 3 ) ubyte -> r14
-; V06 loc2 [V06,T01] ( 11, 30 ) ref -> r13 class-hnd single-def <System.Collections.Generic.List`1[System.String]>
+; V05 loc1 [V05,T12] ( 3, 3 ) ubyte -> r14
+; V06 loc2 [V06,T01] ( 10, 26 ) ref -> r13 class-hnd single-def <System.Collections.Generic.List`1[System.String]>
; V07 loc3 [V07,T00] ( 9, 32.50) int -> r12
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V09 tmp1 [V09,T04] ( 3, 6 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.List`1[System.String]>
+; V09 tmp1 [V09,T07] ( 3, 6 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.List`1[System.String]>
;* V10 tmp2 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V11 tmp3 [V11,T03] ( 2, 16 ) ref -> rdx class-hnd exact "Inlining Arg" <System.String>
+; V11 tmp3 [V11,T04] ( 2, 16 ) ref -> rax class-hnd exact "Inlining Arg" <System.String>
; V12 tmp4 [V12 ] ( 4, 3.50) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V04.Results (fldOffset=0x0)" P-DEP
; V13 tmp5 [V13 ] ( 3, 3 ) ubyte -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V04.DisallowDuplicates (fldOffset=0x8)" P-DEP
; V14 tmp6 [V14,T02] ( 3, 24 ) ref -> rdi "arr expr"
+; V15 tmp7 [V15,T03] ( 3, 24 ) ref -> rdi "arr expr"
+; V16 cse0 [V16,T05] ( 3, 12 ) int -> [rbp-0x3C] spill-single-def "CSE - aggressive"
+; V17 cse1 [V17,T06] ( 3, 12 ) long -> [rbp-0x48] spill-single-def "CSE - aggressive"
;
-; Lcl frame size = 24
+; Lcl frame size = 40
G_M35446_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 24
+ sub rsp, 40
vzeroupper
- lea rbp, [rsp+0x40]
+ lea rbp, [rsp+0x50]
mov r14, rdi
mov r13d, esi
mov r15d, edx
mov rbx, rcx
;; size=34 bbWeight=1 PerfScore 8.75
G_M35446_IG02:
xor rdi, rdi
mov gword ptr [rbx], rdi
vxorps xmm0, xmm0, xmm0
vmovdqu xmmword ptr [rbp-0x38], xmm0
mov rdi, 0xD1FFAB1E ; System.Collections.Generic.List`1[System.String]
call CORINFO_HELP_NEWSFAST
mov rdx, 0xD1FFAB1E ; 'System.String[]'
mov gword ptr [rax+0x08], rdx
mov gword ptr [rbp-0x38], rax
mov byte ptr [rbp-0x30], 1
movzx rdx, r13w
lea r8, [rbp-0x38]
mov rsi, r14
mov ecx, r15d
mov rdi, 0xD1FFAB1E ; code for System.Globalization.CalendarData:EnumCalendarInfoCallback(ulong,long)
mov rax, 0xD1FFAB1E ; code for Interop+Globalization:EnumCalendarInfo(long,System.String,ushort,int,long):ubyte
call [rax]Interop+Globalization:EnumCalendarInfo(long,System.String,ushort,int,long):ubyte
mov r14d, eax
test r14d, r14d
je G_M35446_IG07
;; size=99 bbWeight=1 PerfScore 13.33
G_M35446_IG03:
mov r13, gword ptr [rbp-0x38]
xor r12d, r12d
cmp dword ptr [r13+0x10], 0
jle SHORT G_M35446_IG05
;; size=14 bbWeight=0.50 PerfScore 2.62
G_M35446_IG04:
cmp r12d, dword ptr [r13+0x10]
jae G_M35446_IG10
mov rdi, gword ptr [r13+0x08]
cmp r12d, dword ptr [rdi+0x08]
- jae SHORT G_M35446_IG09
+ jae G_M35446_IG09
mov eax, r12d
+ mov qword ptr [rbp-0x48], rax
mov rdi, gword ptr [rdi+8*rax+0x10]
- mov rax, 0xD1FFAB1E ; code for System.Globalization.CalendarData:NormalizeDatePattern(System.String):System.String
- call [rax]System.Globalization.CalendarData:NormalizeDatePattern(System.String):System.String
- mov rdx, rax
- cmp r12d, dword ptr [r13+0x10]
+ mov rcx, 0xD1FFAB1E ; code for System.Globalization.CalendarData:NormalizeDatePattern(System.String):System.String
+ call [rcx]System.Globalization.CalendarData:NormalizeDatePattern(System.String):System.String
+ mov ecx, dword ptr [r13+0x10]
+ mov dword ptr [rbp-0x3C], ecx
+ cmp r12d, ecx
jae SHORT G_M35446_IG10
mov rdi, gword ptr [r13+0x08]
- movsxd rsi, r12d
- call CORINFO_HELP_ARRADDR_ST
+ cmp r12d, dword ptr [rdi+0x08]
+ jae SHORT G_M35446_IG09
+ mov rsi, qword ptr [rbp-0x48]
+ lea rdi, bword ptr [rdi+8*rsi+0x10]
+ mov rsi, rax
+ call CORINFO_HELP_ASSIGN_REF
inc dword ptr [r13+0x14]
inc r12d
- cmp r12d, dword ptr [r13+0x10]
+ mov edi, dword ptr [rbp-0x3C]
+ cmp r12d, edi
jl SHORT G_M35446_IG04
- ;; size=74 bbWeight=4 PerfScore 121.00
+ ;; size=102 bbWeight=4 PerfScore 142.00
G_M35446_IG05:
cmp r15d, 3
jne SHORT G_M35446_IG06
mov rdi, r13
mov rax, 0xD1FFAB1E ; code for System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String])
call [rax]System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String])
;; size=21 bbWeight=0.50 PerfScore 2.38
G_M35446_IG06:
mov rdi, r13
mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.__Canon]:ToArray():System.__Canon[]:this
call [rax]System.Collections.Generic.List`1[System.__Canon]:ToArray():System.__Canon[]:this
mov rsi, rax
mov rdi, rbx
call CORINFO_HELP_CHECKED_ASSIGN_REF
;; size=26 bbWeight=0.50 PerfScore 2.50
G_M35446_IG07:
mov eax, r14d
;; size=3 bbWeight=1 PerfScore 0.25
G_M35446_IG08:
- add rsp, 24
+ add rsp, 40
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
G_M35446_IG09:
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M35446_IG10:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 304, prolog size 22, PerfScore 185.48, instruction count 80, allocated bytes for code 304 (MethodHash=99757589) for method System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
+; Total bytes of code 332, prolog size 22, PerfScore 209.28, instruction count 87, allocated bytes for code 332 (MethodHash=99757589) for method System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts) 13 (1.21 % of base) - System.Threading.TimerQueue:TimerThread() ; Assembly listing for method System.Threading.TimerQueue:TimerThread() (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 17 single block inlinees; 15 inlinees without PGO data
; Final local variable assignments
;
-; V00 loc0 [V00,T21] ( 7, 196 ) ref -> rbx class-hnd exact single-def <System.Threading.AutoResetEvent>
+; V00 loc0 [V00,T22] ( 7, 196 ) ref -> rbx class-hnd exact single-def <System.Threading.AutoResetEvent>
; V01 loc1 [V01,T00] ( 16,1249 ) ref -> r15 class-hnd single-def <System.Collections.Generic.List`1[System.Threading.TimerQueue]>
; V02 loc2 [V02,T05] ( 9, 641 ) ref -> r14 class-hnd single-def <System.Collections.Generic.List`1[System.Threading.TimerQueue]>
; V03 loc3 [V03,T11] ( 8, 392 ) int -> registers
-; V04 loc4 [V04,T35] ( 2, 0 ) ref -> [rbp-0x50] class-hnd exact EH-live single-def <System.Threading.AutoResetEvent>
+; V04 loc4 [V04,T37] ( 2, 0 ) ref -> [rbp-0x50] class-hnd exact EH-live single-def <System.Threading.AutoResetEvent>
; V05 loc5 [V05 ] ( 5, 4 ) ubyte -> [rbp-0x30] do-not-enreg[X] addr-exposed ld-addr-op
-; V06 loc6 [V06,T25] ( 2, 192 ) long -> r13
-; V07 loc7 [V07,T28] ( 3, 80 ) ref -> [rbp-0x58] do-not-enreg[Z] class-hnd exact EH-live <System.Threading.AutoResetEvent>
+; V06 loc6 [V06,T27] ( 2, 192 ) long -> r13
+; V07 loc7 [V07,T30] ( 3, 80 ) ref -> [rbp-0x58] do-not-enreg[Z] class-hnd exact EH-live <System.Threading.AutoResetEvent>
; V08 loc8 [V08 ] ( 5, 256 ) ubyte -> [rbp-0x38] do-not-enreg[X] addr-exposed ld-addr-op
-; V09 loc9 [V09,T01] ( 11,1088 ) int -> [rbp-0x3C]
+; V09 loc9 [V09,T01] ( 12,1152 ) int -> [rbp-0x3C]
; V10 loc10 [V10,T09] ( 5, 448 ) ref -> rsi class-hnd exact <System.Threading.TimerQueue>
; V11 loc11 [V11,T13] ( 4, 384 ) long -> rcx
; V12 loc12 [V12,T12] ( 6, 384 ) int -> [rbp-0x40] spill-single-def
;* V13 loc13 [V13 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op <System.Collections.Generic.List`1+Enumerator[System.Threading.TimerQueue]>
;* V14 loc14 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <System.Threading.TimerQueue>
;# V15 OutArgs [V15 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V16 tmp1 [V16 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inlining Arg"
-;* V17 tmp2 [V17,T29] ( 0, 0 ) int -> zero-ref "Inline return value spill temp"
-; V18 tmp3 [V18,T22] ( 3, 192 ) ref -> rdi class-hnd "Inline stloc first use temp" <System.Threading.TimerQueue[]>
+;* V17 tmp2 [V17,T31] ( 0, 0 ) int -> zero-ref "Inline return value spill temp"
+; V18 tmp3 [V18,T23] ( 3, 192 ) ref -> rdi class-hnd exact "Inline stloc first use temp" <System.Threading.TimerQueue[]>
; V19 tmp4 [V19,T17] ( 4, 256 ) int -> rcx "Inline stloc first use temp"
-; V20 tmp5 [V20,T19] ( 2, 256 ) ref -> rdx class-hnd "Inlining Arg" <System.__Canon>
+; V20 tmp5 [V20,T19] ( 2, 256 ) ref -> rdx class-hnd exact "Inlining Arg" <System.Threading.TimerQueue>
;* V21 tmp6 [V21 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[System.Threading.TimerQueue]>
; V22 tmp7 [V22,T06] ( 5, 640 ) ref -> [rbp-0x60] class-hnd exact spill-single-def "Inlining Arg" <System.Threading.ThreadPoolWorkQueue>
;* V23 tmp8 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Diagnostics.Tracing.FrameworkEventSource>
; V24 tmp9 [V24,T14] ( 3, 384 ) ref -> [rbp-0x68] class-hnd spill-single-def "Inlining Arg" <System.Collections.Concurrent.ConcurrentQueue`1[System.Object]>
; V25 tmp10 [V25,T07] ( 5, 640 ) ref -> [rbp-0x70] class-hnd exact "Inlining Arg" <System.Threading.PortableThreadPool>
;* V26 tmp11 [V26 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V27 tmp12 [V27 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
-;* V28 tmp13 [V28,T20] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V28 tmp13 [V28,T21] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V29 tmp14 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[System.Threading.TimerQueue]>
; V30 tmp15 [V30,T16] ( 3, 272 ) int -> rdx "Inline stloc first use temp"
-;* V31 tmp16 [V31,T32] ( 0, 0 ) ref -> zero-ref "field V13._list (fldOffset=0x0)" P-INDEP
+;* V31 tmp16 [V31,T34] ( 0, 0 ) ref -> zero-ref "field V13._list (fldOffset=0x0)" P-INDEP
; V32 tmp17 [V32,T10] ( 4, 320 ) ref -> [rbp-0x78] spill-single-def "field V13._current (fldOffset=0x8)" P-INDEP
; V33 tmp18 [V33,T02] ( 6, 656 ) int -> [rbp-0x44] "field V13._index (fldOffset=0x10)" P-INDEP
-; V34 tmp19 [V34,T26] ( 2, 144 ) int -> r13 "field V13._version (fldOffset=0x14)" P-INDEP
-; V35 tmp20 [V35,T30] ( 2, 32 ) ref -> rdi "field V21._list (fldOffset=0x0)" P-INDEP
+; V34 tmp19 [V34,T28] ( 2, 144 ) int -> r13 "field V13._version (fldOffset=0x14)" P-INDEP
+; V35 tmp20 [V35,T32] ( 2, 32 ) ref -> rdi "field V21._list (fldOffset=0x0)" P-INDEP
;* V36 tmp21 [V36 ] ( 0, 0 ) ref -> zero-ref "field V21._current (fldOffset=0x8)" P-INDEP
-;* V37 tmp22 [V37,T33] ( 0, 0 ) int -> zero-ref "field V21._index (fldOffset=0x10)" P-INDEP
-; V38 tmp23 [V38,T31] ( 2, 32 ) int -> r13 "field V21._version (fldOffset=0x14)" P-INDEP
-; V39 tmp24 [V39,T36] ( 2, 0 ) ref -> rdx "argument with side effect"
+;* V37 tmp22 [V37,T35] ( 0, 0 ) int -> zero-ref "field V21._index (fldOffset=0x10)" P-INDEP
+; V38 tmp23 [V38,T33] ( 2, 32 ) int -> r13 "field V21._version (fldOffset=0x14)" P-INDEP
+; V39 tmp24 [V39,T38] ( 2, 0 ) ref -> rdx "argument with side effect"
; V40 tmp25 [V40,T03] ( 3, 768 ) ref -> rdi "arr expr"
; V41 tmp26 [V41,T15] ( 3, 384 ) ref -> rdx "arr expr"
-; V42 tmp27 [V42,T04] ( 3, 768 ) ref -> rsi "arr expr"
-; V43 PSPSym [V43,T34] ( 1, 1 ) long -> [rbp-0x80] do-not-enreg[V] "PSPSym"
-; V44 cse0 [V44,T23] ( 3, 192 ) ref -> rsi "CSE - moderate"
-; V45 cse1 [V45,T08] ( 3, 384 ) int -> rdx "CSE - moderate"
-; V46 cse2 [V46,T18] ( 4, 256 ) int -> rdi "CSE - moderate"
-; V47 cse3 [V47,T24] ( 3, 192 ) ref -> rsi "CSE - moderate"
-; V48 cse4 [V48,T27] ( 2, 128 ) int -> rdx "CSE - moderate"
+; V42 tmp27 [V42,T20] ( 2, 256 ) ref -> rsi "arr expr"
+; V43 tmp28 [V43,T04] ( 3, 768 ) ref -> rsi "arr expr"
+; V44 PSPSym [V44,T36] ( 1, 1 ) long -> [rbp-0x80] do-not-enreg[V] "PSPSym"
+; V45 cse0 [V45,T24] ( 3, 192 ) ref -> rsi "CSE - moderate"
+; V46 cse1 [V46,T08] ( 3, 384 ) int -> rdx "CSE - moderate"
+; V47 cse2 [V47,T18] ( 4, 256 ) int -> rdi "CSE - moderate"
+; V48 cse3 [V48,T25] ( 3, 192 ) ref -> rsi "CSE - moderate"
+; V49 cse4 [V49,T29] ( 2, 128 ) int -> rdx "CSE - moderate"
+; V50 cse5 [V50,T26] ( 3, 192 ) int -> r8 "CSE - moderate"
;
; Lcl frame size = 88
G_M45973_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 88
lea rbp, [rsp+0x80]
mov qword ptr [rbp-0x80], rsp
;; size=26 bbWeight=1 PerfScore 7.75
G_M45973_IG02:
mov rsi, 0xD1FFAB1E ; const ptr
mov rbx, gword ptr [rsi]
mov rsi, 0xD1FFAB1E ; data for System.Threading.TimerQueue:s_scheduledTimersToFire
mov r15, gword ptr [rsi]
mov gword ptr [rbp-0x50], rbx
xor esi, esi
mov dword ptr [rbp-0x30], esi
;; size=35 bbWeight=1 PerfScore 6.75
G_M45973_IG03:
cmp byte ptr [rbp-0x30], 0
jne SHORT G_M45973_IG04
lea rsi, [rbp-0x30]
mov rdi, rbx
call System.Threading.Monitor:ReliableEnter(System.Object,byref)
mov rdi, 0xD1FFAB1E ; data for System.Threading.TimerQueue:s_scheduledTimers
mov r14, gword ptr [rdi]
jmp SHORT G_M45973_IG05
;; size=33 bbWeight=1 PerfScore 9.00
G_M45973_IG04:
mov rax, 0xD1FFAB1E ; code for System.Threading.Monitor:ThrowLockTakenException()
call [rax]System.Threading.Monitor:ThrowLockTakenException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M45973_IG05:
cmp byte ptr [rbp-0x30], 0
je SHORT G_M45973_IG06
mov rdi, rbx
call System.Threading.Monitor:Exit(System.Object)
;; size=14 bbWeight=1 PerfScore 4.25
G_M45973_IG06:
mov r13d, -1
;; size=6 bbWeight=8 PerfScore 2.00
G_M45973_IG07:
cmp r13d, -1
jl G_M45973_IG37
mov rdi, rbx
mov esi, r13d
xor rdx, rdx
xor ecx, ecx
mov rax, 0xD1FFAB1E ; code for System.Threading.WaitHandle:WaitOneNoCheck(int,System.Object,ubyte):ubyte:this
call [rax]System.Threading.WaitHandle:WaitOneNoCheck(int,System.Object,ubyte):ubyte:this
call System.Environment:get_TickCount64():long
mov r13, rax
mov r12d, 0xD1FFAB1E
mov gword ptr [rbp-0x58], rbx
xor esi, esi
mov dword ptr [rbp-0x38], esi
;; size=55 bbWeight=64 PerfScore 592.00
G_M45973_IG08:
cmp byte ptr [rbp-0x38], 0
jne G_M45973_IG20
lea rsi, [rbp-0x38]
mov rdi, rbx
call System.Threading.Monitor:ReliableEnter(System.Object,byref)
mov eax, dword ptr [r14+0x10]
dec eax
js G_M45973_IG21
;; size=34 bbWeight=64 PerfScore 512.00
G_M45973_IG09:
cmp eax, dword ptr [r14+0x10]
jae G_M45973_IG16
mov rdi, gword ptr [r14+0x08]
cmp eax, dword ptr [rdi+0x08]
jae G_M45973_IG19
mov dword ptr [rbp-0x3C], eax
mov esi, eax
mov rsi, gword ptr [rdi+8*rsi+0x10]
mov rcx, qword ptr [rsi+0x30]
sub rcx, r13
test rcx, rcx
jg G_M45973_IG18
;; size=49 bbWeight=128 PerfScore 2144.00
G_M45973_IG10:
mov byte ptr [rsi+0x3D], 0
inc dword ptr [r15+0x14]
mov rdi, gword ptr [r15+0x08]
mov ecx, dword ptr [r15+0x10]
mov edx, dword ptr [rdi+0x08]
cmp edx, ecx
jbe G_M45973_IG17
lea edx, [rcx+0x01]
mov dword ptr [r15+0x10], edx
lea rdi, bword ptr [rdi+8*rcx+0x10]
call CORINFO_HELP_ASSIGN_REF
;; size=44 bbWeight=64 PerfScore 944.00
G_M45973_IG11:
mov edi, dword ptr [r14+0x10]
lea eax, [rdi-0x01]
mov dword ptr [rbp-0x40], eax
mov ecx, dword ptr [rbp-0x3C]
cmp ecx, eax
je SHORT G_M45973_IG15
cmp eax, edi
jae SHORT G_M45973_IG16
mov rsi, gword ptr [r14+0x08]
mov rdx, rsi
- cmp eax, dword ptr [rdx+0x08]
+ mov r8d, dword ptr [rdx+0x08]
+ cmp eax, r8d
jae SHORT G_M45973_IG19
- mov r8d, eax
- mov rdx, gword ptr [rdx+8*r8+0x10]
+ mov r9d, eax
+ mov rdx, gword ptr [rdx+8*r9+0x10]
cmp ecx, edi
jae SHORT G_M45973_IG16
- mov rdi, rsi
+ cmp ecx, r8d
+ jae SHORT G_M45973_IG19
mov dword ptr [rbp-0x3C], ecx
- movsxd rsi, ecx
- call CORINFO_HELP_ARRADDR_ST
+ mov edi, ecx
+ lea rdi, bword ptr [rsi+8*rdi+0x10]
+ mov rsi, rdx
+ call CORINFO_HELP_ASSIGN_REF
inc dword ptr [r14+0x14]
mov eax, dword ptr [rbp-0x40]
- ;; size=66 bbWeight=64 PerfScore 1488.00
+ ;; size=79 bbWeight=64 PerfScore 1584.00
G_M45973_IG12:
mov rdi, r14
mov esi, eax
mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.__Canon]:RemoveAt(int):this
call [rax]System.Collections.Generic.List`1[System.__Canon]:RemoveAt(int):this
;; size=17 bbWeight=64 PerfScore 240.00
G_M45973_IG13:
mov eax, dword ptr [rbp-0x3C]
dec eax
jns G_M45973_IG09
;; size=11 bbWeight=128 PerfScore 288.00
G_M45973_IG14:
jmp SHORT G_M45973_IG21
;; size=2 bbWeight=16 PerfScore 32.00
G_M45973_IG15:
mov dword ptr [rbp-0x3C], ecx
jmp SHORT G_M45973_IG12
;; size=5 bbWeight=32 PerfScore 96.00
G_M45973_IG16:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M45973_IG17:
mov rdi, r15
mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
call [rcx]System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
jmp G_M45973_IG11
;; size=20 bbWeight=64 PerfScore 352.00
G_M45973_IG18:
movsxd rdi, r12d
cmp rcx, rdi
jge SHORT G_M45973_IG13
mov r12d, ecx
jmp SHORT G_M45973_IG13
;; size=13 bbWeight=64 PerfScore 240.00
G_M45973_IG19:
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M45973_IG20:
mov rax, 0xD1FFAB1E ; code for System.Threading.Monitor:ThrowLockTakenException()
call [rax]System.Threading.Monitor:ThrowLockTakenException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M45973_IG21:
cmp byte ptr [rbp-0x38], 0
je SHORT G_M45973_IG23
;; size=6 bbWeight=64 PerfScore 192.00
G_M45973_IG22:
mov rdi, gword ptr [rbp-0x58]
call System.Threading.Monitor:Exit(System.Object)
;; size=9 bbWeight=16 PerfScore 32.00
G_M45973_IG23:
cmp dword ptr [r15+0x10], 0
jle G_M45973_IG33
;; size=11 bbWeight=64 PerfScore 256.00
G_M45973_IG24:
mov rdi, r15
mov r13d, dword ptr [rdi+0x14]
xor edi, edi
jmp G_M45973_IG29
;; size=14 bbWeight=16 PerfScore 72.00
G_M45973_IG25:
mov rsi, 0xD1FFAB1E ; const ptr
mov rcx, gword ptr [rsi]
mov gword ptr [rbp-0x60], rcx
cmp byte ptr [rcx+0x34], 0
je SHORT G_M45973_IG26
mov rsi, 0xD1FFAB1E ; const ptr
mov rsi, gword ptr [rsi]
cmp byte ptr [rsi+0x9D], 0
je SHORT G_M45973_IG26
mov rdi, rsi
mov rsi, rax
mov rdx, 0xD1FFAB1E ; code for System.Diagnostics.Tracing.FrameworkEventSource:ThreadPoolEnqueueWorkObject(System.Object):this
call [rdx]System.Diagnostics.Tracing.FrameworkEventSource:ThreadPoolEnqueueWorkObject(System.Object):this
mov rax, gword ptr [rbp-0x78]
;; size=67 bbWeight=64 PerfScore 1168.00
G_M45973_IG26:
mov rcx, gword ptr [rbp-0x60]
mov rdx, gword ptr [rcx+0x10]
mov gword ptr [rbp-0x68], rdx
mov rdi, gword ptr [rdx+0x10]
mov rsi, rax
mov r8, 0xD1FFAB1E ; code for System.Collections.Concurrent.ConcurrentQueueSegment`1[System.__Canon]:TryEnqueue(System.__Canon):ubyte:this
cmp dword ptr [rdi], edi
call [r8]System.Collections.Concurrent.ConcurrentQueueSegment`1[System.__Canon]:TryEnqueue(System.__Canon):ubyte:this
test eax, eax
jne SHORT G_M45973_IG27
mov rdi, gword ptr [rbp-0x68]
mov rsi, gword ptr [rbp-0x78]
mov rax, 0xD1FFAB1E ; code for System.Collections.Concurrent.ConcurrentQueue`1[System.__Canon]:EnqueueSlow(System.__Canon):this
call [rax]System.Collections.Concurrent.ConcurrentQueue`1[System.__Canon]:EnqueueSlow(System.__Canon):this
;; size=58 bbWeight=64 PerfScore 1216.00
G_M45973_IG27:
mov rdi, gword ptr [rbp-0x60]
mov dword ptr [rdi+0x30], 1
add rdi, 116
mov ecx, 1
xor eax, eax
lock
cmpxchg dword ptr [rdi], ecx
test eax, eax
mov edi, dword ptr [rbp-0x44]
jne SHORT G_M45973_IG29
mov rax, 0xD1FFAB1E ; global ptr
test byte ptr [rax], 1
mov dword ptr [rbp-0x44], edi
je G_M45973_IG36
;; size=55 bbWeight=64 PerfScore 1808.00
G_M45973_IG28:
mov rax, 0xD1FFAB1E ; data for System.Threading.PortableThreadPool:ThreadPoolInstance
mov rax, gword ptr [rax]
lea rcx, bword ptr [rax+0x160]
lock
inc dword ptr [rcx]
mov gword ptr [rbp-0x70], rax
mov rdi, rax
mov rcx, 0xD1FFAB1E ; code for System.Threading.PortableThreadPool+WorkerThread:MaybeAddWorkingWorker(System.Threading.PortableThreadPool)
call [rcx]System.Threading.PortableThreadPool+WorkerThread:MaybeAddWorkingWorker(System.Threading.PortableThreadPool)
mov rax, gword ptr [rbp-0x70]
cmp dword ptr [rax+0x164], 6
je SHORT G_M45973_IG30
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Threading.PortableThreadPool+GateThread:EnsureRunningSlow(System.Threading.PortableThreadPool)
call [rax]System.Threading.PortableThreadPool+GateThread:EnsureRunningSlow(System.Threading.PortableThreadPool)
mov edi, dword ptr [rbp-0x44]
;; size=73 bbWeight=64 PerfScore 2096.00
G_M45973_IG29:
cmp r13d, dword ptr [r15+0x14]
jne G_M45973_IG38
mov edx, dword ptr [r15+0x10]
cmp edi, edx
jae SHORT G_M45973_IG31
mov rsi, gword ptr [r15+0x08]
cmp edi, dword ptr [rsi+0x08]
jae SHORT G_M45973_IG35
mov eax, edi
mov rax, gword ptr [rsi+8*rax+0x10]
mov gword ptr [rbp-0x78], rax
inc edi
mov dword ptr [rbp-0x44], edi
jmp G_M45973_IG25
;; size=48 bbWeight=128 PerfScore 2528.00
G_M45973_IG30:
mov edi, dword ptr [rbp-0x44]
jmp SHORT G_M45973_IG29
;; size=5 bbWeight=32 PerfScore 96.00
G_M45973_IG31:
inc dword ptr [r15+0x14]
xor edi, edi
mov dword ptr [r15+0x10], edi
test edx, edx
jle SHORT G_M45973_IG33
;; size=14 bbWeight=128 PerfScore 704.00
G_M45973_IG32:
mov rdi, gword ptr [r15+0x08]
xor esi, esi
mov rax, 0xD1FFAB1E ; code for System.Array:Clear(System.Array,int,int)
call [rax]System.Array:Clear(System.Array,int,int)
;; size=18 bbWeight=16 PerfScore 88.00
G_M45973_IG33:
cmp r12d, 0xD1FFAB1E
mov r13d, r12d
jne G_M45973_IG07
;; size=16 bbWeight=64 PerfScore 96.00
G_M45973_IG34:
jmp G_M45973_IG06
;; size=5 bbWeight=8 PerfScore 16.00
G_M45973_IG35:
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M45973_IG36:
mov rdi, 0xD1FFAB1E
mov esi, 902
call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
jmp G_M45973_IG28
;; size=25 bbWeight=0 PerfScore 0.00
G_M45973_IG37:
mov edi, 0x961
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdx, rax
mov edi, r13d
mov esi, -1
mov rax, 0xD1FFAB1E ; code for System.ArgumentOutOfRangeException:ThrowLess[int](int,int,System.String)
call [rax]System.ArgumentOutOfRangeException:ThrowLess[int](int,int,System.String)
int3
;; size=44 bbWeight=0 PerfScore 0.00
G_M45973_IG38:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
call [rax]System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M45973_IG39:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x80]
;; size=25 bbWeight=0 PerfScore 0.00
G_M45973_IG40:
cmp byte ptr [rbp-0x30], 0
je SHORT G_M45973_IG41
mov rdi, gword ptr [rbp-0x50]
call System.Threading.Monitor:Exit(System.Object)
;; size=15 bbWeight=0 PerfScore 0.00
G_M45973_IG41:
nop
;; size=1 bbWeight=0 PerfScore 0.00
G_M45973_IG42:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0 PerfScore 0.00
G_M45973_IG43:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x80]
;; size=25 bbWeight=0 PerfScore 0.00
G_M45973_IG44:
cmp byte ptr [rbp-0x38], 0
je SHORT G_M45973_IG45
mov rdi, gword ptr [rbp-0x58]
call System.Threading.Monitor:Exit(System.Object)
;; size=15 bbWeight=0 PerfScore 0.00
G_M45973_IG45:
nop
;; size=1 bbWeight=0 PerfScore 0.00
G_M45973_IG46:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1072, prolog size 26, PerfScore 17432.95, instruction count 285, allocated bytes for code 1072 (MethodHash=b6f44c6a) for method System.Threading.TimerQueue:TimerThread() (FullOpts)
+; Total bytes of code 1085, prolog size 26, PerfScore 17530.25, instruction count 289, allocated bytes for code 1085 (MethodHash=b6f44c6a) for method System.Threading.TimerQueue:TimerThread() (FullOpts) |
Top method improvements-32 (-2.87 % of base) - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String ; Assembly listing for method System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 12 single block inlinees; 19 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T01] ( 12, 15 ) ref -> rbx class-hnd single-def <System.String>
; V01 arg1 [V01,T17] ( 5, 4 ) ref -> r15 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.String]>
; V02 loc0 [V02,T25] ( 4, 3 ) ref -> rax class-hnd single-def <System.Collections.Generic.List`1[System.String]>
; V03 loc1 [V03,T28] ( 5, 2.25) ref -> rdi class-hnd exact <System.String[]>
; V04 loc2 [V04,T04] ( 9, 10 ) ref -> [rbp-0x50] class-hnd EH-live single-def <System.Collections.Generic.IEnumerator`1[System.String]>
; V05 loc3 [V05,T24] ( 6, 3 ) ref -> r13 class-hnd single-def <System.String>
; V06 loc4 [V06 ] ( 33, 49.50) struct (32) [rbp-0x48] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
; V07 loc5 [V07,T29] ( 4, 2 ) ref -> r13 class-hnd <System.String>
;* V08 loc6 [V08 ] ( 0, 0 ) struct (16) zero-ref <System.Span`1[ushort]>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V10 tmp1 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String[]>
;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V12 tmp3 [V12,T26] ( 5, 2.50) ref -> r13
;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.String]>
;* V14 tmp5 [V14 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V15 tmp6 [V15 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V16 tmp7 [V16 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[System.__Canon]>
;* V17 tmp8 [V17 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[System.String]>
;* V18 tmp9 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
;* V19 tmp10 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
; V20 tmp11 [V20,T30] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
; V21 tmp12 [V21,T32] ( 2, 2 ) int -> r14 "Inlining Arg"
;* V22 tmp13 [V22 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[System.String]>
;* V23 tmp14 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[System.String]>
;* V24 tmp15 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.String]>
-; V25 tmp16 [V25,T22] ( 5, 5 ) ref -> rdx class-hnd single-def "Inlining Arg" <System.__Canon[]>
+; V25 tmp16 [V25,T22] ( 4, 4 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String[]>
; V26 tmp17 [V26,T23] ( 4, 4 ) int -> rcx "Inlining Arg"
;* V27 tmp18 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[System.String]>
;* V28 tmp19 [V28 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.String]>
;* V29 tmp20 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V30 tmp21 [V30 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V31 tmp22 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
;* V32 tmp23 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
; V33 tmp24 [V33,T31] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V34 tmp25 [V34,T33] ( 2, 2 ) int -> rdx "Inlining Arg"
; V35 tmp26 [V35,T34] ( 2, 2 ) long -> rdi "Inlining Arg"
; V36 tmp27 [V36,T27] ( 5, 2.50) int -> rdi "Inline stloc first use temp"
; V37 tmp28 [V37,T05] ( 5, 10 ) int -> rsi "Inline stloc first use temp"
; V38 tmp29 [V38,T06] ( 5, 10 ) int -> r13 "Inline stloc first use temp"
;* V39 tmp30 [V39 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
;* V40 tmp31 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V41 tmp32 [V41,T09] ( 2, 8 ) byref -> rdi "Inlining Arg"
; V42 tmp33 [V42,T13] ( 2, 8 ) int -> rdx "Inlining Arg"
;* V43 tmp34 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V44 tmp35 [V44 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
; V45 tmp36 [V45,T10] ( 2, 8 ) byref -> rsi "Inlining Arg"
; V46 tmp37 [V46,T14] ( 2, 8 ) long -> rdx "Inlining Arg"
;* V47 tmp38 [V47 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V48 tmp39 [V48,T00] ( 5, 28 ) ref -> r14 class-hnd "Inlining Arg" <System.__Canon>
; V49 tmp40 [V49,T07] ( 5, 10 ) int -> rsi "Inline stloc first use temp"
; V50 tmp41 [V50,T08] ( 5, 10 ) int -> r13 "Inline stloc first use temp"
;* V51 tmp42 [V51 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
;* V52 tmp43 [V52 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V53 tmp44 [V53,T11] ( 2, 8 ) byref -> rdi "Inlining Arg"
; V54 tmp45 [V54,T15] ( 2, 8 ) int -> rdx "Inlining Arg"
;* V55 tmp46 [V55 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V56 tmp47 [V56 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
; V57 tmp48 [V57,T12] ( 2, 8 ) byref -> rsi "Inlining Arg"
; V58 tmp49 [V58,T16] ( 2, 8 ) long -> rdx "Inlining Arg"
;* V59 tmp50 [V59 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V60 tmp51 [V60 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP
;* V61 tmp52 [V61 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
; V62 tmp53 [V62,T41] ( 2, 1 ) byref -> rdi single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V63 tmp54 [V63,T53] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
; V64 tmp55 [V64,T42] ( 2, 1 ) byref -> rcx single-def "field V13._reference (fldOffset=0x0)" P-INDEP
; V65 tmp56 [V65,T47] ( 2, 1 ) int -> rax "field V13._length (fldOffset=0x8)" P-INDEP
; V66 tmp57 [V66,T35] ( 3, 1.50) byref -> rsi "field V14._reference (fldOffset=0x0)" P-INDEP
; V67 tmp58 [V67,T38] ( 3, 1.50) int -> rdx "field V14._length (fldOffset=0x8)" P-INDEP
; V68 tmp59 [V68,T36] ( 3, 1.50) byref -> rdi "field V15._reference (fldOffset=0x0)" P-INDEP
; V69 tmp60 [V69,T39] ( 3, 1.50) int -> rsi "field V15._length (fldOffset=0x8)" P-INDEP
;* V70 tmp61 [V70 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP
;* V71 tmp62 [V71 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
;* V72 tmp63 [V72 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP
;* V73 tmp64 [V73 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
; V74 tmp65 [V74,T43] ( 2, 1 ) byref -> rdi single-def "field V18._reference (fldOffset=0x0)" P-INDEP
; V75 tmp66 [V75,T48] ( 2, 1 ) int -> rsi "field V18._length (fldOffset=0x8)" P-INDEP
;* V76 tmp67 [V76 ] ( 0, 0 ) byref -> zero-ref single-def "field V19._reference (fldOffset=0x0)" P-INDEP
;* V77 tmp68 [V77 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP
; V78 tmp69 [V78,T44] ( 2, 1 ) byref -> rdx single-def "field V22._reference (fldOffset=0x0)" P-INDEP
; V79 tmp70 [V79,T49] ( 2, 1 ) int -> rcx "field V22._length (fldOffset=0x8)" P-INDEP
;* V80 tmp71 [V80 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP
;* V81 tmp72 [V81 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP
; V82 tmp73 [V82,T37] ( 3, 1.50) byref -> rdx "field V24._reference (fldOffset=0x0)" P-INDEP
; V83 tmp74 [V83,T40] ( 3, 1.50) int -> rcx "field V24._length (fldOffset=0x8)" P-INDEP
;* V84 tmp75 [V84 ] ( 0, 0 ) byref -> zero-ref single-def "field V27._reference (fldOffset=0x0)" P-INDEP
;* V85 tmp76 [V85 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP
; V86 tmp77 [V86,T45] ( 2, 1 ) byref -> rdx single-def "field V28._reference (fldOffset=0x0)" P-INDEP
; V87 tmp78 [V87,T50] ( 2, 1 ) int -> rcx "field V28._length (fldOffset=0x8)" P-INDEP
; V88 tmp79 [V88,T46] ( 2, 1 ) byref -> rsi single-def "field V31._reference (fldOffset=0x0)" P-INDEP
; V89 tmp80 [V89,T51] ( 2, 1 ) int -> rdx "field V31._length (fldOffset=0x8)" P-INDEP
;* V90 tmp81 [V90 ] ( 0, 0 ) byref -> zero-ref single-def "field V32._reference (fldOffset=0x0)" P-INDEP
;* V91 tmp82 [V91 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP
;* V92 tmp83 [V92 ] ( 0, 0 ) byref -> zero-ref "field V39._reference (fldOffset=0x0)" P-INDEP
;* V93 tmp84 [V93 ] ( 0, 0 ) int -> zero-ref "field V39._length (fldOffset=0x8)" P-INDEP
;* V94 tmp85 [V94 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP
;* V95 tmp86 [V95 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP
;* V96 tmp87 [V96 ] ( 0, 0 ) byref -> zero-ref "field V43._reference (fldOffset=0x0)" P-INDEP
;* V97 tmp88 [V97 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP
;* V98 tmp89 [V98 ] ( 0, 0 ) byref -> zero-ref "field V51._reference (fldOffset=0x0)" P-INDEP
;* V99 tmp90 [V99 ] ( 0, 0 ) int -> zero-ref "field V51._length (fldOffset=0x8)" P-INDEP
;* V100 tmp91 [V100 ] ( 0, 0 ) byref -> zero-ref "field V52._reference (fldOffset=0x0)" P-INDEP
;* V101 tmp92 [V101 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x8)" P-INDEP
;* V102 tmp93 [V102 ] ( 0, 0 ) byref -> zero-ref "field V55._reference (fldOffset=0x0)" P-INDEP
;* V103 tmp94 [V103 ] ( 0, 0 ) int -> zero-ref "field V55._length (fldOffset=0x8)" P-INDEP
; V104 GsCookie [V104 ] ( 1, 1 ) long -> [rbp-0x58] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V105 PSPSym [V105,T52] ( 1, 1 ) long -> [rbp-0x60] do-not-enreg[V] "PSPSym"
; V106 cse0 [V106,T03] ( 7, 14 ) int -> r12 "CSE - aggressive"
; V107 cse1 [V107,T02] ( 11, 16 ) int -> r14 multi-def "CSE - aggressive"
; V108 cse2 [V108,T18] ( 3, 6 ) int -> r13 "CSE - moderate"
; V109 cse3 [V109,T19] ( 3, 6 ) int -> rdx "CSE - moderate"
; V110 cse4 [V110,T20] ( 3, 6 ) int -> r13 "CSE - moderate"
; V111 cse5 [V111,T21] ( 3, 6 ) int -> rdx "CSE - moderate"
;
; Lcl frame size = 56
G_M8186_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 56
lea rbp, [rsp+0x60]
xor eax, eax
mov qword ptr [rbp-0x48], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0x30], rax
mov qword ptr [rbp-0x60], rsp
mov qword ptr [rbp-0x58], 0xD1FFAB1E
mov rbx, rdi
mov r15, rsi
;; size=57 bbWeight=1 PerfScore 13.83
G_M8186_IG02:
mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.Collections.Generic.List`1[System.String]
call CORINFO_HELP_ISINSTANCEOFCLASS
test rax, rax
je SHORT G_M8186_IG10
;; size=23 bbWeight=1 PerfScore 2.75
G_M8186_IG03:
test rbx, rbx
jne SHORT G_M8186_IG04
xor rdi, rdi
xor esi, esi
jmp SHORT G_M8186_IG05
;; size=11 bbWeight=0.50 PerfScore 1.88
G_M8186_IG04:
lea rdi, bword ptr [rbx+0x0C]
mov r14d, dword ptr [rbx+0x08]
mov esi, r14d
;; size=11 bbWeight=0.50 PerfScore 1.38
G_M8186_IG05:
mov rdx, gword ptr [rax+0x08]
mov ecx, dword ptr [rax+0x10]
test rdx, rdx
jne SHORT G_M8186_IG06
test ecx, ecx
- jne G_M8186_IG40
+ jne G_M8186_IG39
xor rdx, rdx
xor ecx, ecx
jmp SHORT G_M8186_IG07
;; size=26 bbWeight=0.50 PerfScore 4.50
G_M8186_IG06:
- mov rax, 0xD1FFAB1E ; System.String[]
- cmp qword ptr [rdx], rax
- jne G_M8186_IG39
cmp dword ptr [rdx+0x08], ecx
- jb G_M8186_IG40
+ jb G_M8186_IG39
add rdx, 16
- ;; size=32 bbWeight=0.50 PerfScore 4.25
+ ;; size=13 bbWeight=0.50 PerfScore 2.12
G_M8186_IG07:
mov rax, 0xD1FFAB1E ; code for System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
call [rax]System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
cmp qword ptr [rbp-0x58], 0xD1FFAB1E
je SHORT G_M8186_IG08
call CORINFO_HELP_FAIL_FAST
;; size=27 bbWeight=0.50 PerfScore 3.62
G_M8186_IG08:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
G_M8186_IG09:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.25
G_M8186_IG10:
mov rdi, r15
test rdi, rdi
- je G_M8186_IG41
+ je G_M8186_IG40
;; size=12 bbWeight=0.50 PerfScore 0.75
G_M8186_IG11:
mov rsi, 0xD1FFAB1E ; System.String[]
cmp qword ptr [rdi], rsi
jne SHORT G_M8186_IG17
;; size=15 bbWeight=0.25 PerfScore 1.06
G_M8186_IG12:
test rbx, rbx
jne SHORT G_M8186_IG13
xor rsi, rsi
xor edx, edx
jmp SHORT G_M8186_IG14
;; size=11 bbWeight=0.50 PerfScore 1.88
G_M8186_IG13:
lea rsi, bword ptr [rbx+0x0C]
mov r14d, dword ptr [rbx+0x08]
mov edx, r14d
;; size=11 bbWeight=0.50 PerfScore 1.38
G_M8186_IG14:
lea rcx, bword ptr [rdi+0x10]
mov eax, dword ptr [rdi+0x08]
mov rdi, rsi
mov esi, edx
mov rdx, rcx
mov ecx, eax
mov rax, 0xD1FFAB1E ; code for System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
call [rax]System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
cmp qword ptr [rbp-0x58], 0xD1FFAB1E
je SHORT G_M8186_IG15
call CORINFO_HELP_FAIL_FAST
;; size=44 bbWeight=0.50 PerfScore 5.38
G_M8186_IG15:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
G_M8186_IG16:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.25
G_M8186_IG17:
mov rdi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IEnumerable`1[System.__Canon]:GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this
call [r11]System.Collections.Generic.IEnumerable`1[System.__Canon]:GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this
mov r15, rax
mov gword ptr [rbp-0x50], r15
;; size=23 bbWeight=0.50 PerfScore 2.38
G_M8186_IG18:
mov rdi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
test eax, eax
jne SHORT G_M8186_IG19
mov r13, 0xD1FFAB1E ; ''
jmp G_M8186_IG36
;; size=35 bbWeight=0.50 PerfScore 3.50
G_M8186_IG19:
mov rdi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
call [r11]System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
mov r13, rax
mov rdi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
test eax, eax
jne SHORT G_M8186_IG20
mov rdi, 0xD1FFAB1E ; ''
test r13, r13
cmove r13, rdi
jmp G_M8186_IG36
;; size=61 bbWeight=0.50 PerfScore 5.62
G_M8186_IG20:
test dword ptr [rsp], esp
sub rsp, 512
lea rdi, [rsp]
xor rsi, rsi
mov gword ptr [rbp-0x48], rsi
mov bword ptr [rbp-0x38], rdi
mov dword ptr [rbp-0x30], 256
;; size=31 bbWeight=0.50 PerfScore 3.50
G_M8186_IG21:
mov dword ptr [rbp-0x40], esi
test r13, r13
je SHORT G_M8186_IG22
mov edi, dword ptr [rbp-0x40]
cmp dword ptr [r13+0x08], 1
jne G_M8186_IG31
cmp edi, dword ptr [rbp-0x30]
jae G_M8186_IG31
cmp edi, dword ptr [rbp-0x30]
jae G_M8186_IG28
mov rsi, bword ptr [rbp-0x38]
mov eax, edi
movzx rcx, word ptr [r13+0x0C]
mov word ptr [rsi+2*rax], cx
inc edi
mov dword ptr [rbp-0x40], edi
;; size=60 bbWeight=0.50 PerfScore 9.38
G_M8186_IG22:
test rbx, rbx
je SHORT G_M8186_IG24
;; size=5 bbWeight=4 PerfScore 5.00
G_M8186_IG23:
mov r13d, dword ptr [rbp-0x40]
mov esi, r13d
mov r14d, dword ptr [rbx+0x08]
cmp r14d, 1
jne G_M8186_IG32
cmp esi, dword ptr [rbp-0x30]
jae G_M8186_IG32
cmp esi, dword ptr [rbp-0x30]
jae G_M8186_IG28
mov rdi, bword ptr [rbp-0x38]
mov eax, esi
movzx rcx, word ptr [rbx+0x0C]
mov word ptr [rdi+2*rax], cx
inc esi
mov dword ptr [rbp-0x40], esi
;; size=58 bbWeight=2 PerfScore 32.00
G_M8186_IG24:
mov rdi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
call [r11]System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
mov r14, rax
test r14, r14
je SHORT G_M8186_IG26
;; size=24 bbWeight=4 PerfScore 20.00
G_M8186_IG25:
mov r13d, dword ptr [rbp-0x40]
mov esi, r13d
mov r12d, dword ptr [r14+0x08]
cmp r12d, 1
jne G_M8186_IG34
cmp esi, dword ptr [rbp-0x30]
jae G_M8186_IG34
cmp esi, dword ptr [rbp-0x30]
jae SHORT G_M8186_IG28
mov rdi, bword ptr [rbp-0x38]
mov eax, esi
movzx rcx, word ptr [r14+0x0C]
mov word ptr [rdi+2*rax], cx
inc esi
mov dword ptr [rbp-0x40], esi
;; size=55 bbWeight=2 PerfScore 32.00
G_M8186_IG26:
mov rdi, r15
mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
test eax, eax
jne G_M8186_IG22
;; size=24 bbWeight=4 PerfScore 19.00
G_M8186_IG27:
lea rdi, [rbp-0x48]
mov rax, 0xD1FFAB1E ; code for System.Text.ValueStringBuilder:ToString():System.String:this
call [rax]System.Text.ValueStringBuilder:ToString():System.String:this
mov r13, rax
jmp G_M8186_IG36
;; size=24 bbWeight=0.50 PerfScore 3.00
G_M8186_IG28:
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M8186_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M8186_IG30:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M8186_IG31:
lea rdi, [rbp-0x48]
mov rsi, r13
mov rax, 0xD1FFAB1E ; code for System.Text.ValueStringBuilder:AppendSlow(System.String):this
call [rax]System.Text.ValueStringBuilder:AppendSlow(System.String):this
jmp G_M8186_IG22
;; size=24 bbWeight=0.50 PerfScore 3.00
G_M8186_IG32:
mov esi, dword ptr [rbp-0x30]
sub esi, r14d
cmp esi, r13d
jge SHORT G_M8186_IG33
mov esi, r14d
lea rdi, [rbp-0x48]
mov rax, 0xD1FFAB1E ; code for System.Text.ValueStringBuilder:Grow(int):this
call [rax]System.Text.ValueStringBuilder:Grow(int):this
;; size=30 bbWeight=2 PerfScore 13.00
G_M8186_IG33:
mov edx, dword ptr [rbp-0x30]
cmp r13d, edx
ja SHORT G_M8186_IG30
mov rdi, bword ptr [rbp-0x38]
mov esi, r13d
lea rdi, bword ptr [rdi+2*rsi]
sub edx, r13d
cmp r14d, edx
ja SHORT G_M8186_IG29
lea rsi, bword ptr [rbx+0x0C]
mov edx, r14d
add rdx, rdx
mov rax, 0xD1FFAB1E ; code for System.Buffer:Memmove(byref,byref,ulong)
call [rax]System.Buffer:Memmove(byref,byref,ulong)
mov edi, r14d
add edi, dword ptr [rbp-0x40]
mov dword ptr [rbp-0x40], edi
jmp G_M8186_IG24
;; size=63 bbWeight=2 PerfScore 30.00
G_M8186_IG34:
mov esi, dword ptr [rbp-0x30]
sub esi, r12d
cmp esi, r13d
jge SHORT G_M8186_IG35
mov esi, r12d
lea rdi, [rbp-0x48]
mov rax, 0xD1FFAB1E ; code for System.Text.ValueStringBuilder:Grow(int):this
call [rax]System.Text.ValueStringBuilder:Grow(int):this
;; size=30 bbWeight=2 PerfScore 13.00
G_M8186_IG35:
mov edx, dword ptr [rbp-0x30]
cmp r13d, edx
ja G_M8186_IG30
mov rdi, bword ptr [rbp-0x38]
mov esi, r13d
lea rdi, bword ptr [rdi+2*rsi]
sub edx, r13d
cmp r12d, edx
ja G_M8186_IG29
lea rsi, bword ptr [r14+0x0C]
mov edx, r12d
add rdx, rdx
mov rax, 0xD1FFAB1E ; code for System.Buffer:Memmove(byref,byref,ulong)
call [rax]System.Buffer:Memmove(byref,byref,ulong)
add r12d, dword ptr [rbp-0x40]
mov dword ptr [rbp-0x40], r12d
jmp G_M8186_IG26
;; size=70 bbWeight=2 PerfScore 29.50
G_M8186_IG36:
mov rdi, r15
mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this
call [r11]System.IDisposable:Dispose():this
mov rax, r13
cmp qword ptr [rbp-0x58], 0xD1FFAB1E
je SHORT G_M8186_IG37
call CORINFO_HELP_FAIL_FAST
;; size=34 bbWeight=0.50 PerfScore 3.88
G_M8186_IG37:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
G_M8186_IG38:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.25
G_M8186_IG39:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
- call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
- int3
- ;; size=13 bbWeight=0 PerfScore 0.00
-G_M8186_IG40:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M8186_IG41:
+G_M8186_IG40:
mov edi, 6
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentNullException(int)
call [rax]System.ThrowHelper:ThrowArgumentNullException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
-G_M8186_IG42:
+G_M8186_IG41:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x60]
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8186_IG43:
+G_M8186_IG42:
cmp gword ptr [rbp-0x50], 0
- je SHORT G_M8186_IG44
+ je SHORT G_M8186_IG43
mov rdi, gword ptr [rbp-0x50]
mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this
call [r11]System.IDisposable:Dispose():this
;; size=24 bbWeight=0 PerfScore 0.00
-G_M8186_IG44:
+G_M8186_IG43:
nop
;; size=1 bbWeight=0 PerfScore 0.00
-G_M8186_IG45:
+G_M8186_IG44:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1116, prolog size 57, PerfScore 389.12, instruction count 302, allocated bytes for code 1116 (MethodHash=3c36e005) for method System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
+; Total bytes of code 1084, prolog size 57, PerfScore 383.80, instruction count 296, allocated bytes for code 1084 (MethodHash=3c36e005) for method System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts) -32 (-2.69 % of base) - System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String ; Assembly listing for method System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 9 single block inlinees; 16 inlinees without PGO data
; Final local variable assignments
;
; V00 TypeCtx [V00,T19] ( 8, 5.20) long -> r15 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
; V02 arg1 [V02,T20] ( 6, 4 ) ref -> r14 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V03 loc0 [V03,T38] ( 4, 2 ) ref -> rax class-hnd single-def <System.Collections.Generic.List`1[System.String]>
; V04 loc1 [V04,T37] ( 5, 2.25) ref -> rdi class-hnd exact <System.String[]>
; V05 loc2 [V05,T09] ( 9, 10 ) ref -> [rbp-0x68] class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.__Canon]>
; V06 loc3 [V06,T39] ( 4, 2 ) ref -> r14 class-hnd <System.String>
;* V07 loc4 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Collections.Generic.IEnumerator`1[ushort]>
;* V08 loc5 [V08 ] ( 0, 0 ) ushort -> zero-ref
;* V09 loc6 [V09 ] ( 0, 0 ) struct (32) zero-ref do-not-enreg[S] ld-addr-op <System.Text.ValueStringBuilder>
;* V10 loc7 [V10 ] ( 0, 0 ) struct (16) zero-ref <System.Span`1[ushort]>
; V11 loc8 [V11 ] ( 6, 13.50) ref -> [rbp-0x38] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
;* V12 loc9 [V12 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
;* V13 loc10 [V13 ] ( 0, 0 ) struct (40) zero-ref do-not-enreg[S] ld-addr-op <System.Runtime.CompilerServices.DefaultInterpolatedStringHandler>
;* V14 loc11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.IFormatProvider>
;* V15 loc12 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.String>
; V16 loc13 [V16 ] ( 20, 25.50) struct (32) [rbp-0x58] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
;# V17 OutArgs [V17 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V18 tmp1 [V18 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V19 tmp2 [V19,T30] ( 4, 3 ) long -> r11 "VirtualCall with runtime lookup"
;* V20 tmp3 [V20 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V21 tmp4 [V21,T32] ( 3, 3 ) long -> r11 "VirtualCall with runtime lookup"
; V22 tmp5 [V22,T44] ( 2, 1 ) byref -> rdi single-def
; V23 tmp6 [V23,T29] ( 7, 3.50) ref -> r15
;* V24 tmp7 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
;* V25 tmp8 [V25 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V26 tmp9 [V26,T00] ( 3, 24 ) long -> r11 "VirtualCall with runtime lookup"
; V27 tmp10 [V27,T01] ( 10, 22 ) byref -> r14
; V28 tmp11 [V28,T25] ( 2, 6 ) byref -> r15
;* V29 tmp12 [V29 ] ( 0, 0 ) byref -> zero-ref
; V30 tmp13 [V30,T05] ( 5, 10 ) ref -> r15
; V31 tmp14 [V31,T35] ( 5, 2.50) ref -> r15
;* V32 tmp15 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String[]>
;* V33 tmp16 [V33 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.String]>
;* V34 tmp17 [V34 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V35 tmp18 [V35 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V36 tmp19 [V36 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[System.__Canon]>
;* V37 tmp20 [V37 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[System.String]>
;* V38 tmp21 [V38 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[System.String]>
;* V39 tmp22 [V39 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[System.String]>
;* V40 tmp23 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.String]>
-; V41 tmp24 [V41,T26] ( 5, 5 ) ref -> rdx class-hnd single-def "Inlining Arg" <System.__Canon[]>
+; V41 tmp24 [V41,T27] ( 4, 4 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String[]>
; V42 tmp25 [V42,T28] ( 4, 4 ) int -> rcx "Inlining Arg"
;* V43 tmp26 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[System.String]>
;* V44 tmp27 [V44 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.String]>
;* V45 tmp28 [V45 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V46 tmp29 [V46 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V47 tmp30 [V47,T41] ( 2, 2 ) long -> rdi "Inlining Arg"
; V48 tmp31 [V48,T36] ( 5, 2.50) int -> rdi "Inline stloc first use temp"
;* V49 tmp32 [V49 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V50 tmp33 [V50 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
;* V51 tmp34 [V51 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
; V52 tmp35 [V52,T03] ( 4, 16 ) int -> rdx "Inlining Arg"
;* V53 tmp36 [V53 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V54 tmp37 [V54,T12] ( 2, 8 ) byref -> rsi "Inlining Arg"
; V55 tmp38 [V55,T15] ( 2, 8 ) int -> rdi "Inlining Arg"
;* V56 tmp39 [V56 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V57 tmp40 [V57 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V58 tmp41 [V58 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
; V59 tmp42 [V59,T16] ( 2, 8 ) long -> rdx "Inlining Arg"
;* V60 tmp43 [V60 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V61 tmp44 [V61,T10] ( 5, 10 ) int -> rsi "Inline stloc first use temp"
; V62 tmp45 [V62,T06] ( 3, 12 ) byref -> rax "Span.get_Item ptrToSpan"
; V63 tmp46 [V63,T11] ( 5, 10 ) int -> [rbp-0x5C] spill-single-def "Inline stloc first use temp"
;* V64 tmp47 [V64 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
; V65 tmp48 [V65,T07] ( 3, 12 ) byref -> rdx "Inlining Arg"
;* V66 tmp49 [V66 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V67 tmp50 [V67,T13] ( 2, 8 ) byref -> rsi "Inlining Arg"
; V68 tmp51 [V68,T17] ( 2, 8 ) int -> rdi "Inlining Arg"
;* V69 tmp52 [V69 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V70 tmp53 [V70 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
; V71 tmp54 [V71,T14] ( 2, 8 ) byref -> r15 "Inlining Arg"
; V72 tmp55 [V72,T18] ( 2, 8 ) long -> rdx "Inlining Arg"
;* V73 tmp56 [V73 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V74 tmp57 [V74,T21] ( 4, 4 ) byref -> r13 single-def "field V01._reference (fldOffset=0x0)" P-INDEP
; V75 tmp58 [V75,T02] ( 9, 16 ) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP
;* V76 tmp59 [V76 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP
;* V77 tmp60 [V77 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
; V78 tmp61 [V78,T45] ( 2, 1 ) byref -> rdi single-def "field V24._reference (fldOffset=0x0)" P-INDEP
;* V79 tmp62 [V79,T57] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
; V80 tmp63 [V80,T46] ( 2, 1 ) byref -> rcx single-def "field V33._reference (fldOffset=0x0)" P-INDEP
; V81 tmp64 [V81,T51] ( 2, 1 ) int -> rax "field V33._length (fldOffset=0x8)" P-INDEP
; V82 tmp65 [V82,T47] ( 2, 1 ) byref -> rsi single-def "field V34._reference (fldOffset=0x0)" P-INDEP
; V83 tmp66 [V83,T52] ( 2, 1 ) int -> rdx "field V34._length (fldOffset=0x8)" P-INDEP
; V84 tmp67 [V84,T48] ( 2, 1 ) byref -> rdi single-def "field V35._reference (fldOffset=0x0)" P-INDEP
; V85 tmp68 [V85,T53] ( 2, 1 ) int -> rsi "field V35._length (fldOffset=0x8)" P-INDEP
;* V86 tmp69 [V86 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP
;* V87 tmp70 [V87 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP
;* V88 tmp71 [V88 ] ( 0, 0 ) byref -> zero-ref "field V37._reference (fldOffset=0x0)" P-INDEP
;* V89 tmp72 [V89 ] ( 0, 0 ) int -> zero-ref "field V37._length (fldOffset=0x8)" P-INDEP
; V90 tmp73 [V90,T49] ( 2, 1 ) byref -> rdx single-def "field V38._reference (fldOffset=0x0)" P-INDEP
; V91 tmp74 [V91,T54] ( 2, 1 ) int -> rcx "field V38._length (fldOffset=0x8)" P-INDEP
;* V92 tmp75 [V92 ] ( 0, 0 ) byref -> zero-ref "field V39._reference (fldOffset=0x0)" P-INDEP
;* V93 tmp76 [V93 ] ( 0, 0 ) int -> zero-ref "field V39._length (fldOffset=0x8)" P-INDEP
; V94 tmp77 [V94,T42] ( 3, 1.50) byref -> rdx "field V40._reference (fldOffset=0x0)" P-INDEP
; V95 tmp78 [V95,T43] ( 3, 1.50) int -> rcx "field V40._length (fldOffset=0x8)" P-INDEP
;* V96 tmp79 [V96 ] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V97 tmp80 [V97 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP
; V98 tmp81 [V98,T50] ( 2, 1 ) byref -> rdx single-def "field V44._reference (fldOffset=0x0)" P-INDEP
; V99 tmp82 [V99,T55] ( 2, 1 ) int -> rcx "field V44._length (fldOffset=0x8)" P-INDEP
;* V100 tmp83 [V100 ] ( 0, 0 ) byref -> zero-ref "field V50._reference (fldOffset=0x0)" P-INDEP
;* V101 tmp84 [V101 ] ( 0, 0 ) int -> zero-ref "field V50._length (fldOffset=0x8)" P-INDEP
;* V102 tmp85 [V102 ] ( 0, 0 ) byref -> zero-ref "field V51._reference (fldOffset=0x0)" P-INDEP
;* V103 tmp86 [V103 ] ( 0, 0 ) int -> zero-ref "field V51._length (fldOffset=0x8)" P-INDEP
;* V104 tmp87 [V104 ] ( 0, 0 ) byref -> zero-ref "field V53._reference (fldOffset=0x0)" P-INDEP
;* V105 tmp88 [V105 ] ( 0, 0 ) int -> zero-ref "field V53._length (fldOffset=0x8)" P-INDEP
;* V106 tmp89 [V106 ] ( 0, 0 ) byref -> zero-ref "field V56._reference (fldOffset=0x0)" P-INDEP
;* V107 tmp90 [V107 ] ( 0, 0 ) int -> zero-ref "field V56._length (fldOffset=0x8)" P-INDEP
;* V108 tmp91 [V108 ] ( 0, 0 ) byref -> zero-ref "field V64._reference (fldOffset=0x0)" P-INDEP
;* V109 tmp92 [V109 ] ( 0, 0 ) int -> zero-ref "field V64._length (fldOffset=0x8)" P-INDEP
;* V110 tmp93 [V110 ] ( 0, 0 ) byref -> zero-ref "field V66._reference (fldOffset=0x0)" P-INDEP
;* V111 tmp94 [V111 ] ( 0, 0 ) int -> zero-ref "field V66._length (fldOffset=0x8)" P-INDEP
;* V112 tmp95 [V112 ] ( 0, 0 ) byref -> zero-ref "field V69._reference (fldOffset=0x0)" P-INDEP
;* V113 tmp96 [V113 ] ( 0, 0 ) int -> zero-ref "field V69._length (fldOffset=0x8)" P-INDEP
; V114 tmp97 [V114,T31] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
; V115 tmp98 [V115,T08] ( 3, 12 ) ref -> rdi "argument with side effect"
; V116 GsCookie [V116 ] ( 1, 1 ) long -> [rbp-0x70] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V117 PSPSym [V117,T56] ( 1, 1 ) long -> [rbp-0x80] do-not-enreg[V] "PSPSym"
-; V118 cse0 [V118,T27] ( 3, 5 ) long -> r12 "CSE - moderate"
+; V118 cse0 [V118,T26] ( 3, 5 ) long -> r12 "CSE - moderate"
; V119 cse1 [V119,T22] ( 3, 6 ) int -> rax "CSE - moderate"
; V120 cse2 [V120,T23] ( 3, 6 ) int -> rdi "CSE - moderate"
; V121 cse3 [V121,T04] ( 7, 14 ) int -> [rbp-0x60] spill-single-def "CSE - moderate"
; V122 cse4 [V122,T24] ( 3, 6 ) int -> rdi "CSE - moderate"
; V123 rat0 [V123,T33] ( 3, 2.80) long -> r11 "fgMakeTemp is creating a new local variable"
; V124 rat1 [V124,T40] ( 3, 2 ) long -> r12 "runtime lookup"
; V125 rat2 [V125,T34] ( 3, 2.80) long -> r12 "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 88
G_M1718_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 88
lea rbp, [rsp+0x80]
xor eax, eax
mov qword ptr [rbp-0x58], rax
vxorps xmm8, xmm8, xmm8
vmovdqu ymmword ptr [rbp-0x50], ymm8
mov qword ptr [rbp-0x80], rsp
mov qword ptr [rbp-0x30], rdi
mov qword ptr [rbp-0x70], 0xD1FFAB1E
mov r15, rdi
mov r13, rsi
mov ebx, edx
mov r14, rcx
;; size=65 bbWeight=1 PerfScore 14.33
G_M1718_IG02:
mov rsi, qword ptr [r15+0x10]
mov rdi, 0xD1FFAB1E ; System.String
cmp qword ptr [rsi], rdi
jne G_M1718_IG10
;; size=23 bbWeight=1 PerfScore 6.25
G_M1718_IG03:
mov rsi, r14
mov rdi, 0xD1FFAB1E ; System.Collections.Generic.List`1[System.String]
call CORINFO_HELP_ISINSTANCEOFCLASS
test rax, rax
je SHORT G_M1718_IG08
mov rdi, r13
mov esi, ebx
mov rdx, gword ptr [rax+0x08]
mov ecx, dword ptr [rax+0x10]
test rdx, rdx
jne SHORT G_M1718_IG04
test ecx, ecx
- jne G_M1718_IG42
+ jne G_M1718_IG41
xor rdx, rdx
xor ecx, ecx
jmp SHORT G_M1718_IG05
;; size=54 bbWeight=0.50 PerfScore 6.12
G_M1718_IG04:
- mov rax, 0xD1FFAB1E ; System.String[]
- cmp qword ptr [rdx], rax
- jne G_M1718_IG41
cmp dword ptr [rdx+0x08], ecx
- jb G_M1718_IG42
+ jb G_M1718_IG41
add rdx, 16
- ;; size=32 bbWeight=0.50 PerfScore 4.25
+ ;; size=13 bbWeight=0.50 PerfScore 2.12
G_M1718_IG05:
mov rax, 0xD1FFAB1E ; code for System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
call [rax]System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
cmp qword ptr [rbp-0x70], 0xD1FFAB1E
je SHORT G_M1718_IG06
call CORINFO_HELP_FAIL_FAST
;; size=27 bbWeight=0.50 PerfScore 3.62
G_M1718_IG06:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
G_M1718_IG07:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.25
G_M1718_IG08:
mov rdi, r14
test rdi, rdi
je SHORT G_M1718_IG10
;; size=8 bbWeight=0.50 PerfScore 0.75
G_M1718_IG09:
mov rsi, 0xD1FFAB1E ; System.String[]
cmp qword ptr [rdi], rsi
je SHORT G_M1718_IG12
;; size=15 bbWeight=0.25 PerfScore 1.06
G_M1718_IG10:
test r14, r14
- je G_M1718_IG43
+ je G_M1718_IG42
mov rdi, qword ptr [r15+0x10]
mov r11, qword ptr [rdi+0x10]
test r11, r11
je SHORT G_M1718_IG15
;; size=22 bbWeight=0.50 PerfScore 3.25
G_M1718_IG11:
mov rdi, r14
call [r11]
mov gword ptr [rbp-0x68], rax
jmp SHORT G_M1718_IG16
;; size=12 bbWeight=0.50 PerfScore 3.12
G_M1718_IG12:
mov rsi, r13
mov edx, ebx
lea rcx, bword ptr [rdi+0x10]
mov eax, dword ptr [rdi+0x08]
mov rdi, rsi
mov esi, edx
mov rdx, rcx
mov ecx, eax
mov rax, 0xD1FFAB1E ; code for System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
call [rax]System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
cmp qword ptr [rbp-0x70], 0xD1FFAB1E
je SHORT G_M1718_IG13
call CORINFO_HELP_FAIL_FAST
;; size=49 bbWeight=0.50 PerfScore 5.62
G_M1718_IG13:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
G_M1718_IG14:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.25
G_M1718_IG15:
mov rdi, r15
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov r11, rax
jmp SHORT G_M1718_IG11
;; size=23 bbWeight=0.10 PerfScore 0.38
G_M1718_IG16:
mov rdi, rax
mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
test eax, eax
jne SHORT G_M1718_IG17
mov r14, 0xD1FFAB1E ; ''
jmp G_M1718_IG38
;; size=35 bbWeight=0.50 PerfScore 3.50
G_M1718_IG17:
mov rdi, qword ptr [r15+0x10]
mov r12, qword ptr [rdi+0x18]
test r12, r12
je SHORT G_M1718_IG19
;; size=13 bbWeight=0.50 PerfScore 2.62
G_M1718_IG18:
jmp SHORT G_M1718_IG20
;; size=2 bbWeight=0.40 PerfScore 0.80
G_M1718_IG19:
mov rdi, r15
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov r12, rax
;; size=21 bbWeight=0.10 PerfScore 0.18
G_M1718_IG20:
mov r11, r12
mov rdi, gword ptr [rbp-0x68]
call [r11]
mov gword ptr [rbp-0x38], rax
lea rdi, bword ptr [rbp-0x38]
cmp gword ptr [rbp-0x38], 0
jne SHORT G_M1718_IG21
xor r15, r15
jmp SHORT G_M1718_IG22
;; size=30 bbWeight=0.50 PerfScore 5.50
G_M1718_IG21:
mov rdi, gword ptr [rdi]
mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+0x40]
call [rax+0x08]System.Object:ToString():System.String:this
mov r15, rax
;; size=16 bbWeight=0.50 PerfScore 4.62
G_M1718_IG22:
mov rdi, gword ptr [rbp-0x68]
mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
test eax, eax
jne SHORT G_M1718_IG23
mov rdi, 0xD1FFAB1E ; ''
test r15, r15
cmove r15, rdi
mov r14, r15
jmp G_M1718_IG38
;; size=46 bbWeight=0.50 PerfScore 4.25
G_M1718_IG23:
test dword ptr [rsp], esp
sub rsp, 512
lea rdi, [rsp]
xor rsi, rsi
mov gword ptr [rbp-0x58], rsi
mov bword ptr [rbp-0x48], rdi
mov dword ptr [rbp-0x40], 256
;; size=31 bbWeight=0.50 PerfScore 3.50
G_M1718_IG24:
mov dword ptr [rbp-0x50], esi
test r15, r15
je SHORT G_M1718_IG25
mov edi, dword ptr [rbp-0x50]
cmp dword ptr [r15+0x08], 1
jne G_M1718_IG34
cmp edi, dword ptr [rbp-0x40]
jae G_M1718_IG34
cmp edi, dword ptr [rbp-0x40]
jae G_M1718_IG31
mov rsi, bword ptr [rbp-0x48]
mov eax, edi
movzx rcx, word ptr [r15+0x0C]
mov word ptr [rsi+2*rax], cx
inc edi
mov dword ptr [rbp-0x50], edi
;; size=60 bbWeight=0.50 PerfScore 9.38
G_M1718_IG25:
test ebx, ebx
je SHORT G_M1718_IG28
;; size=4 bbWeight=4 PerfScore 5.00
G_M1718_IG26:
mov edi, dword ptr [rbp-0x40]
sub edi, ebx
cmp dword ptr [rbp-0x50], edi
jle SHORT G_M1718_IG27
lea rdi, [rbp-0x58]
mov esi, ebx
mov rax, 0xD1FFAB1E ; code for System.Text.ValueStringBuilder:Grow(int):this
call [rax]System.Text.ValueStringBuilder:Grow(int):this
;; size=28 bbWeight=2 PerfScore 16.50
G_M1718_IG27:
mov edx, dword ptr [rbp-0x50]
mov edi, dword ptr [rbp-0x40]
cmp edx, edi
ja G_M1718_IG33
mov rsi, bword ptr [rbp-0x48]
mov eax, edx
lea rsi, bword ptr [rsi+2*rax]
sub edi, edx
cmp ebx, edi
ja SHORT G_M1718_IG32
mov edx, ebx
add rdx, rdx
mov rdi, rsi
mov rsi, r13
mov rax, 0xD1FFAB1E ; code for System.Buffer:Memmove(byref,byref,ulong)
call [rax]System.Buffer:Memmove(byref,byref,ulong)
mov edi, ebx
add edi, dword ptr [rbp-0x50]
mov dword ptr [rbp-0x50], edi
;; size=61 bbWeight=2 PerfScore 28.00
G_M1718_IG28:
mov r11, r12
mov rdi, gword ptr [rbp-0x68]
call [r11]
mov gword ptr [rbp-0x38], rax
lea r14, bword ptr [rbp-0x58]
lea r15, bword ptr [rbp-0x38]
cmp gword ptr [rbp-0x38], 0
jne SHORT G_M1718_IG35
;; size=29 bbWeight=4 PerfScore 37.00
G_M1718_IG29:
mov rdi, gword ptr [rbp-0x68]
mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
test eax, eax
jne G_M1718_IG25
;; size=25 bbWeight=4 PerfScore 22.00
G_M1718_IG30:
lea rdi, [rbp-0x58]
mov rax, 0xD1FFAB1E ; code for System.Text.ValueStringBuilder:ToString():System.String:this
call [rax]System.Text.ValueStringBuilder:ToString():System.String:this
mov r14, rax
jmp G_M1718_IG38
;; size=24 bbWeight=0.50 PerfScore 3.00
G_M1718_IG31:
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M1718_IG32:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M1718_IG33:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M1718_IG34:
lea rdi, [rbp-0x58]
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for System.Text.ValueStringBuilder:AppendSlow(System.String):this
call [rax]System.Text.ValueStringBuilder:AppendSlow(System.String):this
jmp G_M1718_IG25
;; size=24 bbWeight=0.50 PerfScore 3.00
G_M1718_IG35:
mov rdi, gword ptr [r15]
mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+0x40]
call [rax+0x08]System.Object:ToString():System.String:this
mov r15, rax
test r15, r15
je SHORT G_M1718_IG29
mov eax, dword ptr [r14+0x08]
mov esi, eax
mov ecx, dword ptr [r15+0x08]
mov dword ptr [rbp-0x60], ecx
cmp ecx, 1
jne SHORT G_M1718_IG36
cmp esi, dword ptr [r14+0x18]
jae SHORT G_M1718_IG36
lea rax, bword ptr [r14+0x10]
cmp esi, dword ptr [rax+0x08]
jae SHORT G_M1718_IG31
mov rcx, bword ptr [rax]
mov edi, esi
movzx rax, word ptr [r15+0x0C]
mov word ptr [rcx+2*rdi], ax
inc esi
mov dword ptr [r14+0x08], esi
jmp G_M1718_IG29
;; size=79 bbWeight=2 PerfScore 68.00
G_M1718_IG36:
mov dword ptr [rbp-0x5C], eax
mov esi, dword ptr [r14+0x18]
sub esi, ecx
cmp esi, eax
jge SHORT G_M1718_IG37
mov esi, ecx
mov rdi, r14
mov rdx, 0xD1FFAB1E ; code for System.Text.ValueStringBuilder:Grow(int):this
call [rdx]System.Text.ValueStringBuilder:Grow(int):this
mov ecx, dword ptr [rbp-0x60]
;; size=33 bbWeight=2 PerfScore 18.50
G_M1718_IG37:
lea rdx, bword ptr [r14+0x10]
mov edi, dword ptr [rdx+0x08]
mov eax, dword ptr [rbp-0x5C]
cmp eax, edi
ja G_M1718_IG33
mov rdx, bword ptr [rdx]
mov esi, eax
lea rsi, bword ptr [rdx+2*rsi]
sub edi, eax
cmp ecx, edi
ja G_M1718_IG32
add r15, 12
mov edx, ecx
add rdx, rdx
mov rdi, rsi
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for System.Buffer:Memmove(byref,byref,ulong)
call [rax]System.Buffer:Memmove(byref,byref,ulong)
mov r15d, dword ptr [rbp-0x60]
add dword ptr [r14+0x08], r15d
jmp G_M1718_IG29
;; size=77 bbWeight=2 PerfScore 39.00
G_M1718_IG38:
mov rdi, gword ptr [rbp-0x68]
mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this
call [r11]System.IDisposable:Dispose():this
mov rax, r14
cmp qword ptr [rbp-0x70], 0xD1FFAB1E
je SHORT G_M1718_IG39
call CORINFO_HELP_FAIL_FAST
;; size=35 bbWeight=0.50 PerfScore 4.25
G_M1718_IG39:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
G_M1718_IG40:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.25
G_M1718_IG41:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
- call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
- int3
- ;; size=13 bbWeight=0 PerfScore 0.00
-G_M1718_IG42:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M1718_IG43:
+G_M1718_IG42:
mov edi, 6
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentNullException(int)
call [rax]System.ThrowHelper:ThrowArgumentNullException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
-G_M1718_IG44:
+G_M1718_IG43:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x80]
;; size=25 bbWeight=0 PerfScore 0.00
-G_M1718_IG45:
+G_M1718_IG44:
cmp gword ptr [rbp-0x68], 0
- je SHORT G_M1718_IG46
+ je SHORT G_M1718_IG45
mov rdi, gword ptr [rbp-0x68]
mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this
call [r11]System.IDisposable:Dispose():this
;; size=24 bbWeight=0 PerfScore 0.00
-G_M1718_IG46:
+G_M1718_IG45:
nop
;; size=1 bbWeight=0 PerfScore 0.00
-G_M1718_IG47:
+G_M1718_IG46:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1191, prolog size 65, PerfScore 453.60, instruction count 330, allocated bytes for code 1191 (MethodHash=18d2f949) for method System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
+; Total bytes of code 1159, prolog size 65, PerfScore 448.27, instruction count 324, allocated bytes for code 1159 (MethodHash=18d2f949) for method System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Build completed in 1 hour 19 minutes.
dotnet/runtime#96794
CoreLib diffs
Frameworks diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: