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] xtqqczze/dotnet-runtime/UIntCastLengthCheck5 #879
Comments
Top method regressions7 (0.99 % of base) - System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String ; Assembly listing for method System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String (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; 24 single block inlinees; 11 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T21] ( 4, 4 ) ref -> rdi class-hnd single-def <System.Enum+EnumInfo`1[double]>
; V01 arg1 [V01,T51] ( 6, 8 ) double -> mm0 single-def
; V02 loc0 [V02,T08] ( 11, 16 ) ref -> rbx class-hnd exact single-def <System.String[]>
; V03 loc1 [V03,T16] ( 7, 11 ) ref -> rdi class-hnd single-def <double[]>
; V04 loc2 [V04,T25] ( 6, 4.50) ref -> r15 class-hnd <System.String>
; V05 loc3 [V05,T31] ( 6, 3 ) int -> rcx ld-addr-op
;* V06 loc4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[int]>
; V07 loc5 [V07,T23] ( 4, 5 ) int -> rdx ld-addr-op
; V08 loc6 [V08,T17] ( 8, 10 ) int -> r13 ld-addr-op
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V10 tmp1 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[int]>
;* V12 tmp3 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V13 tmp4 [V13,T32] ( 5, 3 ) ref -> r15 class-hnd "Inline return value spill temp" <System.String>
; V14 tmp5 [V14,T30] ( 7, 3.25) int -> rcx "Inline stloc first use temp"
;* V15 tmp6 [V15 ] ( 0, 0 ) double -> zero-ref "impAppendStmt"
;* V16 tmp7 [V16 ] ( 0, 0 ) double -> zero-ref "Inlining Arg"
;* V17 tmp8 [V17 ] ( 0, 0 ) double -> zero-ref "Inlining Arg"
; V18 tmp9 [V18,T35] ( 2, 2 ) long -> r14 "Inlining Arg"
; V19 tmp10 [V19,T36] ( 2, 2 ) int -> rcx "Inlining Arg"
; V20 tmp11 [V20,T49] ( 6, 22 ) double -> mm0 "Inlining Arg"
; V21 tmp12 [V21,T50] ( 5, 16 ) double -> mm1 "Inline stloc first use temp"
;* V22 tmp13 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V23 tmp14 [V23 ] ( 0, 0 ) int -> zero-ref "Span.get_Item index"
;* V24 tmp15 [V24 ] ( 0, 0 ) double -> zero-ref "Inlining Arg"
;* V25 tmp16 [V25 ] ( 0, 0 ) double -> zero-ref "Inlining Arg"
;* V26 tmp17 [V26 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V27 tmp18 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V28 tmp19 [V28 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V29 tmp20 [V29 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V30 tmp21 [V30 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V31 tmp22 [V31 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V32 tmp23 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V33 tmp24 [V33 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
;* V34 tmp25 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V35 tmp26 [V35 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V36 tmp27 [V36,T34] ( 2, 2 ) byref -> r12 single-def "Inlining Arg"
; V37 tmp28 [V37,T37] ( 2, 2 ) int -> rax "Inlining Arg"
;* V38 tmp29 [V38 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[int]>
; V39 tmp30 [V39,T42] ( 2, 1 ) int -> rdx "Inline stloc first use temp"
; V40 tmp31 [V40,T14] ( 3, 12 ) ref -> rsi class-hnd exact "Inline stloc first use temp" <System.String>
;* V41 tmp32 [V41 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V42 tmp33 [V42 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ushort]>
;* 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 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V46 tmp37 [V46 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V47 tmp38 [V47,T03] ( 3, 24 ) int -> r8 "Inlining Arg"
+; V47 tmp38 [V47,T03] ( 3, 24 ) int -> rdx "Inlining Arg"
;* V48 tmp39 [V48 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V49 tmp40 [V49,T10] ( 2, 16 ) byref -> r12 "Inlining Arg"
-; V50 tmp41 [V50,T04] ( 2, 16 ) int -> rax "Inlining Arg"
+; V50 tmp41 [V50,T04] ( 2, 16 ) int -> rsi "Inlining Arg"
;* V51 tmp42 [V51 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-; V52 tmp43 [V52,T11] ( 2, 16 ) byref -> rcx "Inlining Arg"
-; V53 tmp44 [V53,T12] ( 2, 16 ) int -> rax "Inlining Arg"
-; V54 tmp45 [V54,T26] ( 4, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.String>
-;* V55 tmp46 [V55 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+; V52 tmp43 [V52,T11] ( 2, 16 ) byref -> rsi "Inlining Arg"
+; V53 tmp44 [V53,T12] ( 2, 16 ) int -> rdx "Inlining Arg"
+;* V54 tmp45 [V54 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+; V55 tmp46 [V55,T26] ( 4, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.String>
;* V56 tmp47 [V56 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V57 tmp48 [V57 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V58 tmp49 [V58 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V59 tmp50 [V59,T29] ( 3, 3 ) byref -> r14 "field V06._reference (fldOffset=0x0)" P-INDEP
;* V60 tmp51 [V60,T45] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
; V61 tmp52 [V61,T38] ( 2, 1 ) byref -> r14 single-def "field V10._reference (fldOffset=0x0)" P-INDEP
;* V62 tmp53 [V62,T46] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
;* V63 tmp54 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp55 [V64 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
; V65 tmp56 [V65,T39] ( 2, 1 ) byref -> r12 single-def "field V12._reference (fldOffset=0x0)" P-INDEP
; V66 tmp57 [V66,T43] ( 2, 1 ) int -> rax "field V12._length (fldOffset=0x8)" P-INDEP
;* V67 tmp58 [V67,T44] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP
;* V68 tmp59 [V68,T47] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP
; V69 tmp60 [V69,T40] ( 2, 1 ) byref -> r14 single-def "field V27._reference (fldOffset=0x0)" P-INDEP
;* V70 tmp61 [V70 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP
;* V71 tmp62 [V71 ] ( 0, 0 ) byref -> zero-ref single-def "field V32._reference (fldOffset=0x0)" P-INDEP
;* V72 tmp63 [V72 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP
; V73 tmp64 [V73,T41] ( 2, 1 ) byref -> r14 single-def "field V33._reference (fldOffset=0x0)" P-INDEP
;* V74 tmp65 [V74,T48] ( 0, 0 ) int -> zero-ref "field V33._length (fldOffset=0x8)" P-INDEP
; V75 tmp66 [V75,T24] ( 3, 5 ) byref -> r14 single-def "field V38._reference (fldOffset=0x0)" P-INDEP
; V76 tmp67 [V76,T22] ( 4, 5.50) int -> r13 "field V38._length (fldOffset=0x8)" P-INDEP
; V77 tmp68 [V77,T00] ( 9, 29 ) byref -> r12 "field V41._reference (fldOffset=0x0)" P-INDEP
; V78 tmp69 [V78,T01] ( 9, 29 ) int -> [rbp-0x2C] "field V41._length (fldOffset=0x8)" P-INDEP
;* V79 tmp70 [V79 ] ( 0, 0 ) byref -> zero-ref "field V42._reference (fldOffset=0x0)" P-INDEP
;* V80 tmp71 [V80 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP
;* V81 tmp72 [V81 ] ( 0, 0 ) byref -> zero-ref "field V43._reference (fldOffset=0x0)" P-INDEP
;* V82 tmp73 [V82 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP
; V83 tmp74 [V83,T18] ( 2, 8 ) byref -> r12 "field V48._reference (fldOffset=0x0)" P-INDEP
;* V84 tmp75 [V84,T28] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x8)" P-INDEP
-; V85 tmp76 [V85,T19] ( 2, 8 ) byref -> rcx "field V51._reference (fldOffset=0x0)" P-INDEP
-; V86 tmp77 [V86,T20] ( 2, 8 ) int -> rax "field V51._length (fldOffset=0x8)" P-INDEP
-;* V87 tmp78 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V55._reference (fldOffset=0x0)" P-INDEP
-;* V88 tmp79 [V88 ] ( 0, 0 ) int -> zero-ref "field V55._length (fldOffset=0x8)" P-INDEP
+; V85 tmp76 [V85,T19] ( 2, 8 ) byref -> rsi "field V51._reference (fldOffset=0x0)" P-INDEP
+; V86 tmp77 [V86,T20] ( 2, 8 ) int -> rdx "field V51._length (fldOffset=0x8)" P-INDEP
+;* V87 tmp78 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V54._reference (fldOffset=0x0)" P-INDEP
+;* V88 tmp79 [V88 ] ( 0, 0 ) int -> zero-ref "field V54._length (fldOffset=0x8)" P-INDEP
; V89 tmp80 [V89,T05] ( 3, 24 ) int -> rdx "index expr"
-; V90 tmp81 [V90,T33] ( 3, 3 ) int -> rcx "index expr"
+; V90 tmp81 [V90,T33] ( 3, 3 ) int -> rsi "index expr"
; V91 GsCookie [V91 ] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V92 cse0 [V92,T15] ( 3, 12 ) long -> [rbp-0x38] spill-single-def "CSE #12: moderate"
; V93 cse1 [V93,T13] ( 8, 14.50) int -> rax multi-def "CSE #01: moderate"
; V94 cse2 [V94,T09] ( 4, 16 ) int -> [rbp-0x3C] spill-single-def "CSE #10: moderate"
; V95 cse3 [V95,T27] ( 2, 4 ) long -> rsi "CSE #07: moderate"
; V96 rat0 [V96,T06] ( 9, 21.75) long -> rdx "Widened IV V14"
; V97 rat1 [V97,T02] ( 9, 26.50) long -> rcx "Widened IV V19"
; V98 rat2 [V98,T07] ( 7, 21 ) long -> [rbp-0x48] "Widened IV V39"
;
; Lcl frame size = 40
G_M41568_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 40
lea rbp, [rsp+0x50]
mov qword ptr [rbp-0x50], 0xD1FFAB1E
;; size=27 bbWeight=1 PerfScore 7.75
G_M41568_IG02:
mov rbx, gword ptr [rdi+0x10]
mov rdi, gword ptr [rdi+0x08]
vxorps xmm1, xmm1, xmm1
vucomisd xmm0, xmm1
jp SHORT G_M41568_IG03
je SHORT G_M41568_IG09
;; size=20 bbWeight=1 PerfScore 8.33
G_M41568_IG03:
mov eax, dword ptr [rdi+0x08]
lea ecx, [rax-0x01]
mov edx, ecx
cmp eax, edx
jbe SHORT G_M41568_IG07
align [5 bytes for IG04]
;; size=17 bbWeight=0.50 PerfScore 2.12
G_M41568_IG04:
cmp edx, eax
- jae G_M41568_IG27
+ jae G_M41568_IG29
vucomisd xmm0, qword ptr [rdi+8*rdx+0x10]
jae SHORT G_M41568_IG06
dec edx
cmp eax, edx
ja SHORT G_M41568_IG04
;; size=22 bbWeight=4 PerfScore 35.00
G_M41568_IG05:
mov ecx, edx
jmp SHORT G_M41568_IG07
align [0 bytes for IG13]
;; size=4 bbWeight=0.25 PerfScore 0.56
G_M41568_IG06:
mov ecx, edx
mov edx, ecx
vmovsd xmm1, qword ptr [rdi+8*rdx+0x10]
vucomisd xmm1, xmm0
jp SHORT G_M41568_IG07
je SHORT G_M41568_IG08
;; size=18 bbWeight=0.50 PerfScore 4.25
G_M41568_IG07:
xor r15, r15
jmp SHORT G_M41568_IG11
;; size=5 bbWeight=0.50 PerfScore 1.12
G_M41568_IG08:
cmp ecx, dword ptr [rbx+0x08]
- jae G_M41568_IG27
+ jae G_M41568_IG29
mov edx, ecx
mov r15, gword ptr [rbx+8*rdx+0x10]
jmp SHORT G_M41568_IG11
;; size=18 bbWeight=0.50 PerfScore 4.12
G_M41568_IG09:
xor ecx, ecx
mov eax, dword ptr [rdi+0x08]
test eax, eax
je SHORT G_M41568_IG10
vmovsd xmm1, qword ptr [rdi+0x10]
vxorps xmm2, xmm2, xmm2
vucomisd xmm1, xmm2
jp SHORT G_M41568_IG10
jne SHORT G_M41568_IG10
cmp dword ptr [rbx+0x08], 0
- jbe G_M41568_IG27
+ jbe G_M41568_IG29
mov r15, gword ptr [rbx+0x10]
jmp SHORT G_M41568_IG11
;; size=42 bbWeight=0.50 PerfScore 9.92
G_M41568_IG10:
mov r15, 0xD1FFAB1E ; '0'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M41568_IG11:
test r15, r15
- jne G_M41568_IG21
+ jne G_M41568_IG23
;; size=9 bbWeight=1 PerfScore 1.25
G_M41568_IG12:
test dword ptr [rsp], esp
sub rsp, 256
lea r14, [rsp]
xor edx, edx
xor r13d, r13d
mov ecx, ecx
jmp SHORT G_M41568_IG14
;; size=23 bbWeight=0.50 PerfScore 3.25
G_M41568_IG13:
dec ecx
;; size=2 bbWeight=4 PerfScore 1.00
G_M41568_IG14:
cmp eax, ecx
jbe G_M41568_IG18
vmovsd xmm1, qword ptr [rdi+8*rcx+0x10]
test ecx, ecx
jne SHORT G_M41568_IG16
;; size=18 bbWeight=4 PerfScore 26.00
G_M41568_IG15:
vxorps xmm2, xmm2, xmm2
vucomisd xmm1, xmm2
jp SHORT G_M41568_IG16
je SHORT G_M41568_IG18
;; size=12 bbWeight=2 PerfScore 8.67
G_M41568_IG16:
vmovd rsi, xmm0
vmovd r8, xmm1
and rsi, r8
vmovd xmm2, rsi
vucomisd xmm2, xmm1
jp SHORT G_M41568_IG13
jne SHORT G_M41568_IG13
;; size=26 bbWeight=4 PerfScore 41.00
G_M41568_IG17:
vmovd rsi, xmm1
not rsi
vmovd r8, xmm0
and rsi, r8
vmovd xmm0, rsi
cmp r13d, 64
- jae G_M41568_IG27
+ jae G_M41568_IG29
mov esi, r13d
mov dword ptr [r14+4*rsi], ecx
inc r13d
cmp ecx, dword ptr [rbx+0x08]
- jae G_M41568_IG27
+ jae G_M41568_IG29
mov rsi, gword ptr [rbx+8*rcx+0x10]
add edx, dword ptr [rsi+0x08]
- jo G_M41568_IG28
+ jo G_M41568_IG30
vxorps xmm1, xmm1, xmm1
vucomisd xmm0, xmm1
jp G_M41568_IG13
jne G_M41568_IG13
;; size=84 bbWeight=2 PerfScore 47.17
G_M41568_IG18:
vxorps xmm1, xmm1, xmm1
vucomisd xmm0, xmm1
- jp G_M41568_IG21
- jne G_M41568_IG21
+ jp G_M41568_IG23
+ jne G_M41568_IG23
cmp r13d, 64
- ja G_M41568_IG26
+ ja G_M41568_IG28
lea edi, [r13+r13]
add edi, -2
add edi, edx
- jo G_M41568_IG28
+ jo G_M41568_IG30
call System.String:FastAllocateString(int):System.String
mov r15, rax
lea r12, bword ptr [r15+0x0C]
mov eax, dword ptr [r15+0x08]
lea edx, [r13-0x01]
mov ecx, edx
test ecx, ecx
- je G_M41568_IG20
- ;; size=76 bbWeight=0.50 PerfScore 7.42
+ jne SHORT G_M41568_IG21
+ ;; size=72 bbWeight=0.50 PerfScore 7.42
G_M41568_IG19:
+ mov edx, eax
+ jmp G_M41568_IG22
+ ;; size=7 bbWeight=0.25 PerfScore 0.56
+G_M41568_IG20:
+ mov eax, edx
+ ;; size=2 bbWeight=2 PerfScore 0.50
+G_M41568_IG21:
cmp ecx, r13d
- jae G_M41568_IG27
+ jae G_M41568_IG29
mov qword ptr [rbp-0x48], rcx
mov edx, dword ptr [r14+4*rcx]
cmp edx, dword ptr [rbx+0x08]
- jae G_M41568_IG27
+ jae G_M41568_IG29
mov rsi, gword ptr [rbx+8*rdx+0x10]
mov r8d, dword ptr [rsi+0x08]
mov dword ptr [rbp-0x3C], r8d
mov dword ptr [rbp-0x2C], eax
cmp r8d, eax
- jg G_M41568_IG25
+ jg G_M41568_IG27
mov r9d, r8d
add r9, r9
mov qword ptr [rbp-0x38], r9
mov rdx, r9
add rsi, 12
mov rdi, r12
mov r10, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [r10]System.SpanHelpers:Memmove(byref,byref,ulong)
- mov r8d, dword ptr [rbp-0x3C]
- mov eax, dword ptr [rbp-0x2C]
- cmp r8d, eax
- ja G_M41568_IG26
- mov r9, qword ptr [rbp-0x38]
- add r12, r9
- sub eax, r8d
- cmp eax, 2
- jb G_M41568_IG26
- lea rcx, bword ptr [r12+0x04]
- add eax, -2
+ mov edx, dword ptr [rbp-0x3C]
+ mov esi, dword ptr [rbp-0x2C]
+ cmp edx, esi
+ ja G_M41568_IG28
+ mov rdi, qword ptr [rbp-0x38]
+ add r12, rdi
+ sub esi, edx
+ mov edx, esi
+ cmp edx, 2
+ jb G_M41568_IG28
+ lea rsi, bword ptr [r12+0x04]
+ add edx, -2
mov word ptr [r12], 44
mov word ptr [r12+0x02], 32
- mov r12, rcx
- mov rcx, qword ptr [rbp-0x48]
- dec ecx
- jne G_M41568_IG19
- ;; size=157 bbWeight=4 PerfScore 129.00
-G_M41568_IG20:
+ mov r12, rsi
+ mov rsi, qword ptr [rbp-0x48]
+ dec esi
+ mov rcx, rsi
+ jne G_M41568_IG20
+ ;; size=159 bbWeight=4 PerfScore 131.00
+G_M41568_IG22:
test r13d, r13d
- je SHORT G_M41568_IG27
- mov ecx, dword ptr [r14]
- cmp ecx, dword ptr [rbx+0x08]
- jae SHORT G_M41568_IG27
- mov rsi, gword ptr [rbx+8*rcx+0x10]
- cmp dword ptr [rsi+0x08], eax
- jg SHORT G_M41568_IG25
+ je SHORT G_M41568_IG29
+ mov esi, dword ptr [r14]
+ cmp esi, dword ptr [rbx+0x08]
+ jae SHORT G_M41568_IG29
+ mov rsi, gword ptr [rbx+8*rsi+0x10]
+ cmp dword ptr [rsi+0x08], edx
+ jg SHORT G_M41568_IG27
mov edx, dword ptr [rsi+0x08]
add rdx, rdx
add rsi, 12
mov rdi, r12
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
;; size=48 bbWeight=0.50 PerfScore 9.62
-G_M41568_IG21:
+G_M41568_IG23:
mov rax, r15
;; size=3 bbWeight=1 PerfScore 0.25
-G_M41568_IG22:
+G_M41568_IG24:
cmp qword ptr [rbp-0x50], 0xD1FFAB1E
- je SHORT G_M41568_IG23
+ je SHORT G_M41568_IG25
call CORINFO_HELP_FAIL_FAST
;; size=15 bbWeight=1 PerfScore 4.00
-G_M41568_IG23:
+G_M41568_IG25:
nop
;; size=1 bbWeight=1 PerfScore 0.25
-G_M41568_IG24:
+G_M41568_IG26:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
-G_M41568_IG25:
+G_M41568_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M41568_IG26:
+G_M41568_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M41568_IG27:
+G_M41568_IG29:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-G_M41568_IG28:
+G_M41568_IG30:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 710, prolog size 27, PerfScore 356.69, instruction count 195, allocated bytes for code 710 (MethodHash=7b8d5d9f) for method System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String (FullOpts)
+; Total bytes of code 717, prolog size 27, PerfScore 359.75, instruction count 200, allocated bytes for code 717 (MethodHash=7b8d5d9f) for method System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String (FullOpts)
; ============================================================ 7 (1.13 % of base) - System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String ; Assembly listing for method System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String (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; 24 single block inlinees; 11 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T24] ( 4, 4 ) ref -> rdi class-hnd single-def <System.Enum+EnumInfo`1[int]>
; V01 arg1 [V01,T20] ( 6, 8 ) int -> rsi single-def
; V02 loc0 [V02,T10] ( 11, 16 ) ref -> rbx class-hnd exact single-def <System.String[]>
; V03 loc1 [V03,T18] ( 7, 11 ) ref -> rdi class-hnd single-def <int[]>
; V04 loc2 [V04,T28] ( 6, 4.50) ref -> r15 class-hnd <System.String>
; V05 loc3 [V05,T33] ( 6, 3 ) int -> rcx ld-addr-op
;* V06 loc4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[int]>
; V07 loc5 [V07,T26] ( 4, 5 ) int -> rdx ld-addr-op
; V08 loc6 [V08,T19] ( 8, 10 ) int -> r13 ld-addr-op
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V10 tmp1 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[int]>
;* V12 tmp3 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V13 tmp4 [V13,T34] ( 5, 3 ) ref -> r15 class-hnd "Inline return value spill temp" <System.String>
; V14 tmp5 [V14,T32] ( 7, 3.25) int -> rcx "Inline stloc first use temp"
;* V15 tmp6 [V15 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
;* V16 tmp7 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V17 tmp8 [V17 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V18 tmp9 [V18,T37] ( 2, 2 ) long -> r14 "Inlining Arg"
; V19 tmp10 [V19,T38] ( 2, 2 ) int -> rcx "Inlining Arg"
; V20 tmp11 [V20,T06] ( 6, 22 ) int -> rsi "Inlining Arg"
; V21 tmp12 [V21,T09] ( 5, 18 ) int -> r8 "Inline stloc first use temp"
;* V22 tmp13 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V23 tmp14 [V23 ] ( 0, 0 ) int -> zero-ref "Span.get_Item index"
;* V24 tmp15 [V24 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V25 tmp16 [V25 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V26 tmp17 [V26 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V27 tmp18 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V28 tmp19 [V28 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V29 tmp20 [V29 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V30 tmp21 [V30 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V31 tmp22 [V31 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V32 tmp23 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V33 tmp24 [V33 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
;* V34 tmp25 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V35 tmp26 [V35 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V36 tmp27 [V36,T36] ( 2, 2 ) byref -> r12 single-def "Inlining Arg"
; V37 tmp28 [V37,T39] ( 2, 2 ) int -> rax "Inlining Arg"
;* V38 tmp29 [V38 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[int]>
; V39 tmp30 [V39,T44] ( 2, 1 ) int -> rdx "Inline stloc first use temp"
; V40 tmp31 [V40,T16] ( 3, 12 ) ref -> rsi class-hnd exact "Inline stloc first use temp" <System.String>
;* V41 tmp32 [V41 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V42 tmp33 [V42 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ushort]>
;* 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 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V46 tmp37 [V46 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V47 tmp38 [V47,T03] ( 3, 24 ) int -> r8 "Inlining Arg"
+; V47 tmp38 [V47,T03] ( 3, 24 ) int -> rdx "Inlining Arg"
;* V48 tmp39 [V48 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V49 tmp40 [V49,T12] ( 2, 16 ) byref -> r12 "Inlining Arg"
-; V50 tmp41 [V50,T04] ( 2, 16 ) int -> rax "Inlining Arg"
+; V50 tmp41 [V50,T04] ( 2, 16 ) int -> rsi "Inlining Arg"
;* V51 tmp42 [V51 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-; V52 tmp43 [V52,T13] ( 2, 16 ) byref -> rcx "Inlining Arg"
-; V53 tmp44 [V53,T14] ( 2, 16 ) int -> rax "Inlining Arg"
-; V54 tmp45 [V54,T29] ( 4, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.String>
-;* V55 tmp46 [V55 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+; V52 tmp43 [V52,T13] ( 2, 16 ) byref -> rsi "Inlining Arg"
+; V53 tmp44 [V53,T14] ( 2, 16 ) int -> rdx "Inlining Arg"
+;* V54 tmp45 [V54 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+; V55 tmp46 [V55,T29] ( 4, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.String>
;* V56 tmp47 [V56 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V57 tmp48 [V57 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V58 tmp49 [V58 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V59 tmp50 [V59,T31] ( 3, 3 ) byref -> r14 "field V06._reference (fldOffset=0x0)" P-INDEP
;* V60 tmp51 [V60,T47] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
; V61 tmp52 [V61,T40] ( 2, 1 ) byref -> r14 single-def "field V10._reference (fldOffset=0x0)" P-INDEP
;* V62 tmp53 [V62,T48] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
;* V63 tmp54 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp55 [V64 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
; V65 tmp56 [V65,T41] ( 2, 1 ) byref -> r12 single-def "field V12._reference (fldOffset=0x0)" P-INDEP
; V66 tmp57 [V66,T45] ( 2, 1 ) int -> rax "field V12._length (fldOffset=0x8)" P-INDEP
;* V67 tmp58 [V67,T46] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP
;* V68 tmp59 [V68,T49] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP
; V69 tmp60 [V69,T42] ( 2, 1 ) byref -> r14 single-def "field V27._reference (fldOffset=0x0)" P-INDEP
;* V70 tmp61 [V70 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP
;* V71 tmp62 [V71 ] ( 0, 0 ) byref -> zero-ref single-def "field V32._reference (fldOffset=0x0)" P-INDEP
;* V72 tmp63 [V72 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP
; V73 tmp64 [V73,T43] ( 2, 1 ) byref -> r14 single-def "field V33._reference (fldOffset=0x0)" P-INDEP
;* V74 tmp65 [V74,T50] ( 0, 0 ) int -> zero-ref "field V33._length (fldOffset=0x8)" P-INDEP
; V75 tmp66 [V75,T27] ( 3, 5 ) byref -> r14 single-def "field V38._reference (fldOffset=0x0)" P-INDEP
; V76 tmp67 [V76,T25] ( 4, 5.50) int -> r13 "field V38._length (fldOffset=0x8)" P-INDEP
; V77 tmp68 [V77,T00] ( 9, 29 ) byref -> r12 "field V41._reference (fldOffset=0x0)" P-INDEP
; V78 tmp69 [V78,T01] ( 9, 29 ) int -> [rbp-0x2C] "field V41._length (fldOffset=0x8)" P-INDEP
;* V79 tmp70 [V79 ] ( 0, 0 ) byref -> zero-ref "field V42._reference (fldOffset=0x0)" P-INDEP
;* V80 tmp71 [V80 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP
;* V81 tmp72 [V81 ] ( 0, 0 ) byref -> zero-ref "field V43._reference (fldOffset=0x0)" P-INDEP
;* V82 tmp73 [V82 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP
; V83 tmp74 [V83,T21] ( 2, 8 ) byref -> r12 "field V48._reference (fldOffset=0x0)" P-INDEP
;* V84 tmp75 [V84,T30] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x8)" P-INDEP
-; V85 tmp76 [V85,T22] ( 2, 8 ) byref -> rcx "field V51._reference (fldOffset=0x0)" P-INDEP
-; V86 tmp77 [V86,T23] ( 2, 8 ) int -> rax "field V51._length (fldOffset=0x8)" P-INDEP
-;* V87 tmp78 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V55._reference (fldOffset=0x0)" P-INDEP
-;* V88 tmp79 [V88 ] ( 0, 0 ) int -> zero-ref "field V55._length (fldOffset=0x8)" P-INDEP
+; V85 tmp76 [V85,T22] ( 2, 8 ) byref -> rsi "field V51._reference (fldOffset=0x0)" P-INDEP
+; V86 tmp77 [V86,T23] ( 2, 8 ) int -> rdx "field V51._length (fldOffset=0x8)" P-INDEP
+;* V87 tmp78 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V54._reference (fldOffset=0x0)" P-INDEP
+;* V88 tmp79 [V88 ] ( 0, 0 ) int -> zero-ref "field V54._length (fldOffset=0x8)" P-INDEP
; V89 tmp80 [V89,T05] ( 3, 24 ) int -> rdx "index expr"
-; V90 tmp81 [V90,T35] ( 3, 3 ) int -> rcx "index expr"
+; V90 tmp81 [V90,T35] ( 3, 3 ) int -> rsi "index expr"
; V91 GsCookie [V91 ] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V92 cse0 [V92,T17] ( 3, 12 ) long -> [rbp-0x38] spill-single-def "CSE #09: moderate"
; V93 cse1 [V93,T15] ( 8, 14.50) int -> rax multi-def "CSE #01: moderate"
; V94 cse2 [V94,T11] ( 4, 16 ) int -> [rbp-0x3C] spill-single-def "CSE #07: moderate"
; V95 rat0 [V95,T07] ( 9, 21.75) long -> rdx "Widened IV V14"
; V96 rat1 [V96,T02] ( 9, 26.50) long -> rcx "Widened IV V19"
; V97 rat2 [V97,T08] ( 7, 21 ) long -> [rbp-0x48] "Widened IV V39"
;
; Lcl frame size = 40
G_M902_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 40
lea rbp, [rsp+0x50]
mov qword ptr [rbp-0x50], 0xD1FFAB1E
;; size=27 bbWeight=1 PerfScore 7.75
G_M902_IG02:
mov rbx, gword ptr [rdi+0x10]
mov rdi, gword ptr [rdi+0x08]
test esi, esi
je SHORT G_M902_IG09
;; size=12 bbWeight=1 PerfScore 5.25
G_M902_IG03:
mov eax, dword ptr [rdi+0x08]
lea ecx, [rax-0x01]
mov edx, ecx
cmp eax, edx
jbe SHORT G_M902_IG07
align [13 bytes for IG04]
;; size=25 bbWeight=0.50 PerfScore 2.12
G_M902_IG04:
cmp edx, eax
- jae G_M902_IG26
+ jae G_M902_IG28
cmp dword ptr [rdi+4*rdx+0x10], esi
jle SHORT G_M902_IG06
dec edx
cmp eax, edx
ja SHORT G_M902_IG04
;; size=20 bbWeight=4 PerfScore 27.00
G_M902_IG05:
mov ecx, edx
jmp SHORT G_M902_IG07
align [0 bytes for IG13]
;; size=4 bbWeight=0.25 PerfScore 0.56
G_M902_IG06:
mov ecx, edx
mov edx, ecx
cmp dword ptr [rdi+4*rdx+0x10], esi
je SHORT G_M902_IG08
;; size=10 bbWeight=0.50 PerfScore 2.25
G_M902_IG07:
xor r15, r15
jmp SHORT G_M902_IG11
;; size=5 bbWeight=0.50 PerfScore 1.12
G_M902_IG08:
cmp ecx, dword ptr [rbx+0x08]
- jae G_M902_IG26
+ jae G_M902_IG28
mov edx, ecx
mov r15, gword ptr [rbx+8*rdx+0x10]
jmp SHORT G_M902_IG11
;; size=18 bbWeight=0.50 PerfScore 4.12
G_M902_IG09:
xor ecx, ecx
mov eax, dword ptr [rdi+0x08]
test eax, eax
je SHORT G_M902_IG10
cmp dword ptr [rdi+0x10], 0
jne SHORT G_M902_IG10
cmp dword ptr [rbx+0x08], 0
- jbe G_M902_IG26
+ jbe G_M902_IG28
mov r15, gword ptr [rbx+0x10]
jmp SHORT G_M902_IG11
;; size=31 bbWeight=0.50 PerfScore 7.75
G_M902_IG10:
mov r15, 0xD1FFAB1E ; '0'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M902_IG11:
test r15, r15
- jne G_M902_IG20
+ jne G_M902_IG22
;; size=9 bbWeight=1 PerfScore 1.25
G_M902_IG12:
test dword ptr [rsp], esp
sub rsp, 256
lea r14, [rsp]
xor edx, edx
xor r13d, r13d
mov ecx, ecx
jmp SHORT G_M902_IG16
;; size=23 bbWeight=0.50 PerfScore 3.25
G_M902_IG13:
mov r9d, esi
and r9d, r8d
cmp r9d, r8d
jne SHORT G_M902_IG15
;; size=11 bbWeight=4 PerfScore 7.00
G_M902_IG14:
andn esi, r8d, esi
cmp r13d, 64
- jae G_M902_IG26
+ jae G_M902_IG28
mov r8d, r13d
mov dword ptr [r14+4*r8], ecx
inc r13d
cmp ecx, dword ptr [rbx+0x08]
- jae G_M902_IG26
+ jae G_M902_IG28
mov r8, gword ptr [rbx+8*rcx+0x10]
add edx, dword ptr [r8+0x08]
- jo G_M902_IG27
+ jo G_M902_IG29
test esi, esi
je SHORT G_M902_IG17
;; size=53 bbWeight=2 PerfScore 29.00
G_M902_IG15:
dec ecx
;; size=2 bbWeight=4 PerfScore 1.00
G_M902_IG16:
cmp eax, ecx
jbe SHORT G_M902_IG17
mov r8d, dword ptr [rdi+4*rcx+0x10]
mov r9d, ecx
or r9d, r8d
jne SHORT G_M902_IG13
;; size=17 bbWeight=4 PerfScore 19.00
G_M902_IG17:
test esi, esi
- jne G_M902_IG20
+ jne G_M902_IG22
cmp r13d, 64
- ja G_M902_IG25
+ ja G_M902_IG27
lea edi, [r13+r13]
add edi, -2
add edi, edx
- jo G_M902_IG27
+ jo G_M902_IG29
call System.String:FastAllocateString(int):System.String
mov r15, rax
lea r12, bword ptr [r15+0x0C]
mov eax, dword ptr [r15+0x08]
lea edx, [r13-0x01]
mov ecx, edx
test ecx, ecx
- je G_M902_IG19
- ;; size=64 bbWeight=0.50 PerfScore 5.88
+ jne SHORT G_M902_IG20
+ ;; size=60 bbWeight=0.50 PerfScore 5.88
G_M902_IG18:
+ mov edx, eax
+ jmp G_M902_IG21
+ ;; size=7 bbWeight=0.25 PerfScore 0.56
+G_M902_IG19:
+ mov eax, edx
+ ;; size=2 bbWeight=2 PerfScore 0.50
+G_M902_IG20:
cmp ecx, r13d
- jae G_M902_IG26
+ jae G_M902_IG28
mov qword ptr [rbp-0x48], rcx
mov edx, dword ptr [r14+4*rcx]
cmp edx, dword ptr [rbx+0x08]
- jae G_M902_IG26
+ jae G_M902_IG28
mov rsi, gword ptr [rbx+8*rdx+0x10]
mov r8d, dword ptr [rsi+0x08]
mov dword ptr [rbp-0x3C], r8d
mov dword ptr [rbp-0x2C], eax
cmp r8d, eax
- jg G_M902_IG24
+ jg G_M902_IG26
mov r9d, r8d
add r9, r9
mov qword ptr [rbp-0x38], r9
mov rdx, r9
add rsi, 12
mov rdi, r12
mov r10, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [r10]System.SpanHelpers:Memmove(byref,byref,ulong)
- mov r8d, dword ptr [rbp-0x3C]
- mov eax, dword ptr [rbp-0x2C]
- cmp r8d, eax
- ja G_M902_IG25
- mov r9, qword ptr [rbp-0x38]
- add r12, r9
- sub eax, r8d
- cmp eax, 2
- jb G_M902_IG25
- lea rcx, bword ptr [r12+0x04]
- add eax, -2
+ mov edx, dword ptr [rbp-0x3C]
+ mov esi, dword ptr [rbp-0x2C]
+ cmp edx, esi
+ ja G_M902_IG27
+ mov rdi, qword ptr [rbp-0x38]
+ add r12, rdi
+ sub esi, edx
+ mov edx, esi
+ cmp edx, 2
+ jb G_M902_IG27
+ lea rsi, bword ptr [r12+0x04]
+ add edx, -2
mov word ptr [r12], 44
mov word ptr [r12+0x02], 32
- mov r12, rcx
- mov rcx, qword ptr [rbp-0x48]
- dec ecx
- jne G_M902_IG18
- ;; size=157 bbWeight=4 PerfScore 129.00
-G_M902_IG19:
+ mov r12, rsi
+ mov rsi, qword ptr [rbp-0x48]
+ dec esi
+ mov rcx, rsi
+ jne G_M902_IG19
+ ;; size=159 bbWeight=4 PerfScore 131.00
+G_M902_IG21:
test r13d, r13d
- je SHORT G_M902_IG26
- mov ecx, dword ptr [r14]
- cmp ecx, dword ptr [rbx+0x08]
- jae SHORT G_M902_IG26
- mov rsi, gword ptr [rbx+8*rcx+0x10]
- cmp dword ptr [rsi+0x08], eax
- jg SHORT G_M902_IG24
+ je SHORT G_M902_IG28
+ mov esi, dword ptr [r14]
+ cmp esi, dword ptr [rbx+0x08]
+ jae SHORT G_M902_IG28
+ mov rsi, gword ptr [rbx+8*rsi+0x10]
+ cmp dword ptr [rsi+0x08], edx
+ jg SHORT G_M902_IG26
mov edx, dword ptr [rsi+0x08]
add rdx, rdx
add rsi, 12
mov rdi, r12
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
;; size=48 bbWeight=0.50 PerfScore 9.62
-G_M902_IG20:
+G_M902_IG22:
mov rax, r15
;; size=3 bbWeight=1 PerfScore 0.25
-G_M902_IG21:
+G_M902_IG23:
cmp qword ptr [rbp-0x50], 0xD1FFAB1E
- je SHORT G_M902_IG22
+ je SHORT G_M902_IG24
call CORINFO_HELP_FAIL_FAST
;; size=15 bbWeight=1 PerfScore 4.00
-G_M902_IG22:
+G_M902_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
-G_M902_IG23:
+G_M902_IG25:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
-G_M902_IG24:
+G_M902_IG26:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M902_IG25:
+G_M902_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M902_IG26:
+G_M902_IG28:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-G_M902_IG27:
+G_M902_IG29:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 618, prolog size 27, PerfScore 272.06, instruction count 174, allocated bytes for code 618 (MethodHash=5deffc79) for method System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String (FullOpts)
+; Total bytes of code 625, prolog size 27, PerfScore 275.12, instruction count 179, allocated bytes for code 625 (MethodHash=5deffc79) for method System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String (FullOpts)
; ============================================================ 3 (1.60 % of base) - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):this ; Assembly listing for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):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; 1 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 11, 7 ) byref -> rbx this single-def
; V01 arg1 [V01,T01] ( 6, 4 ) ref -> r15 class-hnd single-def <System.String>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
; V04 tmp2 [V04,T04] ( 3, 3 ) int -> rsi "Inlining Arg"
-; V05 tmp3 [V05,T02] ( 4, 4 ) int -> rcx "Inlining Arg"
-; V06 tmp4 [V06,T03] ( 3, 3 ) byref -> rax single-def "Inlining Arg"
+; V05 tmp3 [V05,T02] ( 4, 4 ) int -> rsi "Inlining Arg"
+; V06 tmp4 [V06,T03] ( 3, 3 ) byref -> rdx single-def "Inlining Arg"
;* V07 tmp5 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-; V08 tmp6 [V08,T06] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V09 tmp7 [V09,T07] ( 2, 2 ) int -> rdx "Inlining Arg"
+; V08 tmp6 [V08,T06] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
+; V09 tmp7 [V09,T07] ( 2, 2 ) int -> rdi "Inlining Arg"
;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V11 tmp9 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V13 tmp11 [V13 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V14 tmp12 [V14 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
;* V15 tmp13 [V15 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
;* V17 tmp15 [V17 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
;* V18 tmp16 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP
;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
-; V20 cse0 [V20,T08] ( 3, 1.50) int -> rdx "CSE #01: moderate"
+; V20 cse0 [V20,T08] ( 3, 1.50) int -> rdi "CSE #01: moderate"
; V21 cse1 [V21,T05] ( 5, 2.50) int -> r14 "CSE #02: aggressive"
;
; Lcl frame size = 8
G_M21571_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
mov rbx, rdi
mov r15, rsi
;; size=18 bbWeight=1 PerfScore 6.00
G_M21571_IG02:
cmp byte ptr [rbx+0x14], 0
jne SHORT G_M21571_IG05
;; size=6 bbWeight=1 PerfScore 4.00
G_M21571_IG03:
test r15, r15
je SHORT G_M21571_IG06
mov r14d, dword ptr [r15+0x08]
mov esi, r14d
mov edi, dword ptr [rbx+0x20]
sub edi, dword ptr [rbx+0x10]
cmp edi, esi
jge SHORT G_M21571_IG04
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this
call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this
;; size=37 bbWeight=0.50 PerfScore 6.62
G_M21571_IG04:
- lea rax, bword ptr [rbx+0x18]
- mov ecx, dword ptr [rbx+0x10]
- mov edx, dword ptr [rax+0x08]
- cmp ecx, edx
+ lea rdx, bword ptr [rbx+0x18]
+ mov esi, dword ptr [rbx+0x10]
+ mov edi, dword ptr [rdx+0x08]
+ cmp esi, edi
ja SHORT G_M21571_IG09
- mov rax, bword ptr [rax]
- mov edi, ecx
- lea rdi, bword ptr [rax+2*rdi]
- sub edx, ecx
- cmp r14d, edx
+ mov rdx, bword ptr [rdx]
+ mov eax, esi
+ lea rax, bword ptr [rdx+2*rax]
+ sub edi, esi
+ cmp r14d, edi
ja SHORT G_M21571_IG08
mov edx, r14d
add rdx, rdx
lea rsi, bword ptr [r15+0x0C]
+ mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
add dword ptr [rbx+0x10], r14d
jmp SHORT G_M21571_IG06
- ;; size=58 bbWeight=0.50 PerfScore 9.62
+ ;; size=61 bbWeight=0.50 PerfScore 9.75
G_M21571_IG05:
mov rdi, rbx
mov rdx, r15
mov rsi, 0xD1FFAB1E ; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendCustomFormatter[System.String](System.String,System.String):this
xor rcx, rcx
mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendCustomFormatter[System.__Canon](System.__Canon,System.String):this
call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendCustomFormatter[System.__Canon](System.__Canon,System.String):this
;; size=30 bbWeight=0.50 PerfScore 2.12
G_M21571_IG06:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M21571_IG07:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
G_M21571_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M21571_IG09:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 187, prolog size 12, PerfScore 31.88, instruction count 58, allocated bytes for code 187 (MethodHash=00faabbc) for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):this (FullOpts)
+; Total bytes of code 190, prolog size 12, PerfScore 32.00, instruction count 59, allocated bytes for code 190 (MethodHash=00faabbc) for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):this (FullOpts)
; ============================================================ 3 (2.26 % of base) - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this ; Assembly listing for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):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; 1 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 7, 7 ) byref -> rbx this single-def
; V01 arg1 [V01,T02] ( 4, 4 ) ref -> r15 class-hnd single-def <System.String>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
-; V04 tmp2 [V04,T01] ( 4, 8 ) int -> rcx "Inlining Arg"
-; V05 tmp3 [V05,T03] ( 3, 6 ) byref -> rax single-def "Inlining Arg"
+; V04 tmp2 [V04,T01] ( 4, 8 ) int -> rsi "Inlining Arg"
+; V05 tmp3 [V05,T03] ( 3, 6 ) byref -> rdx single-def "Inlining Arg"
;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-; V07 tmp5 [V07,T05] ( 2, 4 ) byref -> rdi single-def "Inlining Arg"
-; V08 tmp6 [V08,T06] ( 2, 4 ) int -> rdx "Inlining Arg"
+; V07 tmp5 [V07,T05] ( 2, 4 ) byref -> rax single-def "Inlining Arg"
+; V08 tmp6 [V08,T06] ( 2, 4 ) int -> rdi "Inlining Arg"
;* V09 tmp7 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V11 tmp9 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V12 tmp10 [V12 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V13 tmp11 [V13 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
;* V14 tmp12 [V14 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
;* V16 tmp14 [V16 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
;* V17 tmp15 [V17 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP
;* V18 tmp16 [V18 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
-; V19 cse0 [V19,T07] ( 3, 3 ) int -> rdx "CSE #01: aggressive"
+; V19 cse0 [V19,T07] ( 3, 3 ) int -> rdi "CSE #01: aggressive"
; V20 cse1 [V20,T04] ( 5, 5 ) int -> r14 "CSE #02: aggressive"
;
; Lcl frame size = 8
G_M61046_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
mov rbx, rdi
mov r15, rsi
;; size=18 bbWeight=1 PerfScore 6.00
G_M61046_IG02:
mov r14d, dword ptr [r15+0x08]
mov esi, r14d
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this
call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this
- lea rax, bword ptr [rbx+0x18]
- mov ecx, dword ptr [rbx+0x10]
- mov edx, dword ptr [rax+0x08]
- cmp ecx, edx
+ lea rdx, bword ptr [rbx+0x18]
+ mov esi, dword ptr [rbx+0x10]
+ mov edi, dword ptr [rdx+0x08]
+ cmp esi, edi
ja SHORT G_M61046_IG05
- mov rax, bword ptr [rax]
- mov edi, ecx
- lea rdi, bword ptr [rax+2*rdi]
- sub edx, ecx
- cmp r14d, edx
+ mov rdx, bword ptr [rdx]
+ mov eax, esi
+ lea rax, bword ptr [rdx+2*rax]
+ sub edi, esi
+ cmp r14d, edi
ja SHORT G_M61046_IG04
mov edx, r14d
add rdx, rdx
lea rsi, bword ptr [r15+0x0C]
+ mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
add dword ptr [rbx+0x10], r14d
- ;; size=78 bbWeight=1 PerfScore 23.00
+ ;; size=81 bbWeight=1 PerfScore 23.25
G_M61046_IG03:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
G_M61046_IG04:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M61046_IG05:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 133, prolog size 12, PerfScore 32.25, instruction count 42, allocated bytes for code 133 (MethodHash=5c741189) for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this (FullOpts)
+; Total bytes of code 136, prolog size 12, PerfScore 32.50, instruction count 43, allocated bytes for code 136 (MethodHash=5c741189) for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):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/c83beaaaa32759e7d73125253807dfc0 |
Top method improvements-13 (-13.68 % of base) - System.Text.Json.JsonCamelCaseNamingPolicy+<>c:b__0_0(System.Span`1[ushort],System.String):this ; Assembly listing for method System.Text.Json.JsonCamelCaseNamingPolicy+<>c:<ConvertName>b__0_0(System.Span`1[ushort],System.String):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; 0 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Text.Json.JsonCamelCaseNamingPolicy+<>c>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.Span`1[ushort]>
; V02 arg2 [V02,T00] ( 4, 4 ) ref -> rcx class-hnd single-def <System.String>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V05 tmp2 [V05 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V06 tmp3 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V08 tmp5 [V08,T01] ( 3, 3 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP
; V09 tmp6 [V09,T02] ( 3, 3 ) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP
;* V10 tmp7 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP
;* V11 tmp8 [V11 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
-; V12 cse0 [V12,T03] ( 3, 3 ) int -> r14 "CSE #01: aggressive"
+; V12 cse0 [V12,T03] ( 3, 3 ) int -> rdx "CSE #01: aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 0
G_M52091_IG01:
push rbp
push r15
- push r14
push rbx
- push rax
- lea rbp, [rsp+0x20]
+ lea rbp, [rsp+0x10]
mov rbx, rsi
mov r15d, edx
- ;; size=18 bbWeight=1 PerfScore 6.00
+ ;; size=15 bbWeight=1 PerfScore 4.00
G_M52091_IG02:
- mov r14d, dword ptr [rcx+0x08]
- cmp r14d, r15d
+ mov edx, dword ptr [rcx+0x08]
+ cmp edx, r15d
jg SHORT G_M52091_IG04
- mov edx, r14d
add rdx, rdx
lea rsi, bword ptr [rcx+0x0C]
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov rdi, rbx
mov esi, r15d
mov rax, 0xD1FFAB1E ; code for System.Text.Json.JsonCamelCaseNamingPolicy:FixCasing(System.Span`1[ushort])
call [rax]System.Text.Json.JsonCamelCaseNamingPolicy:FixCasing(System.Span`1[ushort])
nop
- ;; size=53 bbWeight=1 PerfScore 11.75
+ ;; size=49 bbWeight=1 PerfScore 11.50
G_M52091_IG03:
- add rsp, 8
pop rbx
- pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.25
+ ;; size=5 bbWeight=1 PerfScore 2.50
G_M52091_IG04:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 95, prolog size 12, PerfScore 21.00, instruction count 31, allocated bytes for code 95 (MethodHash=ff1b3484) for method System.Text.Json.JsonCamelCaseNamingPolicy+<>c:<ConvertName>b__0_0(System.Span`1[ushort],System.String):this (FullOpts)
+; Total bytes of code 82, prolog size 9, PerfScore 18.00, instruction count 26, allocated bytes for code 82 (MethodHash=ff1b3484) for method System.Text.Json.JsonCamelCaseNamingPolicy+<>c:<ConvertName>b__0_0(System.Span`1[ushort],System.String):this (FullOpts)
; ============================================================ -9 (-14.29 % of base) - System.String:CopyTo(System.Span`1[ushort]):this ; Assembly listing for method System.String:CopyTo(System.Span`1[ushort]):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; 0 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 4, 4 ) ref -> rdi this class-hnd single-def <System.String>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V03 tmp1 [V03 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V04 tmp2 [V04 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V05 tmp3 [V05 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V06 tmp4 [V06,T01] ( 2, 2 ) byref -> rax single-def "field V01._reference (fldOffset=0x0)" P-INDEP
; V07 tmp5 [V07,T02] ( 2, 2 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP
-; V08 cse0 [V08,T03] ( 3, 3 ) int -> rbx "CSE #01: aggressive"
+; V08 cse0 [V08,T03] ( 3, 3 ) int -> rsi "CSE #01: aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 0
G_M48522_IG01:
push rbp
- push rbx
- push rax
- lea rbp, [rsp+0x10]
+ mov rbp, rsp
mov rax, rsi
- ;; size=11 bbWeight=1 PerfScore 3.75
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M48522_IG02:
- mov ebx, dword ptr [rdi+0x08]
- cmp ebx, edx
+ mov esi, dword ptr [rdi+0x08]
+ cmp esi, edx
jg SHORT G_M48522_IG04
- mov edx, ebx
+ mov edx, esi
add rdx, rdx
lea rsi, bword ptr [rdi+0x0C]
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
nop
;; size=32 bbWeight=1 PerfScore 8.00
G_M48522_IG03:
- add rsp, 8
- pop rbx
pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=2 bbWeight=1 PerfScore 1.50
G_M48522_IG04:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 63, prolog size 8, PerfScore 14.00, instruction count 22, allocated bytes for code 63 (MethodHash=6df64275) for method System.String:CopyTo(System.Span`1[ushort]):this (FullOpts)
+; Total bytes of code 54, prolog size 4, PerfScore 11.00, instruction count 18, allocated bytes for code 54 (MethodHash=6df64275) for method System.String:CopyTo(System.Span`1[ushort]):this (FullOpts)
; ============================================================ -8 (-2.80 % of base) - System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) ; Assembly listing for method System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 2 single block inlinees; 6 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T10] ( 6, 12 ) ref -> r14 class-hnd single-def <System.String[]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[int]>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
; V03 loc0 [V03,T20] ( 2, 2 ) int -> rdx
; V04 loc1 [V04,T11] ( 3, 12 ) ref -> rsi class-hnd exact <System.String>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V06 tmp1 [V06 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ushort]>
;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V08 tmp3 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V09 tmp4 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V10 tmp5 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V11 tmp6 [V11,T01] ( 3, 24 ) int -> rcx "Inlining Arg"
+; V11 tmp6 [V11,T01] ( 3, 24 ) int -> rdx "Inlining Arg"
;* V12 tmp7 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-; V13 tmp8 [V13,T00] ( 4, 32 ) byref -> r8 "Inlining Arg"
+; V13 tmp8 [V13,T00] ( 4, 32 ) byref -> rsi "Inlining Arg"
; V14 tmp9 [V14,T02] ( 3, 24 ) int -> rbx "Inlining Arg"
;* V15 tmp10 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V16 tmp11 [V16,T08] ( 2, 16 ) byref -> r15 "Inlining Arg"
; V17 tmp12 [V17,T09] ( 2, 16 ) int -> rbx "Inlining Arg"
-; V18 tmp13 [V18,T17] ( 3, 6 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.String>
-;* V19 tmp14 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V18 tmp13 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+; V19 tmp14 [V19,T17] ( 3, 6 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.String>
;* V20 tmp15 [V20 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V21 tmp16 [V21 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V22 tmp17 [V22 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V23 tmp18 [V23,T14] ( 3, 6 ) byref -> r12 single-def "field V01._reference (fldOffset=0x0)" P-INDEP
; V24 tmp19 [V24,T13] ( 4, 7 ) int -> r13 single-def "field V01._length (fldOffset=0x8)" P-INDEP
; V25 tmp20 [V25,T06] ( 5, 14 ) byref -> r15 "field V02._reference (fldOffset=0x0)" P-INDEP
; V26 tmp21 [V26,T05] ( 6, 18 ) int -> rbx "field V02._length (fldOffset=0x8)" P-INDEP
;* V27 tmp22 [V27 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp23 [V28 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
;* V29 tmp24 [V29 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP
;* V30 tmp25 [V30 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
;* V31 tmp26 [V31 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
;* V32 tmp27 [V32 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
; V33 tmp28 [V33,T15] ( 2, 8 ) byref -> r15 "field V15._reference (fldOffset=0x0)" P-INDEP
; V34 tmp29 [V34,T16] ( 2, 8 ) int -> rbx "field V15._length (fldOffset=0x8)" P-INDEP
-;* V35 tmp30 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V19._reference (fldOffset=0x0)" P-INDEP
-;* V36 tmp31 [V36 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP
+;* V35 tmp30 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V36 tmp31 [V36 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
; V37 tmp32 [V37,T03] ( 3, 24 ) int -> rdx "index expr"
-; V38 tmp33 [V38,T18] ( 3, 6 ) int -> rax "index expr"
+; V38 tmp33 [V38,T18] ( 3, 6 ) int -> rdx "index expr"
; V39 cse0 [V39,T12] ( 3, 12 ) long -> [rbp-0x30] spill-single-def "CSE #03: moderate"
; V40 cse1 [V40,T07] ( 4, 16 ) int -> [rbp-0x34] spill-single-def "CSE #01: moderate"
-; V41 cse2 [V41,T19] ( 3, 3 ) int -> r14 "CSE #05: moderate"
+; V41 cse2 [V41,T19] ( 3, 3 ) int -> rdx "CSE #05: moderate"
; V42 rat0 [V42,T04] ( 7, 22 ) long -> [rbp-0x40] "Widened IV V03"
;
; Lcl frame size = 24
G_M57347_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 24
lea rbp, [rsp+0x40]
mov r14, rdi
mov r12, rsi
mov r13d, edx
mov r15, rcx
mov ebx, r8d
;; size=34 bbWeight=1 PerfScore 8.00
G_M57347_IG02:
lea edx, [r13-0x01]
mov eax, edx
test eax, eax
je G_M57347_IG04
;; size=14 bbWeight=1 PerfScore 2.00
G_M57347_IG03:
cmp eax, r13d
jae G_M57347_IG08
mov qword ptr [rbp-0x40], rax
mov edx, dword ptr [r12+4*rax]
cmp edx, dword ptr [r14+0x08]
jae G_M57347_IG08
mov rsi, gword ptr [r14+8*rdx+0x10]
mov ecx, dword ptr [rsi+0x08]
mov dword ptr [rbp-0x34], ecx
cmp ecx, ebx
- jg G_M57347_IG06
+ jg G_M57347_IG07
mov r8d, ecx
add r8, r8
mov qword ptr [rbp-0x30], r8
mov rdx, r8
add rsi, 12
mov rdi, r15
mov r9, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [r9]System.SpanHelpers:Memmove(byref,byref,ulong)
- mov ecx, dword ptr [rbp-0x34]
- cmp ecx, ebx
- ja G_M57347_IG07
- mov r8, qword ptr [rbp-0x30]
- add r8, r15
- sub ebx, ecx
+ mov edx, dword ptr [rbp-0x34]
+ cmp edx, ebx
+ ja SHORT G_M57347_IG06
+ mov rsi, qword ptr [rbp-0x30]
+ add rsi, r15
+ sub ebx, edx
cmp ebx, 2
- jb SHORT G_M57347_IG07
- lea r15, bword ptr [r8+0x04]
+ jb SHORT G_M57347_IG06
+ lea r15, bword ptr [rsi+0x04]
add ebx, -2
- mov word ptr [r8], 44
- mov word ptr [r8+0x02], 32
- mov rax, qword ptr [rbp-0x40]
- dec eax
+ mov word ptr [rsi], 44
+ mov word ptr [rsi+0x02], 32
+ mov rdx, qword ptr [rbp-0x40]
+ dec edx
+ mov rax, rdx
jne G_M57347_IG03
- ;; size=136 bbWeight=4 PerfScore 120.00
+ ;; size=133 bbWeight=4 PerfScore 121.00
G_M57347_IG04:
test r13d, r13d
je SHORT G_M57347_IG08
- mov eax, dword ptr [r12]
- cmp eax, dword ptr [r14+0x08]
+ mov edx, dword ptr [r12]
+ cmp edx, dword ptr [r14+0x08]
jae SHORT G_M57347_IG08
- mov rsi, gword ptr [r14+8*rax+0x10]
- mov r14d, dword ptr [rsi+0x08]
- cmp r14d, ebx
- jg SHORT G_M57347_IG06
- mov edx, r14d
+ mov rsi, gword ptr [r14+8*rdx+0x10]
+ mov edx, dword ptr [rsi+0x08]
+ cmp edx, ebx
+ jg SHORT G_M57347_IG07
add rdx, rdx
add rsi, 12
mov rdi, r15
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
nop
- ;; size=55 bbWeight=1 PerfScore 17.00
+ ;; size=50 bbWeight=1 PerfScore 16.75
G_M57347_IG05:
add rsp, 24
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
G_M57347_IG06:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
- call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M57347_IG07:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
- call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+ call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M57347_IG08:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 286, prolog size 19, PerfScore 151.25, instruction count 83, allocated bytes for code 286 (MethodHash=81621ffc) for method System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) (FullOpts)
+; Total bytes of code 278, prolog size 19, PerfScore 152.00, instruction count 83, allocated bytes for code 278 (MethodHash=81621ffc) for method System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) (FullOpts)
; ============================================================ -8 (-4.21 % of base) - System.Xml.Serialization.CodeIdentifier+<>c:b__3_0(System.Span`1[ushort],System.String):this ; Assembly listing for method System.Xml.Serialization.CodeIdentifier+<>c:<MakeCamel>b__3_0(System.Span`1[ushort],System.String):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; 10 single block inlinees; 7 inlinees without PGO data
; Final local variable assignments
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Xml.Serialization.CodeIdentifier+<>c>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
; V02 arg2 [V02,T01] ( 4, 4 ) ref -> rcx class-hnd single-def <System.String>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V06 tmp3 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V07 tmp4 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V08 tmp5 [V08 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V09 tmp6 [V09,T00] ( 5, 7 ) ushort -> r15 "Inlining Arg"
; V10 tmp7 [V10,T06] ( 3, 2 ) ushort -> rax "Inline return value spill temp"
; V11 tmp8 [V11,T03] ( 5, 5 ) ushort -> rax "Inlining Arg"
;* V12 tmp9 [V12 ] ( 0, 0 ) ushort -> zero-ref "Inline return value spill temp"
;* V13 tmp10 [V13 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
;* V15 tmp12 [V15 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V17 tmp14 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-; V18 tmp15 [V18 ] ( 3, 1.50) ushort -> [rbp-0x20] do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
+; V18 tmp15 [V18 ] ( 3, 1.50) ushort -> [rbp-0x18] do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
; V19 tmp16 [V19,T07] ( 2, 2 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Globalization.TextInfo>
-; V20 tmp17 [V20 ] ( 2, 2 ) ushort -> [rbp-0x28] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
+; V20 tmp17 [V20 ] ( 2, 2 ) ushort -> [rbp-0x20] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
; V21 tmp18 [V21,T02] ( 4, 4 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP
; V22 tmp19 [V22,T04] ( 3, 3 ) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP
;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V25 tmp22 [V25 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP
;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
;* V27 tmp24 [V27 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
;* V29 tmp26 [V29 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP
;* V30 tmp27 [V30 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
-; V31 cse0 [V31,T05] ( 3, 3 ) int -> r14 "CSE #01: aggressive"
+; V31 cse0 [V31,T05] ( 3, 3 ) int -> rdx "CSE #01: aggressive"
;
-; Lcl frame size = 24
+; Lcl frame size = 16
G_M44984_IG01:
push rbp
push r15
- push r14
push rbx
- sub rsp, 24
- lea rbp, [rsp+0x30]
+ sub rsp, 16
+ lea rbp, [rsp+0x20]
mov rbx, rsi
mov r15d, edx
- ;; size=21 bbWeight=1 PerfScore 5.25
+ ;; size=19 bbWeight=1 PerfScore 4.25
G_M44984_IG02:
- mov r14d, dword ptr [rcx+0x08]
- cmp r14d, r15d
+ mov edx, dword ptr [rcx+0x08]
+ cmp edx, r15d
jg G_M44984_IG07
- mov edx, r14d
add rdx, rdx
lea rsi, bword ptr [rcx+0x0C]
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
test r15d, r15d
je SHORT G_M44984_IG08
movzx r15, word ptr [rbx]
cmp r15d, 127
jle SHORT G_M44984_IG04
- ;; size=53 bbWeight=1 PerfScore 12.25
+ ;; size=49 bbWeight=1 PerfScore 12.00
G_M44984_IG03:
mov rcx, 0xD1FFAB1E ; const ptr
mov rdi, gword ptr [rcx]
- mov word ptr [rbp-0x28], r15w
+ mov word ptr [rbp-0x20], r15w
xor ecx, ecx
- mov dword ptr [rbp-0x20], ecx
- lea rcx, [rbp-0x20]
- lea rsi, [rbp-0x28]
+ mov dword ptr [rbp-0x18], ecx
+ lea rcx, [rbp-0x18]
+ lea rsi, [rbp-0x20]
mov edx, 1
mov r8d, 1
xor r9d, r9d
mov rax, 0xD1FFAB1E ; code for System.Globalization.TextInfo:IcuChangeCase(ulong,int,ulong,int,ubyte):this
call [rax]System.Globalization.TextInfo:IcuChangeCase(ulong,int,ulong,int,ubyte):this
- movzx rax, word ptr [rbp-0x20]
+ movzx rax, word ptr [rbp-0x18]
jmp SHORT G_M44984_IG05
;; size=63 bbWeight=0.50 PerfScore 6.25
G_M44984_IG04:
mov eax, r15d
lea ecx, [rax-0x41]
or r15d, 32
movzx rdx, r15b
cmp ecx, 25
cmovbe eax, edx
;; size=20 bbWeight=0.50 PerfScore 0.88
G_M44984_IG05:
mov word ptr [rbx], ax
;; size=3 bbWeight=1 PerfScore 1.00
G_M44984_IG06:
- add rsp, 24
+ add rsp, 16
pop rbx
- pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.25
+ ;; size=9 bbWeight=1 PerfScore 2.75
G_M44984_IG07:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M44984_IG08:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 190, prolog size 15, PerfScore 28.88, instruction count 54, allocated bytes for code 190 (MethodHash=f2a85047) for method System.Xml.Serialization.CodeIdentifier+<>c:<MakeCamel>b__3_0(System.Span`1[ushort],System.String):this (FullOpts)
+; Total bytes of code 182, prolog size 13, PerfScore 27.12, instruction count 51, allocated bytes for code 182 (MethodHash=f2a85047) for method System.Xml.Serialization.CodeIdentifier+<>c:<MakeCamel>b__3_0(System.Span`1[ushort],System.String):this (FullOpts)
; ============================================================ -8 (-4.21 % of base) - System.Xml.Serialization.CodeIdentifier+<>c:b__2_0(System.Span`1[ushort],System.String):this ; Assembly listing for method System.Xml.Serialization.CodeIdentifier+<>c:<MakePascal>b__2_0(System.Span`1[ushort],System.String):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; 10 single block inlinees; 7 inlinees without PGO data
; Final local variable assignments
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Xml.Serialization.CodeIdentifier+<>c>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
; V02 arg2 [V02,T01] ( 4, 4 ) ref -> rcx class-hnd single-def <System.String>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V06 tmp3 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V07 tmp4 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V08 tmp5 [V08 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V09 tmp6 [V09,T00] ( 5, 7 ) ushort -> r15 "Inlining Arg"
; V10 tmp7 [V10,T06] ( 3, 2 ) ushort -> rax "Inline return value spill temp"
; V11 tmp8 [V11,T03] ( 5, 5 ) ushort -> rax "Inlining Arg"
;* V12 tmp9 [V12 ] ( 0, 0 ) ushort -> zero-ref "Inline return value spill temp"
;* V13 tmp10 [V13 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
;* V15 tmp12 [V15 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V17 tmp14 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-; V18 tmp15 [V18 ] ( 3, 1.50) ushort -> [rbp-0x20] do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
+; V18 tmp15 [V18 ] ( 3, 1.50) ushort -> [rbp-0x18] do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
; V19 tmp16 [V19,T07] ( 2, 2 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Globalization.TextInfo>
-; V20 tmp17 [V20 ] ( 2, 2 ) ushort -> [rbp-0x28] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
+; V20 tmp17 [V20 ] ( 2, 2 ) ushort -> [rbp-0x20] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
; V21 tmp18 [V21,T02] ( 4, 4 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP
; V22 tmp19 [V22,T04] ( 3, 3 ) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP
;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V25 tmp22 [V25 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP
;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
;* V27 tmp24 [V27 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
;* V29 tmp26 [V29 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP
;* V30 tmp27 [V30 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
-; V31 cse0 [V31,T05] ( 3, 3 ) int -> r14 "CSE #01: aggressive"
+; V31 cse0 [V31,T05] ( 3, 3 ) int -> rdx "CSE #01: aggressive"
;
-; Lcl frame size = 24
+; Lcl frame size = 16
G_M7923_IG01:
push rbp
push r15
- push r14
push rbx
- sub rsp, 24
- lea rbp, [rsp+0x30]
+ sub rsp, 16
+ lea rbp, [rsp+0x20]
mov rbx, rsi
mov r15d, edx
- ;; size=21 bbWeight=1 PerfScore 5.25
+ ;; size=19 bbWeight=1 PerfScore 4.25
G_M7923_IG02:
- mov r14d, dword ptr [rcx+0x08]
- cmp r14d, r15d
+ mov edx, dword ptr [rcx+0x08]
+ cmp edx, r15d
jg G_M7923_IG07
- mov edx, r14d
add rdx, rdx
lea rsi, bword ptr [rcx+0x0C]
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
test r15d, r15d
je SHORT G_M7923_IG08
movzx r15, word ptr [rbx]
cmp r15d, 127
jle SHORT G_M7923_IG04
- ;; size=53 bbWeight=1 PerfScore 12.25
+ ;; size=49 bbWeight=1 PerfScore 12.00
G_M7923_IG03:
mov rcx, 0xD1FFAB1E ; const ptr
mov rdi, gword ptr [rcx]
- mov word ptr [rbp-0x28], r15w
+ mov word ptr [rbp-0x20], r15w
xor ecx, ecx
- mov dword ptr [rbp-0x20], ecx
- lea rcx, [rbp-0x20]
- lea rsi, [rbp-0x28]
+ mov dword ptr [rbp-0x18], ecx
+ lea rcx, [rbp-0x18]
+ lea rsi, [rbp-0x20]
mov edx, 1
mov r8d, 1
mov r9d, 1
mov rax, 0xD1FFAB1E ; code for System.Globalization.TextInfo:IcuChangeCase(ulong,int,ulong,int,ubyte):this
call [rax]System.Globalization.TextInfo:IcuChangeCase(ulong,int,ulong,int,ubyte):this
- movzx rax, word ptr [rbp-0x20]
+ movzx rax, word ptr [rbp-0x18]
jmp SHORT G_M7923_IG05
;; size=66 bbWeight=0.50 PerfScore 6.25
G_M7923_IG04:
mov eax, r15d
lea ecx, [rax-0x61]
and r15d, 95
cmp ecx, 25
cmovbe eax, r15d
;; size=17 bbWeight=0.50 PerfScore 0.75
G_M7923_IG05:
mov word ptr [rbx], ax
;; size=3 bbWeight=1 PerfScore 1.00
G_M7923_IG06:
- add rsp, 24
+ add rsp, 16
pop rbx
- pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.25
+ ;; size=9 bbWeight=1 PerfScore 2.75
G_M7923_IG07:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M7923_IG08:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 190, prolog size 15, PerfScore 28.75, instruction count 53, allocated bytes for code 190 (MethodHash=1ba3e10c) for method System.Xml.Serialization.CodeIdentifier+<>c:<MakePascal>b__2_0(System.Span`1[ushort],System.String):this (FullOpts)
+; Total bytes of code 182, prolog size 13, PerfScore 27.00, instruction count 50, allocated bytes for code 182 (MethodHash=1ba3e10c) for method System.Xml.Serialization.CodeIdentifier+<>c:<MakePascal>b__2_0(System.Span`1[ushort],System.String):this (FullOpts)
; ============================================================ -4 (-1.73 % of base) - System.Xml.XmlEntityReference+<>c:b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):this ; Assembly listing for method System.Xml.XmlEntityReference+<>c:<ConstructBaseURI>b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):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; 6 single block inlinees; 5 inlinees without PGO data
; Final local variable assignments
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Xml.XmlEntityReference+<>c>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.ValueTuple`2[System.String,System.String]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
-;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.__Canon>
-;* V07 tmp4 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V06 tmp3 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.__Canon>
;* V08 tmp5 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V10 tmp7 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.__Canon>
;* V12 tmp9 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
;* V13 tmp10 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
; V14 tmp11 [V14,T13] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
; V15 tmp12 [V15,T14] ( 2, 2 ) int -> rsi "Inlining Arg"
; V16 tmp13 [V16,T01] ( 3, 6 ) int -> r13 "Inlining Arg"
;* V17 tmp14 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V18 tmp15 [V18,T06] ( 3, 4 ) byref -> r12 single-def "Inlining Arg"
; V19 tmp16 [V19,T07] ( 3, 4 ) int -> rbx "Inlining Arg"
;* V20 tmp17 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
; V21 tmp18 [V21,T08] ( 4, 3 ) long -> r8 "Inline stloc first use temp"
;* V22 tmp19 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "Inline stloc first use temp"
;* V24 tmp21 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "Inline stloc first use temp"
; V25 tmp22 [V25,T12] ( 4, 2 ) long -> rdx "Inline stloc first use temp"
;* V26 tmp23 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
;* V27 tmp24 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
; V28 tmp25 [V28,T03] ( 3, 3 ) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP
; V29 tmp26 [V29,T00] ( 4, 4 ) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP
; V30 tmp27 [V30,T04] ( 3, 3 ) ref -> rcx single-def "field V02.Item1 (fldOffset=0x0)" P-INDEP
; V31 tmp28 [V31,T02] ( 4, 3 ) ref -> r15 single-def "field V02.Item2 (fldOffset=0x8)" P-INDEP
; V32 tmp29 [V32,T11] ( 4, 2 ) byref -> rdi "field V04._reference (fldOffset=0x0)" P-INDEP
; V33 tmp30 [V33,T10] ( 4, 2.50) int -> rsi "field V04._length (fldOffset=0x8)" P-INDEP
;* V34 tmp31 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V35 tmp32 [V35 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
-;* V36 tmp33 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V37 tmp34 [V37 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+;* V36 tmp33 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V37 tmp34 [V37 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
; V38 tmp35 [V38,T15] ( 2, 1 ) byref -> rdi single-def "field V12._reference (fldOffset=0x0)" P-INDEP
; V39 tmp36 [V39,T16] ( 2, 1 ) int -> rsi "field V12._length (fldOffset=0x8)" P-INDEP
;* V40 tmp37 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V41 tmp38 [V41 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
;* V42 tmp39 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp40 [V43 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
;* V44 tmp41 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V45 tmp42 [V45 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
;* V46 tmp43 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP
;* V47 tmp44 [V47 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP
;* V48 tmp45 [V48 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP
;* V49 tmp46 [V49 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
;* V50 tmp47 [V50 ] ( 0, 0 ) byref -> zero-ref single-def "field V27._reference (fldOffset=0x0)" P-INDEP
;* V51 tmp48 [V51 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP
; V52 cse0 [V52,T09] ( 3, 3 ) long -> r12 "CSE #03: moderate"
; V53 cse1 [V53,T05] ( 4, 4 ) int -> r13 "CSE #01: moderate"
;
; Lcl frame size = 8
G_M30333_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
lea rbp, [rsp+0x30]
mov r14, rsi
mov ebx, edx
mov r15, r8
;; size=24 bbWeight=1 PerfScore 8.25
G_M30333_IG02:
mov r13d, dword ptr [rcx+0x08]
cmp r13d, ebx
- jg G_M30333_IG11
+ jg G_M30333_IG12
lea rsi, bword ptr [rcx+0x0C]
mov r12d, r13d
add r12, r12
mov rdx, r12
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
test r15, r15
je SHORT G_M30333_IG04
;; size=46 bbWeight=1 PerfScore 9.25
G_M30333_IG03:
lea rdi, bword ptr [r15+0x0C]
mov esi, dword ptr [r15+0x08]
jmp SHORT G_M30333_IG05
;; size=10 bbWeight=0.50 PerfScore 2.25
G_M30333_IG04:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M30333_IG05:
cmp r13d, ebx
- ja G_M30333_IG12
+ ja SHORT G_M30333_IG11
add r12, r14
sub ebx, r13d
mov r8d, esi
test r8, r8
je SHORT G_M30333_IG08
- ;; size=23 bbWeight=1 PerfScore 3.25
+ ;; size=19 bbWeight=1 PerfScore 3.25
G_M30333_IG06:
mov edx, ebx
cmp r8, rdx
- ja SHORT G_M30333_IG11
+ ja SHORT G_M30333_IG12
mov rdx, r12
sub rdx, rdi
je SHORT G_M30333_IG07
mov esi, esi
add rsi, rsi
cmp rdx, rsi
jb SHORT G_M30333_IG10
movsxd rsi, ebx
add rsi, rsi
neg rsi
cmp rsi, rdx
jb SHORT G_M30333_IG10
;; size=39 bbWeight=0.50 PerfScore 3.38
G_M30333_IG07:
mov rsi, r12
mov edx, 92
mov ecx, 47
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:ReplaceValueType[ushort](byref,byref,ushort,ushort,ulong)
call [rax]System.SpanHelpers:ReplaceValueType[ushort](byref,byref,ushort,ushort,ulong)
;; size=25 bbWeight=0.50 PerfScore 2.00
G_M30333_IG08:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M30333_IG09:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
G_M30333_IG10:
mov edi, 72
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException(int)
call [rax]System.ThrowHelper:ThrowArgumentException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
G_M30333_IG11:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
- call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
- int3
- ;; size=13 bbWeight=0 PerfScore 0.00
-G_M30333_IG12:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
+G_M30333_IG12:
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+ call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+ int3
+ ;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 231, prolog size 16, PerfScore 33.12, instruction count 74, allocated bytes for code 231 (MethodHash=8f5d8982) for method System.Xml.XmlEntityReference+<>c:<ConstructBaseURI>b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):this (FullOpts)
+; Total bytes of code 227, prolog size 16, PerfScore 33.12, instruction count 74, allocated bytes for code 227 (MethodHash=8f5d8982) for method System.Xml.XmlEntityReference+<>c:<ConstructBaseURI>b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):this (FullOpts)
; ============================================================ -2 (-0.63 % of base) - System.Number+<>c:b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):this ; Assembly listing for method System.Number+<>c:<FormatBigInteger>b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):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; 9 single block inlinees; 6 inlinees without PGO data
; Final local variable assignments
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Number+<>c>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
; V02 arg2 [V02,T24] ( 4, 4 ) struct (24) [rbp+0x10] do-not-enreg[SF] single-def <System.ValueTuple`4[int,long,int,System.String]>
-; V03 loc0 [V03 ] ( 2, 2 ) byref -> [rbp-0x20] must-init pinned
+; V03 loc0 [V03 ] ( 2, 2 ) byref -> [rbp-0x18] must-init pinned
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T17] ( 5, 7 ) ref -> r14 class-hnd single-def "dup spill" <System.__Canon>
+; V05 tmp1 [V05,T17] ( 5, 7 ) ref -> rdx class-hnd single-def "dup spill" <System.__Canon>
;* V06 tmp2 [V06 ] ( 0, 0 ) ref -> zero-ref single-def
;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[uint]>
; V08 tmp4 [V08,T25] ( 2, 4 ) long -> rax "impAppendStmt"
;* V09 tmp5 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V10 tmp6 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V11 tmp7 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V12 tmp8 [V12 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V13 tmp9 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
; V14 tmp10 [V14,T20] ( 3, 6 ) int -> rcx "Inlining Arg"
;* V15 tmp11 [V15 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V16 tmp12 [V16,T30] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V17 tmp13 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[uint]>
; V18 tmp14 [V18,T10] ( 4, 20 ) long -> rax "Inlining Arg"
; V19 tmp15 [V19,T11] ( 4, 20 ) int -> rdi "Inlining Arg"
; V20 tmp16 [V20,T21] ( 3, 6 ) int -> r8 "Span.get_Item index"
; V21 tmp17 [V21,T00] ( 6,144 ) int -> registers "Inlining Arg"
; V22 tmp18 [V22,T01] ( 4,136 ) int -> r10 "Inlining Arg"
;* V23 tmp19 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "dup spill" <System.ValueTuple`2[uint,uint]>
;* V24 tmp20 [V24 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V25 tmp21 [V25,T02] ( 5,112 ) long -> rax "Inlining Arg"
; V26 tmp22 [V26,T03] ( 2, 64 ) long -> rax "dup spill"
; V27 tmp23 [V27,T04] ( 3, 48 ) int -> r11 "Inline stloc first use temp"
;* V28 tmp24 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[uint,uint]>
;* V29 tmp25 [V29 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V30 tmp26 [V30 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V31 tmp27 [V31 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Utf16Char>
;* V32 tmp28 [V32 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
; V33 tmp29 [V33,T05] ( 6, 36 ) int -> registers "Inlining Arg"
; V34 tmp30 [V34,T06] ( 4, 34 ) int -> rdx "Inlining Arg"
;* V35 tmp31 [V35 ] ( 0, 0 ) struct ( 8) zero-ref "dup spill" <System.ValueTuple`2[uint,uint]>
;* V36 tmp32 [V36 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V37 tmp33 [V37,T09] ( 4, 26 ) long -> rax "Inlining Arg"
; V38 tmp34 [V38,T13] ( 2, 16 ) long -> rax "dup spill"
; V39 tmp35 [V39,T14] ( 3, 12 ) int -> rdi "Inline stloc first use temp"
;* V40 tmp36 [V40 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[uint,uint]>
;* V41 tmp37 [V41 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V42 tmp38 [V42 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V43 tmp39 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Utf16Char>
;* V44 tmp40 [V44 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
; V45 tmp41 [V45,T22] ( 4, 3.50) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP
; V46 tmp42 [V46,T23] ( 3, 2.50) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP
; V47 tmp43 [V47,T28] ( 2, 2 ) byref -> rdx single-def "field V07._reference (fldOffset=0x0)" P-INDEP
; V48 tmp44 [V48,T29] ( 2, 2 ) int -> rcx "field V07._length (fldOffset=0x8)" P-INDEP
;* V49 tmp45 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP
;* V50 tmp46 [V50 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
;* V51 tmp47 [V51 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V52 tmp48 [V52 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
; V53 tmp49 [V53,T19] ( 3, 6 ) byref -> rdx single-def "field V17._reference (fldOffset=0x0)" P-INDEP
; V54 tmp50 [V54,T27] ( 3, 3 ) int -> rcx "field V17._length (fldOffset=0x8)" P-INDEP
;* V55 tmp51 [V55 ] ( 0, 0 ) int -> zero-ref "field V23.Item1 (fldOffset=0x0)" P-INDEP
;* V56 tmp52 [V56 ] ( 0, 0 ) int -> zero-ref "field V23.Item2 (fldOffset=0x4)" P-INDEP
;* V57 tmp53 [V57 ] ( 0, 0 ) int -> zero-ref "field V28.Item1 (fldOffset=0x0)" P-INDEP
; V58 tmp54 [V58,T07] ( 2, 32 ) int -> r9 "field V28.Item2 (fldOffset=0x4)" P-INDEP
; V59 tmp55 [V59,T08] ( 2, 32 ) ushort -> r9 "field V31.value (fldOffset=0x0)" P-INDEP
;* V60 tmp56 [V60 ] ( 0, 0 ) int -> zero-ref "field V35.Item1 (fldOffset=0x0)" P-INDEP
;* V61 tmp57 [V61 ] ( 0, 0 ) int -> zero-ref "field V35.Item2 (fldOffset=0x4)" P-INDEP
;* V62 tmp58 [V62 ] ( 0, 0 ) int -> zero-ref "field V40.Item1 (fldOffset=0x0)" P-INDEP
; V63 tmp59 [V63,T15] ( 2, 8 ) int -> rcx "field V40.Item2 (fldOffset=0x4)" P-INDEP
; V64 tmp60 [V64,T16] ( 2, 8 ) ushort -> rcx "field V43.value (fldOffset=0x0)" P-INDEP
; V65 tmp61 [V65,T26] ( 2, 4 ) long -> rbx "Cast away GC"
; V66 cse0 [V66,T18] ( 4, 7 ) int -> r8 "CSE #02: moderate"
; V67 rat0 [V67,T12] ( 5, 17 ) long -> rsi "Widened IV V16"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M39766_IG01:
push rbp
push r15
- push r14
push rbx
- push rax
+ sub rsp, 16
lea rbp, [rsp+0x20]
xor eax, eax
- mov qword ptr [rbp-0x20], rax
+ mov qword ptr [rbp-0x18], rax
mov rbx, rsi
mov r15d, edx
- ;; size=24 bbWeight=1 PerfScore 7.25
+ ;; size=25 bbWeight=1 PerfScore 5.50
G_M39766_IG02:
- mov r14, gword ptr [rbp+0x10]
- test r14, r14
+ mov rdx, gword ptr [rbp+0x10]
+ test rdx, rdx
je SHORT G_M39766_IG04
;; size=9 bbWeight=1 PerfScore 2.25
G_M39766_IG03:
- cmp dword ptr [r14+0x08], r15d
- jg G_M39766_IG18
- lea rsi, bword ptr [r14+0x0C]
- mov edx, dword ptr [r14+0x08]
+ cmp dword ptr [rdx+0x08], r15d
+ jg G_M39766_IG19
+ lea rsi, bword ptr [rdx+0x0C]
+ mov edx, dword ptr [rdx+0x08]
add rdx, rdx
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
- ;; size=36 bbWeight=0.50 PerfScore 5.12
+ ;; size=35 bbWeight=0.50 PerfScore 5.12
G_M39766_IG04:
- mov bword ptr [rbp-0x20], rbx
+ mov bword ptr [rbp-0x18], rbx
mov eax, r15d
lea rax, [rbx+2*rax]
mov ecx, dword ptr [rbp+0x24]
test ecx, ecx
- jl G_M39766_IG19
+ jl G_M39766_IG18
mov rdx, qword ptr [rbp+0x18]
mov edi, dword ptr [rbp+0x20]
xor esi, esi
lea r8d, [rcx-0x01]
test r8d, r8d
jle SHORT G_M39766_IG11
;; size=40 bbWeight=1 PerfScore 8.00
G_M39766_IG05:
mov r9d, dword ptr [rdx+4*rsi]
mov r10d, 9
test r9d, r9d
jne SHORT G_M39766_IG08
;; size=15 bbWeight=4 PerfScore 14.00
G_M39766_IG06:
mov r11d, r9d
;; size=3 bbWeight=2 PerfScore 0.50
G_M39766_IG07:
test r10d, r10d
mov r9d, r11d
jle SHORT G_M39766_IG10
align [0 bytes for IG08]
;; size=8 bbWeight=32 PerfScore 48.00
G_M39766_IG08:
dec r10d
mov r11d, 0xD1FFAB1E
mov ebx, r9d
imul r11, rbx
shr r11, 35
lea ebx, [r11+4*r11]
add ebx, ebx
sub r9d, ebx
add rax, -2
add r9d, 48
movzx r9, r9w
mov word ptr [rax], r9w
test r11d, r11d
je SHORT G_M39766_IG07
;; size=50 bbWeight=16 PerfScore 116.00
G_M39766_IG09:
mov r9d, r11d
jmp SHORT G_M39766_IG08
;; size=5 bbWeight=8 PerfScore 18.00
G_M39766_IG10:
add edi, -9
inc esi
cmp esi, r8d
jl SHORT G_M39766_IG05
;; size=10 bbWeight=4 PerfScore 7.00
G_M39766_IG11:
cmp r8d, ecx
jae SHORT G_M39766_IG20
mov ecx, r8d
mov ecx, dword ptr [rdx+4*rcx]
mov edx, edi
test ecx, ecx
jne SHORT G_M39766_IG14
;; size=17 bbWeight=1 PerfScore 5.00
G_M39766_IG12:
mov edi, ecx
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M39766_IG13:
test edx, edx
mov ecx, edi
jle SHORT G_M39766_IG16
align [0 bytes for IG14]
;; size=6 bbWeight=8 PerfScore 12.00
G_M39766_IG14:
dec edx
mov edi, 0xD1FFAB1E
mov esi, ecx
imul rdi, rsi
shr rdi, 35
lea esi, [rdi+4*rdi]
add esi, esi
sub ecx, esi
add rax, -2
add ecx, 48
movzx rcx, cx
mov word ptr [rax], cx
test edi, edi
je SHORT G_M39766_IG13
;; size=41 bbWeight=4 PerfScore 29.00
G_M39766_IG15:
mov ecx, edi
jmp SHORT G_M39766_IG14
;; size=4 bbWeight=2 PerfScore 4.50
G_M39766_IG16:
xor eax, eax
- mov bword ptr [rbp-0x20], rax
+ mov bword ptr [rbp-0x18], rax
;; size=6 bbWeight=1 PerfScore 1.25
G_M39766_IG17:
- add rsp, 8
+ add rsp, 16
pop rbx
- pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.25
+ ;; size=9 bbWeight=1 PerfScore 2.75
G_M39766_IG18:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
- call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M39766_IG19:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
- call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+ call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M39766_IG20:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 319, prolog size 24, PerfScore 281.25, instruction count 106, allocated bytes for code 319 (MethodHash=7fe064a9) for method System.Number+<>c:<FormatBigInteger>b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):this (FullOpts)
+; Total bytes of code 317, prolog size 25, PerfScore 279.00, instruction count 104, allocated bytes for code 317 (MethodHash=7fe064a9) for method System.Number+<>c:<FormatBigInteger>b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):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/37f13b5ce09304832e7de00c80aa3e19 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 14 minutes 52 seconds.
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: