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
[MichalPetryka] Unify Default Comparer logic #73
Comments
Top method regressions84 (24.14 % of base) - System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int ; Assembly listing for method System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 0 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T09] ( 5, 4.20) long -> rdi single-def
-; V01 arg0 [V01,T07] ( 3, 6 ) byref -> rbx single-def
-; V02 arg1 [V02,T08] ( 3, 6 ) ref -> r15 class-hnd single-def
-; V03 arg2 [V03,T10] ( 3, 4 ) ref -> r14 class-hnd single-def
-; V04 arg3 [V04,T11] ( 3, 4 ) ref -> r13 class-hnd single-def
-; V05 arg4 [V05,T12] ( 3, 4 ) ref -> r12 class-hnd single-def
-; V06 arg5 [V06,T14] ( 2, 5 ) int -> [rbp+10H] single-def
-; V07 loc0 [V07,T01] ( 6, 17.50) int -> [rbp-34H]
-; V08 loc1 [V08,T02] ( 5, 14 ) byref -> [rbp-48H] spill-single-def
+; V00 TypeCtx [V00,T16] ( 5, 4.20) long -> rdi single-def
+; V01 arg0 [V01,T15] ( 3, 6 ) byref -> r12 single-def
+; V02 arg1 [V02,T00] ( 5, 22 ) ref -> rbx class-hnd single-def
+; V03 arg2 [V03,T01] ( 5, 22 ) ref -> r15 class-hnd single-def
+; V04 arg3 [V04,T02] ( 5, 22 ) ref -> r14 class-hnd single-def
+; V05 arg4 [V05,T03] ( 5, 22 ) ref -> r13 class-hnd single-def
+; V06 arg5 [V06,T18] ( 2, 5 ) int -> [rbp+10H] single-def
+; V07 loc0 [V07,T05] ( 6, 17.50) int -> [rbp-34H]
+; V08 loc1 [V08,T09] ( 5, 14 ) byref -> [rbp-48H] spill-single-def
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V12 tmp3 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V13 tmp4 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V14 tmp5 [V14,T00] ( 3, 24 ) ref -> rax "argument with side effect"
-; V15 tmp6 [V15,T03] ( 3, 12 ) ref -> rax "argument with side effect"
-; V16 tmp7 [V16,T04] ( 3, 12 ) ref -> rax "argument with side effect"
-; V17 tmp8 [V17,T05] ( 3, 12 ) ref -> rax "argument with side effect"
-; V18 cse0 [V18,T06] ( 5, 11 ) long -> [rbp-40H] spill-single-def "CSE - aggressive"
-; V19 rat0 [V19,T15] ( 3, 4 ) long -> registers "runtime lookup"
-; V20 rat1 [V20,T13] ( 3, 5.60) long -> rdx "fgMakeTemp is creating a new local variable"
+; V14 tmp5 [V14,T10] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V15 tmp6 [V15,T04] ( 4, 24 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V16 tmp7 [V16,T11] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V17 tmp8 [V17,T06] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V18 tmp9 [V18,T12] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V19 tmp10 [V19,T07] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V20 tmp11 [V20,T13] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V21 tmp12 [V21,T08] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V22 cse0 [V22,T14] ( 5, 11 ) long -> [rbp-40H] spill-single-def "CSE - moderate"
+; V23 rat0 [V23,T19] ( 3, 4 ) long -> registers "runtime lookup"
+; V24 rat1 [V24,T17] ( 3, 5.60) long -> rdx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 40
G_M17073_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 40
lea rbp, [rsp+50H]
mov qword ptr [rbp-30H], rdi
- mov rbx, rsi
- mov r15, rdx
- mov r14, rcx
- mov r13, r8
- mov r12, r9
+ mov r12, rsi
+ mov rbx, rdx
+ mov r15, rcx
+ mov r14, r8
+ mov r13, r9
mov eax, dword ptr [rbp+10H]
;; size=41 bbWeight=1 PerfScore 10.00
G_M17073_IG02:
xor ecx, ecx
mov dword ptr [rbp-34H], ecx
mov dword ptr [rbp+10H], eax
test eax, eax
- jle G_M17073_IG09
+ jle G_M17073_IG26
mov rsi, qword ptr [rdi+10H]
mov rdx, qword ptr [rsi+10H]
test rdx, rdx
je SHORT G_M17073_IG04
;; size=29 bbWeight=1 PerfScore 8.75
G_M17073_IG03:
jmp SHORT G_M17073_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
G_M17073_IG04:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov rdx, rax
;; size=18 bbWeight=0.20 PerfScore 0.30
G_M17073_IG05:
mov qword ptr [rbp-40H], rdx
;; size=4 bbWeight=1 PerfScore 1.00
G_M17073_IG06:
movsxd rdi, dword ptr [rbp-34H]
- lea rsi, bword ptr [rbx+8*rdi]
+ lea rsi, bword ptr [r12+8*rdi]
mov bword ptr [rbp-48H], rsi
mov rdi, rdx
mov r8, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
call [r8]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-48H]
- mov rsi, gword ptr [rcx]
- mov rdx, r15
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
- test eax, eax
- jne G_M17073_IG08
- ;; size=59 bbWeight=4 PerfScore 79.00
+ mov rax, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M17073_IG08
+ ;; size=40 bbWeight=4 PerfScore 49.00
G_M17073_IG07:
+ test rbx, rbx
+ je SHORT G_M17073_IG11
+ mov rsi, rbx
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M17073_IG10
+ ;; size=20 bbWeight=2 PerfScore 21.00
+G_M17073_IG08:
+ test rbx, rbx
+ jne SHORT G_M17073_IG11
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M17073_IG09:
+ jmp G_M17073_IG25
+ ;; size=5 bbWeight=2 PerfScore 4.00
+G_M17073_IG10:
+ test eax, eax
+ jne G_M17073_IG25
+ ;; size=8 bbWeight=2 PerfScore 2.50
+G_M17073_IG11:
mov rdi, qword ptr [rbp-40H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-48H]
- mov rsi, gword ptr [rcx]
- mov rdx, r14
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rax, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M17073_IG12
+ test r15, r15
+ je SHORT G_M17073_IG15
+ mov rsi, r15
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M17073_IG14
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M17073_IG12:
+ test r15, r15
+ jne SHORT G_M17073_IG15
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M17073_IG13:
+ jmp G_M17073_IG25
+ ;; size=5 bbWeight=2 PerfScore 4.00
+G_M17073_IG14:
test eax, eax
- jne SHORT G_M17073_IG08
+ jne G_M17073_IG25
+ ;; size=8 bbWeight=2 PerfScore 2.50
+G_M17073_IG15:
mov rdi, qword ptr [rbp-40H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-48H]
- mov rsi, gword ptr [rcx]
- mov rdx, r13
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rax, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M17073_IG16
+ test r14, r14
+ je SHORT G_M17073_IG19
+ mov rsi, r14
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M17073_IG18
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M17073_IG16:
+ test r14, r14
+ jne SHORT G_M17073_IG19
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M17073_IG17:
+ jmp SHORT G_M17073_IG25
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M17073_IG18:
test eax, eax
- jne SHORT G_M17073_IG08
+ jne SHORT G_M17073_IG25
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M17073_IG19:
mov rdi, qword ptr [rbp-40H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rsi, bword ptr [rbp-48H]
- mov rsi, gword ptr [rsi]
- mov rdx, r12
- mov rax, qword ptr [rax]
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rdi, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rdi]
+ test rdi, rdi
+ je SHORT G_M17073_IG21
+ test r13, r13
+ je SHORT G_M17073_IG20
+ mov rsi, r13
+ mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ call [rax+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M17073_IG24
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M17073_IG20:
+ mov ecx, dword ptr [rbp-34H]
+ jmp SHORT G_M17073_IG29
+ ;; size=5 bbWeight=1 PerfScore 3.00
+G_M17073_IG21:
+ test r13, r13
+ jne SHORT G_M17073_IG23
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M17073_IG22:
+ jmp SHORT G_M17073_IG25
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M17073_IG23:
+ mov ecx, dword ptr [rbp-34H]
+ jmp SHORT G_M17073_IG29
+ ;; size=5 bbWeight=8 PerfScore 24.00
+G_M17073_IG24:
test eax, eax
- je SHORT G_M17073_IG11
- ;; size=129 bbWeight=2 PerfScore 96.00
-G_M17073_IG08:
+ je SHORT G_M17073_IG28
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M17073_IG25:
mov ecx, dword ptr [rbp-34H]
inc ecx
mov eax, dword ptr [rbp+10H]
cmp ecx, eax
mov dword ptr [rbp-34H], ecx
mov dword ptr [rbp+10H], eax
mov rdx, qword ptr [rbp-40H]
jl G_M17073_IG06
;; size=26 bbWeight=4 PerfScore 26.00
-G_M17073_IG09:
+G_M17073_IG26:
mov eax, -1
;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M17073_IG10:
+G_M17073_IG27:
add rsp, 40
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M17073_IG11:
+G_M17073_IG28:
mov ecx, dword ptr [rbp-34H]
+ ;; size=3 bbWeight=1 PerfScore 1.00
+G_M17073_IG29:
mov eax, ecx
- ;; size=5 bbWeight=0.50 PerfScore 0.62
-G_M17073_IG12:
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M17073_IG30:
add rsp, 40
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-; Total bytes of code 348, prolog size 23, PerfScore 262.45, instruction count 107, allocated bytes for code 348 (MethodHash=5d9ebd4e) for method System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
+; Total bytes of code 432, prolog size 23, PerfScore 413.35, instruction count 140, allocated bytes for code 432 (MethodHash=5d9ebd4e) for method System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts) 67 (20.06 % of base) - System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int ; Assembly listing for method System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 0 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T09] ( 5, 4.20) long -> rdi single-def
-; V01 arg0 [V01,T07] ( 3, 6 ) byref -> rbx single-def
-; V02 arg1 [V02,T08] ( 3, 6 ) ref -> r15 class-hnd single-def
-; V03 arg2 [V03,T10] ( 3, 4 ) ref -> r14 class-hnd single-def
-; V04 arg3 [V04,T11] ( 3, 4 ) ref -> r13 class-hnd single-def
-; V05 arg4 [V05,T12] ( 3, 4 ) ref -> r12 class-hnd single-def
-; V06 arg5 [V06,T15] ( 1, 1 ) int -> [rbp+10H] single-def
-; V07 loc0 [V07,T01] ( 7, 18.50) int -> [rbp-34H]
-; V08 loc1 [V08,T02] ( 5, 14 ) byref -> [rbp-48H] spill-single-def
+; V00 TypeCtx [V00,T16] ( 5, 4.20) long -> rdi single-def
+; V01 arg0 [V01,T15] ( 3, 6 ) byref -> r12 single-def
+; V02 arg1 [V02,T00] ( 5, 22 ) ref -> rbx class-hnd single-def
+; V03 arg2 [V03,T01] ( 5, 22 ) ref -> r15 class-hnd single-def
+; V04 arg3 [V04,T02] ( 5, 22 ) ref -> r14 class-hnd single-def
+; V05 arg4 [V05,T03] ( 5, 22 ) ref -> r13 class-hnd single-def
+; V06 arg5 [V06,T19] ( 1, 1 ) int -> [rbp+10H] single-def
+; V07 loc0 [V07,T05] ( 7, 18.50) int -> [rbp-34H]
+; V08 loc1 [V08,T09] ( 5, 14 ) byref -> [rbp-48H] spill-single-def
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V12 tmp3 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V13 tmp4 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V14 tmp5 [V14,T00] ( 3, 24 ) ref -> rax "argument with side effect"
-; V15 tmp6 [V15,T03] ( 3, 12 ) ref -> rax "argument with side effect"
-; V16 tmp7 [V16,T04] ( 3, 12 ) ref -> rax "argument with side effect"
-; V17 tmp8 [V17,T05] ( 3, 12 ) ref -> rax "argument with side effect"
-; V18 cse0 [V18,T06] ( 5, 11 ) long -> [rbp-40H] spill-single-def "CSE - aggressive"
-; V19 rat0 [V19,T14] ( 3, 4 ) long -> registers "runtime lookup"
-; V20 rat1 [V20,T13] ( 3, 5.60) long -> rcx "fgMakeTemp is creating a new local variable"
+; V14 tmp5 [V14,T10] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V15 tmp6 [V15,T04] ( 4, 24 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V16 tmp7 [V16,T11] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V17 tmp8 [V17,T06] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V18 tmp9 [V18,T12] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V19 tmp10 [V19,T07] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V20 tmp11 [V20,T13] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V21 tmp12 [V21,T08] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V22 cse0 [V22,T14] ( 5, 11 ) long -> [rbp-40H] spill-single-def "CSE - moderate"
+; V23 rat0 [V23,T18] ( 3, 4 ) long -> registers "runtime lookup"
+; V24 rat1 [V24,T17] ( 3, 5.60) long -> rcx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 40
G_M40251_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 40
lea rbp, [rsp+50H]
mov qword ptr [rbp-30H], rdi
- mov rbx, rsi
- mov r15, rdx
- mov r14, rcx
- mov r13, r8
- mov r12, r9
+ mov r12, rsi
+ mov rbx, rdx
+ mov r15, rcx
+ mov r14, r8
+ mov r13, r9
;; size=38 bbWeight=1 PerfScore 9.00
G_M40251_IG02:
mov eax, dword ptr [rbp+10H]
dec eax
mov dword ptr [rbp-34H], eax
test eax, eax
- jl G_M40251_IG09
+ jl G_M40251_IG24
mov rsi, qword ptr [rdi+10H]
mov rcx, qword ptr [rsi+10H]
test rcx, rcx
je SHORT G_M40251_IG04
;; size=29 bbWeight=1 PerfScore 8.75
G_M40251_IG03:
jmp SHORT G_M40251_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
G_M40251_IG04:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov rcx, rax
;; size=18 bbWeight=0.20 PerfScore 0.30
G_M40251_IG05:
mov qword ptr [rbp-40H], rcx
;; size=4 bbWeight=1 PerfScore 1.00
G_M40251_IG06:
movsxd rdi, dword ptr [rbp-34H]
- lea rdx, bword ptr [rbx+8*rdi]
+ lea rdx, bword ptr [r12+8*rdi]
mov bword ptr [rbp-48H], rdx
mov rdi, rcx
mov rsi, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
call [rsi]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-48H]
- mov rsi, gword ptr [rcx]
- mov rdx, r15
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
- test eax, eax
- jne G_M40251_IG08
- ;; size=58 bbWeight=4 PerfScore 79.00
+ mov rax, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M40251_IG08
+ ;; size=39 bbWeight=4 PerfScore 49.00
G_M40251_IG07:
+ test rbx, rbx
+ je SHORT G_M40251_IG11
+ mov rsi, rbx
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M40251_IG10
+ ;; size=20 bbWeight=2 PerfScore 21.00
+G_M40251_IG08:
+ test rbx, rbx
+ jne SHORT G_M40251_IG11
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M40251_IG09:
+ jmp G_M40251_IG23
+ ;; size=5 bbWeight=2 PerfScore 4.00
+G_M40251_IG10:
+ test eax, eax
+ jne G_M40251_IG23
+ ;; size=8 bbWeight=2 PerfScore 2.50
+G_M40251_IG11:
mov rdi, qword ptr [rbp-40H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-48H]
- mov rsi, gword ptr [rcx]
- mov rdx, r14
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rax, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M40251_IG12
+ test r15, r15
+ je SHORT G_M40251_IG15
+ mov rsi, r15
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M40251_IG14
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M40251_IG12:
+ test r15, r15
+ jne SHORT G_M40251_IG15
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M40251_IG13:
+ jmp SHORT G_M40251_IG23
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M40251_IG14:
test eax, eax
- jne SHORT G_M40251_IG08
+ jne SHORT G_M40251_IG23
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M40251_IG15:
mov rdi, qword ptr [rbp-40H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-48H]
- mov rsi, gword ptr [rcx]
- mov rdx, r13
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rax, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M40251_IG16
+ test r14, r14
+ je SHORT G_M40251_IG19
+ mov rsi, r14
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M40251_IG18
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M40251_IG16:
+ test r14, r14
+ jne SHORT G_M40251_IG19
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M40251_IG17:
+ jmp SHORT G_M40251_IG23
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M40251_IG18:
test eax, eax
- jne SHORT G_M40251_IG08
+ jne SHORT G_M40251_IG23
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M40251_IG19:
mov rdi, qword ptr [rbp-40H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rsi, bword ptr [rbp-48H]
- mov rsi, gword ptr [rsi]
- mov rdx, r12
- mov rax, qword ptr [rax]
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rdi, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rdi]
+ test rdi, rdi
+ je SHORT G_M40251_IG20
+ test r13, r13
+ je SHORT G_M40251_IG26
+ mov rsi, r13
+ mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ call [rax+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M40251_IG22
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M40251_IG20:
+ test r13, r13
+ jne SHORT G_M40251_IG26
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M40251_IG21:
+ jmp SHORT G_M40251_IG23
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M40251_IG22:
test eax, eax
- je SHORT G_M40251_IG11
- ;; size=129 bbWeight=2 PerfScore 96.00
-G_M40251_IG08:
+ je SHORT G_M40251_IG26
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M40251_IG23:
mov eax, dword ptr [rbp-34H]
dec eax
mov dword ptr [rbp-34H], eax
mov rcx, qword ptr [rbp-40H]
jns G_M40251_IG06
;; size=18 bbWeight=4 PerfScore 17.00
-G_M40251_IG09:
+G_M40251_IG24:
mov eax, -1
;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M40251_IG10:
+G_M40251_IG25:
add rsp, 40
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M40251_IG11:
+G_M40251_IG26:
mov eax, dword ptr [rbp-34H]
;; size=3 bbWeight=0.50 PerfScore 0.50
-G_M40251_IG12:
+G_M40251_IG27:
add rsp, 40
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-; Total bytes of code 334, prolog size 23, PerfScore 250.93, instruction count 102, allocated bytes for code 334 (MethodHash=a15462c4) for method System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
+; Total bytes of code 401, prolog size 23, PerfScore 372.63, instruction count 130, allocated bytes for code 401 (MethodHash=a15462c4) for method System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts) 50 (17.48 % of base) - System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,int):int ; Assembly listing for method System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 0 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T09] ( 5, 4.20) long -> rdi single-def
-; V01 arg0 [V01,T07] ( 3, 6 ) byref -> r15 single-def
-; V02 arg1 [V02,T08] ( 3, 6 ) ref -> r14 class-hnd single-def
-; V03 arg2 [V03,T10] ( 3, 4 ) ref -> r13 class-hnd single-def
-; V04 arg3 [V04,T11] ( 3, 4 ) ref -> r12 class-hnd single-def
-; V05 arg4 [V05,T05] ( 4, 7 ) int -> rbx single-def
-; V06 loc0 [V06,T01] ( 6, 17.50) int -> [rbp-34H]
-; V07 loc1 [V07,T02] ( 4, 12 ) byref -> [rbp-48H] spill-single-def
+; V00 TypeCtx [V00,T14] ( 5, 4.20) long -> rdi single-def
+; V01 arg0 [V01,T13] ( 3, 6 ) byref -> r12 single-def
+; V02 arg1 [V02,T00] ( 5, 22 ) ref -> rbx class-hnd single-def
+; V03 arg2 [V03,T01] ( 5, 22 ) ref -> r15 class-hnd single-def
+; V04 arg3 [V04,T02] ( 5, 22 ) ref -> r14 class-hnd single-def
+; V05 arg4 [V05,T11] ( 4, 7 ) int -> r13 single-def
+; V06 loc0 [V06,T04] ( 6, 17.50) int -> [rbp-34H]
+; V07 loc1 [V07,T10] ( 4, 12 ) byref -> [rbp-48H] spill-single-def
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V09 tmp1 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V10 tmp2 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V11 tmp3 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V12 tmp4 [V12,T00] ( 3, 24 ) ref -> rax "argument with side effect"
-; V13 tmp5 [V13,T03] ( 3, 12 ) ref -> rax "argument with side effect"
-; V14 tmp6 [V14,T04] ( 3, 12 ) ref -> rax "argument with side effect"
-; V15 cse0 [V15,T06] ( 4, 9 ) long -> [rbp-40H] spill-single-def "CSE - aggressive"
-; V16 rat0 [V16,T13] ( 3, 4 ) long -> registers "runtime lookup"
-; V17 rat1 [V17,T12] ( 3, 5.60) long -> rcx "fgMakeTemp is creating a new local variable"
+; V12 tmp4 [V12,T07] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V13 tmp5 [V13,T03] ( 4, 24 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V14 tmp6 [V14,T08] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V15 tmp7 [V15,T05] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V16 tmp8 [V16,T09] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V17 tmp9 [V17,T06] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V18 cse0 [V18,T12] ( 4, 9 ) long -> [rbp-40H] spill-single-def "CSE - moderate"
+; V19 rat0 [V19,T16] ( 3, 4 ) long -> registers "runtime lookup"
+; V20 rat1 [V20,T15] ( 3, 5.60) long -> rcx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 40
G_M44859_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 40
lea rbp, [rsp+50H]
mov qword ptr [rbp-30H], rdi
- mov r15, rsi
- mov r14, rdx
- mov r13, rcx
- mov r12, r8
- mov ebx, r9d
+ mov r12, rsi
+ mov rbx, rdx
+ mov r15, rcx
+ mov r14, r8
+ mov r13d, r9d
;; size=38 bbWeight=1 PerfScore 9.00
G_M44859_IG02:
xor eax, eax
mov dword ptr [rbp-34H], eax
- test ebx, ebx
- jle G_M44859_IG09
+ test r13d, r13d
+ jle G_M44859_IG20
mov rsi, qword ptr [rdi+10H]
mov rcx, qword ptr [rsi+10H]
test rcx, rcx
je SHORT G_M44859_IG04
- ;; size=26 bbWeight=1 PerfScore 7.75
+ ;; size=27 bbWeight=1 PerfScore 7.75
G_M44859_IG03:
jmp SHORT G_M44859_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
G_M44859_IG04:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov rcx, rax
;; size=18 bbWeight=0.20 PerfScore 0.30
G_M44859_IG05:
mov qword ptr [rbp-40H], rcx
;; size=4 bbWeight=1 PerfScore 1.00
G_M44859_IG06:
movsxd rdi, dword ptr [rbp-34H]
- lea rdx, bword ptr [r15+8*rdi]
+ lea rdx, bword ptr [r12+8*rdi]
mov bword ptr [rbp-48H], rdx
mov rdi, rcx
mov rsi, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
call [rsi]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-48H]
- mov rsi, gword ptr [rcx]
- mov rdx, r14
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
- test eax, eax
- jne SHORT G_M44859_IG08
- ;; size=54 bbWeight=4 PerfScore 79.00
+ mov rax, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M44859_IG08
+ ;; size=39 bbWeight=4 PerfScore 49.00
G_M44859_IG07:
+ test rbx, rbx
+ je SHORT G_M44859_IG11
+ mov rsi, rbx
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M44859_IG10
+ ;; size=20 bbWeight=2 PerfScore 21.00
+G_M44859_IG08:
+ test rbx, rbx
+ jne SHORT G_M44859_IG11
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M44859_IG09:
+ jmp SHORT G_M44859_IG19
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M44859_IG10:
+ test eax, eax
+ jne SHORT G_M44859_IG19
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M44859_IG11:
mov rdi, qword ptr [rbp-40H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-48H]
- mov rsi, gword ptr [rcx]
- mov rdx, r13
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rax, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M44859_IG12
+ test r15, r15
+ je SHORT G_M44859_IG15
+ mov rsi, r15
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M44859_IG14
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M44859_IG12:
+ test r15, r15
+ jne SHORT G_M44859_IG15
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M44859_IG13:
+ jmp SHORT G_M44859_IG19
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M44859_IG14:
test eax, eax
- jne SHORT G_M44859_IG08
+ jne SHORT G_M44859_IG19
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M44859_IG15:
mov rdi, qword ptr [rbp-40H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rsi, bword ptr [rbp-48H]
- mov rsi, gword ptr [rsi]
- mov rdx, r12
- mov rax, qword ptr [rax]
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rdi, bword ptr [rbp-48H]
+ mov rdi, gword ptr [rdi]
+ test rdi, rdi
+ je SHORT G_M44859_IG16
+ test r14, r14
+ je SHORT G_M44859_IG22
+ mov rsi, r14
+ mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ call [rax+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M44859_IG18
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M44859_IG16:
+ test r14, r14
+ jne SHORT G_M44859_IG22
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M44859_IG17:
+ jmp SHORT G_M44859_IG19
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M44859_IG18:
test eax, eax
- je SHORT G_M44859_IG11
- ;; size=86 bbWeight=2 PerfScore 64.00
-G_M44859_IG08:
+ je SHORT G_M44859_IG22
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M44859_IG19:
mov eax, dword ptr [rbp-34H]
inc eax
- cmp eax, ebx
+ cmp eax, r13d
mov dword ptr [rbp-34H], eax
mov rcx, qword ptr [rbp-40H]
jl G_M44859_IG06
- ;; size=20 bbWeight=4 PerfScore 18.00
-G_M44859_IG09:
+ ;; size=21 bbWeight=4 PerfScore 18.00
+G_M44859_IG20:
mov eax, -1
;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M44859_IG10:
+G_M44859_IG21:
add rsp, 40
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M44859_IG11:
+G_M44859_IG22:
mov eax, dword ptr [rbp-34H]
;; size=3 bbWeight=0.50 PerfScore 0.50
-G_M44859_IG12:
+G_M44859_IG23:
add rsp, 40
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-; Total bytes of code 286, prolog size 23, PerfScore 214.13, instruction count 90, allocated bytes for code 286 (MethodHash=3cab50c4) for method System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
+; Total bytes of code 336, prolog size 23, PerfScore 301.63, instruction count 111, allocated bytes for code 336 (MethodHash=3cab50c4) for method System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts) 49 (18.01 % of base) - System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,int):int ; Assembly listing for method System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 0 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T08] ( 5, 4.20) long -> rdi single-def
-; V01 arg0 [V01,T06] ( 3, 6 ) byref -> rbx single-def
-; V02 arg1 [V02,T07] ( 3, 6 ) ref -> r15 class-hnd single-def
-; V03 arg2 [V03,T09] ( 3, 4 ) ref -> r14 class-hnd single-def
-; V04 arg3 [V04,T10] ( 3, 4 ) ref -> r13 class-hnd single-def
-; V05 arg4 [V05,T12] ( 3, 3 ) int -> r9 single-def
-; V06 loc0 [V06,T01] ( 7, 18.50) int -> r12
-; V07 loc1 [V07,T02] ( 4, 12 ) byref -> [rbp-40H] spill-single-def
+; V00 TypeCtx [V00,T13] ( 5, 4.20) long -> rdi single-def
+; V01 arg0 [V01,T12] ( 3, 6 ) byref -> r13 single-def
+; V02 arg1 [V02,T00] ( 5, 22 ) ref -> rbx class-hnd single-def
+; V03 arg2 [V03,T01] ( 5, 22 ) ref -> r15 class-hnd single-def
+; V04 arg3 [V04,T02] ( 5, 22 ) ref -> r14 class-hnd single-def
+; V05 arg4 [V05,T15] ( 3, 3 ) int -> r9 single-def
+; V06 loc0 [V06,T04] ( 7, 18.50) int -> r12
+; V07 loc1 [V07,T10] ( 4, 12 ) byref -> [rbp-40H] spill-single-def
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V09 tmp1 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V10 tmp2 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V11 tmp3 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V12 tmp4 [V12,T00] ( 3, 24 ) ref -> rax "argument with side effect"
-; V13 tmp5 [V13,T03] ( 3, 12 ) ref -> rax "argument with side effect"
-; V14 tmp6 [V14,T04] ( 3, 12 ) ref -> rax "argument with side effect"
-; V15 cse0 [V15,T05] ( 4, 9 ) long -> [rbp-38H] spill-single-def "CSE - aggressive"
-; V16 rat0 [V16,T13] ( 3, 4 ) long -> rax "runtime lookup"
-; V17 rat1 [V17,T11] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
+; V12 tmp4 [V12,T07] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V13 tmp5 [V13,T03] ( 4, 24 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V14 tmp6 [V14,T08] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V15 tmp7 [V15,T05] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V16 tmp8 [V16,T09] ( 2, 4 ) bool -> rax "Inline return value spill temp"
+; V17 tmp9 [V17,T06] ( 4, 16 ) ref -> rdi ld-addr-op class-hnd "Inlining Arg"
+; V18 cse0 [V18,T11] ( 4, 9 ) long -> [rbp-38H] spill-single-def "CSE - moderate"
+; V19 rat0 [V19,T16] ( 3, 4 ) long -> rax "runtime lookup"
+; V20 rat1 [V20,T14] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 24
G_M41329_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 24
lea rbp, [rsp+40H]
mov qword ptr [rbp-30H], rdi
- mov rbx, rsi
- mov r15, rdx
- mov r14, rcx
- mov r13, r8
+ mov r13, rsi
+ mov rbx, rdx
+ mov r15, rcx
+ mov r14, r8
;; size=35 bbWeight=1 PerfScore 8.75
G_M41329_IG02:
lea r12d, [r9-01H]
test r12d, r12d
- jl G_M41329_IG09
+ jl G_M41329_IG20
mov rsi, qword ptr [rdi+10H]
mov rax, qword ptr [rsi+10H]
test rax, rax
je SHORT G_M41329_IG04
;; size=26 bbWeight=1 PerfScore 7.00
G_M41329_IG03:
jmp SHORT G_M41329_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
G_M41329_IG04:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_METHOD
;; size=15 bbWeight=0.20 PerfScore 0.25
G_M41329_IG05:
mov qword ptr [rbp-38H], rax
;; size=4 bbWeight=1 PerfScore 1.00
G_M41329_IG06:
movsxd rdi, r12d
- lea rcx, bword ptr [rbx+8*rdi]
+ lea rcx, bword ptr [r13+8*rdi]
mov bword ptr [rbp-40H], rcx
mov rdi, rax
mov rdx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
call [rdx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-40H]
- mov rsi, gword ptr [rcx]
- mov rdx, r15
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
- test eax, eax
- jne SHORT G_M41329_IG08
- ;; size=53 bbWeight=4 PerfScore 68.00
+ mov rax, bword ptr [rbp-40H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M41329_IG08
+ ;; size=39 bbWeight=4 PerfScore 44.00
G_M41329_IG07:
+ test rbx, rbx
+ je SHORT G_M41329_IG11
+ mov rsi, rbx
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M41329_IG10
+ ;; size=20 bbWeight=2 PerfScore 21.00
+G_M41329_IG08:
+ test rbx, rbx
+ jne SHORT G_M41329_IG11
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M41329_IG09:
+ jmp SHORT G_M41329_IG19
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M41329_IG10:
+ test eax, eax
+ jne SHORT G_M41329_IG19
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M41329_IG11:
mov rdi, qword ptr [rbp-38H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rcx, bword ptr [rbp-40H]
- mov rsi, gword ptr [rcx]
- mov rdx, r14
- mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rax, bword ptr [rbp-40H]
+ mov rdi, gword ptr [rax]
+ test rdi, rdi
+ je SHORT G_M41329_IG12
+ test r15, r15
+ je SHORT G_M41329_IG15
+ mov rsi, r15
+ mov rcx, qword ptr [rdi]
+ mov rcx, qword ptr [rcx+40H]
+ call [rcx+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M41329_IG14
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M41329_IG12:
+ test r15, r15
+ jne SHORT G_M41329_IG15
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M41329_IG13:
+ jmp SHORT G_M41329_IG19
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M41329_IG14:
test eax, eax
- jne SHORT G_M41329_IG08
+ jne SHORT G_M41329_IG19
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M41329_IG15:
mov rdi, qword ptr [rbp-38H]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- call [rax]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
- mov rdi, rax
- mov rsi, bword ptr [rbp-40H]
- mov rsi, gword ptr [rsi]
- mov rdx, r13
- mov rax, qword ptr [rax]
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ call [rcx]System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]
+ mov rdi, bword ptr [rbp-40H]
+ mov rdi, gword ptr [rdi]
+ test rdi, rdi
+ je SHORT G_M41329_IG16
+ test r14, r14
+ je SHORT G_M41329_IG22
+ mov rsi, r14
+ mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+40H]
- call [rax+20H]System.Collections.Generic.EqualityComparer`1[System.__Canon]:Equals(System.__Canon,System.__Canon):bool:this
+ call [rax+10H]System.Object:Equals(System.Object):bool:this
+ jmp SHORT G_M41329_IG18
+ ;; size=48 bbWeight=2 PerfScore 38.00
+G_M41329_IG16:
+ test r14, r14
+ jne SHORT G_M41329_IG22
+ ;; size=5 bbWeight=16 PerfScore 20.00
+G_M41329_IG17:
+ jmp SHORT G_M41329_IG19
+ ;; size=2 bbWeight=2 PerfScore 4.00
+G_M41329_IG18:
test eax, eax
- je SHORT G_M41329_IG11
- ;; size=86 bbWeight=2 PerfScore 64.00
-G_M41329_IG08:
+ je SHORT G_M41329_IG22
+ ;; size=4 bbWeight=2 PerfScore 2.50
+G_M41329_IG19:
dec r12d
mov rax, qword ptr [rbp-38H]
jns G_M41329_IG06
;; size=13 bbWeight=4 PerfScore 9.00
-G_M41329_IG09:
+G_M41329_IG20:
mov eax, -1
;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M41329_IG10:
+G_M41329_IG21:
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_M41329_IG11:
+G_M41329_IG22:
mov eax, r12d
;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M41329_IG12:
+G_M41329_IG23:
add rsp, 24
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-; Total bytes of code 272, prolog size 23, PerfScore 191.30, instruction count 84, allocated bytes for code 272 (MethodHash=2fc85e8e) for method System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
+; Total bytes of code 321, prolog size 23, PerfScore 284.70, instruction count 105, allocated bytes for code 321 (MethodHash=2fc85e8e) for method System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts) |
Top method improvements-183 (-100.00 % of base) - System.Collections.Generic.ComparerHelpers:TryCreateEnumComparer(System.RuntimeType):System.Object-; Assembly listing for method System.Collections.Generic.ComparerHelpers:TryCreateEnumComparer(System.RuntimeType):System.Object (FullOpts)
-; Emitting BLENDED_CODE for X64 with AVX - Unix
-; FullOpts code
-; optimized code
-; rbp based frame
-; partially interruptible
-; No PGO data
-; 0 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data
-; Final local variable assignments
-;
-; V00 arg0 [V00,T00] ( 8, 7.50) ref -> rbx class-hnd single-def
-;* V01 loc0 [V01 ] ( 0, 0 ) int -> zero-ref
-;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 2.50) ref -> rdi class-hnd single-def "Inline return value spill temp"
-;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt"
-; V05 tmp3 [V05,T05] ( 2, 2 ) ref -> rdi class-hnd single-def "Inline stloc first use temp"
-; V06 tmp4 [V06,T04] ( 3, 2 ) int -> r15 "Inline return value spill temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp"
-;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1"
-;* V10 tmp8 [V10 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable"
-;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2"
-;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp"
-;* V13 tmp11 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt"
-;* V14 tmp12 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp"
-; V15 tmp13 [V15,T02] ( 2, 4 ) ref -> r15 single-def "arr expr"
-; V16 tmp14 [V16,T01] ( 3, 6 ) int -> rax "index expr"
-;* V17 tmp15 [V17 ] ( 0, 0 ) ref -> zero-ref "arr expr"
-;* V18 tmp16 [V18 ] ( 0, 0 ) int -> zero-ref "index expr"
-;
-; Lcl frame size = 0
-
-G_M19464_IG01:
- push rbp
- push r15
- push rbx
- lea rbp, [rsp+10H]
- mov rbx, rdi
- ;; size=12 bbWeight=1 PerfScore 3.75
-G_M19464_IG02:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; 'enumType'
-
- mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
- call [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
- cmp byte ptr [rbx], bl
- mov rdi, rbx
- mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsActualEnum():bool:this
- call [rax]System.RuntimeType:get_IsActualEnum():bool:this
- test eax, eax
- je SHORT G_M19464_IG10
- mov rdi, 0xD1FFAB1E ; const ptr
- mov r15, gword ptr [rdi]
- mov rdi, qword ptr [rbx+18H]
- call System.Enum:InternalGetCorElementType(ulong):ubyte
- cmp eax, 26
- jae SHORT G_M19464_IG11
- mov edi, eax
- mov rdi, gword ptr [r15+8*rdi+10H]
- test rdi, rdi
- jne SHORT G_M19464_IG04
- ;; size=85 bbWeight=1 PerfScore 21.50
-G_M19464_IG03:
- xor r15d, r15d
- jmp SHORT G_M19464_IG05
- ;; size=5 bbWeight=0.50 PerfScore 1.12
-G_M19464_IG04:
- mov rax, 0xD1FFAB1E ; code for System.RuntimeType:GetTypeCodeImpl():int:this
- call [rax]System.RuntimeType:GetTypeCodeImpl():int:this
- mov r15d, eax
- ;; size=15 bbWeight=0.50 PerfScore 1.75
-G_M19464_IG05:
- add r15d, -5
- cmp r15d, 7
- ja SHORT G_M19464_IG08
- ;; size=10 bbWeight=1 PerfScore 1.50
-G_M19464_IG06:
- mov rsi, rbx
- mov rdi, 0xD1FFAB1E ; 'System.Collections.Generic.EnumComparer`1[T]'
-
- mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
- ;; size=23 bbWeight=0.50 PerfScore 0.38
-G_M19464_IG07:
- pop rbx
- pop r15
- pop rbp
- tail.jmp [rax]System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
- ;; size=7 bbWeight=0.50 PerfScore 1.75
-G_M19464_IG08:
- xor rax, rax
- ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M19464_IG09:
- pop rbx
- pop r15
- pop rbp
- ret
- ;; size=5 bbWeight=0.50 PerfScore 1.25
-G_M19464_IG10:
- mov rax, 0xD1FFAB1E ; code for System.RuntimeType:ThrowMustBeEnum()
- call [rax]System.RuntimeType:ThrowMustBeEnum()
- int3
- ;; size=13 bbWeight=0 PerfScore 0.00
-G_M19464_IG11:
- call CORINFO_HELP_RNGCHKFAIL
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-
-; Total bytes of code 183, prolog size 9, PerfScore 51.43, instruction count 50, allocated bytes for code 183 (MethodHash=5e08b3f7) for method System.Collections.Generic.ComparerHelpers:TryCreateEnumComparer(System.RuntimeType):System.Object (FullOpts)
-; ============================================================ -183 (-100.00 % of base) - System.Collections.Generic.ComparerHelpers:TryCreateEnumEqualityComparer(System.RuntimeType):System.Object-; Assembly listing for method System.Collections.Generic.ComparerHelpers:TryCreateEnumEqualityComparer(System.RuntimeType):System.Object (FullOpts)
-; Emitting BLENDED_CODE for X64 with AVX - Unix
-; FullOpts code
-; optimized code
-; rbp based frame
-; partially interruptible
-; No PGO data
-; 0 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data
-; Final local variable assignments
-;
-; V00 arg0 [V00,T00] ( 8, 7.50) ref -> rbx class-hnd single-def
-;* V01 loc0 [V01 ] ( 0, 0 ) int -> zero-ref
-;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 2.50) ref -> rdi class-hnd single-def "Inline return value spill temp"
-;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt"
-; V05 tmp3 [V05,T05] ( 2, 2 ) ref -> rdi class-hnd single-def "Inline stloc first use temp"
-; V06 tmp4 [V06,T04] ( 3, 2 ) int -> r15 "Inline return value spill temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp"
-;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1"
-;* V10 tmp8 [V10 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable"
-;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2"
-;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp"
-;* V13 tmp11 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt"
-;* V14 tmp12 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp"
-; V15 tmp13 [V15,T02] ( 2, 4 ) ref -> r15 single-def "arr expr"
-; V16 tmp14 [V16,T01] ( 3, 6 ) int -> rax "index expr"
-;* V17 tmp15 [V17 ] ( 0, 0 ) ref -> zero-ref "arr expr"
-;* V18 tmp16 [V18 ] ( 0, 0 ) int -> zero-ref "index expr"
-;
-; Lcl frame size = 0
-
-G_M39904_IG01:
- push rbp
- push r15
- push rbx
- lea rbp, [rsp+10H]
- mov rbx, rdi
- ;; size=12 bbWeight=1 PerfScore 3.75
-G_M39904_IG02:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; 'enumType'
-
- mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
- call [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
- cmp byte ptr [rbx], bl
- mov rdi, rbx
- mov rax, 0xD1FFAB1E ; code for System.RuntimeType:get_IsActualEnum():bool:this
- call [rax]System.RuntimeType:get_IsActualEnum():bool:this
- test eax, eax
- je SHORT G_M39904_IG10
- mov rdi, 0xD1FFAB1E ; const ptr
- mov r15, gword ptr [rdi]
- mov rdi, qword ptr [rbx+18H]
- call System.Enum:InternalGetCorElementType(ulong):ubyte
- cmp eax, 26
- jae SHORT G_M39904_IG11
- mov edi, eax
- mov rdi, gword ptr [r15+8*rdi+10H]
- test rdi, rdi
- jne SHORT G_M39904_IG04
- ;; size=85 bbWeight=1 PerfScore 21.50
-G_M39904_IG03:
- xor r15d, r15d
- jmp SHORT G_M39904_IG05
- ;; size=5 bbWeight=0.50 PerfScore 1.12
-G_M39904_IG04:
- mov rax, 0xD1FFAB1E ; code for System.RuntimeType:GetTypeCodeImpl():int:this
- call [rax]System.RuntimeType:GetTypeCodeImpl():int:this
- mov r15d, eax
- ;; size=15 bbWeight=0.50 PerfScore 1.75
-G_M39904_IG05:
- add r15d, -5
- cmp r15d, 7
- ja SHORT G_M39904_IG08
- ;; size=10 bbWeight=1 PerfScore 1.50
-G_M39904_IG06:
- mov rsi, rbx
- mov rdi, 0xD1FFAB1E ; 'System.Collections.Generic.EnumEqualityComparer`1[T]'
-
- mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
- ;; size=23 bbWeight=0.50 PerfScore 0.38
-G_M39904_IG07:
- pop rbx
- pop r15
- pop rbp
- tail.jmp [rax]System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
- ;; size=7 bbWeight=0.50 PerfScore 1.75
-G_M39904_IG08:
- xor rax, rax
- ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M39904_IG09:
- pop rbx
- pop r15
- pop rbp
- ret
- ;; size=5 bbWeight=0.50 PerfScore 1.25
-G_M39904_IG10:
- mov rax, 0xD1FFAB1E ; code for System.RuntimeType:ThrowMustBeEnum()
- call [rax]System.RuntimeType:ThrowMustBeEnum()
- int3
- ;; size=13 bbWeight=0 PerfScore 0.00
-G_M39904_IG11:
- call CORINFO_HELP_RNGCHKFAIL
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-
-; Total bytes of code 183, prolog size 9, PerfScore 51.43, instruction count 50, allocated bytes for code 183 (MethodHash=013b641f) for method System.Collections.Generic.ComparerHelpers:TryCreateEnumEqualityComparer(System.RuntimeType):System.Object (FullOpts)
-; ============================================================ -24 (-4.79 % of base) - System.Collections.Generic.ComparerHelpers:CreateDefaultEqualityComparer(System.Type):System.Object ; Assembly listing for method System.Collections.Generic.ComparerHelpers:CreateDefaultEqualityComparer(System.Type):System.Object (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
-; fully interruptible
+; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T01] ( 5, 4 ) ref -> rbx class-hnd single-def
-; V01 loc0 [V01,T02] ( 7, 4.50) ref -> r15 class-hnd
-; V02 loc1 [V02,T00] ( 16, 9 ) ref -> rbx class-hnd single-def
+; V01 loc0 [V01,T05] ( 5, 3 ) ref -> r15 class-hnd
+; V02 loc1 [V02,T00] ( 15, 8.50) ref -> rbx class-hnd single-def
;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V05 tmp1 [V05,T12] ( 3, 1 ) long -> rax "fgMakeTemp is creating a new local variable"
-; V06 tmp2 [V06,T03] ( 3, 4.50) ref -> rdi class-hnd "spilling QMark2"
+; V06 tmp2 [V06,T02] ( 3, 4.50) ref -> rdi class-hnd "spilling QMark2"
; V07 tmp3 [V07,T06] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill"
;* V08 tmp4 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "impAppendStmt"
-; V09 tmp5 [V09,T08] ( 3, 2.50) ref -> rax single-def
-; V10 tmp6 [V10,T09] ( 3, 2 ) ref -> rsi single-def "CASTCLASS eval op1"
+; V09 tmp5 [V09,T09] ( 3, 1.50) ref -> rax single-def
+; V10 tmp6 [V10,T08] ( 3, 2 ) ref -> rsi single-def "CASTCLASS eval op1"
; V11 tmp7 [V11,T13] ( 3, 1 ) long -> rax "fgMakeTemp is creating a new local variable"
-; V12 tmp8 [V12,T05] ( 4, 3.50) ref -> rdi class-hnd "spilling QMark2"
+; V12 tmp8 [V12,T04] ( 4, 3.50) ref -> rdi class-hnd "spilling QMark2"
;* V13 tmp9 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp"
-;* V14 tmp10 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp"
-; V15 tmp11 [V15,T10] ( 2, 1 ) bool -> rax "Inline return value spill temp"
-; V16 tmp12 [V16,T04] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg"
-; V17 tmp13 [V17,T07] ( 3, 3 ) ref -> rax single-def "arr expr"
-; V18 cse0 [V18,T11] ( 3, 1.50) long -> r14 "CSE - moderate"
+; V14 tmp10 [V14,T10] ( 2, 1 ) bool -> rax "Inline return value spill temp"
+; V15 tmp11 [V15,T03] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg"
+; V16 tmp12 [V16,T07] ( 3, 3 ) ref -> rax single-def "arr expr"
+; V17 cse0 [V17,T11] ( 3, 1.50) long -> r14 "CSE - moderate"
;
; Lcl frame size = 8
G_M53179_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+20H]
mov rbx, rdi
;; size=15 bbWeight=1 PerfScore 5.75
G_M53179_IG02:
xor r15, r15
mov rdi, rbx
test rdi, rdi
je SHORT G_M53179_IG04
;; size=11 bbWeight=1 PerfScore 1.75
G_M53179_IG03:
mov rax, 0xD1FFAB1E ; System.RuntimeType
cmp qword ptr [rdi], rax
- jne G_M53179_IG16
+ jne G_M53179_IG15
;; size=19 bbWeight=0.25 PerfScore 1.06
G_M53179_IG04:
- mov rdi, 0xD1FFAB1E ; 'System.Byte'
-
- cmp rbx, rdi
- jne SHORT G_M53179_IG06
- ;; size=15 bbWeight=1 PerfScore 1.50
-G_M53179_IG05:
- mov rdi, 0xD1FFAB1E ; System.Collections.Generic.ByteEqualityComparer
- call CORINFO_HELP_NEWSFAST
- mov r15, rax
- jmp G_M53179_IG12
- ;; size=23 bbWeight=0.50 PerfScore 1.75
-G_M53179_IG06:
mov rdi, 0xD1FFAB1E ; 'System.String'
cmp rbx, rdi
jne SHORT G_M53179_IG07
+ ;; size=15 bbWeight=1 PerfScore 1.50
+G_M53179_IG05:
mov rdi, 0xD1FFAB1E ; System.Collections.Generic.GenericEqualityComparer`1[System.String]
call CORINFO_HELP_NEWSFAST
- mov r15, rax
- jmp G_M53179_IG12
- ;; size=38 bbWeight=0.50 PerfScore 2.50
+ nop
+ ;; size=16 bbWeight=0.50 PerfScore 0.75
+G_M53179_IG06:
+ add rsp, 8
+ pop rbx
+ pop r14
+ pop r15
+ pop rbp
+ ret
+ ;; size=11 bbWeight=0.50 PerfScore 1.62
G_M53179_IG07:
mov rdi, 0xD1FFAB1E ; System.Type[]
mov esi, 1
call CORINFO_HELP_NEWARR_1_OBJ
mov r14, rax
lea rdi, bword ptr [r14+10H]
mov rsi, rbx
call CORINFO_HELP_ASSIGN_REF
mov rsi, r14
mov rdi, 0xD1FFAB1E ; 'System.IEquatable`1[T]'
mov rax, 0xD1FFAB1E ; code for System.RuntimeType:MakeGenericType(System.Type[]):System.Type:this
cmp dword ptr [rdi], edi
call [rax]System.RuntimeType:MakeGenericType(System.Type[]):System.Type:this
cmp byte ptr [rbx], bl
test rax, rax
je SHORT G_M53179_IG08
mov rdi, rax
mov rsi, rbx
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+B0H]
call [rax+20H]System.Type:IsAssignableFrom(System.Type):bool:this
test eax, eax
je SHORT G_M53179_IG08
mov rsi, rbx
mov rdi, 0xD1FFAB1E ; 'System.Collections.Generic.GenericEqualityComparer`1[System.Str'
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
call [rax]System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
mov r15, rax
jmp G_M53179_IG12
;; size=125 bbWeight=0.50 PerfScore 14.62
G_M53179_IG08:
mov rdi, rbx
mov rax, qword ptr [rbx]
mov rax, qword ptr [rax+60H]
call [rax+08H]System.Type:get_IsGenericType():bool:this
test eax, eax
je SHORT G_M53179_IG11
mov rdi, rbx
mov rax, qword ptr [rbx]
mov r14, qword ptr [rax+68H]
call [r14+18H]System.Type:GetGenericTypeDefinition():System.Type:this
mov rdi, 0xD1FFAB1E ; 'System.Nullable`1[T]'
cmp rax, rdi
jne SHORT G_M53179_IG11
mov rdi, rbx
call [r14+28H]System.Type:GetGenericArguments():System.Type[]:this
cmp dword ptr [rax+08H], 0
- jbe G_M53179_IG18
+ jbe G_M53179_IG17
mov rsi, gword ptr [rax+10H]
mov rdi, rsi
test rdi, rdi
je SHORT G_M53179_IG10
;; size=75 bbWeight=0.50 PerfScore 14.00
G_M53179_IG09:
mov rax, 0xD1FFAB1E ; System.RuntimeType
cmp qword ptr [rdi], rax
- jne G_M53179_IG17
+ jne G_M53179_IG16
;; size=19 bbWeight=0.25 PerfScore 1.06
G_M53179_IG10:
mov rsi, rdi
mov rdi, 0xD1FFAB1E ; 'System.Collections.Generic.NullableEqualityComparer`1[System.In'
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
call [rax]System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
mov r15, rax
jmp SHORT G_M53179_IG12
;; size=30 bbWeight=0.50 PerfScore 3.00
G_M53179_IG11:
mov rdi, rbx
mov rax, qword ptr [rbx]
mov rax, qword ptr [rax+70H]
call [rax+30H]System.Type:get_IsEnum():bool:this
test eax, eax
je SHORT G_M53179_IG12
- mov rdi, rbx
- mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.ComparerHelpers:TryCreateEnumEqualityComparer(System.RuntimeType):System.Object
- call [rax]System.Collections.Generic.ComparerHelpers:TryCreateEnumEqualityComparer(System.RuntimeType):System.Object
+ mov rsi, rbx
+ mov rdi, 0xD1FFAB1E ; 'System.Collections.Generic.EnumEqualityComparer`1[T]'
+
+ mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
+ call [rax]System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
mov r15, rax
- ;; size=35 bbWeight=0.50 PerfScore 6.12
+ ;; size=45 bbWeight=0.50 PerfScore 6.25
G_M53179_IG12:
mov rax, r15
test rax, rax
- jne SHORT G_M53179_IG15
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M53179_IG13:
+ jne SHORT G_M53179_IG14
mov rsi, rbx
mov rdi, 0xD1FFAB1E ; 'System.Collections.Generic.ObjectEqualityComparer`1[System.Obje'
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
- ;; size=23 bbWeight=0.50 PerfScore 0.38
-G_M53179_IG14:
+ ;; size=31 bbWeight=0.50 PerfScore 1.12
+G_M53179_IG13:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
tail.jmp [rax]System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object
;; size=13 bbWeight=0.50 PerfScore 2.12
-G_M53179_IG15:
+G_M53179_IG14:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M53179_IG16:
+G_M53179_IG15:
mov rdi, rax
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS_SPECIAL
call [rax]CORINFO_HELP_CHKCASTCLASS_SPECIAL
int3
;; size=19 bbWeight=0 PerfScore 0.00
-G_M53179_IG17:
+G_M53179_IG16:
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS_SPECIAL
call [rax]CORINFO_HELP_CHKCASTCLASS_SPECIAL
int3
;; size=16 bbWeight=0 PerfScore 0.00
-G_M53179_IG18:
+G_M53179_IG17:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 501, prolog size 15, PerfScore 108.85, instruction count 125, allocated bytes for code 501 (MethodHash=6fa03044) for method System.Collections.Generic.ComparerHelpers:CreateDefaultEqualityComparer(System.Type):System.Object (FullOpts)
+; Total bytes of code 477, prolog size 12, PerfScore 103.95, instruction count 124, allocated bytes for code 477 (MethodHash=6fa03044) for method System.Collections.Generic.ComparerHelpers:CreateDefaultEqualityComparer(System.Type):System.Object (FullOpts) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Build completed in 2 hours 19 minutes.
dotnet/runtime#88006
CoreLib diffs
Frameworks diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: