forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[X64] [EgorBo] Expand String.EndsWith/MemoryExtensions.EndsWith in JIT #255
Comments
Top method regressions70 (23.18 % of base) - System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte ; Assembly listing for method System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 8, 5.50) ref -> rbx class-hnd single-def <System.Type>
; V01 arg1 [V01,T01] ( 8, 5.50) ref -> r15 class-hnd single-def <System.Type>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "non-inline candidate call" <System.String>
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "non-inline candidate call" <System.String>
-; V05 tmp3 [V05,T02] ( 2, 2 ) ref -> r13 single-def "argument with side effect"
-; V06 tmp4 [V06,T03] ( 2, 2 ) ref -> rsi single-def "argument with side effect"
-; V07 tmp5 [V07,T04] ( 2, 2 ) ref -> r13 single-def "argument with side effect"
-; V08 tmp6 [V08,T05] ( 2, 2 ) ref -> rsi single-def "argument with side effect"
-; V09 tmp7 [V09,T06] ( 2, 2 ) ref -> rdi single-def "argument with side effect"
-; V10 tmp8 [V10,T07] ( 2, 2 ) ref -> rdi single-def "argument with side effect"
-; V11 cse0 [V11,T08] ( 3, 1.50) long -> r14 "CSE - moderate"
-; V12 cse1 [V12,T09] ( 3, 1.50) long -> r12 "CSE - moderate"
+; V05 tmp3 [V05,T02] ( 4, 4 ) ref -> rax single-def "spilling varStr"
+; V06 tmp4 [V06,T10] ( 3, 3 ) byref -> rdi single-def "clonning data ptr"
+; V07 tmp5 [V07,T04] ( 2, 2 ) int -> rdi "spilling unroll qmark"
+; V08 tmp6 [V08,T03] ( 4, 3 ) ref -> rax single-def "spilling varStr"
+; V09 tmp7 [V09,T11] ( 3, 1.50) byref -> rax single-def "clonning data ptr"
+; V10 tmp8 [V10,T05] ( 3, 2 ) int -> rax "spilling unroll qmark"
+; V11 tmp9 [V11,T06] ( 2, 2 ) ref -> r13 single-def "argument with side effect"
+; V12 tmp10 [V12,T07] ( 2, 2 ) ref -> rsi single-def "argument with side effect"
+; V13 tmp11 [V13,T08] ( 2, 2 ) ref -> r13 single-def "argument with side effect"
+; V14 tmp12 [V14,T09] ( 2, 2 ) ref -> rsi single-def "argument with side effect"
+; V15 cse0 [V15,T12] ( 3, 1.50) long -> r14 "CSE - moderate"
+; V16 cse1 [V16,T13] ( 3, 1.50) long -> r12 "CSE - moderate"
+; V17 rat0 [V17,T14] ( 3, 3 ) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V18 rat1 [V18,T15] ( 3, 1.50) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 8
G_M54593_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
lea rbp, [rsp+0x30]
mov rbx, rdi
mov r15, rsi
;; size=22 bbWeight=1 PerfScore 8.00
G_M54593_IG02:
mov rdi, rbx
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for System.Type:op_Equality(System.Type,System.Type):ubyte
call [rax]System.Type:op_Equality(System.Type,System.Type):ubyte
test eax, eax
- jne G_M54593_IG07
+ jne G_M54593_IG10
;; size=26 bbWeight=1 PerfScore 5.00
G_M54593_IG03:
mov rdi, rbx
mov rax, qword ptr [rbx]
mov r14, qword ptr [rax+0x50]
call [r14+0x20]System.Type:get_FullName():System.String:this
mov r13, rax
mov rdi, r15
mov rax, qword ptr [r15]
mov r12, qword ptr [rax+0x50]
call [r12+0x20]System.Type:get_FullName():System.String:this
mov rsi, rax
mov rdi, r13
mov edx, 4
mov rax, 0xD1FFAB1E ; code for System.String:Equals(System.String,System.String,int):ubyte
call [rax]System.String:Equals(System.String,System.String,int):ubyte
test eax, eax
- jne G_M54593_IG07
+ jne G_M54593_IG10
mov rdi, rbx
mov rax, qword ptr [rbx]
mov rax, qword ptr [rax+0x40]
call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this
mov r13, rax
mov rdi, r15
mov rax, qword ptr [r15]
mov rax, qword ptr [rax+0x40]
call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this
mov rsi, rax
mov rdi, r13
mov edx, 4
mov rax, 0xD1FFAB1E ; code for System.String:Equals(System.String,System.String,int):ubyte
call [rax]System.String:Equals(System.String,System.String,int):ubyte
test eax, eax
- je SHORT G_M54593_IG05
+ je G_M54593_IG08
mov rdi, rbx
call [r14+0x10]System.Type:get_Namespace():System.String:this
- mov rdi, rax
- mov rsi, 0xD1FFAB1E ; 'Diagnostics.Tracing'
-
- mov edx, 4
- mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this
- cmp dword ptr [rdi], edi
- call [rax]System.String:EndsWith(System.String,int):ubyte:this
- test eax, eax
- je SHORT G_M54593_IG05
+ cmp dword ptr [rax+0x08], 19
+ jl G_M54593_IG08
+ mov edi, dword ptr [rax+0x08]
+ lea rdi, bword ptr [rax+2*rdi-0x26]
+ vmovups ymm0, ymmword ptr [rdi+0x0C]
+ vpxor ymm0, ymm0, ymmword ptr [reloc @RWD00]
+ vmovups ymm1, ymmword ptr [rdi+0x12]
+ vpternlogq ymm0, ymm1, ymmword ptr [reloc @RWD32], -10
+ vptest ymm0, ymm0
+ sete dil
+ movzx rdi, dil
+ test edi, edi
+ je SHORT G_M54593_IG08
mov rdi, r15
call [r12+0x10]System.Type:get_Namespace():System.String:this
- mov rdi, rax
- mov rsi, 0xD1FFAB1E ; 'Diagnostics.Tracing'
-
- mov edx, 4
- mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this
- cmp dword ptr [rdi], edi
- ;; size=200 bbWeight=0.50 PerfScore 29.38
+ cmp dword ptr [rax+0x08], 19
+ jl SHORT G_M54593_IG05
+ ;; size=208 bbWeight=0.50 PerfScore 39.50
G_M54593_IG04:
+ mov ecx, dword ptr [rax+0x08]
+ lea rax, bword ptr [rax+2*rcx-0x26]
+ vmovups ymm0, ymmword ptr [rax+0x0C]
+ vpxor ymm0, ymm0, ymmword ptr [reloc @RWD00]
+ vmovups ymm1, ymmword ptr [rax+0x12]
+ vpternlogq ymm0, ymm1, ymmword ptr [reloc @RWD32], -10
+ vptest ymm0, ymm0
+ sete al
+ movzx rax, al
+ jmp SHORT G_M54593_IG06
+ ;; size=50 bbWeight=0.25 PerfScore 6.31
+G_M54593_IG05:
+ xor eax, eax
+ ;; size=2 bbWeight=0.25 PerfScore 0.06
+G_M54593_IG06:
+ movzx rax, al
+ ;; size=3 bbWeight=0.50 PerfScore 0.12
+G_M54593_IG07:
+ vzeroupper
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
- tail.jmp [rax]System.String:EndsWith(System.String,int):ubyte:this
- ;; size=17 bbWeight=0.50 PerfScore 2.62
-G_M54593_IG05:
+ ret
+ ;; size=18 bbWeight=0.50 PerfScore 2.62
+G_M54593_IG08:
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M54593_IG06:
+G_M54593_IG09:
+ vzeroupper
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M54593_IG07:
+ ;; size=18 bbWeight=0.50 PerfScore 2.62
+G_M54593_IG10:
mov eax, 1
;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M54593_IG08:
+G_M54593_IG11:
+ vzeroupper
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=18 bbWeight=0.50 PerfScore 2.62
+RWD00 dq 0067006100690044h, 00740073006F006Eh, 002E007300630069h, 0063006100720054h
+RWD32 dq 0073006F006E0067h, 0073006300690074h, 006100720054002Eh, 0067006E00690063h
+
-; Total bytes of code 302, prolog size 16, PerfScore 49.50, instruction count 91, allocated bytes for code 302 (MethodHash=436d2abe) for method System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts)
+; Total bytes of code 372, prolog size 16, PerfScore 67.12, instruction count 108, allocated bytes for code 372 (MethodHash=436d2abe) for method System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts) 30 (5.99 % of base) - System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String ; Assembly listing for method System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 12 single block inlinees; 11 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 10, 6 ) ref -> rbx class-hnd single-def <System.String>
-; V01 arg1 [V01,T01] ( 9, 6 ) ref -> r15 class-hnd single-def <System.String>
-; V02 arg2 [V02,T02] ( 4, 3 ) int -> r14 single-def
-; V03 loc0 [V03,T04] ( 6, 3 ) byref -> r14
+; V01 arg1 [V01,T01] ( 8, 5.50) ref -> rsi class-hnd single-def <System.String>
+; V02 arg2 [V02,T02] ( 4, 3 ) int -> r15 single-def
+; V03 loc0 [V03,T05] ( 6, 3 ) byref -> r15
;* V04 loc1 [V04 ] ( 0, 0 ) int -> zero-ref
; V05 loc2 [V05 ] ( 6, 3 ) struct (16) [rbp-0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ReadOnlySpan`1[ushort]>
; V06 loc3 [V06 ] ( 10, 5 ) struct (40) [rbp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Runtime.CompilerServices.DefaultInterpolatedStringHandler>
;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V08 tmp1 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
-;* V09 tmp2 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
-;* V10 tmp3 [V10 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
-;* V11 tmp4 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
-;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-; V14 tmp7 [V14,T07] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V15 tmp8 [V15,T13] ( 2, 2 ) int -> rsi "Inlining Arg"
-;* V16 tmp9 [V16 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
-;* V17 tmp10 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V18 tmp11 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-; V19 tmp12 [V19,T08] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
-; V20 tmp13 [V20,T14] ( 2, 2 ) int -> rcx "Inlining Arg"
-; V21 tmp14 [V21,T05] ( 3, 3 ) int -> rcx "Inlining Arg"
-;* V22 tmp15 [V22 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V23 tmp16 [V23 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V24 tmp17 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V25 tmp18 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-; V26 tmp19 [V26,T09] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V27 tmp20 [V27,T15] ( 2, 2 ) int -> rsi "Inlining Arg"
-;* V28 tmp21 [V28 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
-;* V29 tmp22 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V30 tmp23 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-; V31 tmp24 [V31,T10] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
-; V32 tmp25 [V32,T16] ( 2, 2 ) int -> rcx "Inlining Arg"
-; V33 tmp26 [V33,T06] ( 3, 3 ) int -> rcx "Inlining Arg"
-;* V34 tmp27 [V34 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V35 tmp28 [V35 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V36 tmp29 [V36 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
-; V37 tmp30 [V37,T03] ( 4, 4 ) int -> rdi "Inlining Arg"
-;* V38 tmp31 [V38 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-; V39 tmp32 [V39,T11] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
-; V40 tmp33 [V40,T17] ( 2, 2 ) int -> rsi "Inlining Arg"
-;* V41 tmp34 [V41,T33] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp"
-;* V42 tmp35 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
-;* V43 tmp36 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
-; V44 tmp37 [V44,T12] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V45 tmp38 [V45 ] ( 4, 2 ) byref -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V05._reference (fldOffset=0x0)" P-DEP
-; V46 tmp39 [V46 ] ( 4, 2 ) int -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V05._length (fldOffset=0x8)" P-DEP
-; V47 tmp40 [V47,T18] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
-; V48 tmp41 [V48,T20] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
-;* V49 tmp42 [V49 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP
-;* V50 tmp43 [V50 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
-; V51 tmp44 [V51,T19] ( 3, 1.50) byref -> rdi "field V10._reference (fldOffset=0x0)" P-INDEP
-; V52 tmp45 [V52,T21] ( 3, 1.50) int -> rsi "field V10._length (fldOffset=0x8)" P-INDEP
-;* V53 tmp46 [V53 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V54 tmp47 [V54 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
-; V55 tmp48 [V55,T25] ( 2, 1 ) byref -> rdi single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-; V56 tmp49 [V56,T34] ( 2, 1 ) int -> rsi "field V12._length (fldOffset=0x8)" P-INDEP
-;* V57 tmp50 [V57 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
-;* V58 tmp51 [V58 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
-; V59 tmp52 [V59,T26] ( 2, 1 ) byref -> rdx single-def "field V16._reference (fldOffset=0x0)" P-INDEP
-; V60 tmp53 [V60,T35] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
-; V61 tmp54 [V61,T27] ( 2, 1 ) byref -> rdx single-def "field V17._reference (fldOffset=0x0)" P-INDEP
-; V62 tmp55 [V62,T36] ( 2, 1 ) int -> rcx "field V17._length (fldOffset=0x8)" P-INDEP
-;* V63 tmp56 [V63 ] ( 0, 0 ) byref -> zero-ref "field V18._reference (fldOffset=0x0)" P-INDEP
-;* V64 tmp57 [V64 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
-; V65 tmp58 [V65,T28] ( 2, 1 ) byref -> rdx single-def "field V22._reference (fldOffset=0x0)" P-INDEP
-; V66 tmp59 [V66,T37] ( 2, 1 ) int -> rcx "field V22._length (fldOffset=0x8)" P-INDEP
-; V67 tmp60 [V67,T29] ( 2, 1 ) byref -> rdi single-def "field V24._reference (fldOffset=0x0)" P-INDEP
-; V68 tmp61 [V68,T38] ( 2, 1 ) int -> rsi "field V24._length (fldOffset=0x8)" P-INDEP
-;* V69 tmp62 [V69 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP
-;* V70 tmp63 [V70 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
-; V71 tmp64 [V71,T30] ( 2, 1 ) byref -> rdx single-def "field V28._reference (fldOffset=0x0)" P-INDEP
-; V72 tmp65 [V72,T39] ( 2, 1 ) int -> rcx "field V28._length (fldOffset=0x8)" P-INDEP
-; V73 tmp66 [V73,T31] ( 2, 1 ) byref -> rdx single-def "field V29._reference (fldOffset=0x0)" P-INDEP
-; V74 tmp67 [V74,T40] ( 2, 1 ) int -> rcx "field V29._length (fldOffset=0x8)" P-INDEP
-;* V75 tmp68 [V75 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP
-;* V76 tmp69 [V76 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP
-; V77 tmp70 [V77,T32] ( 2, 1 ) byref -> rdx single-def "field V34._reference (fldOffset=0x0)" P-INDEP
-; V78 tmp71 [V78,T41] ( 2, 1 ) int -> rcx "field V34._length (fldOffset=0x8)" P-INDEP
-;* V79 tmp72 [V79 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP
-;* V80 tmp73 [V80 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP
-;* V81 tmp74 [V81 ] ( 0, 0 ) byref -> zero-ref single-def "field V38._reference (fldOffset=0x0)" P-INDEP
-;* V82 tmp75 [V82 ] ( 0, 0 ) int -> zero-ref "field V38._length (fldOffset=0x8)" P-INDEP
-;* V83 tmp76 [V83 ] ( 0, 0 ) byref -> zero-ref single-def "field V42._reference (fldOffset=0x0)" P-INDEP
-;* V84 tmp77 [V84 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP
-; V85 cse0 [V85,T22] ( 3, 1.50) int -> rdx "CSE - moderate"
-; V86 cse1 [V86,T23] ( 3, 1.50) int -> rdx "CSE - moderate"
-; V87 cse2 [V87,T24] ( 3, 1.50) int -> rsi "CSE - moderate"
+;* V08 tmp1 [V08 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr"
+; V09 tmp2 [V09,T21] ( 3, 3 ) byref -> rdi single-def "clonning data ptr"
+; V10 tmp3 [V10,T08] ( 2, 2 ) int -> rdi "spilling unroll qmark"
+;* V11 tmp4 [V11 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr"
+; V12 tmp5 [V12,T29] ( 2, 2 ) byref -> rdi single-def "clonning data ptr"
+; V13 tmp6 [V13,T09] ( 2, 2 ) int -> rdi "spilling unroll qmark"
+;* V14 tmp7 [V14 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
+;* V15 tmp8 [V15 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
+;* V16 tmp9 [V16 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
+;* V17 tmp10 [V17 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
+;* V18 tmp11 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V19 tmp12 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+; V20 tmp13 [V20,T10] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V21 tmp14 [V21,T16] ( 2, 2 ) int -> rdx "Inlining Arg"
+;* V22 tmp15 [V22 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
+;* V23 tmp16 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V24 tmp17 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+; V25 tmp18 [V25,T11] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V26 tmp19 [V26,T17] ( 2, 2 ) int -> r14 "Inlining Arg"
+; V27 tmp20 [V27,T06] ( 3, 3 ) int -> rcx "Inlining Arg"
+;* V28 tmp21 [V28 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V29 tmp22 [V29 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V30 tmp23 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V31 tmp24 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+; V32 tmp25 [V32,T12] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V33 tmp26 [V33,T18] ( 2, 2 ) int -> rdx "Inlining Arg"
+;* V34 tmp27 [V34 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
+;* V35 tmp28 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V36 tmp29 [V36 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+; V37 tmp30 [V37,T13] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V38 tmp31 [V38,T19] ( 2, 2 ) int -> rcx "Inlining Arg"
+; V39 tmp32 [V39,T07] ( 3, 3 ) int -> rcx "Inlining Arg"
+;* V40 tmp33 [V40 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V41 tmp34 [V41 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V42 tmp35 [V42 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
+; V43 tmp36 [V43,T04] ( 4, 4 ) int -> rdi "Inlining Arg"
+;* V44 tmp37 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
+; V45 tmp38 [V45,T14] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
+; V46 tmp39 [V46,T20] ( 2, 2 ) int -> rsi "Inlining Arg"
+;* V47 tmp40 [V47,T38] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp"
+;* V48 tmp41 [V48 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V49 tmp42 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+; V50 tmp43 [V50,T15] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V51 tmp44 [V51 ] ( 4, 2 ) byref -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V05._reference (fldOffset=0x0)" P-DEP
+; V52 tmp45 [V52 ] ( 4, 2 ) int -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V05._length (fldOffset=0x8)" P-DEP
+; V53 tmp46 [V53,T22] ( 3, 1.50) byref -> rdi "field V14._reference (fldOffset=0x0)" P-INDEP
+; V54 tmp47 [V54,T24] ( 3, 1.50) int -> rdx "field V14._length (fldOffset=0x8)" P-INDEP
+;* V55 tmp48 [V55 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP
+;* V56 tmp49 [V56 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP
+; V57 tmp50 [V57,T23] ( 3, 1.50) byref -> rdi "field V16._reference (fldOffset=0x0)" P-INDEP
+; V58 tmp51 [V58,T25] ( 3, 1.50) int -> rdx "field V16._length (fldOffset=0x8)" P-INDEP
+;* V59 tmp52 [V59 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP
+;* V60 tmp53 [V60 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
+; V61 tmp54 [V61,T30] ( 2, 1 ) byref -> rdi single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+; V62 tmp55 [V62,T39] ( 2, 1 ) int -> rdx "field V18._length (fldOffset=0x8)" P-INDEP
+;* V63 tmp56 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "field V19._reference (fldOffset=0x0)" P-INDEP
+;* V64 tmp57 [V64 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP
+; V65 tmp58 [V65,T31] ( 2, 1 ) byref -> rsi single-def "field V22._reference (fldOffset=0x0)" P-INDEP
+; V66 tmp59 [V66,T40] ( 2, 1 ) int -> r14 "field V22._length (fldOffset=0x8)" P-INDEP
+; V67 tmp60 [V67,T32] ( 2, 1 ) byref -> rsi single-def "field V23._reference (fldOffset=0x0)" P-INDEP
+; V68 tmp61 [V68,T41] ( 2, 1 ) int -> r14 "field V23._length (fldOffset=0x8)" P-INDEP
+;* V69 tmp62 [V69 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP
+;* V70 tmp63 [V70 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
+; V71 tmp64 [V71,T33] ( 2, 1 ) byref -> rax single-def "field V28._reference (fldOffset=0x0)" P-INDEP
+; V72 tmp65 [V72,T42] ( 2, 1 ) int -> rcx "field V28._length (fldOffset=0x8)" P-INDEP
+; V73 tmp66 [V73,T34] ( 2, 1 ) byref -> rdi single-def "field V30._reference (fldOffset=0x0)" P-INDEP
+; V74 tmp67 [V74,T43] ( 2, 1 ) int -> rdx "field V30._length (fldOffset=0x8)" P-INDEP
+;* V75 tmp68 [V75 ] ( 0, 0 ) byref -> zero-ref single-def "field V31._reference (fldOffset=0x0)" P-INDEP
+;* V76 tmp69 [V76 ] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x8)" P-INDEP
+; V77 tmp70 [V77,T35] ( 2, 1 ) byref -> rsi single-def "field V34._reference (fldOffset=0x0)" P-INDEP
+; V78 tmp71 [V78,T44] ( 2, 1 ) int -> rcx "field V34._length (fldOffset=0x8)" P-INDEP
+; V79 tmp72 [V79,T36] ( 2, 1 ) byref -> rsi single-def "field V35._reference (fldOffset=0x0)" P-INDEP
+; V80 tmp73 [V80,T45] ( 2, 1 ) int -> rcx "field V35._length (fldOffset=0x8)" P-INDEP
+;* V81 tmp74 [V81 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP
+;* V82 tmp75 [V82 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP
+; V83 tmp76 [V83,T37] ( 2, 1 ) byref -> rax single-def "field V40._reference (fldOffset=0x0)" P-INDEP
+; V84 tmp77 [V84,T46] ( 2, 1 ) int -> rcx "field V40._length (fldOffset=0x8)" P-INDEP
+;* V85 tmp78 [V85 ] ( 0, 0 ) byref -> zero-ref "field V42._reference (fldOffset=0x0)" P-INDEP
+;* V86 tmp79 [V86 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP
+;* V87 tmp80 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
+;* V88 tmp81 [V88 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP
+;* V89 tmp82 [V89 ] ( 0, 0 ) byref -> zero-ref single-def "field V48._reference (fldOffset=0x0)" P-INDEP
+;* V90 tmp83 [V90 ] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x8)" P-INDEP
+; V91 cse0 [V91,T26] ( 3, 1.50) int -> rsi "CSE - moderate"
+; V92 cse1 [V92,T27] ( 3, 1.50) int -> rsi "CSE - moderate"
+; V93 cse2 [V93,T03] ( 7, 4.50) int -> r14 "CSE - aggressive"
+; V94 cse3 [V94,T28] ( 3, 1.50) int -> rsi "CSE - moderate"
;
; Lcl frame size = 56
G_M38999_IG01:
push rbp
push r15
push r14
push rbx
sub rsp, 56
lea rbp, [rsp+0x50]
vxorps xmm8, xmm8, xmm8
vmovdqu ymmword ptr [rbp-0x50], ymm8
vmovdqa xmmword ptr [rbp-0x30], xmm8
xor eax, eax
mov qword ptr [rbp-0x20], rax
mov rbx, rdi
- mov r15, rsi
- mov r14d, edx
- ;; size=45 bbWeight=1 PerfScore 11.08
+ mov r15d, edx
+ ;; size=42 bbWeight=1 PerfScore 10.83
G_M38999_IG02:
- mov rdi, r15
- mov rsi, 0xD1FFAB1E ; 'Start'
-
- mov edx, 4
- mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this
- cmp dword ptr [rdi], edi
- call [rax]System.String:EndsWith(System.String,int):ubyte:this
- test eax, eax
- je SHORT G_M38999_IG07
- ;; size=36 bbWeight=1 PerfScore 8.25
+ mov r14d, dword ptr [rsi+0x08]
+ cmp r14d, 5
+ jl G_M38999_IG07
+ ;; size=14 bbWeight=1 PerfScore 3.25
G_M38999_IG03:
+ mov edi, r14d
+ lea rdi, bword ptr [rsi+2*rdi-0x0A]
+ mov rdx, 0xD1FFAB1E
+ xor rdx, qword ptr [rdi+0x0C]
+ mov edi, dword ptr [rdi+0x12]
+ xor edi, 0xD1FFAB1E
+ or rdi, rdx
+ sete dil
+ movzx rdi, dil
+ test edi, edi
+ je SHORT G_M38999_IG07
test rbx, rbx
jne SHORT G_M38999_IG04
xor rdi, rdi
- xor esi, esi
+ xor edx, edx
jmp SHORT G_M38999_IG05
- ;; size=11 bbWeight=0.50 PerfScore 1.88
+ ;; size=57 bbWeight=0.50 PerfScore 6.62
G_M38999_IG04:
lea rdi, bword ptr [rbx+0x0C]
- mov esi, dword ptr [rbx+0x08]
+ mov edx, dword ptr [rbx+0x08]
;; size=7 bbWeight=0.50 PerfScore 1.25
G_M38999_IG05:
- lea rdx, bword ptr [r15+0x0C]
- mov ecx, dword ptr [r15+0x08]
- mov bword ptr [rbp-0x28], rdx
- mov dword ptr [rbp-0x20], ecx
- lea r14, bword ptr [rbp-0x28]
- mov edx, dword ptr [r14+0x08]
- lea ecx, [rdx-0x05]
- cmp ecx, edx
+ add rsi, 12
+ mov bword ptr [rbp-0x28], rsi
+ mov dword ptr [rbp-0x20], r14d
+ lea r15, bword ptr [rbp-0x28]
+ mov esi, dword ptr [r15+0x08]
+ lea ecx, [rsi-0x05]
+ cmp ecx, esi
ja G_M38999_IG17
- mov rdx, bword ptr [r14]
+ mov rax, bword ptr [r15]
+ mov esi, edx
+ mov rdx, rax
mov rax, 0xD1FFAB1E ; code for System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String
call [rax]System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String
nop
- ;; size=50 bbWeight=0.50 PerfScore 7.12
+ ;; size=52 bbWeight=0.50 PerfScore 6.25
G_M38999_IG06:
add rsp, 56
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=0.50 PerfScore 1.62
G_M38999_IG07:
- mov rdi, r15
- mov rsi, 0xD1FFAB1E ; 'Stop'
-
- mov edx, 4
- mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this
- call [rax]System.String:EndsWith(System.String,int):ubyte:this
- test eax, eax
+ cmp r14d, 4
+ jl SHORT G_M38999_IG11
+ mov edi, r14d
+ lea rdi, bword ptr [rsi+2*rdi-0x08]
+ mov rdx, 0xD1FFAB1E
+ cmp qword ptr [rdi+0x0C], rdx
+ sete dil
+ movzx rdi, dil
+ test edi, edi
je SHORT G_M38999_IG11
test rbx, rbx
jne SHORT G_M38999_IG08
xor rdi, rdi
- xor esi, esi
+ xor edx, edx
jmp SHORT G_M38999_IG09
- ;; size=45 bbWeight=0.50 PerfScore 4.50
+ ;; size=51 bbWeight=0.50 PerfScore 6.00
G_M38999_IG08:
lea rdi, bword ptr [rbx+0x0C]
- mov esi, dword ptr [rbx+0x08]
+ mov edx, dword ptr [rbx+0x08]
;; size=7 bbWeight=0.50 PerfScore 1.25
G_M38999_IG09:
- lea rdx, bword ptr [r15+0x0C]
- mov ecx, dword ptr [r15+0x08]
- mov bword ptr [rbp-0x28], rdx
+ add rsi, 12
+ mov ecx, r14d
+ mov bword ptr [rbp-0x28], rsi
mov dword ptr [rbp-0x20], ecx
- lea r14, bword ptr [rbp-0x28]
- mov edx, dword ptr [r14+0x08]
- lea ecx, [rdx-0x04]
- cmp ecx, edx
+ lea r15, bword ptr [rbp-0x28]
+ mov esi, dword ptr [r15+0x08]
+ lea ecx, [rsi-0x04]
+ cmp ecx, esi
ja G_M38999_IG17
- mov rdx, bword ptr [r14]
+ mov rax, bword ptr [r15]
+ mov esi, edx
+ mov rdx, rax
mov rax, 0xD1FFAB1E ; code for System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String
call [rax]System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String
nop
- ;; size=50 bbWeight=0.50 PerfScore 7.12
+ ;; size=54 bbWeight=0.50 PerfScore 6.38
G_M38999_IG10:
add rsp, 56
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=0.50 PerfScore 1.62
G_M38999_IG11:
- test r14d, r14d
+ test r15d, r15d
je G_M38999_IG15
lea rdi, [rbp-0x50]
mov esi, 4
mov edx, 2
mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this
call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this
lea rdi, [rbp-0x50]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted(System.String):this
call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted(System.String):this
mov edi, dword ptr [rbp-0x40]
mov esi, dword ptr [rbp-0x30]
cmp edi, esi
ja G_M38999_IG17
mov rax, bword ptr [rbp-0x38]
mov ecx, edi
lea rax, bword ptr [rax+2*rcx]
sub esi, edi
cmp esi, 4
jb SHORT G_M38999_IG12
mov rdi, 0xD1FFAB1E
mov rsi, qword ptr [rdi]
mov qword ptr [rax], rsi
mov edi, dword ptr [rbp-0x40]
add edi, 4
mov dword ptr [rbp-0x40], edi
jmp SHORT G_M38999_IG13
;; size=112 bbWeight=0.50 PerfScore 11.75
G_M38999_IG12:
lea rdi, [rbp-0x50]
mov rsi, 0xD1FFAB1E ; 'task'
mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this
call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this
;; size=26 bbWeight=0.50 PerfScore 2.00
G_M38999_IG13:
lea rdi, [rbp-0x50]
- mov esi, r14d
+ mov esi, r15d
mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[int](int):this
call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[int](int):this
lea rdi, [rbp-0x50]
mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:ToStringAndClear():System.String:this
call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:ToStringAndClear():System.String:this
nop
;; size=36 bbWeight=0.50 PerfScore 4.00
G_M38999_IG14:
add rsp, 56
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=0.50 PerfScore 1.62
G_M38999_IG15:
mov rdi, rbx
- mov rsi, r15
mov rax, 0xD1FFAB1E ; code for System.String:Concat(System.String,System.String):System.String
call [rax]System.String:Concat(System.String,System.String):System.String
nop
- ;; size=19 bbWeight=0.50 PerfScore 2.00
+ ;; size=16 bbWeight=0.50 PerfScore 1.88
G_M38999_IG16:
add rsp, 56
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=0.50 PerfScore 1.62
G_M38999_IG17:
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 501, prolog size 36, PerfScore 68.71, instruction count 141, allocated bytes for code 501 (MethodHash=f71167a8) for method System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts)
+; Total bytes of code 531, prolog size 36, PerfScore 67.96, instruction count 151, allocated bytes for code 531 (MethodHash=f71167a8) for method System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts) 26 (3.85 % of base) - System.StartupHookProvider:ParseStartupHook(byref,System.String) ; Assembly listing for method System.StartupHookProvider:ParseStartupHook(byref,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; 6 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T07] ( 3, 3 ) byref -> rdi single-def
-; V01 arg1 [V01,T08] ( 3, 3 ) ref -> rsi class-hnd single-def <System.String>
+; V00 arg0 [V00,T08] ( 3, 3 ) byref -> rdi single-def
+; V01 arg1 [V01,T09] ( 3, 3 ) ref -> rsi class-hnd single-def <System.String>
;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[ushort]>
;* V03 loc1 [V03 ] ( 0, 0 ) struct (16) zero-ref <System.Span`1[ushort]>
; V04 loc2 [V04,T01] ( 5, 16.50) int -> r13
;* V05 loc3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def ptr <System.Exception>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V07 tmp1 [V07 ] ( 5, 5 ) struct ( 8) [rbp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op unsafe-buffer "stackallocLocal"
;* V08 tmp2 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-; V09 tmp3 [V09,T20] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <System.ArgumentException>
-; V10 tmp4 [V10,T11] ( 3, 3 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.Reflection.AssemblyName>
-; V11 tmp5 [V11,T23] ( 2, 0 ) ref -> rbx class-hnd single-def "impSpillSpecialSideEff" <System.Exception>
-; V12 tmp6 [V12,T21] ( 3, 0 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
-; V13 tmp7 [V13,T22] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
-;* V14 tmp8 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
-;* V15 tmp9 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V16 tmp10 [V16 ] ( 0, 0 ) byref -> zero-ref single-def ptr "Inlining Arg"
-;* V17 tmp11 [V17 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-;* V18 tmp12 [V18,T19] ( 0, 0 ) ubyte -> zero-ref ptr "Inline return value spill temp"
-; V19 tmp13 [V19,T04] ( 2, 16 ) ushort -> rdi "Inlining Arg"
-; V20 tmp14 [V20,T05] ( 3, 8 ) ubyte -> rax "Inline return value spill temp"
-; V21 tmp15 [V21,T02] ( 3, 16 ) byref -> rax "Inlining Arg"
-; V22 tmp16 [V22,T00] ( 4, 24 ) short -> rcx ld-addr-op "Inlining Arg"
-; V23 tmp17 [V23,T03] ( 3, 16 ) int -> rdx "Inlining Arg"
-;* V24 tmp18 [V24 ] ( 0, 0 ) short -> zero-ref ld-addr-op "Inlining Arg"
-; V25 tmp19 [V25,T10] ( 2, 5 ) byref -> r15 single-def "field V02._reference (fldOffset=0x0)" P-INDEP
-;* V26 tmp20 [V26,T15] ( 0, 0 ) int -> zero-ref ptr "field V02._length (fldOffset=0x8)" P-INDEP
-;* V27 tmp21 [V27 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V28 tmp22 [V28 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V29 tmp23 [V29,T13] ( 2, 2 ) byref -> r15 single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V30 tmp24 [V30 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V31 tmp25 [V31 ] ( 0, 0 ) byref -> zero-ref single-def ptr "field V14._reference (fldOffset=0x0)" P-INDEP
-;* V32 tmp26 [V32 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
-; V33 tmp27 [V33,T14] ( 2, 2 ) byref -> r15 single-def "field V15._reference (fldOffset=0x0)" P-INDEP
-;* V34 tmp28 [V34,T16] ( 0, 0 ) int -> zero-ref ptr "field V15._length (fldOffset=0x8)" P-INDEP
-; V35 tmp29 [V35,T24] ( 2, 0 ) ref -> rdi "argument with side effect"
-; V36 tmp30 [V36,T25] ( 2, 0 ) ref -> rsi "argument with side effect"
-; V37 tmp31 [V37,T26] ( 2, 0 ) ref -> rdi single-def "argument with side effect"
-; V38 tmp32 [V38,T27] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V39 tmp33 [V39,T28] ( 2, 0 ) ref -> rdi single-def "argument with side effect"
-; V40 tmp34 [V40,T29] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V41 GsCookie [V41 ] ( 1, 1 ) long -> [rbp-0x28] do-not-enreg[X] addr-exposed "GSSecurityCookie"
-; V42 tmp36 [V42,T12] ( 3, 2 ) byref -> rbx single-def "shadowVar"
-; V43 tmp37 [V43,T06] ( 11, 7.50) ref -> [rbp-0x38] EH-live spill-single-def ptr "shadowVar"
-; V44 PSPSym [V44,T17] ( 1, 1 ) long -> [rbp-0x40] do-not-enreg[V] "PSPSym"
-;* V45 cse0 [V45,T18] ( 0, 0 ) long -> zero-ref "CSE - moderate"
-; V46 cse1 [V46,T09] ( 3, 5 ) int -> r14 "CSE - moderate"
+; V09 tmp3 [V09,T22] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <System.ArgumentException>
+;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref single-def ptr "spilling varStr"
+; V11 tmp5 [V11,T14] ( 2, 2 ) byref -> rdi single-def "clonning data ptr"
+; V12 tmp6 [V12,T12] ( 2, 2 ) int -> rdi "spilling unroll qmark"
+; V13 tmp7 [V13,T11] ( 3, 3 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.Reflection.AssemblyName>
+; V14 tmp8 [V14,T25] ( 2, 0 ) ref -> rbx class-hnd single-def "impSpillSpecialSideEff" <System.Exception>
+; V15 tmp9 [V15,T23] ( 3, 0 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
+; V16 tmp10 [V16,T24] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
+;* V17 tmp11 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V18 tmp12 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V19 tmp13 [V19 ] ( 0, 0 ) byref -> zero-ref single-def ptr "Inlining Arg"
+;* V20 tmp14 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V21 tmp15 [V21,T21] ( 0, 0 ) ubyte -> zero-ref ptr "Inline return value spill temp"
+; V22 tmp16 [V22,T04] ( 2, 16 ) ushort -> rdi "Inlining Arg"
+; V23 tmp17 [V23,T05] ( 3, 8 ) ubyte -> rax "Inline return value spill temp"
+; V24 tmp18 [V24,T02] ( 3, 16 ) byref -> rax "Inlining Arg"
+; V25 tmp19 [V25,T00] ( 4, 24 ) short -> rcx ld-addr-op "Inlining Arg"
+; V26 tmp20 [V26,T03] ( 3, 16 ) int -> rdx "Inlining Arg"
+;* V27 tmp21 [V27 ] ( 0, 0 ) short -> zero-ref ld-addr-op "Inlining Arg"
+; V28 tmp22 [V28,T10] ( 2, 5 ) byref -> r15 single-def "field V02._reference (fldOffset=0x0)" P-INDEP
+;* V29 tmp23 [V29,T17] ( 0, 0 ) int -> zero-ref ptr "field V02._length (fldOffset=0x8)" P-INDEP
+;* V30 tmp24 [V30 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V31 tmp25 [V31 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
+; V32 tmp26 [V32,T15] ( 2, 2 ) byref -> r15 single-def "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V33 tmp27 [V33 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+;* V34 tmp28 [V34 ] ( 0, 0 ) byref -> zero-ref single-def ptr "field V17._reference (fldOffset=0x0)" P-INDEP
+;* V35 tmp29 [V35 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
+; V36 tmp30 [V36,T16] ( 2, 2 ) byref -> r15 single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V37 tmp31 [V37,T18] ( 0, 0 ) int -> zero-ref ptr "field V18._length (fldOffset=0x8)" P-INDEP
+; V38 tmp32 [V38,T26] ( 2, 0 ) ref -> rdi "argument with side effect"
+; V39 tmp33 [V39,T27] ( 2, 0 ) ref -> rsi "argument with side effect"
+; V40 tmp34 [V40,T28] ( 2, 0 ) ref -> rdi single-def "argument with side effect"
+; V41 tmp35 [V41,T29] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
+; V42 tmp36 [V42,T30] ( 2, 0 ) ref -> rdi single-def "argument with side effect"
+; V43 tmp37 [V43,T31] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
+; V44 GsCookie [V44 ] ( 1, 1 ) long -> [rbp-0x28] do-not-enreg[X] addr-exposed "GSSecurityCookie"
+; V45 tmp39 [V45,T13] ( 3, 2 ) byref -> rbx single-def "shadowVar"
+; V46 tmp40 [V46,T06] ( 11, 7.50) ref -> [rbp-0x38] EH-live spill-single-def ptr "shadowVar"
+; V47 PSPSym [V47,T19] ( 1, 1 ) long -> [rbp-0x40] do-not-enreg[V] "PSPSym"
+;* V48 cse0 [V48,T20] ( 0, 0 ) long -> zero-ref "CSE - moderate"
+; V49 cse1 [V49,T07] ( 5, 6 ) int -> r14 "CSE - moderate"
;
; Lcl frame size = 32
G_M53030_IG01:
push rbp
push r15
push r14
push r13
push rbx
sub rsp, 32
lea rbp, [rsp+0x40]
mov qword ptr [rbp-0x40], rsp
mov qword ptr [rbp-0x28], 0xD1FFAB1E
;; size=29 bbWeight=1 PerfScore 7.75
G_M53030_IG02:
mov gword ptr [rbp-0x38], rsi
mov rbx, rdi
mov rdi, 0xD1FFAB1E ; global ptr
test byte ptr [rdi], 1
je G_M53030_IG18
;; size=26 bbWeight=1 PerfScore 5.50
G_M53030_IG03:
mov rdi, 0xD1FFAB1E ; data for System.IO.Path:DirectorySeparatorChar
movzx rdi, word ptr [rdi]
mov word ptr [rbp-0x30], di
mov rdi, 0xD1FFAB1E ; data for System.IO.Path:AltDirectorySeparatorChar
movzx rdi, word ptr [rdi]
mov word ptr [rbp-0x2E], di
mov word ptr [rbp-0x2C], 32
mov word ptr [rbp-0x2A], 44
lea r15, [rbp-0x30]
test rsi, rsi
je SHORT G_M53030_IG05
;; size=55 bbWeight=1 PerfScore 10.25
G_M53030_IG04:
mov r14d, dword ptr [rsi+0x08]
test r14d, r14d
je SHORT G_M53030_IG05
mov rdi, rsi
mov rax, 0xD1FFAB1E ; code for System.IO.Path:IsPathFullyQualified(System.String):ubyte
call [rax]System.IO.Path:IsPathFullyQualified(System.String):ubyte
test eax, eax
je SHORT G_M53030_IG11
jmp SHORT G_M53030_IG08
;; size=30 bbWeight=0.50 PerfScore 5.00
G_M53030_IG05:
cmp qword ptr [rbp-0x28], 0xD1FFAB1E
je SHORT G_M53030_IG06
call CORINFO_HELP_FAIL_FAST
;; size=15 bbWeight=0.50 PerfScore 2.00
G_M53030_IG06:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
G_M53030_IG07:
add rsp, 32
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M53030_IG08:
lea rdi, bword ptr [rbx+0x08]
mov rsi, gword ptr [rbp-0x38]
call CORINFO_HELP_CHECKED_ASSIGN_REF
cmp qword ptr [rbp-0x28], 0xD1FFAB1E
je SHORT G_M53030_IG09
call CORINFO_HELP_FAIL_FAST
;; size=28 bbWeight=0.50 PerfScore 3.25
G_M53030_IG09:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
G_M53030_IG10:
add rsp, 32
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M53030_IG11:
xor r13d, r13d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M53030_IG12:
mov edi, r13d
movzx rdi, word ptr [r15+2*rdi]
mov rsi, gword ptr [rbp-0x38]
lea rax, bword ptr [rsi+0x0C]
movsx rcx, di
mov edx, r14d
movzx rdi, cx
dec edi
cmp edi, 254
jae SHORT G_M53030_IG14
;; size=36 bbWeight=4 PerfScore 24.00
G_M53030_IG13:
mov rdi, rax
mov esi, ecx
mov rax, 0xD1FFAB1E ; code for System.PackedSpanHelpers:Contains(byref,short,int):ubyte
call [rax]System.PackedSpanHelpers:Contains(byref,short,int):ubyte
jmp SHORT G_M53030_IG15
;; size=19 bbWeight=2 PerfScore 11.50
G_M53030_IG14:
mov rdi, rax
mov esi, ecx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:NonPackedContainsValueType[short](byref,short,int):ubyte
call [rax]System.SpanHelpers:NonPackedContainsValueType[short](byref,short,int):ubyte
;; size=17 bbWeight=2 PerfScore 7.50
G_M53030_IG15:
test eax, eax
- jne G_M53030_IG20
+ jne G_M53030_IG19
inc r13d
cmp r13d, 4
jl SHORT G_M53030_IG12
;; size=17 bbWeight=4 PerfScore 11.00
G_M53030_IG16:
- mov rdi, gword ptr [rbp-0x38]
- mov rsi, 0xD1FFAB1E ; '.dll'
-
- mov edx, 5
- mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this
- call [rax]System.String:EndsWith(System.String,int):ubyte:this
- test eax, eax
- jne SHORT G_M53030_IG19
- ;; size=35 bbWeight=0.50 PerfScore 3.00
+ cmp r14d, 4
+ jl SHORT G_M53030_IG17
+ mov edi, r14d
+ mov rsi, gword ptr [rbp-0x38]
+ lea rdi, bword ptr [rsi+2*rdi-0x08]
+ mov rax, 0xD1FFAB1E
+ or rax, qword ptr [rdi+0x0C]
+ mov rdi, 0xD1FFAB1E
+ cmp rax, rdi
+ sete dil
+ movzx rdi, dil
+ test edi, edi
+ jne G_M53030_IG20
+ ;; size=61 bbWeight=0.50 PerfScore 4.88
G_M53030_IG17:
mov rdi, 0xD1FFAB1E ; System.Reflection.AssemblyName
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov rdi, r15
mov rsi, gword ptr [rbp-0x38]
mov rax, 0xD1FFAB1E ; code for System.Reflection.AssemblyName:.ctor(System.String):this
call [rax]System.Reflection.AssemblyName:.ctor(System.String):this
mov rdi, rbx
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
jmp G_M53030_IG05
;; size=53 bbWeight=0.50 PerfScore 4.75
G_M53030_IG18:
mov rdi, 0xD1FFAB1E
mov esi, 0x7E1
call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
mov rsi, gword ptr [rbp-0x38]
jmp G_M53030_IG03
;; size=29 bbWeight=0 PerfScore 0.00
G_M53030_IG19:
mov rdi, 0xD1FFAB1E ; System.ArgumentException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String
call [rax]System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String
mov rdi, rax
mov rsi, gword ptr [rbp-0x38]
mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String
call [rax]System.SR:Format(System.String,System.Object):System.String
mov rsi, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String):this
call [rax]System.ArgumentException:.ctor(System.String):this
mov rdi, rbx
call CORINFO_HELP_THROW
;; size=75 bbWeight=0 PerfScore 0.00
G_M53030_IG20:
mov rdi, 0xD1FFAB1E ; System.ArgumentException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String
call [rax]System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String
mov rdi, rax
mov rsi, gword ptr [rbp-0x38]
mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String
call [rax]System.SR:Format(System.String,System.Object):System.String
mov rsi, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String):this
call [rax]System.ArgumentException:.ctor(System.String):this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=76 bbWeight=0 PerfScore 0.00
G_M53030_IG21:
push rbp
push r15
push r14
push r13
push rbx
sub rsp, 16
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x40]
;; size=23 bbWeight=0 PerfScore 0.00
G_M53030_IG22:
mov rbx, rsi
mov rdi, 0xD1FFAB1E ; System.ArgumentException
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String
call [rax]System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String
mov rdi, rax
mov rsi, gword ptr [rbp-0x38]
mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String
call [rax]System.SR:Format(System.String,System.Object):System.String
mov rsi, rax
mov rdi, r15
mov rdx, rbx
mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.Exception):this
call [rax]System.ArgumentException:.ctor(System.String,System.Exception):this
mov rdi, r15
call CORINFO_HELP_THROW
int3
;; size=82 bbWeight=0 PerfScore 0.00
-; Total bytes of code 676, prolog size 29, PerfScore 99.62, instruction count 165, allocated bytes for code 676 (MethodHash=6f8330d9) for method System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts)
+; Total bytes of code 702, prolog size 29, PerfScore 101.50, instruction count 171, allocated bytes for code 702 (MethodHash=6f8330d9) for method System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts) Larger list of diffs: https://gist.github.com/MihuBot/2f808f5962a46f0b068c39a02bab57e4 |
Top method improvements-7 (-0.80 % of base) - System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this ; Assembly listing for method System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly: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; 15 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T05] ( 8, 13 ) ref -> [rbp-0x78] this class-hnd single-def <System.Runtime.Loader.AssemblyLoadContext>
; V01 arg1 [V01,T11] ( 4, 6 ) ref -> [rbp-0x80] class-hnd single-def <System.Reflection.AssemblyName>
; V02 loc0 [V02 ] ( 8, 33 ) struct (24) [rbp-0x40] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]]>
;* V03 loc1 [V03 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]]>
; V04 loc2 [V04,T12] ( 4, 8 ) ref -> r13 class-hnd <System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]>
; V05 loc3 [V05,T06] ( 8, 14.50) ref -> [rbp-0x88] class-hnd <System.Reflection.Assembly>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V07 tmp1 [V07,T07] ( 3, 12 ) ref -> [rbp-0x90] class-hnd exact spill-single-def "impAppendStmt" <System.String>
; V08 tmp2 [V08,T08] ( 3, 12 ) ref -> r13 class-hnd exact "impAppendStmt" <System.String>
;* V09 tmp3 [V09 ] ( 0, 0 ) ref -> zero-ref
;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref
;* V11 tmp5 [V11 ] ( 0, 0 ) ref -> zero-ref
;* V12 tmp6 [V12 ] ( 0, 0 ) ref -> zero-ref
; V13 tmp7 [V13,T13] ( 4, 8 ) ref -> [rbp-0x98]
;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref
;* V15 tmp9 [V15 ] ( 0, 0 ) ref -> zero-ref
;* V16 tmp10 [V16 ] ( 0, 0 ) ref -> zero-ref
;* V17 tmp11 [V17 ] ( 0, 0 ) ref -> zero-ref
;* V18 tmp12 [V18 ] ( 0, 0 ) ref -> zero-ref
;* V19 tmp13 [V19 ] ( 0, 0 ) ref -> zero-ref
; V20 tmp14 [V20,T14] ( 4, 8 ) ref -> [rbp-0xA0]
;* V21 tmp15 [V21 ] ( 0, 0 ) ref -> zero-ref
;* V22 tmp16 [V22 ] ( 0, 0 ) ref -> zero-ref
;* V23 tmp17 [V23 ] ( 0, 0 ) ref -> zero-ref
;* V24 tmp18 [V24 ] ( 0, 0 ) ref -> zero-ref
;* V25 tmp19 [V25 ] ( 0, 0 ) ref -> zero-ref
;* V26 tmp20 [V26 ] ( 0, 0 ) ref -> zero-ref
;* V27 tmp21 [V27 ] ( 0, 0 ) ref -> zero-ref
;* V28 tmp22 [V28 ] ( 0, 0 ) ref -> zero-ref
; V29 tmp23 [V29,T15] ( 3, 6 ) ref -> rax
; V30 tmp24 [V30,T31] ( 2, 4 ) ref -> rsi class-hnd single-def "Inlining Arg" <System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]>
;* V31 tmp25 [V31 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op "NewObj constructor temp" <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]]>
;* V32 tmp26 [V32 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V33 tmp27 [V33 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V34 tmp28 [V34 ] ( 2, 4 ) byref -> [rbp-0x48] must-init pinned "Inline stloc first use temp"
;* V35 tmp29 [V35 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
; V36 tmp30 [V36 ] ( 2, 4 ) byref -> [rbp-0x50] must-init pinned "Inline stloc first use temp"
;* V37 tmp31 [V37 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
; V38 tmp32 [V38 ] ( 2, 4 ) byref -> [rbp-0x58] must-init pinned "Inline stloc first use temp"
;* V39 tmp33 [V39 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
; V40 tmp34 [V40 ] ( 2, 4 ) byref -> [rbp-0x60] must-init pinned "Inline stloc first use temp"
;* V41 tmp35 [V41 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
; V42 tmp36 [V42 ] ( 2, 4 ) byref -> [rbp-0x68] must-init pinned "Inline stloc first use temp"
;* V43 tmp37 [V43 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
;* V44 tmp38 [V44 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V45 tmp39 [V45 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp"
; V46 tmp40 [V46,T16] ( 4, 8 ) byref -> r8 "Inline return value spill temp"
; V47 tmp41 [V47,T17] ( 4, 8 ) byref -> rcx "Inline return value spill temp"
; V48 tmp42 [V48,T18] ( 4, 8 ) byref -> rdx "Inline return value spill temp"
; V49 tmp43 [V49,T19] ( 4, 8 ) byref -> rsi "Inline return value spill temp"
; V50 tmp44 [V50,T20] ( 4, 8 ) byref -> r13 "Inline return value spill temp"
;* V51 tmp45 [V51 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V52 tmp46 [V52,T23] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V53 tmp47 [V53,T01] ( 6, 34 ) int -> r13 "Inline stloc first use temp"
; V54 tmp48 [V54,T00] ( 5, 84 ) ref -> r12 class-hnd "dup spill" <System.MulticastDelegate>
; V55 tmp49 [V55,T04] ( 2, 16 ) byref -> [rbp-0xA8] spill-single-def
;* V56 tmp50 [V56 ] ( 0, 0 ) ref -> zero-ref
;* V57 tmp51 [V57 ] ( 0, 0 ) byref -> zero-ref
; V58 tmp52 [V58,T02] ( 4, 20 ) ref -> rcx
;* V59 tmp53 [V59 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]>
;* V60 tmp54 [V60 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]>
; V61 tmp55 [V61,T03] ( 4, 20 ) ref -> rcx class-hnd "Inline return value spill temp" <System.Object>
; V62 tmp56 [V62,T21] ( 4, 8 ) ref -> rax class-hnd "Inline stloc first use temp" <System.Object[]>
;* V63 tmp57 [V63 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V64 tmp58 [V64,T30] ( 3, 4 ) ref -> rax "Single return block return value"
; V65 FramesRoot [V65,T10] ( 6, 10 ) long -> r14 "Pinvoke FrameListRoot"
; V66 PInvokeFrame [V66 ] ( 8, 12 ) struct (72) [rbp-0xF0] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
; V67 tmp61 [V67 ] ( 3, 17 ) ref -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V02._delegate (fldOffset=0x0)" P-DEP
; V68 tmp62 [V68 ] ( 3, 11 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V02._current (fldOffset=0x8)" P-DEP
; V69 tmp63 [V69 ] ( 4, 21 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V02._index (fldOffset=0x10)" P-DEP
;* V70 tmp64 [V70 ] ( 0, 0 ) ref -> zero-ref "field V03._delegate (fldOffset=0x0)" P-INDEP
;* V71 tmp65 [V71 ] ( 0, 0 ) ref -> zero-ref "field V03._current (fldOffset=0x8)" P-INDEP
;* V72 tmp66 [V72 ] ( 0, 0 ) int -> zero-ref "field V03._index (fldOffset=0x10)" P-INDEP
; V73 tmp67 [V73,T32] ( 2, 2 ) ref -> rsi single-def "field V31._delegate (fldOffset=0x0)" P-INDEP
;* V74 tmp68 [V74,T33] ( 0, 0 ) ref -> zero-ref single-def "field V31._current (fldOffset=0x8)" P-INDEP
;* V75 tmp69 [V75,T34] ( 0, 0 ) int -> zero-ref "field V31._index (fldOffset=0x10)" P-INDEP
; V76 tmp70 [V76,T09] ( 3, 12 ) ref -> rax "argument with side effect"
; V77 tmp71 [V77,T24] ( 2, 8 ) long -> r8 "Cast away GC"
; V78 tmp72 [V78,T25] ( 2, 8 ) long -> rcx "Cast away GC"
; V79 tmp73 [V79,T26] ( 2, 8 ) long -> rdx "Cast away GC"
; V80 tmp74 [V80,T27] ( 2, 8 ) long -> rsi "Cast away GC"
; V81 tmp75 [V81,T28] ( 2, 8 ) long -> rdi "Cast away GC"
; V82 tmp76 [V82,T29] ( 2, 8 ) long -> rdi "argument with side effect"
; V83 cse0 [V83,T22] ( 4, 8 ) long -> [rbp-0x70] spill-single-def "CSE - moderate"
;
; Lcl frame size = 200
G_M53640_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 200
vzeroupper
lea rbp, [rsp+0xF0]
xor ecx, ecx
mov qword ptr [rbp-0x68], rcx
vxorps xmm8, xmm8, xmm8
vmovdqu ymmword ptr [rbp-0x60], ymm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0x30], rcx
mov rbx, rdi
mov r15, rsi
;; size=59 bbWeight=1 PerfScore 14.83
G_M53640_IG02:
lea rdi, [rbp-0xE8]
mov rsi, r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r14, rax
mov rsi, rsp
mov qword ptr [rbp-0xC8], rsi
mov rsi, rbp
mov qword ptr [rbp-0xB8], rsi
mov rsi, gword ptr [rbx+0x18]
mov gword ptr [rbp-0x40], rsi
xor rsi, rsi
mov gword ptr [rbp-0x38], rsi
mov dword ptr [rbp-0x30], -1
jmp G_M53640_IG29
;; size=64 bbWeight=1 PerfScore 11.75
G_M53640_IG03:
mov r13, gword ptr [rbp-0x38]
mov rsi, rbx
mov rdx, r15
mov rdi, gword ptr [r13+0x08]
call [r13+0x18]System.Func`3[System.__Canon,System.__Canon,System.__Canon]:Invoke(System.__Canon,System.__Canon):System.__Canon:this
mov r12, rax
call System.Runtime.Loader.AssemblyLoadContext:IsTracingEnabled():ubyte
test eax, eax
je G_M53640_IG28
mov gword ptr [rbp-0x80], r15
mov rdi, r15
mov rax, 0xD1FFAB1E ; code for System.Reflection.AssemblyName:get_FullName():System.String:this
cmp dword ptr [rdi], edi
call [rax]System.Reflection.AssemblyName:get_FullName():System.String:this
mov gword ptr [rbp-0x90], rax
mov rdi, r13
mov rax, 0xD1FFAB1E ; code for System.MulticastDelegate:GetMethodImpl():System.Reflection.MethodInfo:this
cmp dword ptr [rdi], edi
call [rax]System.MulticastDelegate:GetMethodImpl():System.Reflection.MethodInfo:this
mov rdi, rax
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this
mov r13, rax
mov rdi, 0xD1FFAB1E ; global ptr
test byte ptr [rdi], 1
je G_M53640_IG42
;; size=114 bbWeight=2 PerfScore 71.50
G_M53640_IG04:
mov rdi, 0xD1FFAB1E ; data for System.Runtime.Loader.DefaultAssemblyLoadContext:s_loadContext
cmp rbx, gword ptr [rdi]
jne SHORT G_M53640_IG05
mov rax, gword ptr [rbx+0x28]
mov rdx, rax
jmp SHORT G_M53640_IG06
;; size=24 bbWeight=2 PerfScore 17.00
G_M53640_IG05:
mov rdi, rbx
mov gword ptr [rbp-0x78], rbx
mov rax, qword ptr [rbx]
mov rax, qword ptr [rax+0x40]
call [rax+0x08]System.Object:ToString():System.String:this
mov gword ptr [rbp-0x98], rax
mov rdx, gword ptr [rbp-0x98]
mov rbx, gword ptr [rbp-0x78]
;; size=35 bbWeight=2 PerfScore 22.50
G_M53640_IG06:
test r12, r12
jne SHORT G_M53640_IG07
xor rax, rax
xor rcx, rcx
jmp SHORT G_M53640_IG10
;; size=11 bbWeight=2 PerfScore 7.50
G_M53640_IG07:
mov gword ptr [rbp-0x98], rdx
mov rdi, r12
mov rax, qword ptr [r12]
mov rax, qword ptr [rax+0x48]
mov qword ptr [rbp-0x70], rax
call [rax+0x18]System.Reflection.Assembly:get_FullName():System.String:this
mov gword ptr [rbp-0xA0], rax
mov rdi, r12
mov rax, qword ptr [rbp-0x70]
call [rax+0x28]System.Reflection.Assembly:get_IsDynamic():ubyte:this
test eax, eax
jne SHORT G_M53640_IG09
mov gword ptr [rbp-0x88], r12
mov rdi, r12
mov rax, qword ptr [rbp-0x70]
call [rax+0x30]System.Reflection.Assembly:get_Location():System.String:this
test rax, rax
je SHORT G_M53640_IG08
add rax, 12
mov r8, rax
jmp SHORT G_M53640_IG11
;; size=77 bbWeight=2 PerfScore 49.50
G_M53640_IG08:
mov rcx, gword ptr [rbp-0xA0]
mov rdx, gword ptr [rbp-0x98]
mov r12, gword ptr [rbp-0x88]
jmp SHORT G_M53640_IG10
;; size=23 bbWeight=1 PerfScore 5.00
G_M53640_IG09:
mov rcx, gword ptr [rbp-0xA0]
mov rdx, gword ptr [rbp-0x98]
;; size=14 bbWeight=1 PerfScore 2.00
G_M53640_IG10:
xor r8d, r8d
mov gword ptr [rbp-0x88], r12
mov gword ptr [rbp-0x98], rdx
mov gword ptr [rbp-0xA0], rcx
;; size=24 bbWeight=2 PerfScore 6.50
G_M53640_IG11:
mov bword ptr [rbp-0x48], r8
mov rcx, gword ptr [rbp-0xA0]
test rcx, rcx
je SHORT G_M53640_IG12
add rcx, 12
jmp SHORT G_M53640_IG13
;; size=22 bbWeight=2 PerfScore 11.00
G_M53640_IG12:
xor ecx, ecx
;; size=2 bbWeight=2 PerfScore 0.50
G_M53640_IG13:
mov bword ptr [rbp-0x50], rcx
mov rdx, gword ptr [rbp-0x98]
test rdx, rdx
je SHORT G_M53640_IG14
add rdx, 12
jmp SHORT G_M53640_IG15
;; size=22 bbWeight=2 PerfScore 11.00
G_M53640_IG14:
xor edx, edx
;; size=2 bbWeight=2 PerfScore 0.50
G_M53640_IG15:
mov bword ptr [rbp-0x58], rdx
test r13, r13
je SHORT G_M53640_IG16
add r13, 12
mov rsi, r13
jmp SHORT G_M53640_IG17
;; size=18 bbWeight=2 PerfScore 9.50
G_M53640_IG16:
xor esi, esi
;; size=2 bbWeight=2 PerfScore 0.50
G_M53640_IG17:
mov bword ptr [rbp-0x60], rsi
mov r13, gword ptr [rbp-0x90]
test r13, r13
je SHORT G_M53640_IG18
add r13, 12
mov gword ptr [rbp-0x78], rbx
jmp SHORT G_M53640_IG19
;; size=26 bbWeight=2 PerfScore 13.00
G_M53640_IG18:
xor r13d, r13d
mov gword ptr [rbp-0x78], rbx
;; size=7 bbWeight=2 PerfScore 2.50
G_M53640_IG19:
mov bword ptr [rbp-0x68], r13
mov rdi, r13
mov rax, 0xD1FFAB1E ; function address
mov qword ptr [rbp-0xD8], rax
lea rax, G_M53640_IG22
mov qword ptr [rbp-0xC0], rax
lea rax, bword ptr [rbp-0xE8]
mov qword ptr [r14+0x10], rax
mov byte ptr [r14+0x0C], 0
;; size=54 bbWeight=2 PerfScore 14.00
G_M53640_IG20:
mov rax, 0xD1FFAB1E ; code for System.Runtime.Loader.AssemblyLoadContext:<TraceResolvingHandlerInvoked>g____PInvoke|9_0(ulong,ulong,ulong,ulong,ulong):int
;; size=10 bbWeight=2 PerfScore 0.50
G_M53640_IG21:
call [rax]System.Runtime.Loader.AssemblyLoadContext:<TraceResolvingHandlerInvoked>g____PInvoke|9_0(ulong,ulong,ulong,ulong,ulong):int
;; size=2 bbWeight=2 PerfScore 6.00
G_M53640_IG22:
mov byte ptr [r14+0x0C], 1
mov rcx, 0xD1FFAB1E ; function address
cmp dword ptr [rcx], 0
je SHORT G_M53640_IG23
mov rdi, 0xD1FFAB1E
call [rdi]CORINFO_HELP_STOP_FOR_GC
;; size=32 bbWeight=2 PerfScore 17.00
G_M53640_IG23:
mov rax, bword ptr [rbp-0xE0]
mov qword ptr [r14+0x10], rax
xor eax, eax
mov bword ptr [rbp-0x68], rax
;; size=17 bbWeight=2 PerfScore 6.50
G_M53640_IG24:
mov bword ptr [rbp-0x60], rax
;; size=4 bbWeight=2 PerfScore 2.00
G_M53640_IG25:
mov bword ptr [rbp-0x58], rax
;; size=4 bbWeight=2 PerfScore 2.00
G_M53640_IG26:
mov bword ptr [rbp-0x50], rax
;; size=4 bbWeight=2 PerfScore 2.00
G_M53640_IG27:
mov bword ptr [rbp-0x48], rax
mov rbx, gword ptr [rbp-0x78]
mov r12, gword ptr [rbp-0x88]
mov r15, gword ptr [rbp-0x80]
;; size=19 bbWeight=2 PerfScore 8.00
G_M53640_IG28:
test r12, r12
jne SHORT G_M53640_IG38
;; size=5 bbWeight=2 PerfScore 2.50
G_M53640_IG29:
mov r13d, dword ptr [rbp-0x30]
inc r13d
mov r12, gword ptr [rbp-0x40]
lea rax, bword ptr [rbp-0x40]
mov bword ptr [rbp-0xA8], rax
test r12, r12
jne SHORT G_M53640_IG31
;; size=27 bbWeight=8 PerfScore 40.00
G_M53640_IG30:
xor rcx, rcx
jmp SHORT G_M53640_IG36
;; size=4 bbWeight=2 PerfScore 4.50
G_M53640_IG31:
mov rsi, gword ptr [r12+0x28]
mov rdi, 0xD1FFAB1E ; System.Object[]
- mov rcx, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFARRAY
- call [rcx]CORINFO_HELP_ISINSTANCEOFARRAY
+ call CORINFO_HELP_ISINSTANCEOFARRAY
test rax, rax
jne SHORT G_M53640_IG34
test r13d, r13d
je SHORT G_M53640_IG33
- ;; size=37 bbWeight=2 PerfScore 16.00
+ ;; size=30 bbWeight=2 PerfScore 11.50
G_M53640_IG32:
xor rcx, rcx
jmp SHORT G_M53640_IG36
;; size=4 bbWeight=8 PerfScore 18.00
G_M53640_IG33:
mov rcx, r12
jmp SHORT G_M53640_IG36
;; size=5 bbWeight=8 PerfScore 18.00
G_M53640_IG34:
cmp r13d, dword ptr [r12+0x30]
jae SHORT G_M53640_IG32
;; size=7 bbWeight=16 PerfScore 64.00
G_M53640_IG35:
cmp r13d, dword ptr [rax+0x08]
jae SHORT G_M53640_IG41
mov ecx, r13d
mov rcx, gword ptr [rax+8*rcx+0x10]
;; size=14 bbWeight=2 PerfScore 12.50
G_M53640_IG36:
mov rax, bword ptr [rbp-0xA8]
mov gword ptr [rax+0x08], rcx
test rcx, rcx
je SHORT G_M53640_IG39
;; size=16 bbWeight=8 PerfScore 26.00
G_M53640_IG37:
mov dword ptr [rbp-0x30], r13d
jmp G_M53640_IG03
;; size=9 bbWeight=4 PerfScore 12.00
G_M53640_IG38:
mov rax, r12
jmp SHORT G_M53640_IG40
;; size=5 bbWeight=0.50 PerfScore 1.12
G_M53640_IG39:
xor rax, rax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M53640_IG40:
add rsp, 200
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=18 bbWeight=1 PerfScore 4.25
G_M53640_IG41:
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M53640_IG42:
mov rdi, 0xD1FFAB1E
mov esi, 0x4DB
call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
jmp G_M53640_IG04
;; size=25 bbWeight=0 PerfScore 0.00
-; Total bytes of code 875, prolog size 53, PerfScore 533.58, instruction count 217, allocated bytes for code 875 (MethodHash=69bc2e77) for method System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts)
+; Total bytes of code 868, prolog size 53, PerfScore 529.08, instruction count 216, allocated bytes for code 868 (MethodHash=69bc2e77) for method System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts) -7 (-3.06 % of base) - System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this ; Assembly listing for method System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T10] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Runtime.Loader.AssemblyLoadContext>
; V01 arg1 [V01,T07] ( 3, 4 ) ref -> rbx class-hnd single-def <System.Reflection.Assembly>
; V02 arg2 [V02,T08] ( 3, 4 ) ref -> r15 class-hnd single-def <System.String>
; V03 loc0 [V03 ] ( 8, 33 ) struct (24) [rbp-0x40] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Reflection.Assembly,System.String,long]]>
;* V04 loc1 [V04 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Reflection.Assembly,System.String,long]]>
; V05 loc2 [V05,T09] ( 3, 6 ) ref -> rax class-hnd <System.Func`3[System.Reflection.Assembly,System.String,long]>
; V06 loc3 [V06,T11] ( 3, 4.50) long -> rax
;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V08 tmp1 [V08,T12] ( 2, 4 ) ref -> rsi class-hnd single-def "Inlining Arg" <System.Func`3[System.Reflection.Assembly,System.String,long]>
;* V09 tmp2 [V09 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op "NewObj constructor temp" <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Reflection.Assembly,System.String,long]]>
;* V10 tmp3 [V10,T06] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V11 tmp4 [V11,T01] ( 6, 34 ) int -> r14 "Inline stloc first use temp"
; V12 tmp5 [V12,T00] ( 5, 84 ) ref -> r13 class-hnd "dup spill" <System.MulticastDelegate>
; V13 tmp6 [V13,T04] ( 2, 16 ) byref -> r12
;* V14 tmp7 [V14 ] ( 0, 0 ) ref -> zero-ref
;* V15 tmp8 [V15 ] ( 0, 0 ) byref -> zero-ref
; V16 tmp9 [V16,T02] ( 4, 20 ) ref -> rax
;* V17 tmp10 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Func`3[System.Reflection.Assembly,System.String,long]>
;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Func`3[System.Reflection.Assembly,System.String,long]>
; V19 tmp12 [V19,T03] ( 4, 20 ) ref -> rax class-hnd "Inline return value spill temp" <System.Object>
; V20 tmp13 [V20,T05] ( 4, 8 ) ref -> rax class-hnd "Inline stloc first use temp" <System.Object[]>
;* V21 tmp14 [V21 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V22 tmp15 [V22 ] ( 3, 17 ) ref -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V03._delegate (fldOffset=0x0)" P-DEP
; V23 tmp16 [V23 ] ( 3, 11 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V03._current (fldOffset=0x8)" P-DEP
; V24 tmp17 [V24 ] ( 4, 21 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V03._index (fldOffset=0x10)" P-DEP
;* V25 tmp18 [V25 ] ( 0, 0 ) ref -> zero-ref "field V04._delegate (fldOffset=0x0)" P-INDEP
;* V26 tmp19 [V26 ] ( 0, 0 ) ref -> zero-ref "field V04._current (fldOffset=0x8)" P-INDEP
;* V27 tmp20 [V27 ] ( 0, 0 ) int -> zero-ref "field V04._index (fldOffset=0x10)" P-INDEP
; V28 tmp21 [V28,T13] ( 2, 2 ) ref -> rsi single-def "field V09._delegate (fldOffset=0x0)" P-INDEP
;* V29 tmp22 [V29,T14] ( 0, 0 ) ref -> zero-ref single-def "field V09._current (fldOffset=0x8)" P-INDEP
;* V30 tmp23 [V30,T15] ( 0, 0 ) int -> zero-ref "field V09._index (fldOffset=0x10)" P-INDEP
;
; Lcl frame size = 24
G_M27358_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 24
lea rbp, [rsp+0x40]
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
xor eax, eax
mov qword ptr [rbp-0x30], rax
mov rbx, rsi
mov r15, rdx
;; size=41 bbWeight=1 PerfScore 10.83
G_M27358_IG02:
mov rsi, gword ptr [rdi+0x10]
mov gword ptr [rbp-0x40], rsi
xor rsi, rsi
mov gword ptr [rbp-0x38], rsi
mov dword ptr [rbp-0x30], -1
jmp SHORT G_M27358_IG04
;; size=23 bbWeight=1 PerfScore 7.25
G_M27358_IG03:
mov rax, gword ptr [rbp-0x38]
mov rsi, rbx
mov rdx, r15
mov rdi, gword ptr [rax+0x08]
call [rax+0x18]System.Func`3[System.__Canon,System.__Canon,long]:Invoke(System.__Canon,System.__Canon):long:this
test rax, rax
jne SHORT G_M27358_IG13
;; size=22 bbWeight=2 PerfScore 15.50
G_M27358_IG04:
mov r14d, dword ptr [rbp-0x30]
inc r14d
mov r13, gword ptr [rbp-0x40]
lea r12, bword ptr [rbp-0x40]
test r13, r13
jne SHORT G_M27358_IG06
;; size=20 bbWeight=8 PerfScore 32.00
G_M27358_IG05:
xor rax, rax
jmp SHORT G_M27358_IG11
;; size=4 bbWeight=2 PerfScore 4.50
G_M27358_IG06:
mov rsi, gword ptr [r13+0x28]
mov rdi, 0xD1FFAB1E ; System.Object[]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFARRAY
- call [rax]CORINFO_HELP_ISINSTANCEOFARRAY
+ call CORINFO_HELP_ISINSTANCEOFARRAY
test rax, rax
jne SHORT G_M27358_IG09
test r14d, r14d
je SHORT G_M27358_IG08
- ;; size=36 bbWeight=2 PerfScore 16.00
+ ;; size=29 bbWeight=2 PerfScore 11.50
G_M27358_IG07:
xor rax, rax
jmp SHORT G_M27358_IG11
;; size=4 bbWeight=8 PerfScore 18.00
G_M27358_IG08:
mov rax, r13
jmp SHORT G_M27358_IG11
;; size=5 bbWeight=8 PerfScore 18.00
G_M27358_IG09:
cmp r14d, dword ptr [r13+0x30]
jae SHORT G_M27358_IG07
;; size=6 bbWeight=16 PerfScore 64.00
G_M27358_IG10:
cmp r14d, dword ptr [rax+0x08]
jae SHORT G_M27358_IG16
mov esi, r14d
mov rax, gword ptr [rax+8*rsi+0x10]
;; size=14 bbWeight=2 PerfScore 12.50
G_M27358_IG11:
mov gword ptr [r12+0x08], rax
test rax, rax
je SHORT G_M27358_IG14
;; size=10 bbWeight=8 PerfScore 18.00
G_M27358_IG12:
mov dword ptr [rbp-0x30], r14d
jmp SHORT G_M27358_IG03
;; size=6 bbWeight=4 PerfScore 12.00
G_M27358_IG13:
add rsp, 24
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M27358_IG14:
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M27358_IG15:
add rsp, 24
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M27358_IG16:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 229, prolog size 35, PerfScore 232.96, instruction count 77, allocated bytes for code 229 (MethodHash=16d79521) for method System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts)
+; Total bytes of code 222, prolog size 35, PerfScore 228.46, instruction count 76, allocated bytes for code 222 (MethodHash=16d79521) for method System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts) -7 (-0.78 % of base) - System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly ; Assembly listing for method System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (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; 15 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T07] ( 6, 7.50) ref -> [rbp-0x70] class-hnd single-def <System.ResolveEventHandler>
; V01 arg1 [V01,T29] ( 3, 2.50) ref -> r14 class-hnd single-def <System.Reflection.RuntimeAssembly>
; V02 arg2 [V02,T09] ( 5, 6.50) ref -> [rbp-0x78] class-hnd single-def <System.String>
; V03 loc0 [V03,T33] ( 2, 2.50) ref -> [rbp-0x80] class-hnd exact single-def <System.ResolveEventArgs>
; V04 loc1 [V04 ] ( 8, 19.50) struct (24) [rbp-0x40] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.ResolveEventHandler]>
;* V05 loc2 [V05 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.ResolveEventHandler]>
; V06 loc3 [V06,T10] ( 4, 8 ) ref -> r14 class-hnd exact <System.ResolveEventHandler>
; V07 loc4 [V07,T04] ( 7, 14 ) ref -> [rbp-0x88] class-hnd spill-single-def <System.Reflection.Assembly>
; V08 loc5 [V08,T30] ( 3, 4.50) ref -> rax class-hnd exact <System.Reflection.RuntimeAssembly>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V10 tmp1 [V10,T31] ( 4, 4 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp" <System.ResolveEventArgs>
;* V11 tmp2 [V11 ] ( 0, 0 ) ref -> zero-ref
; V12 tmp3 [V12,T27] ( 3, 6 ) ref -> r14
;* V13 tmp4 [V13 ] ( 0, 0 ) ref -> zero-ref
;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref
; V15 tmp6 [V15,T11] ( 4, 8 ) ref -> [rbp-0x90]
;* V16 tmp7 [V16 ] ( 0, 0 ) ref -> zero-ref
;* V17 tmp8 [V17 ] ( 0, 0 ) ref -> zero-ref
;* V18 tmp9 [V18 ] ( 0, 0 ) ref -> zero-ref
;* V19 tmp10 [V19 ] ( 0, 0 ) ref -> zero-ref
;* V20 tmp11 [V20 ] ( 0, 0 ) ref -> zero-ref
;* V21 tmp12 [V21 ] ( 0, 0 ) ref -> zero-ref
; V22 tmp13 [V22,T12] ( 3, 6 ) ref -> rax
;* V23 tmp14 [V23 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op "NewObj constructor temp" <System.Delegate+InvocationListEnumerator`1[System.ResolveEventHandler]>
; V24 tmp15 [V24,T28] ( 2, 4 ) ubyte -> rax "Inline return value spill temp"
; V25 tmp16 [V25,T03] ( 4, 16 ) ref -> rdi class-hnd exact "Inlining Arg" <System.ResolveEventHandler>
;* V26 tmp17 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V27 tmp18 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V28 tmp19 [V28 ] ( 2, 4 ) byref -> [rbp-0x48] must-init pinned "Inline stloc first use temp"
;* V29 tmp20 [V29 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
; V30 tmp21 [V30 ] ( 2, 4 ) byref -> [rbp-0x50] must-init pinned "Inline stloc first use temp"
;* V31 tmp22 [V31 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
; V32 tmp23 [V32 ] ( 2, 4 ) byref -> [rbp-0x58] must-init pinned "Inline stloc first use temp"
;* V33 tmp24 [V33 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
; V34 tmp25 [V34 ] ( 2, 4 ) byref -> [rbp-0x60] must-init pinned "Inline stloc first use temp"
;* V35 tmp26 [V35 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
;* V36 tmp27 [V36 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V37 tmp28 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp"
; V38 tmp29 [V38,T13] ( 4, 8 ) byref -> rcx "Inline return value spill temp"
; V39 tmp30 [V39,T14] ( 4, 8 ) byref -> rdx "Inline return value spill temp"
; V40 tmp31 [V40,T15] ( 4, 8 ) byref -> rsi "Inline return value spill temp"
; V41 tmp32 [V41,T16] ( 4, 8 ) byref -> rdi "Inline return value spill temp"
;* V42 tmp33 [V42 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V43 tmp34 [V43,T21] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V44 tmp35 [V44,T01] ( 6, 30 ) int -> r14 "Inline stloc first use temp"
; V45 tmp36 [V45,T00] ( 5, 68 ) ref -> [rbp-0x98] class-hnd spill-single-def "dup spill" <System.MulticastDelegate>
; V46 tmp37 [V46,T19] ( 2, 8 ) byref -> [rbp-0xA0] spill-single-def
;* V47 tmp38 [V47 ] ( 0, 0 ) ref -> zero-ref
;* V48 tmp39 [V48 ] ( 0, 0 ) byref -> zero-ref
; V49 tmp40 [V49,T05] ( 4, 12 ) ref -> rdx
;* V50 tmp41 [V50 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.ResolveEventHandler>
;* V51 tmp42 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.ResolveEventHandler>
; V52 tmp43 [V52,T02] ( 4, 20 ) ref -> rdx class-hnd "Inline return value spill temp" <System.Object>
; V53 tmp44 [V53,T17] ( 4, 8 ) ref -> rax class-hnd "Inline stloc first use temp" <System.Object[]>
;* V54 tmp45 [V54 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V55 tmp46 [V55,T32] ( 3, 4 ) ref -> rax "Single return block return value"
; V56 FramesRoot [V56,T08] ( 6, 10 ) long -> r13 "Pinvoke FrameListRoot"
; V57 PInvokeFrame [V57 ] ( 8, 12 ) struct (72) [rbp-0xE8] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
; V58 tmp49 [V58 ] ( 3, 8.50) ref -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V04._delegate (fldOffset=0x0)" P-DEP
; V59 tmp50 [V59 ] ( 3, 6.50) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V04._current (fldOffset=0x8)" P-DEP
; V60 tmp51 [V60 ] ( 4, 12.50) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V04._index (fldOffset=0x10)" P-DEP
;* V61 tmp52 [V61 ] ( 0, 0 ) ref -> zero-ref "field V05._delegate (fldOffset=0x0)" P-INDEP
;* V62 tmp53 [V62 ] ( 0, 0 ) ref -> zero-ref "field V05._current (fldOffset=0x8)" P-INDEP
;* V63 tmp54 [V63 ] ( 0, 0 ) int -> zero-ref "field V05._index (fldOffset=0x10)" P-INDEP
;* V64 tmp55 [V64,T34] ( 0, 0 ) ref -> zero-ref single-def "field V23._delegate (fldOffset=0x0)" P-INDEP
;* V65 tmp56 [V65,T35] ( 0, 0 ) ref -> zero-ref single-def "field V23._current (fldOffset=0x8)" P-INDEP
;* V66 tmp57 [V66,T36] ( 0, 0 ) int -> zero-ref "field V23._index (fldOffset=0x10)" P-INDEP
; V67 tmp58 [V67,T20] ( 2, 8 ) ref -> rsi "argument with side effect"
; V68 tmp59 [V68,T06] ( 3, 12 ) ref -> rax "argument with side effect"
; V69 tmp60 [V69,T22] ( 2, 8 ) long -> rcx "Cast away GC"
; V70 tmp61 [V70,T23] ( 2, 8 ) long -> rdx "Cast away GC"
; V71 tmp62 [V71,T24] ( 2, 8 ) long -> rsi "Cast away GC"
; V72 tmp63 [V72,T25] ( 2, 8 ) long -> rdi "Cast away GC"
; V73 tmp64 [V73,T26] ( 2, 8 ) long -> rdi "argument with side effect"
; V74 cse0 [V74,T18] ( 4, 8 ) long -> [rbp-0x68] spill-single-def "CSE - moderate"
;
; Lcl frame size = 200
G_M55783_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 200
vzeroupper
lea rbp, [rsp+0xF0]
vxorps xmm8, xmm8, xmm8
vmovdqu ymmword ptr [rbp-0x60], ymm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
xor ecx, ecx
mov qword ptr [rbp-0x30], rcx
mov rbx, rdi
mov r14, rsi
mov r15, rdx
;; size=58 bbWeight=1 PerfScore 14.08
G_M55783_IG02:
lea rdi, [rbp-0xE0]
mov rsi, r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r13, rax
mov rdi, rsp
mov qword ptr [rbp-0xC0], rdi
mov rdi, rbp
mov qword ptr [rbp-0xB0], rdi
test rbx, rbx
jne SHORT G_M55783_IG04
;; size=43 bbWeight=1 PerfScore 5.75
G_M55783_IG03:
xor rax, rax
jmp G_M55783_IG38
;; size=7 bbWeight=0.50 PerfScore 1.12
G_M55783_IG04:
mov rdi, 0xD1FFAB1E ; System.ResolveEventArgs
call CORINFO_HELP_NEWSFAST
mov r12, rax
lea rdi, bword ptr [r12+0x08]
mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
lea rdi, bword ptr [r12+0x10]
mov rsi, r14
call CORINFO_HELP_ASSIGN_REF
mov gword ptr [rbp-0x40], rbx
xor rsi, rsi
mov gword ptr [rbp-0x38], rsi
mov dword ptr [rbp-0x30], -1
jmp G_M55783_IG30
;; size=66 bbWeight=0.50 PerfScore 5.12
G_M55783_IG05:
mov r14, gword ptr [rbp-0x38]
mov rax, 0xD1FFAB1E ; code for System.AppDomain:get_CurrentDomain():System.AppDomain
call [rax]System.AppDomain:get_CurrentDomain():System.AppDomain
mov rsi, rax
mov gword ptr [rbp-0x80], r12
mov rdx, r12
mov rdi, gword ptr [r14+0x08]
call [r14+0x18]System.ResolveEventHandler:Invoke(System.Object,System.ResolveEventArgs):System.Reflection.Assembly:this
mov gword ptr [rbp-0x88], rax
mov rcx, 0xD1FFAB1E ; data for System.Runtime.Loader.AssemblyLoadContext:AssemblyResolve
mov rdi, gword ptr [rcx]
test rdi, rdi
je G_M55783_IG10
mov gword ptr [rbp-0x70], rbx
cmp rdi, rbx
je SHORT G_M55783_IG07
mov rbx, gword ptr [rbp-0x70]
mov rsi, rbx
mov rcx, 0xD1FFAB1E ; code for System.MulticastDelegate:Equals(System.Object):ubyte:this
call [rcx]System.MulticastDelegate:Equals(System.Object):ubyte:this
test eax, eax
je SHORT G_M55783_IG09
;; size=95 bbWeight=2 PerfScore 46.50
G_M55783_IG06:
mov gword ptr [rbp-0x70], rbx
;; size=4 bbWeight=1 PerfScore 1.00
G_M55783_IG07:
call System.Runtime.Loader.AssemblyLoadContext:IsTracingEnabled():ubyte
test eax, eax
je SHORT G_M55783_IG08
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.MulticastDelegate:GetMethodImpl():System.Reflection.MethodInfo:this
cmp dword ptr [rdi], edi
call [rax]System.MulticastDelegate:GetMethodImpl():System.Reflection.MethodInfo:this
mov rdi, rax
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this
mov r14, rax
mov rax, gword ptr [rbp-0x88]
test rax, rax
jne SHORT G_M55783_IG11
xor rcx, rcx
xor rdx, rdx
jmp G_M55783_IG14
;; size=63 bbWeight=2 PerfScore 42.00
G_M55783_IG08:
mov rax, gword ptr [rbp-0x88]
mov rbx, gword ptr [rbp-0x70]
jmp G_M55783_IG29
;; size=16 bbWeight=1 PerfScore 4.00
G_M55783_IG09:
mov rax, gword ptr [rbp-0x88]
jmp G_M55783_IG29
;; size=12 bbWeight=1 PerfScore 3.00
G_M55783_IG10:
mov rax, gword ptr [rbp-0x88]
jmp G_M55783_IG29
;; size=12 bbWeight=1 PerfScore 3.00
G_M55783_IG11:
mov rdi, rax
mov rcx, qword ptr [rax]
mov rcx, qword ptr [rcx+0x48]
mov qword ptr [rbp-0x68], rcx
call [rcx+0x18]System.Reflection.Assembly:get_FullName():System.String:this
mov gword ptr [rbp-0x90], rax
mov rdi, gword ptr [rbp-0x88]
mov rax, qword ptr [rbp-0x68]
call [rax+0x28]System.Reflection.Assembly:get_IsDynamic():ubyte:this
test eax, eax
jne SHORT G_M55783_IG13
mov rdi, gword ptr [rbp-0x88]
mov rax, qword ptr [rbp-0x68]
call [rax+0x30]System.Reflection.Assembly:get_Location():System.String:this
test rax, rax
je SHORT G_M55783_IG12
add rax, 12
mov rcx, rax
mov rax, gword ptr [rbp-0x88]
jmp SHORT G_M55783_IG15
;; size=77 bbWeight=2 PerfScore 50.50
G_M55783_IG12:
mov rax, gword ptr [rbp-0x88]
mov rdx, gword ptr [rbp-0x90]
jmp SHORT G_M55783_IG14
;; size=16 bbWeight=1 PerfScore 4.00
G_M55783_IG13:
mov rax, gword ptr [rbp-0x88]
mov rdx, gword ptr [rbp-0x90]
;; size=14 bbWeight=1 PerfScore 2.00
G_M55783_IG14:
xor ecx, ecx
mov gword ptr [rbp-0x90], rdx
;; size=9 bbWeight=2 PerfScore 2.50
G_M55783_IG15:
mov bword ptr [rbp-0x48], rcx
mov rdx, gword ptr [rbp-0x90]
test rdx, rdx
je SHORT G_M55783_IG16
add rdx, 12
jmp SHORT G_M55783_IG17
;; size=22 bbWeight=2 PerfScore 11.00
G_M55783_IG16:
xor edx, edx
;; size=2 bbWeight=2 PerfScore 0.50
G_M55783_IG17:
mov bword ptr [rbp-0x50], rdx
test r14, r14
je SHORT G_M55783_IG18
add r14, 12
mov rsi, r14
jmp SHORT G_M55783_IG19
;; size=18 bbWeight=2 PerfScore 9.50
G_M55783_IG18:
xor esi, esi
;; size=2 bbWeight=2 PerfScore 0.50
G_M55783_IG19:
mov bword ptr [rbp-0x58], rsi
test r15, r15
je SHORT G_M55783_IG20
mov gword ptr [rbp-0x78], r15
lea rdi, bword ptr [r15+0x0C]
jmp SHORT G_M55783_IG21
;; size=19 bbWeight=2 PerfScore 11.50
G_M55783_IG20:
xor edi, edi
mov gword ptr [rbp-0x78], r15
;; size=6 bbWeight=2 PerfScore 2.50
G_M55783_IG21:
mov bword ptr [rbp-0x60], rdi
mov r8, 0xD1FFAB1E ; function address
mov qword ptr [rbp-0xD0], r8
lea r8, G_M55783_IG24
mov qword ptr [rbp-0xB8], r8
lea r8, bword ptr [rbp-0xE0]
mov qword ptr [r13+0x10], r8
mov byte ptr [r13+0x0C], 0
;; size=51 bbWeight=2 PerfScore 13.50
G_M55783_IG22:
mov rax, 0xD1FFAB1E ; code for System.Runtime.Loader.AssemblyLoadContext:<TraceAssemblyResolveHandlerInvoked>g____PInvoke|10_0(ulong,ulong,ulong,ulong):int
;; size=10 bbWeight=2 PerfScore 0.50
G_M55783_IG23:
call [rax]System.Runtime.Loader.AssemblyLoadContext:<TraceAssemblyResolveHandlerInvoked>g____PInvoke|10_0(ulong,ulong,ulong,ulong):int
;; size=2 bbWeight=2 PerfScore 6.00
G_M55783_IG24:
mov byte ptr [r13+0x0C], 1
mov rcx, 0xD1FFAB1E ; function address
cmp dword ptr [rcx], 0
je SHORT G_M55783_IG25
mov rdi, 0xD1FFAB1E
call [rdi]CORINFO_HELP_STOP_FOR_GC
;; size=32 bbWeight=2 PerfScore 17.00
G_M55783_IG25:
mov rdi, bword ptr [rbp-0xD8]
mov qword ptr [r13+0x10], rdi
xor edi, edi
mov bword ptr [rbp-0x60], rdi
;; size=17 bbWeight=2 PerfScore 6.50
G_M55783_IG26:
mov bword ptr [rbp-0x58], rdi
;; size=4 bbWeight=2 PerfScore 2.00
G_M55783_IG27:
mov bword ptr [rbp-0x50], rdi
;; size=4 bbWeight=2 PerfScore 2.00
G_M55783_IG28:
mov bword ptr [rbp-0x48], rdi
mov rax, gword ptr [rbp-0x88]
mov rbx, gword ptr [rbp-0x70]
mov r15, gword ptr [rbp-0x78]
;; size=19 bbWeight=2 PerfScore 8.00
G_M55783_IG29:
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Runtime.Loader.AssemblyLoadContext:GetRuntimeAssembly(System.Reflection.Assembly):System.Reflection.RuntimeAssembly
call [rax]System.Runtime.Loader.AssemblyLoadContext:GetRuntimeAssembly(System.Reflection.Assembly):System.Reflection.RuntimeAssembly
test rax, rax
mov r12, gword ptr [rbp-0x80]
jne G_M55783_IG38
;; size=28 bbWeight=2 PerfScore 11.50
G_M55783_IG30:
mov r14d, dword ptr [rbp-0x30]
inc r14d
mov rax, gword ptr [rbp-0x40]
mov gword ptr [rbp-0x98], rax
lea rcx, bword ptr [rbp-0x40]
mov bword ptr [rbp-0xA0], rcx
test rax, rax
jne SHORT G_M55783_IG32
;; size=34 bbWeight=4 PerfScore 24.00
G_M55783_IG31:
xor rdx, rdx
jmp SHORT G_M55783_IG37
;; size=4 bbWeight=2 PerfScore 4.50
G_M55783_IG32:
mov rsi, gword ptr [rax+0x28]
mov rdi, 0xD1FFAB1E ; System.Object[]
- mov rdx, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFARRAY
- call [rdx]CORINFO_HELP_ISINSTANCEOFARRAY
+ call CORINFO_HELP_ISINSTANCEOFARRAY
test rax, rax
jne SHORT G_M55783_IG35
test r14d, r14d
je SHORT G_M55783_IG34
- ;; size=36 bbWeight=2 PerfScore 16.00
+ ;; size=29 bbWeight=2 PerfScore 11.50
G_M55783_IG33:
xor rdx, rdx
jmp SHORT G_M55783_IG37
;; size=4 bbWeight=8 PerfScore 18.00
G_M55783_IG34:
mov rdx, gword ptr [rbp-0x98]
jmp SHORT G_M55783_IG37
;; size=9 bbWeight=8 PerfScore 24.00
G_M55783_IG35:
mov rdx, gword ptr [rbp-0x98]
cmp r14d, dword ptr [rdx+0x30]
jae SHORT G_M55783_IG33
;; size=13 bbWeight=16 PerfScore 80.00
G_M55783_IG36:
cmp r14d, dword ptr [rax+0x08]
jae SHORT G_M55783_IG39
mov edx, r14d
mov rdx, gword ptr [rax+8*rdx+0x10]
;; size=14 bbWeight=2 PerfScore 12.50
G_M55783_IG37:
mov rcx, bword ptr [rbp-0xA0]
mov gword ptr [rcx+0x08], rdx
test rdx, rdx
je G_M55783_IG03
mov dword ptr [rbp-0x30], r14d
jmp G_M55783_IG05
;; size=29 bbWeight=4 PerfScore 25.00
G_M55783_IG38:
add rsp, 200
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=18 bbWeight=1 PerfScore 4.25
G_M55783_IG39:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 895, prolog size 49, PerfScore 495.33, instruction count 217, allocated bytes for code 895 (MethodHash=d34b2618) for method System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts)
+; Total bytes of code 888, prolog size 49, PerfScore 490.83, instruction count 216, allocated bytes for code 888 (MethodHash=d34b2618) for method System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts) -4 (-3.31 % of base) - System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int ; Assembly listing for method System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 4, 3.50) int -> r15 single-def
-; V01 arg1 [V01,T00] ( 5, 3.50) ref -> rbx class-hnd single-def <System.String>
+; V00 arg0 [V00,T01] ( 4, 3.50) int -> rdi single-def
+; V01 arg1 [V01,T00] ( 6, 4 ) ref -> rsi 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 ) ref -> zero-ref single-def "spilling varStr"
+; V04 tmp2 [V04,T05] ( 3, 3 ) byref -> rax single-def "clonning data ptr"
+; V05 tmp3 [V05,T03] ( 2, 2 ) int -> rax "spilling unroll qmark"
+;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr"
+; V07 tmp5 [V07,T06] ( 2, 2 ) byref -> rax single-def "clonning data ptr"
+; V08 tmp6 [V08,T04] ( 2, 2 ) int -> rax "spilling unroll qmark"
+; V09 cse0 [V09,T02] ( 5, 2.50) int -> rcx "CSE - aggressive"
;
; Lcl frame size = 0
G_M63502_IG01:
push rbp
- push r15
- push rbx
- lea rbp, [rsp+0x10]
- mov r15d, edi
- mov rbx, rsi
- ;; size=15 bbWeight=1 PerfScore 4.00
+ mov rbp, rsp
+ ;; size=4 bbWeight=1 PerfScore 1.25
G_M63502_IG02:
- test r15d, r15d
+ test edi, edi
jne SHORT G_M63502_IG07
- ;; size=5 bbWeight=1 PerfScore 1.25
+ ;; size=4 bbWeight=1 PerfScore 1.25
G_M63502_IG03:
- test rbx, rbx
+ test rsi, rsi
je SHORT G_M63502_IG07
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; 'Start'
-
- mov edx, 4
- mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this
- call [rax]System.String:EndsWith(System.String,int):ubyte:this
+ mov ecx, dword ptr [rsi+0x08]
+ cmp ecx, 5
+ jl SHORT G_M63502_IG05
+ mov eax, ecx
+ lea rax, bword ptr [rsi+2*rax-0x0A]
+ mov rdx, 0xD1FFAB1E
+ xor rdx, qword ptr [rax+0x0C]
+ mov eax, dword ptr [rax+0x12]
+ xor eax, 0xD1FFAB1E
+ or rax, rdx
+ sete al
+ movzx rax, al
test eax, eax
je SHORT G_M63502_IG05
mov eax, 1
- ;; size=44 bbWeight=0.50 PerfScore 3.38
+ ;; size=60 bbWeight=0.50 PerfScore 7.12
G_M63502_IG04:
- pop rbx
- pop r15
pop rbp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.25
+ ;; size=2 bbWeight=0.50 PerfScore 0.75
G_M63502_IG05:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; 'Stop'
-
- mov edx, 4
- mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this
- call [rax]System.String:EndsWith(System.String,int):ubyte:this
+ cmp ecx, 4
+ jl SHORT G_M63502_IG07
+ mov eax, ecx
+ lea rax, bword ptr [rsi+2*rax-0x08]
+ mov rcx, 0xD1FFAB1E
+ cmp qword ptr [rax+0x0C], rcx
+ sete al
+ movzx rax, al
test eax, eax
je SHORT G_M63502_IG07
mov eax, 2
- ;; size=39 bbWeight=0.50 PerfScore 2.75
+ ;; size=41 bbWeight=0.50 PerfScore 4.25
G_M63502_IG06:
- pop rbx
- pop r15
pop rbp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.25
+ ;; size=2 bbWeight=0.50 PerfScore 0.75
G_M63502_IG07:
- mov eax, r15d
- ;; size=3 bbWeight=0.50 PerfScore 0.12
+ mov eax, edi
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
G_M63502_IG08:
- pop rbx
- pop r15
pop rbp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.25
+ ;; size=2 bbWeight=0.50 PerfScore 0.75
-; Total bytes of code 121, prolog size 9, PerfScore 15.25, instruction count 39, allocated bytes for code 121 (MethodHash=d35407f1) for method System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (FullOpts)
+; Total bytes of code 117, prolog size 4, PerfScore 16.25, instruction count 39, allocated bytes for code 117 (MethodHash=d35407f1) for method System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (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/24f9c5500645adc300f5606575545ea4 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Build completed in 1 hour 41 minutes.
dotnet/runtime#98593
CoreLib diffs
Frameworks diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: