-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
[JIT] Fix re-use val zero on GC tracking #84051
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch, @kunalspathak Issue DetailsResolves #83963 Will need to run GC and JIT stress.
|
/azp run runtime-coreclr jitstress |
/azp run runtime-coreclr gcstress-extra |
Azure Pipelines successfully started running 1 pipeline(s). |
1 similar comment
Azure Pipelines successfully started running 1 pipeline(s). |
null
/azp run runtime-coreclr jitstress |
Azure Pipelines successfully started running 1 pipeline(s). |
/azp run runtime-coreclr gcstress-extra |
Azure Pipelines successfully started running 1 pipeline(s). |
|
||
if (treeNode->IsIntegralConst(0)) | ||
{ | ||
genDefineTempLabel(genCreateTempLabel()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This appears to be the only way to propagate GC info properly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@BruceForstall you are probably best to look at this.
The main issue is that we have a null
node and a cns_int 0
node re-using the same register, but when that register is being used for cns_int 0
, there are circumstances where the GC info hasn't propagated yet and that register is still seen as GC tracked even if it's for an integer. This happens if both the null
and cns_int 0
node live within the same IG.
Originally I wanted to simply not GC track a reg that is initially null
but that caused many seg faults. I tried that here: 346b9fe
If that worked, then we wouldn't have to worry about GC tracking when registers get re-used.
The only other option, I think, is to propagate the GC info by creating a new label, which creates a new IG; serves as a snapshot of the GC info.
You have any thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would think the right fix is something like
gcInfo.gcMarkRegPtrVal(tree->getRegNum(), tree->TypeGet());
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@AndyAyersMS In order for the state of gcInfo
to be reflected in the actual emitting of instructions, it has to be propagated via instruction groups, which is what the creation of the label is doing. In this case, the state of gcInfo
has already marked the register as a non-pointer, but that information wasn't propagated. gcMarkRegPtrVal
doesn't propagate the info, it just sets the state.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It does propagate it, but only during codegen. I suspect the emitter GC tracking doesn't handle a case like this where the gcness of a register can change without writing to the register.
In which case, you might consider introducing a fake instruction that just reinterprets the register with its new GC type and acts like a write; that might convey intention of changing GC type more clearly than forcing a label, which seems a bit fragile and obscure.
Or it might gum up other things. Hard to say.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you might consider introducing a fake instruction
Ah, I see Bruce had similar comments below.
I agree we can take this fix for now, but we should seriously consider something a bit more explicit. Ideally the code generator would not need to be aware of the peculiar aspects of emitter gc tracking.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree that we should introduce a fake instruction, this is what @BruceForstall and I talked about. Seems Bruce beat me to making an issue about it. :)
/azp run runtime-coreclr jitstress |
Azure Pipelines successfully started running 1 pipeline(s). |
/azp run runtime-coreclr gcstress-extra |
Azure Pipelines successfully started running 1 pipeline(s). |
CI appears to be passing! Current failure isn't related and is reported here: |
Should LSRA stop allowing re-use of constant zero? It already prevents re-use of different GC type int constants, but exempts zero. Maybe that exemption should be removed. E.g., in
|
I tried this last week and there were regressions, I can do it again to get the numbers. |
@BruceForstall Here are the results if we stop allowing re-use: MISSED contexts: 13 (0.00%) Overall (+114,574 bytes)
MinOpts (-4 bytes)
FullOpts (+114,578 bytes)
Example diffsaspnet.run.windows.x64.checked.mch-3 (-0.58%) : 51329.dasm - Microsoft.AspNetCore.Mvc.Routing.NormalizedRouteValue:GetNormalizedRouteValue(Microsoft.AspNetCore.Mvc.ActionContext,System.String):System.String@@ -18,9 +18,9 @@
; V07 tmp1 [V07,T12] ( 2, 2 ) ref -> rcx class-hnd single-def "impAppendStmt"
; V08 tmp2 [V08,T03] ( 4, 7 ) ref -> rbx class-hnd single-def "Inlining Arg"
; V09 tmp3 [V09,T07] ( 3, 3 ) ref -> rbp class-hnd exact single-def "NewObj constructor temp"
-; V10 tmp4 [V10,T11] ( 3, 2 ) bool -> r8 "Inline return value spill temp"
+; V10 tmp4 [V10,T11] ( 3, 2 ) bool -> rax "Inline return value spill temp"
; V11 tmp5 [V11,T02] ( 6, 9 ) ref -> rcx class-hnd single-def "Inlining Arg"
-; V12 tmp6 [V12,T14] ( 3, 1.50) bool -> r8 "Inline return value spill temp"
+; V12 tmp6 [V12,T14] ( 3, 1.50) bool -> rax "Inline return value spill temp"
; V13 tmp7 [V13,T06] ( 5, 5.50) ref -> rbx class-hnd single-def "Inline stloc first use temp"
; V14 tmp8 [V14,T05] ( 6, 6 ) int -> rbp single-def "Inline stloc first use temp"
; V15 tmp9 [V15,T00] ( 12, 17.54) int -> r15 "Inline stloc first use temp"
@@ -150,22 +150,22 @@ G_M43058_IG09: ; bbWeight=0.50, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000
xor r8, r8
; gcrRegs +[r8]
mov gword ptr [rsp+30H], r8
+ xor eax, eax
jmp SHORT G_M43058_IG11
- ;; size=10 bbWeight=0.50 PerfScore 1.62
+ ;; size=12 bbWeight=0.50 PerfScore 1.75
G_M43058_IG10: ; bbWeight=0.50, gcrefRegs=00C8 {rbx rsi rdi}, byrefRegs=0000 {}, byref
; gcrRegs -[r8] +[rbx]
cmp r15d, r14d
jae G_M43058_IG22
- mov r8d, r15d
- shl r8, 4
- mov r8, gword ptr [rbx+r8+18H]
+ mov eax, r15d
+ shl rax, 4
+ mov r8, gword ptr [rbx+rax+18H]
; gcrRegs +[r8]
mov gword ptr [rsp+30H], r8
- mov r8d, 1
- ; gcrRegs -[r8]
- ;; size=32 bbWeight=0.50 PerfScore 2.62
+ mov eax, 1
+ ;; size=31 bbWeight=0.50 PerfScore 2.62
G_M43058_IG11: ; bbWeight=0.50, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[rbx]
+ ; gcrRegs -[rbx r8]
jmp SHORT G_M43058_IG13
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M43058_IG12: ; bbWeight=0.50, gcrefRegs=00C2 {rcx rsi rdi}, byrefRegs=0000 {}, byref
@@ -176,12 +176,11 @@ G_M43058_IG12: ; bbWeight=0.50, gcrefRegs=00C2 {rcx rsi rdi}, byrefRegs=0
call [Microsoft.AspNetCore.Routing.RouteValueDictionary:TryGetValueSlow(System.String,byref):bool:this]
; gcrRegs -[rcx rdx]
; gcr arg pop 0
- mov r8d, eax
- ;; size=17 bbWeight=0.50 PerfScore 2.00
+ ;; size=14 bbWeight=0.50 PerfScore 1.88
G_M43058_IG13: ; bbWeight=1, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref, isz
- test r8d, r8d
+ test eax, eax
jne SHORT G_M43058_IG16
- ;; size=5 bbWeight=1 PerfScore 1.25
+ ;; size=4 bbWeight=1 PerfScore 1.25
G_M43058_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[rsi rdi]
xor rax, rax
@@ -290,7 +289,7 @@ G_M43058_IG22: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 514, prolog size 24, PerfScore 150.00, instruction count 142, allocated bytes for code 514 (MethodHash=96c157cd) for method Microsoft.AspNetCore.Mvc.Routing.NormalizedRouteValue:GetNormalizedRouteValue(Microsoft.AspNetCore.Mvc.ActionContext,System.String):System.String
+; Total bytes of code 511, prolog size 24, PerfScore 149.70, instruction count 142, allocated bytes for code 511 (MethodHash=96c157cd) for method Microsoft.AspNetCore.Mvc.Routing.NormalizedRouteValue:GetNormalizedRouteValue(Microsoft.AspNetCore.Mvc.ActionContext,System.String):System.String
; ============================================================
Unwind Info:
-3 (-0.53%) : 51038.dasm - Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider:GetValue(System.String):Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult:this@@ -19,9 +19,9 @@
; V08 tmp4 [V08 ] ( 4, 4 ) struct (16) [rsp+28H] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp"
; V09 tmp5 [V09,T11] ( 2, 2 ) ref -> rcx class-hnd single-def "impAppendStmt"
; V10 tmp6 [V10,T12] ( 2, 2 ) ref -> rsi class-hnd single-def "dup spill"
-; V11 tmp7 [V11,T14] ( 3, 1.50) bool -> r8 "Inline return value spill temp"
+; V11 tmp7 [V11,T14] ( 3, 1.50) bool -> rax "Inline return value spill temp"
; V12 tmp8 [V12,T03] ( 6, 6 ) ref -> rcx class-hnd single-def "Inlining Arg"
-; V13 tmp9 [V13,T15] ( 3, 1.50) bool -> r8 "Inline return value spill temp"
+; V13 tmp9 [V13,T15] ( 3, 1.50) bool -> rax "Inline return value spill temp"
; V14 tmp10 [V14,T06] ( 5, 5.50) ref -> rsi class-hnd single-def "Inline stloc first use temp"
; V15 tmp11 [V15,T04] ( 6, 6 ) int -> rdi single-def "Inline stloc first use temp"
; V16 tmp12 [V16,T00] ( 12, 17.54) int -> r12 "Inline stloc first use temp"
@@ -158,22 +158,22 @@ G_M18260_IG09: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0020 {rbp
xor r8, r8
; gcrRegs +[r8]
mov gword ptr [rsp+38H], r8
+ xor eax, eax
jmp SHORT G_M18260_IG11
- ;; size=10 bbWeight=0.50 PerfScore 1.62
+ ;; size=12 bbWeight=0.50 PerfScore 1.75
G_M18260_IG10: ; bbWeight=0.50, gcrefRegs=4040 {rsi r14}, byrefRegs=0020 {rbp}, byref
; gcrRegs -[r8] +[rsi]
cmp r12d, r15d
jae G_M18260_IG21
- mov r8d, r12d
- shl r8, 4
- mov r8, gword ptr [rsi+r8+18H]
+ mov eax, r12d
+ shl rax, 4
+ mov r8, gword ptr [rsi+rax+18H]
; gcrRegs +[r8]
mov gword ptr [rsp+38H], r8
- mov r8d, 1
- ; gcrRegs -[r8]
- ;; size=32 bbWeight=0.50 PerfScore 2.62
+ mov eax, 1
+ ;; size=31 bbWeight=0.50 PerfScore 2.62
G_M18260_IG11: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0020 {rbp}, byref, isz
- ; gcrRegs -[rsi]
+ ; gcrRegs -[rsi r8]
jmp SHORT G_M18260_IG13
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M18260_IG12: ; bbWeight=0.50, gcrefRegs=400A {rcx rbx r14}, byrefRegs=0020 {rbp}, byref
@@ -184,16 +184,15 @@ G_M18260_IG12: ; bbWeight=0.50, gcrefRegs=400A {rcx rbx r14}, byrefRegs=0
call [Microsoft.AspNetCore.Routing.RouteValueDictionary:TryGetValueSlow(System.String,byref):bool:this]
; gcrRegs -[rcx rdx rbx]
; gcr arg pop 0
- mov r8d, eax
- ;; size=17 bbWeight=0.50 PerfScore 2.00
+ ;; size=14 bbWeight=0.50 PerfScore 1.88
G_M18260_IG13: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0020 {rbp}, byref, isz
- test r8d, r8d
+ test eax, eax
je G_M18260_IG18
mov rdx, gword ptr [rsp+38H]
; gcrRegs +[rdx]
cmp gword ptr [rsp+38H], 0
je SHORT G_M18260_IG15
- ;; size=22 bbWeight=0.50 PerfScore 2.62
+ ;; size=21 bbWeight=0.50 PerfScore 2.62
G_M18260_IG14: ; bbWeight=0.25, gcrefRegs=4004 {rdx r14}, byrefRegs=0020 {rbp}, byref
mov rcx, gword ptr [rsp+38H]
; gcrRegs +[rcx]
@@ -315,7 +314,7 @@ G_M18260_IG21: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 562, prolog size 31, PerfScore 153.90, instruction count 159, allocated bytes for code 562 (MethodHash=88c5b8ab) for method Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider:GetValue(System.String):Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult:this
+; Total bytes of code 559, prolog size 31, PerfScore 153.60, instruction count 159, allocated bytes for code 559 (MethodHash=88c5b8ab) for method Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider:GetValue(System.String):Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult:this
; ============================================================
Unwind Info:
-1 (-0.53%) : 107846.dasm - System.Security.Cryptography.X509Certificates.ChainPal:Verify(int,byref):System.Nullable`1[bool]:this@@ -39,16 +39,16 @@ G_M2737_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
mov edx, dword ptr [rbp+18H]
; byrRegs -[rdx]
mov dword ptr [rbp-0CH], edx
- xor r9d, r9d
- ; gcrRegs -[r9]
+ xor edx, edx
vxorps xmm0, xmm0
vmovdqu xmmword ptr [rbp-28H], xmm0
- mov qword ptr [rbp-18H], r9
+ mov qword ptr [rbp-18H], rdx
mov dword ptr [rbp-28H], 24
mov rdx, gword ptr [rbp+10H]
; gcrRegs +[rdx]
mov rdx, gword ptr [rdx+08H]
lea r9, [rbp-28H]
+ ; gcrRegs -[r9]
lea r8, [rbp-10H]
mov ecx, 1
call [<unknown method>]
@@ -69,7 +69,7 @@ G_M2737_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
; byrRegs -[rcx]
mov word ptr [rbp-38H], 0
mov eax, dword ptr [rbp-38H]
- ;; size=124 bbWeight=1 PerfScore 28.92
+ ;; size=123 bbWeight=1 PerfScore 28.92
G_M2737_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 96
pop rbp
@@ -90,7 +90,7 @@ G_M2737_IG05: ; bbWeight=1, epilog, nogc, extend
ret
;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 188, prolog size 13, PerfScore 65.72, instruction count 50, allocated bytes for code 188 (MethodHash=47d7f54e) for method System.Security.Cryptography.X509Certificates.ChainPal:Verify(int,byref):System.Nullable`1[bool]:this
+; Total bytes of code 187, prolog size 13, PerfScore 65.62, instruction count 50, allocated bytes for code 187 (MethodHash=47d7f54e) for method System.Security.Cryptography.X509Certificates.ChainPal:Verify(int,byref):System.Nullable`1[bool]:this
; ============================================================
Unwind Info:
+2 (+20.00%) : 78920.dasm - System.Collections.Specialized.OrderedDictionary:.ctor():this@@ -20,13 +20,15 @@ G_M25491_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byr
; gcrRegs +[rcx]
xor eax, eax
mov dword ptr [rcx+28H], eax
+ xor rax, rax
+ ; gcrRegs +[rax]
mov gword ptr [rcx+18H], rax
- ;; size=9 bbWeight=1 PerfScore 2.25
+ ;; size=11 bbWeight=1 PerfScore 2.50
G_M25491_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 10, prolog size 0, PerfScore 4.25, instruction count 4, allocated bytes for code 10 (MethodHash=111b9c6c) for method System.Collections.Specialized.OrderedDictionary:.ctor():this
+; Total bytes of code 12, prolog size 0, PerfScore 4.70, instruction count 5, allocated bytes for code 12 (MethodHash=111b9c6c) for method System.Collections.Specialized.OrderedDictionary:.ctor():this
; ============================================================
Unwind Info:
+2 (+20.00%) : 63025.dasm - System.IO.StringReader:Dispose(bool):this@@ -21,13 +21,15 @@ G_M32759_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byr
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [rcx+08H], rax
+ xor eax, eax
+ ; gcrRegs -[rax]
mov dword ptr [rcx+10H], eax
- ;; size=9 bbWeight=1 PerfScore 2.25
+ ;; size=11 bbWeight=1 PerfScore 2.50
G_M32759_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 10, prolog size 0, PerfScore 4.25, instruction count 4, allocated bytes for code 10 (MethodHash=28148008) for method System.IO.StringReader:Dispose(bool):this
+; Total bytes of code 12, prolog size 0, PerfScore 4.70, instruction count 5, allocated bytes for code 12 (MethodHash=28148008) for method System.IO.StringReader:Dispose(bool):this
; ============================================================
Unwind Info:
+2 (+20.00%) : 51320.dasm - System.Collections.Specialized.OrderedDictionary:.ctor():this@@ -19,13 +19,15 @@ G_M25491_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byr
; gcrRegs +[rcx]
xor eax, eax
mov dword ptr [rcx+28H], eax
+ xor rax, rax
+ ; gcrRegs +[rax]
mov gword ptr [rcx+18H], rax
- ;; size=9 bbWeight=1 PerfScore 2.25
+ ;; size=11 bbWeight=1 PerfScore 2.50
G_M25491_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 10, prolog size 0, PerfScore 4.25, instruction count 4, allocated bytes for code 10 (MethodHash=111b9c6c) for method System.Collections.Specialized.OrderedDictionary:.ctor():this
+; Total bytes of code 12, prolog size 0, PerfScore 4.70, instruction count 5, allocated bytes for code 12 (MethodHash=111b9c6c) for method System.Collections.Specialized.OrderedDictionary:.ctor():this
; ============================================================
Unwind Info:
benchmarks.run.windows.x64.checked.mch+2 (+0.02%) : 27954.dasm - Microsoft.CodeAnalysis.CSharp.Imports:FromSyntax(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode,Microsoft.CodeAnalysis.CSharp.InContainerBinder,Roslyn.Utilities.ConsList`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol],bool):Microsoft.CodeAnalysis.CSharp.Imports@@ -3890,8 +3890,11 @@ G_M52814_IG139: ; bbWeight=2, gcrefRegs=D0EA {rcx rbx rbp rsi rdi r12 r14
mov gword ptr [rsp+388H], rcx
mov dword ptr [rsp+390H], edx
mov dword ptr [rsp+394H], -1
+ xor ecx, ecx
+ ; gcrRegs -[rcx]
mov dword ptr [rsp+20H], ecx
mov rcx, r8
+ ; gcrRegs +[rcx]
mov rdx, rbp
; gcrRegs +[rdx]
mov r8, gword ptr [rsp+338H]
@@ -3937,7 +3940,7 @@ G_M52814_IG139: ; bbWeight=2, gcrefRegs=D0EA {rcx rbx rbp rsi rdi r12 r14
mov edx, r10d
mov gword ptr [rsp+58H], rax
jmp SHORT G_M52814_IG142
- ;; size=197 bbWeight=2 PerfScore 82.00
+ ;; size=199 bbWeight=2 PerfScore 82.50
G_M52814_IG140: ; bbWeight=1, gcVars=000000000000000000000000040000000000000000000000000000000000000000000000000000000000010000000080 {V10 V371 V493}, gcrefRegs=F2E9 {rax rbx rbp rsi rdi r9 r12 r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rcx r8]
; GC ptr vars -{V09 V18 V25 V492}
@@ -4455,7 +4458,7 @@ G_M52814_IG169: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 9960, prolog size 98, PerfScore 5021.75, instruction count 1953, allocated bytes for code 9960 (MethodHash=ca8231b1) for method Microsoft.CodeAnalysis.CSharp.Imports:FromSyntax(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode,Microsoft.CodeAnalysis.CSharp.InContainerBinder,Roslyn.Utilities.ConsList`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol],bool):Microsoft.CodeAnalysis.CSharp.Imports
+; Total bytes of code 9962, prolog size 98, PerfScore 5022.45, instruction count 1954, allocated bytes for code 9962 (MethodHash=ca8231b1) for method Microsoft.CodeAnalysis.CSharp.Imports:FromSyntax(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode,Microsoft.CodeAnalysis.CSharp.InContainerBinder,Roslyn.Utilities.ConsList`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol],bool):Microsoft.CodeAnalysis.CSharp.Imports
; ============================================================
Unwind Info:
+2 (+0.02%) : 34318.dasm - System.Net.WebSockets.ManagedWebSocket+d__63`1[System.Net.WebSockets.ValueWebSocketReceiveResult]:MoveNext():this@@ -1450,9 +1450,12 @@ G_M39768_IG52: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0040 {rsi},
mov dword ptr [rbp-16CH], 0x3EA
mov dword ptr [rbp-168H], 2
mov gword ptr [rbp-180H], rax
+ xor rcx, rcx
+ ; gcrRegs +[rcx]
mov gword ptr [rbp-178H], rcx
mov dword ptr [rbp-170H], -1
lea rcx, [rbp-188H]
+ ; gcrRegs -[rcx]
call [<unknown method>]
; gcrRegs -[rax rdi]
; gcr arg pop 0
@@ -1487,7 +1490,7 @@ G_M39768_IG52: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0040 {rsi},
test rax, rax
setne cl
jmp SHORT G_M39768_IG54
- ;; size=207 bbWeight=4 PerfScore 163.00
+ ;; size=209 bbWeight=4 PerfScore 164.00
G_M39768_IG53: ; bbWeight=4, gcrefRegs=0008 {rbx}, byrefRegs=0040 {rsi}, byref
; gcrRegs -[rax]
mov ecx, 1
@@ -4020,7 +4023,7 @@ RWD00 dd G_M39768_IG19 - G_M39768_IG02
dd G_M39768_IG174 - G_M39768_IG02
-; Total bytes of code 8460, prolog size 98, PerfScore 4543.42, instruction count 1963, allocated bytes for code 8460 (MethodHash=70b364a7) for method System.Net.WebSockets.ManagedWebSocket+<ReceiveAsyncPrivate>d__63`1[System.Net.WebSockets.ValueWebSocketReceiveResult]:MoveNext():this
+; Total bytes of code 8462, prolog size 98, PerfScore 4544.62, instruction count 1964, allocated bytes for code 8462 (MethodHash=70b364a7) for method System.Net.WebSockets.ManagedWebSocket+<ReceiveAsyncPrivate>d__63`1[System.Net.WebSockets.ValueWebSocketReceiveResult]:MoveNext():this
; ============================================================
Unwind Info:
+2 (+0.03%) : 6903.dasm - System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):bool:this@@ -2435,7 +2435,9 @@ G_M31224_IG146: ; bbWeight=0.50, gcVars=000000000000000000000000000000000
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [r12], rax
- ;; size=6 bbWeight=0.50 PerfScore 0.62
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=8 bbWeight=0.50 PerfScore 0.75
G_M31224_IG147: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 0x6F8
pop rbx
@@ -2449,7 +2451,7 @@ G_M31224_IG147: ; bbWeight=0.50, epilog, nogc, extend
ret
;; size=20 bbWeight=0.50 PerfScore 2.62
G_M31224_IG148: ; bbWeight=2, gcVars=0000000000000000000000000000000000000000002000000000009022000000 {V06 V25 V26 V27 V348}, gcrefRegs=E6C0 {rsi rdi r9 r10 r13 r14 r15}, byrefRegs=1020 {rbp r12}, gcvars, byref, isz
- ; gcrRegs -[rax] +[rsi rdi r9-r10 r13 r15]
+ ; gcrRegs +[rsi rdi r9-r10 r13 r15]
; byrRegs +[rbp]
; GC ptr vars +{V06 V25 V26 V27 V29 V85 V348}
mov rcx, rdi
@@ -2926,7 +2928,7 @@ G_M31224_IG183: ; bbWeight=0, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, by
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 6622, prolog size 110, PerfScore 3112.20, instruction count 1364, allocated bytes for code 6624 (MethodHash=3e6d8607) for method System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):bool:this
+; Total bytes of code 6624, prolog size 110, PerfScore 3112.52, instruction count 1365, allocated bytes for code 6626 (MethodHash=3e6d8607) for method System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):bool:this
; ============================================================
Unwind Info:
+14 (+18.67%) : 8122.dasm - System.Runtime.Serialization.Formatters.Binary.ObjectProgress:Init():this@@ -19,28 +19,42 @@ G_M29322_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byr
xor eax, eax
mov dword ptr [rcx+50H], eax
mov dword ptr [rcx+54H], 3
+ xor rax, rax
+ ; gcrRegs +[rax]
mov gword ptr [rcx+08H], rax
mov gword ptr [rcx+10H], rax
+ xor eax, eax
+ ; gcrRegs -[rax]
mov dword ptr [rcx+58H], eax
mov dword ptr [rcx+5CH], eax
mov dword ptr [rcx+60H], eax
+ xor rax, rax
+ ; gcrRegs +[rax]
mov gword ptr [rcx+18H], rax
+ xor eax, eax
+ ; gcrRegs -[rax]
mov dword ptr [rcx+64H], eax
+ xor rax, rax
+ ; gcrRegs +[rax]
mov gword ptr [rcx+20H], rax
+ xor eax, eax
+ ; gcrRegs -[rax]
mov dword ptr [rcx+6CH], eax
+ xor rax, rax
+ ; gcrRegs +[rax]
mov gword ptr [rcx+28H], rax
mov gword ptr [rcx+30H], rax
mov gword ptr [rcx+38H], rax
mov gword ptr [rcx+40H], rax
mov rcx, gword ptr [rcx+48H]
cmp dword ptr [rcx], ecx
- ;; size=69 bbWeight=1 PerfScore 21.25
+ ;; size=83 bbWeight=1 PerfScore 23.00
G_M29322_IG03: ; bbWeight=1, epilog, nogc, extend
tail.jmp [<unknown method>]
; gcr arg pop 0
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 75, prolog size 0, PerfScore 30.75, instruction count 20, allocated bytes for code 75 (MethodHash=1b918d75) for method System.Runtime.Serialization.Formatters.Binary.ObjectProgress:Init():this
+; Total bytes of code 89, prolog size 0, PerfScore 33.90, instruction count 27, allocated bytes for code 89 (MethodHash=1b918d75) for method System.Runtime.Serialization.Formatters.Binary.ObjectProgress:Init():this
; ============================================================
Unwind Info:
+2 (+20.00%) : 3518.dasm - System.IO.StringReader:Dispose(bool):this@@ -20,13 +20,15 @@ G_M32759_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byr
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [rcx+08H], rax
+ xor eax, eax
+ ; gcrRegs -[rax]
mov dword ptr [rcx+10H], eax
- ;; size=9 bbWeight=1 PerfScore 2.25
+ ;; size=11 bbWeight=1 PerfScore 2.50
G_M32759_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 10, prolog size 0, PerfScore 4.25, instruction count 4, allocated bytes for code 10 (MethodHash=28148008) for method System.IO.StringReader:Dispose(bool):this
+; Total bytes of code 12, prolog size 0, PerfScore 4.70, instruction count 5, allocated bytes for code 12 (MethodHash=28148008) for method System.IO.StringReader:Dispose(bool):this
; ============================================================
Unwind Info:
+2 (+33.33%) : 31227.dasm - System.Net.CredentialCache+CredentialEnumerator:MoveNext(byref):bool:this@@ -19,12 +19,14 @@ G_M60932_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byr
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [rdx], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M60932_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=f85b11fb) for method System.Net.CredentialCache+CredentialEnumerator:MoveNext(byref):bool:this
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=f85b11fb) for method System.Net.CredentialCache+CredentialEnumerator:MoveNext(byref):bool:this
; ============================================================
Unwind Info:
coreclr_tests.run.windows.x64.checked.mch-2 (-0.11%) : 431188.dasm - System.Xml.Xsl.Xslt.XslAstAnalyzer+XPathAnalyzer:Function(System.String,System.String,System.Collections.Generic.IList`1[int]):int:this@@ -61,17 +61,19 @@ G_M43217_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
xor r11, r11
; gcrRegs +[r11]
mov gword ptr [rcx+20H], r11
- xor r11d, r11d
- ; gcrRegs -[r11]
- mov dword ptr [rbp-3CH], r11d
+ xor ecx, ecx
+ ; gcrRegs -[rcx]
+ mov dword ptr [rbp-3CH], ecx
mov rcx, gword ptr [rbp+28H]
+ ; gcrRegs +[rcx]
mov r11, 0xD1FFAB1E ; code for <unknown method>
+ ; gcrRegs -[r11]
call [r11]<unknown method>
; gcrRegs -[rcx] +[rax]
; gcr arg pop 0
mov gword ptr [rbp-48H], rax
mov dword ptr [rbp-A8H], 0x3E8
- ;; size=49 bbWeight=1 PerfScore 9.75
+ ;; size=47 bbWeight=1 PerfScore 9.75
G_M43217_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rax]
jmp SHORT G_M43217_IG05
@@ -700,7 +702,7 @@ RWD00 dd G_M43217_IG20 - G_M43217_IG02
dd G_M43217_IG19 - G_M43217_IG02
-; Total bytes of code 1881, prolog size 93, PerfScore 667.45, instruction count 395, allocated bytes for code 1881 (MethodHash=68d1572e) for method System.Xml.Xsl.Xslt.XslAstAnalyzer+XPathAnalyzer:Function(System.String,System.String,System.Collections.Generic.IList`1[int]):int:this
+; Total bytes of code 1879, prolog size 93, PerfScore 667.25, instruction count 395, allocated bytes for code 1879 (MethodHash=68d1572e) for method System.Xml.Xsl.Xslt.XslAstAnalyzer+XPathAnalyzer:Function(System.String,System.String,System.Collections.Generic.IList`1[int]):int:this
; ============================================================
Unwind Info:
+0 (0.00%) : 470401.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[int,System.__Canon]:TryRemoveInternal(int,byref,bool,System.__Canon):bool:this@@ -311,13 +311,13 @@ G_M9585_IG18: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
xor rdx, rdx
; gcrRegs +[rdx]
mov gword ptr [rcx], rdx
- xor edx, edx
- ; gcrRegs -[rdx]
- mov dword ptr [rbp-98H], edx
+ xor ecx, ecx
+ ; byrRegs -[rcx]
+ mov dword ptr [rbp-98H], ecx
jmp G_M9585_IG34
;; size=96 bbWeight=1 PerfScore 27.50
G_M9585_IG19: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ; byrRegs -[rcx]
+ ; gcrRegs -[rdx]
cmp gword ptr [rbp-88H], 0
jne SHORT G_M9585_IG23
mov rdx, gword ptr [rbp+10H]
+0 (0.00%) : 459939.dasm - ILGEN_0x97f1b6bf:Method_0xda70a253():uint@@ -196,13 +196,12 @@ G_M58389_IG03: ; bbWeight=1, extend
mov dword ptr [rcx], eax
;; size=318 bbWeight=1 PerfScore 38.25
G_M58389_IG04: ; bbWeight=1, isz, extend
- xor rdx, rdx
- ; gcrRegs +[rdx]
- mov gword ptr [rbp-58H], rdx
- mov dword ptr [rbp-5CH], 4
- mov rcx, gword ptr [rbp-48H]
+ xor rcx, rcx
; gcrRegs +[rcx]
; byrRegs -[rcx]
+ mov gword ptr [rbp-58H], rcx
+ mov dword ptr [rbp-5CH], 4
+ mov rcx, gword ptr [rbp-48H]
mov gword ptr [rbp-68H], rcx
mov dword ptr [rbp-6CH], 2
cmp qword ptr [rbp-10H], 0
@@ -223,7 +222,6 @@ G_M58389_IG04: ; bbWeight=1, isz, extend
jmp SHORT G_M58389_IG06
;; size=80 bbWeight=1 PerfScore 20.25
G_M58389_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- ; gcrRegs -[rdx]
mov rcx, gword ptr [rbp-58H]
; gcrRegs +[rcx]
mov gword ptr [rbp-78H], rcx
+2 (+11.76%) : 297211.dasm - System.RuntimeType+ListBuilder`1[System.__Canon]:.ctor(int):this@@ -21,14 +21,16 @@ G_M14044_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr
; gcrRegs +[rax]
mov gword ptr [rcx], rax
mov gword ptr [rcx+08H], rax
+ xor eax, eax
+ ; gcrRegs -[rax]
mov dword ptr [rcx+10H], eax
mov dword ptr [rcx+14H], r8d
- ;; size=16 bbWeight=1 PerfScore 4.25
+ ;; size=18 bbWeight=1 PerfScore 4.50
G_M14044_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 17, prolog size 0, PerfScore 6.95, instruction count 6, allocated bytes for code 17 (MethodHash=3bacc923) for method System.RuntimeType+ListBuilder`1[System.__Canon]:.ctor(int):this
+; Total bytes of code 19, prolog size 0, PerfScore 7.40, instruction count 7, allocated bytes for code 19 (MethodHash=3bacc923) for method System.RuntimeType+ListBuilder`1[System.__Canon]:.ctor(int):this
; ============================================================
Unwind Info:
+3 (+12.50%) : 4693.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.Text.RegularExpressions.RegexCache+Key,System.__Canon]:.ctor(int,int):this@@ -22,17 +22,19 @@ G_M24429_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byr
; gcrRegs +[r9]
mov gword ptr [rsp+20H], r9
; gcr arg write
+ xor r9d, r9d
+ ; gcrRegs -[r9]
call [<unknown method>]
- ; gcrRegs -[rcx r9]
+ ; gcrRegs -[rcx]
; gcr arg pop 0
nop
- ;; size=15 bbWeight=1 PerfScore 4.50
+ ;; size=18 bbWeight=1 PerfScore 4.75
G_M24429_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40
ret
;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 24, prolog size 4, PerfScore 8.40, instruction count 7, allocated bytes for code 24 (MethodHash=aebda092) for method System.Collections.Concurrent.ConcurrentDictionary`2[System.Text.RegularExpressions.RegexCache+Key,System.__Canon]:.ctor(int,int):this
+; Total bytes of code 27, prolog size 4, PerfScore 8.95, instruction count 8, allocated bytes for code 27 (MethodHash=aebda092) for method System.Collections.Concurrent.ConcurrentDictionary`2[System.Text.RegularExpressions.RegexCache+Key,System.__Canon]:.ctor(int,int):this
; ============================================================
Unwind Info:
+6 (+16.22%) : 478651.dasm - System.Reflection.Emit.ModuleBuilder:DefineType(System.String,int):System.Reflection.Emit.TypeBuilder:this@@ -24,21 +24,25 @@ G_M31449_IG02: ; bbWeight=1, gcrefRegs=0006 {rcx rdx}, byrefRegs=0000 {},
; gcrRegs +[r9]
mov gword ptr [rsp+20H], r9
; gcr arg write
+ xor r9d, r9d
+ ; gcrRegs -[r9]
mov dword ptr [rsp+28H], r9d
mov dword ptr [rsp+30H], r9d
+ xor r9, r9
+ ; gcrRegs +[r9]
mov rax, qword ptr [rcx]
mov rax, qword ptr [rax+70H]
call [rax]<unknown method>
; gcrRegs -[rcx rdx r9] +[rax]
; gcr arg pop 0
nop
- ;; size=28 bbWeight=1 PerfScore 10.50
+ ;; size=34 bbWeight=1 PerfScore 11.00
G_M31449_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 56
ret
;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 37, prolog size 4, PerfScore 15.70, instruction count 11, allocated bytes for code 37 (MethodHash=67998526) for method System.Reflection.Emit.ModuleBuilder:DefineType(System.String,int):System.Reflection.Emit.TypeBuilder:this
+; Total bytes of code 43, prolog size 4, PerfScore 16.80, instruction count 13, allocated bytes for code 43 (MethodHash=67998526) for method System.Reflection.Emit.ModuleBuilder:DefineType(System.String,int):System.Reflection.Emit.TypeBuilder:this
; ============================================================
Unwind Info:
libraries.crossgen2.windows.x64.checked.mch-18 (-2.02%) : 34933.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseOnErrorGoto(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.OnErrorGoToStatementSyntax:this@@ -12,18 +12,18 @@
; V01 arg1 [V01,T06] ( 3, 3 ) ref -> rdi class-hnd single-def
; V02 arg2 [V02,T07] ( 3, 3 ) ref -> rbx class-hnd single-def
; V03 loc0 [V03,T20] ( 2, 2 ) ref -> r15 class-hnd single-def
-; V04 loc1 [V04,T19] ( 3, 2.50) ref -> [rbp-58H] class-hnd
-; V05 loc2 [V05,T17] ( 4, 2.50) ref -> [rbp-60H] class-hnd
+; V04 loc1 [V04,T19] ( 3, 2.50) ref -> [rbp-50H] class-hnd
+; V05 loc2 [V05,T17] ( 4, 2.50) ref -> [rbp-58H] class-hnd
; V06 loc3 [V06,T18] ( 4, 2.50) ushort -> [rbp-3CH]
-; V07 loc4 [V07,T05] ( 7, 5 ) ref -> [rbp-68H] class-hnd spill-single-def
+; V07 loc4 [V07,T05] ( 7, 5 ) ref -> [rbp-60H] class-hnd spill-single-def
; V08 OutArgs [V08 ] ( 1, 1 ) struct (64) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V09 tmp1 [V09,T21] ( 2, 2 ) ref -> [rbp-70H] class-hnd single-def "impAppendStmt"
+; V09 tmp1 [V09,T21] ( 2, 2 ) ref -> [rbp-68H] class-hnd single-def "impAppendStmt"
;* V10 tmp2 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp"
; V11 tmp3 [V11,T08] ( 5, 4 ) ref -> r15 class-hnd "Inline stloc first use temp"
; V12 tmp4 [V12,T27] ( 2, 2 ) int -> r8
;* V13 tmp5 [V13 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V14 tmp6 [V14,T09] ( 4, 4 ) int -> rdx "Inlining Arg"
-; V15 tmp7 [V15,T10] ( 4, 4 ) int -> [rbp-40H] "Inlining Arg"
+; V15 tmp7 [V15,T10] ( 4, 4 ) int -> rdx "Inlining Arg"
; V16 tmp8 [V16,T28] ( 2, 1 ) int -> r8
;* V17 tmp9 [V17 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V18 tmp10 [V18,T16] ( 3, 3 ) ref -> rax class-hnd single-def "Inlining Arg"
@@ -32,21 +32,21 @@
; V21 tmp13 [V21,T30] ( 2, 1 ) int -> r8
;* V22 tmp14 [V22 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V23 tmp15 [V23,T11] ( 4, 4 ) int -> rdx "Inlining Arg"
-; V24 tmp16 [V24,T12] ( 4, 4 ) int -> [rbp-44H] "Inlining Arg"
-; V25 tmp17 [V25,T13] ( 4, 4 ) int -> [rbp-48H] "Inlining Arg"
+; V24 tmp16 [V24,T12] ( 4, 4 ) int -> rdx "Inlining Arg"
+; V25 tmp17 [V25,T13] ( 4, 4 ) int -> rdx "Inlining Arg"
; V26 tmp18 [V26,T14] ( 4, 4 ) int -> rdx "Inlining Arg"
; V27 tmp19 [V27,T15] ( 2, 4 ) ref -> rsi class-hnd single-def "Inlining Arg"
-; V28 tmp20 [V28,T03] ( 3, 6 ) ref -> [rbp-78H] class-hnd exact spill-single-def "NewObj constructor temp"
+; V28 tmp20 [V28,T03] ( 3, 6 ) ref -> [rbp-70H] class-hnd exact spill-single-def "NewObj constructor temp"
; V29 tmp21 [V29,T22] ( 2, 2 ) ref -> rcx single-def "argument with side effect"
; V30 tmp22 [V30,T23] ( 2, 2 ) ref -> rcx single-def "argument with side effect"
; V31 tmp23 [V31,T24] ( 2, 2 ) ref -> rcx single-def "argument with side effect"
; V32 tmp24 [V32,T25] ( 2, 2 ) ref -> rdx single-def "argument with side effect"
; V33 tmp25 [V33,T26] ( 2, 2 ) ref -> rdx single-def "argument with side effect"
; V34 cse0 [V34,T01] ( 13, 7.50) long -> r13 "CSE - aggressive"
-; V35 cse1 [V35,T02] ( 13, 7.50) long -> [rbp-50H] "CSE - aggressive"
+; V35 cse1 [V35,T02] ( 13, 7.50) long -> [rbp-48H] "CSE - aggressive"
; V36 cse2 [V36,T04] ( 8, 5 ) long -> r14 "CSE - moderate"
;
-; Lcl frame size = 136
+; Lcl frame size = 120
G_M47317_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push rbp
@@ -57,15 +57,15 @@ G_M47317_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
push rdi
push rsi
push rbx
- sub rsp, 136
- lea rbp, [rsp+C0H]
+ sub rsp, 120
+ lea rbp, [rsp+B0H]
mov rsi, rcx
; gcrRegs +[rsi]
mov rdi, rdx
; gcrRegs +[rdi]
mov rbx, r8
; gcrRegs +[rbx]
- ;; size=36 bbWeight=1 PerfScore 9.50
+ ;; size=33 bbWeight=1 PerfScore 9.50
G_M47317_IG02: ; bbWeight=1, gcrefRegs=00C8 {rbx rsi rdi}, byrefRegs=0000 {}, byref, isz
mov r14, qword ptr [(reloc)] ; const ptr
mov r15, gword ptr [rsi+r14]
@@ -109,14 +109,14 @@ G_M47317_IG04: ; bbWeight=1, gcrefRegs=80C8 {rbx rsi rdi r15}, byrefRegs=
mov rcx, qword ptr [(reloc)] ; const ptr
mov rax, rcx
; gcrRegs -[rax]
- mov qword ptr [rbp-50H], rax
+ mov qword ptr [rbp-48H], rax
mov rcx, gword ptr [rsi+rax]
; gcrRegs +[rcx]
mov edx, 1
cmp dword ptr [rcx], ecx
call [<unknown method>]
; gcrRegs -[rcx] +[rax]
- mov gword ptr [rbp-68H], rax
+ mov gword ptr [rbp-60H], rax
; GC ptr vars +{V07}
cmp byte ptr [rax], al
mov rcx, rax
@@ -128,7 +128,7 @@ G_M47317_IG04: ; bbWeight=1, gcrefRegs=80C8 {rbx rsi rdi r15}, byrefRegs=
jne G_M47317_IG07
;; size=95 bbWeight=1 PerfScore 30.25
G_M47317_IG05: ; bbWeight=0.50, gcrefRegs=90C8 {rbx rsi rdi r12 r15}, byrefRegs=0000 {}, byref, isz
- mov rcx, gword ptr [rbp-68H]
+ mov rcx, gword ptr [rbp-60H]
; gcrRegs +[rcx]
lea r11, [(reloc)]
call [r11]<unknown method>
@@ -147,19 +147,19 @@ G_M47317_IG05: ; bbWeight=0.50, gcrefRegs=90C8 {rbx rsi rdi r12 r15}, byr
mov rcx, qword ptr [(reloc)] ; const ptr
mov rcx, gword ptr [rsi+rcx]
; gcrRegs +[rcx]
- mov rdx, gword ptr [rbp-68H]
+ mov rdx, gword ptr [rbp-60H]
; gcrRegs +[rdx]
cmp dword ptr [rcx], ecx
; GC ptr vars -{V07}
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.ContextAwareSyntaxFactory:NumericLabel(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.LabelSyntax:this]
; gcrRegs -[rcx rdx] +[rax]
- mov gword ptr [rbp-60H], rax
+ mov gword ptr [rbp-58H], rax
; GC ptr vars +{V05}
xor edx, edx
mov ecx, 1
cmp byte ptr [rsi+r13], 0
cmovne edx, ecx
- mov r8, qword ptr [rbp-50H]
+ mov r8, qword ptr [rbp-48H]
mov rcx, gword ptr [rsi+r8]
; gcrRegs +[rcx]
cmp dword ptr [rcx], ecx
@@ -168,19 +168,18 @@ G_M47317_IG05: ; bbWeight=0.50, gcrefRegs=90C8 {rbx rsi rdi r12 r15}, byr
xor rcx, rcx
; gcrRegs +[rcx]
mov gword ptr [rsi+r14], rcx
- mov edx, 1
- cmp byte ptr [rsi+r13], 0
- cmovne ecx, edx
+ xor edx, edx
+ mov ecx, 1
; gcrRegs -[rcx]
- mov dword ptr [rbp-40H], ecx
- mov r13, qword ptr [rbp-50H]
+ cmp byte ptr [rsi+r13], 0
+ cmovne edx, ecx
+ mov r13, qword ptr [rbp-48H]
mov rcx, gword ptr [rsi+r13]
; gcrRegs +[rcx]
- mov edx, dword ptr [rbp-40H]
cmp dword ptr [rcx], ecx
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:GetNextTokenInState(int):this]
; gcrRegs -[rcx]
- ;; size=146 bbWeight=0.50 PerfScore 27.38
+ ;; size=142 bbWeight=0.50 PerfScore 26.50
G_M47317_IG06: ; bbWeight=0.50, gcrefRegs=90C8 {rbx rsi rdi r12 r15}, byrefRegs=0000 {}, byref
xor rcx, rcx
; gcrRegs +[rcx]
@@ -191,7 +190,7 @@ G_M47317_IG06: ; bbWeight=0.50, gcrefRegs=90C8 {rbx rsi rdi r12 r15}, byr
G_M47317_IG07: ; bbWeight=0.50, gcVars=0000000000000020 {V07}, gcrefRegs=90C8 {rbx rsi rdi r12 r15}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[rcx]
; GC ptr vars +{V07}
- mov rcx, gword ptr [rbp-68H]
+ mov rcx, gword ptr [rbp-60H]
; gcrRegs +[rcx]
call [<unknown method>]
; gcrRegs -[rcx]
@@ -201,7 +200,7 @@ G_M47317_IG07: ; bbWeight=0.50, gcVars=0000000000000020 {V07}, gcrefRegs=
xor r8d, r8d
cmp byte ptr [rsi+r13], 0
setne r8b
- mov rax, qword ptr [rbp-50H]
+ mov rax, qword ptr [rbp-48H]
mov rcx, gword ptr [rsi+rax]
; gcrRegs +[rcx]
mov edx, 2
@@ -219,7 +218,7 @@ G_M47317_IG07: ; bbWeight=0.50, gcVars=0000000000000020 {V07}, gcrefRegs=
xor r8d, r8d
cmp byte ptr [rsi+r13], 0
setne r8b
- mov rax, qword ptr [rbp-50H]
+ mov rax, qword ptr [rbp-48H]
mov rcx, gword ptr [rsi+rax]
; gcrRegs +[rcx]
mov edx, 2
@@ -244,22 +243,22 @@ G_M47317_IG07: ; bbWeight=0.50, gcVars=0000000000000020 {V07}, gcrefRegs=
jne G_M47317_IG09
mov r12d, 197
; gcrRegs -[r12]
- mov rcx, gword ptr [rbp-68H]
+ mov rcx, gword ptr [rbp-60H]
; gcrRegs +[rcx]
; GC ptr vars -{V05 V07}
call [CORINFO_HELP_READYTORUN_CHKCAST]
; gcrRegs -[rcx] +[rax]
- mov gword ptr [rbp-58H], rax
+ mov gword ptr [rbp-50H], rax
; GC ptr vars +{V04}
mov rcx, qword ptr [(reloc)] ; const ptr
mov r9, gword ptr [rsi+rcx]
; gcrRegs +[r9]
- mov gword ptr [rbp-70H], r9
+ mov gword ptr [rbp-68H], r9
; GC ptr vars +{V09}
xor r8d, r8d
cmp byte ptr [rsi+r13], 0
setne r8b
- mov r10, qword ptr [rbp-50H]
+ mov r10, qword ptr [rbp-48H]
mov rcx, gword ptr [rsi+r10]
; gcrRegs +[rcx]
;; size=217 bbWeight=0.50 PerfScore 36.62
@@ -270,19 +269,19 @@ G_M47317_IG08: ; bbWeight=0.50, extend
; gcrRegs -[rcx r9]
mov rdx, rax
; gcrRegs +[rdx]
- mov rcx, gword ptr [rbp-70H]
+ mov rcx, gword ptr [rbp-68H]
; gcrRegs +[rcx]
cmp dword ptr [rcx], ecx
; GC ptr vars -{V09}
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.ContextAwareSyntaxFactory:NumericLabel(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.LabelSyntax:this]
; gcrRegs -[rcx rdx]
- mov gword ptr [rbp-60H], rax
+ mov gword ptr [rbp-58H], rax
; GC ptr vars +{V05}
xor edx, edx
mov ecx, 1
cmp byte ptr [rsi+r13], 0
cmovne edx, ecx
- mov r8, qword ptr [rbp-50H]
+ mov r8, qword ptr [rbp-48H]
mov rcx, gword ptr [rsi+r8]
; gcrRegs +[rcx]
cmp dword ptr [rcx], ecx
@@ -291,45 +290,43 @@ G_M47317_IG08: ; bbWeight=0.50, extend
xor rcx, rcx
; gcrRegs +[rcx]
mov gword ptr [rsi+r14], rcx
- mov edx, 1
- cmp byte ptr [rsi+r13], 0
- cmovne ecx, edx
+ xor edx, edx
+ mov ecx, 1
; gcrRegs -[rcx]
- mov dword ptr [rbp-44H], ecx
- mov rax, qword ptr [rbp-50H]
+ cmp byte ptr [rsi+r13], 0
+ cmovne edx, ecx
+ mov rax, qword ptr [rbp-48H]
mov rcx, gword ptr [rsi+rax]
; gcrRegs +[rcx]
- mov edx, dword ptr [rbp-44H]
cmp dword ptr [rcx], ecx
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:GetNextTokenInState(int):this]
; gcrRegs -[rcx]
xor rcx, rcx
; gcrRegs +[rcx]
mov gword ptr [rsi+r14], rcx
- mov edx, 1
- cmp byte ptr [rsi+r13], 0
- cmovne ecx, edx
+ xor edx, edx
...
-6 (-1.69%) : 34796.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseGroupEndStatement():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.StatementSyntax:this@@ -21,7 +21,7 @@
; V10 tmp4 [V10,T13] ( 2, 2 ) int -> r8
;* V11 tmp5 [V11 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V12 tmp6 [V12,T04] ( 4, 4 ) int -> rdx "Inlining Arg"
-; V13 tmp7 [V13,T05] ( 4, 4 ) int -> [rsp+24H] "Inlining Arg"
+; V13 tmp7 [V13,T05] ( 4, 4 ) int -> rdx "Inlining Arg"
; V14 tmp8 [V14,T10] ( 2, 2 ) ref -> rdx single-def "argument with side effect"
; V15 tmp9 [V15,T11] ( 2, 2 ) ref -> r9 single-def "argument with side effect"
; V16 tmp10 [V16,T12] ( 2, 2 ) ref -> rsi single-def "argument with side effect"
@@ -147,15 +147,14 @@ G_M42444_IG06: ; bbWeight=0.50, gcrefRegs=8048 {rbx rsi r15}, byrefRegs=0
xor rcx, rcx
; gcrRegs +[rcx]
mov gword ptr [rsi+rdi], rcx
- mov edx, 1
- cmp byte ptr [rsi+rbp], 0
- cmovne ecx, edx
+ xor edx, edx
+ mov ecx, 1
; gcrRegs -[rcx]
- mov dword ptr [rsp+24H], ecx
- mov rdx, qword ptr [(reloc)] ; const ptr
- mov rcx, gword ptr [rsi+rdx]
+ cmp byte ptr [rsi+rbp], 0
+ cmovne edx, ecx
+ mov rcx, qword ptr [(reloc)] ; const ptr
+ mov rcx, gword ptr [rsi+rcx]
; gcrRegs +[rcx]
- mov edx, dword ptr [rsp+24H]
cmp dword ptr [rcx], ecx
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:GetNextTokenInState(int):this]
; gcrRegs -[rcx]
@@ -182,7 +181,7 @@ G_M42444_IG06: ; bbWeight=0.50, gcrefRegs=8048 {rbx rsi r15}, byrefRegs=0
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.ContextAwareSyntaxFactory:EndBlockStatement(ushort,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.EndBlockStatementSyntax:this]
; gcrRegs -[rcx rbx rsi r8-r9]
; gcr arg pop 0
- ;; size=124 bbWeight=0.50 PerfScore 23.00
+ ;; size=118 bbWeight=0.50 PerfScore 22.12
G_M42444_IG07: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop
;; size=1 bbWeight=1 PerfScore 0.25
@@ -197,7 +196,7 @@ G_M42444_IG08: ; bbWeight=1, epilog, nogc, extend
ret
;; size=13 bbWeight=1 PerfScore 4.25
-; Total bytes of code 355, prolog size 12, PerfScore 124.13, instruction count 96, allocated bytes for code 355 (MethodHash=1a4a5a33) for method Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseGroupEndStatement():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.StatementSyntax:this
+; Total bytes of code 349, prolog size 12, PerfScore 122.65, instruction count 95, allocated bytes for code 349 (MethodHash=1a4a5a33) for method Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseGroupEndStatement():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.StatementSyntax:this
; ============================================================
Unwind Info:
-10 (-1.11%) : 34832.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseDelegateStatement(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.AttributeListSyntax],Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax]):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.DelegateStatementSyntax:this@@ -13,7 +13,7 @@
;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 8) zero-ref single-def
; V03 loc0 [V03,T19] ( 2, 2 ) ref -> r15 class-hnd single-def
; V04 loc1 [V04,T17] ( 4, 2.50) ushort -> [rbp-3CH]
-; V05 loc2 [V05,T16] ( 4, 2.50) ref -> [rbp-80H] class-hnd
+; V05 loc2 [V05,T16] ( 4, 2.50) ref -> [rbp-78H] class-hnd
; V06 loc3 [V06 ] ( 4, 3 ) ref -> [rbp-48H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd
; V07 loc4 [V07 ] ( 4, 3 ) ref -> [rbp-50H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd
; V08 loc5 [V08 ] ( 4, 3 ) ref -> [rbp-58H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd
@@ -28,14 +28,14 @@
;* V17 tmp3 [V17 ] ( 0, 0 ) struct ( 8) zero-ref "struct address for call/obj"
;* V18 tmp4 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp"
; V19 tmp5 [V19,T08] ( 5, 4 ) ref -> r15 class-hnd "Inline stloc first use temp"
-; V20 tmp6 [V20,T02] ( 4, 8 ) int -> [rbp-74H] "Inlining Arg"
+; V20 tmp6 [V20,T02] ( 4, 8 ) int -> rdx "Inlining Arg"
;* V21 tmp7 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline return value spill temp"
-; V22 tmp8 [V22,T06] ( 6, 5 ) ref -> [rbp-88H] class-hnd "Inline stloc first use temp"
+; V22 tmp8 [V22,T06] ( 6, 5 ) ref -> [rbp-80H] class-hnd "Inline stloc first use temp"
;* V23 tmp9 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp"
-; V24 tmp10 [V24,T14] ( 5, 2.50) ref -> [rbp-90H] class-hnd "Inline stloc first use temp"
+; V24 tmp10 [V24,T14] ( 5, 2.50) ref -> [rbp-88H] class-hnd "Inline stloc first use temp"
; V25 tmp11 [V25,T09] ( 4, 4 ) int -> rdx "Inlining Arg"
;* V26 tmp12 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp"
-; V27 tmp13 [V27,T15] ( 5, 2.50) ref -> [rbp-98H] class-hnd "Inline stloc first use temp"
+; V27 tmp13 [V27,T15] ( 5, 2.50) ref -> [rbp-90H] class-hnd "Inline stloc first use temp"
; V28 tmp14 [V28,T10] ( 4, 4 ) int -> rdx "Inlining Arg"
; V29 tmp15 [V29,T03] ( 6, 6 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp"
;* V30 tmp16 [V30 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp"
@@ -52,7 +52,7 @@
; V41 cse1 [V41,T04] ( 9, 5.50) long -> r13 "CSE - aggressive"
; V42 cse2 [V42,T05] ( 9, 5.50) long -> r12 "CSE - aggressive"
;
-; Lcl frame size = 184
+; Lcl frame size = 168
G_M41847_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push rbp
@@ -63,8 +63,8 @@ G_M41847_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
push rdi
push rsi
push rbx
- sub rsp, 184
- lea rbp, [rsp+F0H]
+ sub rsp, 168
+ lea rbp, [rsp+E0H]
xorps xmm4, xmm4
movaps xmmword ptr [rbp-70H], xmm4
movaps xmmword ptr [rbp-60H], xmm4
@@ -118,16 +118,15 @@ G_M41847_IG04: ; bbWeight=1, gcrefRegs=80C8 {rbx rsi rdi r15}, byrefRegs=
mov gword ptr [rbp-60H], rcx
mov gword ptr [rbp-68H], rcx
mov gword ptr [rbp-70H], rcx
+ xor edx, edx
mov r13, qword ptr [(reloc)] ; const ptr
- mov edx, 1
- cmp byte ptr [rsi+r13], 0
- cmovne ecx, edx
+ mov ecx, 1
; gcrRegs -[rcx]
- mov dword ptr [rbp-74H], ecx
+ cmp byte ptr [rsi+r13], 0
+ cmovne edx, ecx
mov r12, qword ptr [(reloc)] ; const ptr
mov rcx, gword ptr [rsi+r12]
; gcrRegs +[rcx]
- mov edx, dword ptr [rbp-74H]
cmp dword ptr [rcx], ecx
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:GetNextTokenInState(int):this]
; gcrRegs -[rax rcx]
@@ -138,7 +137,7 @@ G_M41847_IG04: ; bbWeight=1, gcrefRegs=80C8 {rbx rsi rdi r15}, byrefRegs=
; gcrRegs +[rax]
test rax, rax
jne SHORT G_M41847_IG06
- ;; size=98 bbWeight=1 PerfScore 31.75
+ ;; size=94 bbWeight=1 PerfScore 30.00
G_M41847_IG05: ; bbWeight=0.50, gcrefRegs=80C8 {rbx rsi rdi r15}, byrefRegs=0000 {}, byref
; gcrRegs -[rax rcx]
mov rcx, gword ptr [rsi+r12]
@@ -149,16 +148,16 @@ G_M41847_IG05: ; bbWeight=0.50, gcrefRegs=80C8 {rbx rsi rdi r15}, byrefRe
mov byte ptr [rsi+r13], 0
lea rcx, bword ptr [rsi+r14]
; byrRegs +[rcx]
- mov gword ptr [rbp-88H], rax
+ mov gword ptr [rbp-80H], rax
; GC ptr vars +{V22}
mov rdx, rax
; gcrRegs +[rdx]
call [CORINFO_HELP_ASSIGN_REF]
; gcrRegs -[rax rdx]
; byrRegs -[rcx]
- mov rax, gword ptr [rbp-88H]
+ mov rax, gword ptr [rbp-80H]
; gcrRegs +[rax]
- ;; size=44 bbWeight=0.50 PerfScore 7.38
+ ;; size=38 bbWeight=0.50 PerfScore 7.38
G_M41847_IG06: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=80C9 {rax rbx rsi rdi r15}, byrefRegs=0000 {}, gcvars, byref
; GC ptr vars -{V22}
cmp byte ptr [rax], al
@@ -186,14 +185,14 @@ G_M41847_IG07: ; bbWeight=0.50, gcrefRegs=80C8 {rbx rsi rdi r15}, byrefRe
mov byte ptr [rsi+r13], 0
lea rcx, bword ptr [rsi+r14]
; byrRegs +[rcx]
- mov gword ptr [rbp-90H], rax
+ mov gword ptr [rbp-88H], rax
; GC ptr vars +{V24}
mov rdx, rax
; gcrRegs +[rdx]
call [CORINFO_HELP_ASSIGN_REF]
; gcrRegs -[rax rdx]
; byrRegs -[rcx]
- mov rdx, gword ptr [rbp-90H]
+ mov rdx, gword ptr [rbp-88H]
; gcrRegs +[rdx]
;; size=72 bbWeight=0.50 PerfScore 10.12
G_M41847_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80CC {rdx rbx rsi rdi r15}, byrefRegs=0000 {}, gcvars, byref
@@ -202,7 +201,7 @@ G_M41847_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80C
; gcrRegs +[rcx]
call [CORINFO_HELP_READYTORUN_CHKCAST]
; gcrRegs -[rcx rdx] +[rax]
- mov gword ptr [rbp-80H], rax
+ mov gword ptr [rbp-78H], rax
; GC ptr vars +{V05}
xor edx, edx
mov ecx, 1
@@ -250,14 +249,14 @@ G_M41847_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80C
mov byte ptr [rsi+r13], 0
lea rcx, bword ptr [rsi+r14]
; byrRegs +[rcx]
- mov gword ptr [rbp-98H], rax
+ mov gword ptr [rbp-90H], rax
; GC ptr vars +{V27}
mov rdx, rax
; gcrRegs +[rdx]
call [CORINFO_HELP_ASSIGN_REF]
; gcrRegs -[rax rdx]
; byrRegs -[rcx]
- mov rdx, gword ptr [rbp-98H]
+ mov rdx, gword ptr [rbp-90H]
; gcrRegs +[rdx]
;; size=60 bbWeight=0.50 PerfScore 9.50
G_M41847_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80CC {rdx rbx rsi rdi r15}, byrefRegs=0000 {}, gcvars, byref, isz
@@ -266,7 +265,7 @@ G_M41847_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80C
; gcrRegs +[rcx]
call [CORINFO_HELP_READYTORUN_CHKCAST]
; gcrRegs -[rcx rdx] +[rax]
- mov gword ptr [rbp-80H], rax
+ mov gword ptr [rbp-78H], rax
; GC ptr vars +{V05}
xor edx, edx
mov ecx, 1
@@ -338,7 +337,7 @@ G_M41847_IG12: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80C
; gcrRegs -[rdx r12] +[rax]
mov r12, rax
; gcrRegs +[r12]
- mov gword ptr [rbp-80H], r12
+ mov gword ptr [rbp-78H], r12
; GC ptr vars +{V05}
mov dword ptr [rbp-3CH], r14d
jmp G_M41847_IG09
@@ -353,7 +352,7 @@ G_M41847_IG13: ; bbWeight=1, gcVars=0000000000010000 {V05}, gcrefRegs=80C
mov r9, rbx
; gcrRegs +[r9]
mov gword ptr [rsp+20H], r15
- mov r12, gword ptr [rbp-80H]
+ mov r12, gword ptr [rbp-78H]
; gcrRegs +[r12]
mov gword ptr [rsp+28H], r12
mov rdx, gword ptr [rbp-48H]
@@ -400,7 +399,7 @@ G_M41847_IG17: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byr
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M41847_IG18: ; bbWeight=1, epilog, nogc, extend
- add rsp, 184
+ add rsp, 168
pop rbx
pop rsi
pop rdi
@@ -412,7 +411,7 @@ G_M41847_IG18: ; bbWeight=1, epilog, nogc, extend
ret
;; size=20 bbWeight=1 PerfScore 5.25
-; Total bytes of code 903, prolog size 42, PerfScore 272.51, instruction count 217, allocated bytes for code 903 (MethodHash=45785c88) for method Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseDelegateStatement(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.AttributeListSyntax],Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax]):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.DelegateStatementSyntax:this
+; Total bytes of code 893, prolog size 42, PerfScore 269.76, instruction count 216, allocated bytes for code 893 (MethodHash=45785c88) for method Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseDelegateStatement(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.AttributeListSyntax],Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax]):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.DelegateStatementSyntax:this
; ============================================================
Unwind Info:
@@ -426,7 +425,7 @@ Unwind Info:
FrameOffset : N/A (no FrameRegister) (Value=0)
UnwindCodes :
CodeOffset: 0x13 UnwindOp: UWOP_ALLOC_LARGE (1) OpInfo: 0 - Scaled small
- Size: 23 * 8 = 184 = 0x000B8
+ Size: 21 * 8 = 168 = 0x000A8
CodeOffset: 0x0C UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
CodeOffset: 0x0B UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rsi (6)
CodeOffset: 0x0A UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rdi (7)
+2 (+33.33%) : 17536.dasm - System.Single:System.Numerics.INumberBase.TryConvertToChecked[System.__Canon](float,byref):bool@@ -34,12 +34,14 @@ G_M60697_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0100 {r8}, byre
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [r8], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M60697_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=2fcd12e6) for method System.Single:System.Numerics.INumberBase<System.Single>.TryConvertToChecked[System.__Canon](float,byref):bool
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=2fcd12e6) for method System.Single:System.Numerics.INumberBase<System.Single>.TryConvertToChecked[System.__Canon](float,byref):bool
; ============================================================
Unwind Info:
+2 (+33.33%) : 17568.dasm - System.UIntPtr:System.Numerics.INumberBase.TryConvertToTruncating[System.__Canon](ulong,byref):bool@@ -33,12 +33,14 @@ G_M43625_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0100 {r8}, byre
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [r8], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M43625_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=63c95596) for method System.UIntPtr:System.Numerics.INumberBase<nuint>.TryConvertToTruncating[System.__Canon](ulong,byref):bool
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=63c95596) for method System.UIntPtr:System.Numerics.INumberBase<nuint>.TryConvertToTruncating[System.__Canon](ulong,byref):bool
; ============================================================
Unwind Info:
+2 (+33.33%) : 210240.dasm - System.Threading.Channels.ChannelReader`1[System.__Canon]:TryPeek(byref):bool:this@@ -20,12 +20,14 @@ G_M41029_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byr
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [rdx], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M41029_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=e8135fba) for method System.Threading.Channels.ChannelReader`1[System.__Canon]:TryPeek(byref):bool:this
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=e8135fba) for method System.Threading.Channels.ChannelReader`1[System.__Canon]:TryPeek(byref):bool:this
; ============================================================
Unwind Info:
libraries.pmi.windows.x64.checked.mch-18 (-2.02%) : 69373.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseOnErrorGoto(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.OnErrorGoToStatementSyntax:this@@ -27,7 +27,7 @@
; V17 tmp9 [V17,T31] ( 2, 2 ) int -> r8
;* V18 tmp10 [V18 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V19 tmp11 [V19,T10] ( 4, 4 ) int -> rdx "Inlining Arg"
-; V20 tmp12 [V20,T11] ( 4, 4 ) int -> [rsp+34H] "Inlining Arg"
+; V20 tmp12 [V20,T11] ( 4, 4 ) int -> rdx "Inlining Arg"
; V21 tmp13 [V21,T33] ( 2, 1 ) int -> r8
;* V22 tmp14 [V22 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V23 tmp15 [V23,T26] ( 2, 2 ) ref -> rax class-hnd single-def "Inlining Arg"
@@ -36,8 +36,8 @@
; V26 tmp18 [V26,T35] ( 2, 1 ) int -> r8
;* V27 tmp19 [V27 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V28 tmp20 [V28,T12] ( 4, 4 ) int -> rdx "Inlining Arg"
-; V29 tmp21 [V29,T13] ( 4, 4 ) int -> [rsp+30H] "Inlining Arg"
-; V30 tmp22 [V30,T14] ( 4, 4 ) int -> [rsp+2CH] "Inlining Arg"
+; V29 tmp21 [V29,T13] ( 4, 4 ) int -> rdx "Inlining Arg"
+; V30 tmp22 [V30,T14] ( 4, 4 ) int -> rdx "Inlining Arg"
; V31 tmp23 [V31,T15] ( 4, 4 ) int -> rdx "Inlining Arg"
; V32 tmp24 [V32,T16] ( 2, 4 ) ref -> rsi class-hnd single-def "Inlining Arg"
; V33 tmp25 [V33,T00] ( 27, 50 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp"
@@ -51,7 +51,7 @@
; V41 cse1 [V41,T21] ( 3, 3 ) int -> rsi "CSE - moderate"
; V42 cse2 [V42,T23] ( 3, 2.50) int -> rsi "CSE - moderate"
;
-; Lcl frame size = 56
+; Lcl frame size = 40
G_M47317_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push r15
@@ -62,7 +62,7 @@ G_M47317_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
push rsi
push rbp
push rbx
- sub rsp, 56
+ sub rsp, 40
mov rsi, rcx
; gcrRegs +[rsi]
mov rdi, rdx
@@ -168,19 +168,18 @@ G_M47317_IG07: ; bbWeight=0.50, gcrefRegs=C0E8 {rbx rbp rsi rdi r14 r15},
xor rcx, rcx
; gcrRegs +[rcx]
mov gword ptr [rsi+28H], rcx
- mov edx, 1
- cmp byte ptr [rsi+38H], 0
- cmovne ecx, edx
+ xor edx, edx
+ mov ecx, 1
; gcrRegs -[rcx]
- mov dword ptr [rsp+34H], ecx
+ cmp byte ptr [rsi+38H], 0
+ cmovne edx, ecx
mov rcx, gword ptr [rsi+08H]
; gcrRegs +[rcx]
- mov edx, dword ptr [rsp+34H]
cmp dword ptr [rcx], ecx
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:GetNextTokenInState(int):this]
; gcrRegs -[rcx]
; gcr arg pop 0
- ;; size=126 bbWeight=0.50 PerfScore 23.75
+ ;; size=120 bbWeight=0.50 PerfScore 22.88
G_M47317_IG08: ; bbWeight=0.50, gcrefRegs=60E8 {rbx rbp rsi rdi r13 r14}, byrefRegs=0000 {}, byref
xor rcx, rcx
; gcrRegs +[rcx]
@@ -284,14 +283,13 @@ G_M47317_IG11: ; bbWeight=0.50, gcrefRegs=40E8 {rbx rbp rsi rdi r14}, byr
xor rcx, rcx
; gcrRegs +[rcx]
mov gword ptr [rsi+28H], rcx
- mov edx, 1
- cmp byte ptr [rsi+38H], 0
- cmovne ecx, edx
+ xor edx, edx
+ mov ecx, 1
; gcrRegs -[rcx]
- mov dword ptr [rsp+30H], ecx
+ cmp byte ptr [rsi+38H], 0
+ cmovne edx, ecx
mov rcx, gword ptr [rsi+08H]
; gcrRegs +[rcx]
- mov edx, dword ptr [rsp+30H]
cmp dword ptr [rcx], ecx
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:GetNextTokenInState(int):this]
; gcrRegs -[rcx]
@@ -299,20 +297,19 @@ G_M47317_IG11: ; bbWeight=0.50, gcrefRegs=40E8 {rbx rbp rsi rdi r14}, byr
xor rcx, rcx
; gcrRegs +[rcx]
mov gword ptr [rsi+28H], rcx
- mov edx, 1
- cmp byte ptr [rsi+38H], 0
- cmovne ecx, edx
+ xor edx, edx
+ mov ecx, 1
; gcrRegs -[rcx]
- mov dword ptr [rsp+2CH], ecx
+ cmp byte ptr [rsi+38H], 0
+ cmovne edx, ecx
mov rcx, gword ptr [rsi+08H]
; gcrRegs +[rcx]
- mov edx, dword ptr [rsp+2CH]
cmp dword ptr [rcx], ecx
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:GetNextTokenInState(int):this]
; gcrRegs -[rcx]
; gcr arg pop 0
jmp G_M47317_IG08
- ;; size=156 bbWeight=0.50 PerfScore 32.25
+ ;; size=144 bbWeight=0.50 PerfScore 30.50
G_M47317_IG12: ; bbWeight=0.50, gcrefRegs=40E8 {rbx rbp rsi rdi r14}, byrefRegs=0000 {}, byref
; gcrRegs -[r13]
xor edx, edx
@@ -432,7 +429,7 @@ G_M47317_IG15: ; bbWeight=1, gcrefRegs=A000 {r13 r15}, byrefRegs=0000 {},
; gcrRegs +[rax]
;; size=35 bbWeight=1 PerfScore 12.25
G_M47317_IG16: ; bbWeight=1, epilog, nogc, extend
- add rsp, 56
+ add rsp, 40
pop rbx
pop rbp
pop rsi
@@ -453,7 +450,7 @@ G_M47317_IG17: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0020 {
int3
;; size=10 bbWeight=0 PerfScore 0.00
-; Total bytes of code 891, prolog size 16, PerfScore 289.60, instruction count 235, allocated bytes for code 891 (MethodHash=2580472a) for method Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseOnErrorGoto(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.OnErrorGoToStatementSyntax:this
+; Total bytes of code 873, prolog size 16, PerfScore 285.18, instruction count 232, allocated bytes for code 873 (MethodHash=2580472a) for method Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseOnErrorGoto(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.OnErrorGoToStatementSyntax:this
; ============================================================
Unwind Info:
@@ -466,7 +463,7 @@ Unwind Info:
FrameRegister : none (0)
FrameOffset : N/A (no FrameRegister) (Value=0)
UnwindCodes :
- CodeOffset: 0x10 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 6 * 8 + 8 = 56 = 0x38
+ CodeOffset: 0x10 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 4 * 8 + 8 = 40 = 0x28
CodeOffset: 0x0C UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
CodeOffset: 0x0B UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
CodeOffset: 0x0A UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rsi (6)
-6 (-1.32%) : 69229.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseGroupEndStatement():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.StatementSyntax:this@@ -32,7 +32,7 @@
; V22 tmp16 [V22,T01] ( 7, 7 ) ref -> rbp class-hnd exact single-def "NewObj constructor temp"
; V23 tmp17 [V23,T09] ( 3, 3 ) ref -> rdi class-hnd single-def "Inlining Arg"
; V24 tmp18 [V24,T05] ( 4, 4 ) int -> rdx "Inlining Arg"
-; V25 tmp19 [V25,T06] ( 4, 4 ) int -> [rsp+24H] "Inlining Arg"
+; V25 tmp19 [V25,T06] ( 4, 4 ) int -> rdx "Inlining Arg"
;
; Lcl frame size = 40
@@ -193,14 +193,13 @@ G_M42444_IG10: ; bbWeight=0.50, gcrefRegs=0068 {rbx rbp rsi}, byrefRegs=0
xor rcx, rcx
; gcrRegs +[rcx]
mov gword ptr [rsi+28H], rcx
- mov edx, 1
- cmp byte ptr [rsi+38H], 0
- cmovne ecx, edx
+ xor edx, edx
+ mov ecx, 1
; gcrRegs -[rcx]
- mov dword ptr [rsp+24H], ecx
+ cmp byte ptr [rsi+38H], 0
+ cmovne edx, ecx
mov rcx, gword ptr [rsi+08H]
; gcrRegs +[rcx]
- mov edx, dword ptr [rsp+24H]
cmp dword ptr [rcx], ecx
call [Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:GetNextTokenInState(int):this]
; gcrRegs -[rcx]
@@ -213,7 +212,7 @@ G_M42444_IG10: ; bbWeight=0.50, gcrefRegs=0068 {rbx rbp rsi}, byrefRegs=0
; gcrRegs +[r9]
test r9, r9
je SHORT G_M42444_IG12
- ;; size=82 bbWeight=0.50 PerfScore 15.62
+ ;; size=76 bbWeight=0.50 PerfScore 14.75
G_M42444_IG11: ; bbWeight=0.25, gcrefRegs=022A {rcx rbx rbp r9}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rsi]
mov rax, 0xD1FFAB1E ; Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax
@@ -269,7 +268,7 @@ G_M42444_IG17: ; bbWeight=0, gcrefRegs=0020 {rbp}, byrefRegs=0000 {}, byr
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 455, prolog size 8, PerfScore 125.44, instruction count 123, allocated bytes for code 455 (MethodHash=1a4a5a33) for method Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseGroupEndStatement():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.StatementSyntax:this
+; Total bytes of code 449, prolog size 8, PerfScore 123.96, instruction count 122, allocated bytes for code 449 (MethodHash=1a4a5a33) for method Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseGroupEndStatement():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.StatementSyntax:this
; ============================================================
Unwind Info:
-19 (-0.87%) : 158122.dasm - Microsoft.CodeAnalysis.Debugging.CustomDebugInfoReader:GetCSharpGroupedImportStrings[int](int,int,System.Func`3[int,int,ubyte[]],System.Func`3[int,int,System.Collections.Immutable.ImmutableArray`1[System.String]],byref):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.String]]@@ -16,9 +16,9 @@
; V06 loc1 [V06,T45] ( 3, 21 ) bool -> [rbp-3CH] do-not-enreg[Z] EH-live
; V07 loc2 [V07,T56] ( 3, 12 ) ref -> rsi class-hnd
;* V08 loc3 [V08 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def
-; V09 loc4 [V09,T58] ( 3, 10 ) ref -> rbx class-hnd single-def
-; V10 loc5 [V10,T25] ( 7, 55 ) ref -> rdi class-hnd single-def
-; V11 loc6 [V11,T10] ( 10,150 ) int -> r14
+; V09 loc4 [V09,T58] ( 3, 10 ) ref -> r14 class-hnd single-def
+; V10 loc5 [V10,T25] ( 7, 55 ) ref -> rbx class-hnd single-def
+; V11 loc6 [V11,T10] ( 10,150 ) int -> r15
;* V12 loc7 [V12 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op
; V13 loc8 [V13,T21] ( 7, 75 ) ref -> [rbp-78H] do-not-enreg[Z] class-hnd EH-live
; V14 loc9 [V14 ] ( 5,112 ) struct (16) [rbp-50H] do-not-enreg[XS] must-init addr-exposed
@@ -34,9 +34,9 @@
; V24 loc19 [V24,T15] ( 4,112 ) ref -> [rbp-80H] class-hnd spill-single-def
; V25 loc20 [V25,T50] ( 4, 16 ) ref -> r13 class-hnd
; V26 OutArgs [V26 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V27 tmp1 [V27,T67] ( 3, 0 ) ref -> rsi class-hnd exact "NewObj constructor temp"
-; V28 tmp2 [V28,T68] ( 3, 0 ) ref -> rsi class-hnd exact "NewObj constructor temp"
-; V29 tmp3 [V29,T69] ( 3, 0 ) ref -> rsi class-hnd exact "NewObj constructor temp"
+; V27 tmp1 [V27,T67] ( 3, 0 ) ref -> rdi class-hnd exact "NewObj constructor temp"
+; V28 tmp2 [V28,T68] ( 3, 0 ) ref -> rdi class-hnd exact "NewObj constructor temp"
+; V29 tmp3 [V29,T69] ( 3, 0 ) ref -> rdi class-hnd exact "NewObj constructor temp"
; V30 tmp4 [V30,T70] ( 3, 0 ) ref -> rsi class-hnd exact "NewObj constructor temp"
; V31 tmp5 [V31,T71] ( 3, 0 ) ref -> rsi class-hnd exact "NewObj constructor temp"
;* V32 tmp6 [V32 ] ( 0, 0 ) struct ( 8) zero-ref "struct address for call/obj"
@@ -57,8 +57,8 @@
; V47 tmp21 [V47,T12] ( 3,128 ) int -> r8 "Inline return value spill temp"
; V48 tmp22 [V48,T04] ( 3,352.92) int -> r8 "Inlining Arg"
; V49 tmp23 [V49,T05] ( 2,256 ) int -> r14 "Inline stloc first use temp"
-; V50 tmp24 [V50,T61] ( 3, 6 ) ref -> rbx class-hnd single-def "dup spill"
-; V51 tmp25 [V51,T62] ( 3, 6 ) int -> rdi "Inlining Arg"
+; V50 tmp24 [V50,T61] ( 3, 6 ) ref -> r14 class-hnd single-def "dup spill"
+; V51 tmp25 [V51,T62] ( 3, 6 ) int -> rbx "Inlining Arg"
;* V52 tmp26 [V52 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg"
;* V53 tmp27 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp"
;* V54 tmp28 [V54 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp"
@@ -80,13 +80,13 @@
; V70 tmp44 [V70,T28] ( 3, 48 ) ref -> rcx class-hnd "Inlining Arg"
; V71 tmp45 [V71,T48] ( 2, 16 ) int -> r12 "Inline stloc first use temp"
;* V72 tmp46 [V72,T95] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
-; V73 tmp47 [V73,T24] ( 7, 56 ) ref -> r15 class-hnd "Inlining Arg"
+; V73 tmp47 [V73,T24] ( 7, 56 ) ref -> rsi class-hnd "Inlining Arg"
; V74 tmp48 [V74,T49] ( 5, 16.97) int -> r12 "Inline stloc first use temp"
;* V75 tmp49 [V75 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V76 tmp50 [V76,T60] ( 3, 8 ) int -> r8 "Inline return value spill temp"
; V77 tmp51 [V77,T44] ( 3, 22.06) int -> r8 "Inlining Arg"
; V78 tmp52 [V78,T46] ( 7, 20 ) ref -> [rbp-98H] must-init EH-live single-def V05.array(offs=0x00) P-INDEP "field V05.array (fldOffset=0x0)"
-; V79 tmp53 [V79,T20] ( 6, 78 ) ref -> rsi V08.array(offs=0x00) P-INDEP "field V08.array (fldOffset=0x0)"
+; V79 tmp53 [V79,T20] ( 6, 78 ) ref -> rdi V08.array(offs=0x00) P-INDEP "field V08.array (fldOffset=0x0)"
;* V80 tmp54 [V80 ] ( 0, 0 ) ref -> zero-ref V12.array(offs=0x00) P-INDEP "field V12.array (fldOffset=0x0)"
; V81 tmp55 [V81 ] ( 2, 64 ) ubyte -> [rbp-50H] do-not-enreg[X] addr-exposed V14.Kind(offs=0x00) P-DEP "field V14.Kind (fldOffset=0x0)"
; V82 tmp56 [V82 ] ( 1, 32 ) ubyte -> [rbp-4FH] do-not-enreg[X] addr-exposed V14.Version(offs=0x01) P-DEP "field V14.Version (fldOffset=0x1)"
@@ -94,7 +94,7 @@
; V84 tmp58 [V84,T29] ( 3, 48 ) ref -> rsi V16.array(offs=0x00) P-INDEP "field V16.array (fldOffset=0x0)"
; V85 tmp59 [V85,T11] ( 2,144 ) ref -> rsi V19._array(offs=0x00) P-INDEP "field V19._array (fldOffset=0x0)"
; V86 tmp60 [V86,T01] ( 5,528 ) int -> r14 V19._index(offs=0x08) P-INDEP "field V19._index (fldOffset=0x8)"
-; V87 tmp61 [V87,T47] ( 4, 18 ) ref -> r15 single-def V21._array(offs=0x00) P-INDEP "field V21._array (fldOffset=0x0)"
+; V87 tmp61 [V87,T47] ( 4, 18 ) ref -> rsi single-def V21._array(offs=0x00) P-INDEP "field V21._array (fldOffset=0x0)"
; V88 tmp62 [V88,T35] ( 5, 33 ) int -> r12 V21._index(offs=0x08) P-INDEP "field V21._index (fldOffset=0x8)"
; V89 tmp63 [V89,T51] ( 2, 16 ) ref -> r13 V32.array(offs=0x00) P-INDEP "field V32.array (fldOffset=0x0)"
; V90 tmp64 [V90,T37] ( 2, 32 ) ref -> rax V37.array(offs=0x00) P-INDEP "field V37.array (fldOffset=0x0)"
@@ -103,16 +103,16 @@
; V93 tmp67 [V93,T39] ( 2, 32 ) ref -> rsi V41._array(offs=0x00) P-INDEP "field V41._array (fldOffset=0x0)"
;* V94 tmp68 [V94,T54] ( 0, 0 ) int -> zero-ref V41._index(offs=0x08) P-INDEP "field V41._index (fldOffset=0x8)"
;* V95 tmp69 [V95 ] ( 0, 0 ) ref -> zero-ref single-def V53.array(offs=0x00) P-INDEP "field V53.array (fldOffset=0x0)"
-; V96 tmp70 [V96,T64] ( 2, 2 ) ref -> r15 single-def V54._array(offs=0x00) P-INDEP "field V54._array (fldOffset=0x0)"
+; V96 tmp70 [V96,T64] ( 2, 2 ) ref -> rsi single-def V54._array(offs=0x00) P-INDEP "field V54._array (fldOffset=0x0)"
;* V97 tmp71 [V97,T65] ( 0, 0 ) int -> zero-ref single-def V54._index(offs=0x08) P-INDEP "field V54._index (fldOffset=0x8)"
; V98 tmp72 [V98,T52] ( 2, 16 ) ref -> r13 V63.array(offs=0x00) P-INDEP "field V63.array (fldOffset=0x0)"
-; V99 tmp73 [V99,T74] ( 2, 0 ) ref -> rdi "argument with side effect"
+; V99 tmp73 [V99,T74] ( 2, 0 ) ref -> rbx "argument with side effect"
; V100 tmp74 [V100,T75] ( 2, 0 ) ref -> rdx "argument with side effect"
; V101 tmp75 [V101,T76] ( 2, 0 ) ref -> rdx "argument with side effect"
-; V102 tmp76 [V102,T77] ( 2, 0 ) ref -> rdi "argument with side effect"
+; V102 tmp76 [V102,T77] ( 2, 0 ) ref -> rbx "argument with side effect"
; V103 tmp77 [V103,T78] ( 2, 0 ) ref -> rdx "argument with side effect"
; V104 tmp78 [V104,T79] ( 2, 0 ) ref -> rdx "argument with side effect"
-; V105 tmp79 [V105,T80] ( 2, 0 ) ref -> rdi "argument with side effect"
+; V105 tmp79 [V105,T80] ( 2, 0 ) ref -> rbx "argument with side effect"
; V106 tmp80 [V106,T81] ( 2, 0 ) ref -> rdx "argument with side effect"
; V107 tmp81 [V107,T82] ( 2, 0 ) ref -> rdx "argument with side effect"
; V108 tmp82 [V108,T22] ( 2, 64 ) int -> rdx "argument with side effect"
@@ -173,13 +173,14 @@ G_M8847_IG02: ; bbWeight=1, gcVars=00000000000000000080000400000000 {V02
; gcrRegs +[r8-r9]
xor edx, edx
mov qword ptr [rcx], rdx
- mov gword ptr [rbp-98H], rdx
+ xor rsi, rsi
+ ; gcrRegs +[rsi]
+ mov gword ptr [rbp-98H], rsi
; GC ptr vars +{V78}
- xor r10d, r10d
- mov dword ptr [rbp-3CH], r10d
- ;; size=19 bbWeight=1 PerfScore 3.50
+ mov dword ptr [rbp-3CH], edx
+ ;; size=17 bbWeight=1 PerfScore 3.50
G_M8847_IG03: ; bbWeight=4, gcVars=00000000000000000080400400000000 {V02 V03 V78}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
- ; gcrRegs -[r8-r9]
+ ; gcrRegs -[rsi r8-r9]
; byrRegs -[rcx]
mov r8, gword ptr [rbp+20H]
; gcrRegs +[r8]
@@ -275,14 +276,14 @@ G_M8847_IG08: ; bbWeight=32, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
jmp rax
;; size=59 bbWeight=32 PerfScore 416.00
G_M8847_IG09: ; bbWeight=16, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov rdx, gword ptr [rbp-98H]
- ; gcrRegs +[rdx]
- test rdx, rdx
+ mov rsi, gword ptr [rbp-98H]
+ ; gcrRegs +[rsi]
+ test rsi, rsi
jne G_M8847_IG20
mov rcx, gword ptr [rbp-48H]
; gcrRegs +[rcx]
call [Microsoft.CodeAnalysis.Debugging.CustomDebugInfoReader:DecodeUsingRecord(System.Collections.Immutable.ImmutableArray`1[ubyte]):System.Collections.Immutable.ImmutableArray`1[short]]
- ; gcrRegs -[rcx rdx] +[rax]
+ ; gcrRegs -[rcx rsi] +[rax]
; gcr arg pop 0
mov gword ptr [rbp-98H], rax
jmp G_M8847_IG18
@@ -435,76 +436,78 @@ G_M8847_IG18: ; bbWeight=32, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
G_M8847_IG19: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
jmp G_M8847_IG25
;; size=5 bbWeight=1 PerfScore 2.00
-G_M8847_IG20: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8847_IG20: ; bbWeight=0, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
+ ; gcrRegs +[rsi]
mov rcx, 0xD1FFAB1E ; <unknown class>
call CORINFO_HELP_NEWSFAST
; gcrRegs +[rax]
; gcr arg pop 0
- mov rsi, rax
- ; gcrRegs +[rsi]
+ mov rdi, rax
+ ; gcrRegs +[rdi]
mov ecx, 0x140F0
mov rdx, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
; gcr arg pop 0
- mov rdi, rax
- ; gcrRegs +[rdi]
+ mov rbx, rax
+ ; gcrRegs +[rbx]
mov ecx, dword ptr [rbp+10H]
call [<unknown method>]
; gcr arg pop 0
mov rdx, rax
; gcrRegs +[rdx]
+ mov rcx, rbx
+ ; gcrRegs +[rcx]
+ call [<unknown method>]
+ ; gcrRegs -[rcx rdx rbx]
+ ; gcr arg pop 0
+ mov rdx, rax
+ ; gcrRegs +[rdx]
mov rcx, rdi
; gcrRegs +[rcx]
call [<unknown method>]
- ; gcrRegs -[rcx rdx rdi]
- ; gcr arg pop 0
- mov rdx, rax
- ; gcrRegs +[rdx]
- mov rcx, rsi
- ; gcrRegs +[rcx]
- call [<unknown method>]
; gcrRegs -[rax rcx rdx]
; gcr arg pop 0
- mov rcx, rsi
+ mov rcx, rdi
; gcrRegs +[rcx]
call CORINFO_HELP_THROW
- ; gcrRegs -[rcx rsi]
+ ; gcrRegs -[rcx rdi]
; gcr arg pop 0
;; size=82 bbWeight=0 PerfScore 0.00
G_M8847_IG21: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ; gcrRegs -[rsi]
mov rcx, 0xD1FFAB1E ; <unknown class>
call CORINFO_HELP_NEWSFAST
; gcrRegs +[rax]
; gcr arg pop 0
- mov rsi, rax
- ; gcrRegs +[rsi]
+ mov rdi, rax
+ ; gcrRegs +[rdi]
mov ecx, 0x14152
mov rdx, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
; gcr arg pop 0
- mov rdi, rax
- ; gcrRegs +[rdi]
+ mov rbx, rax
+ ; gcrRegs +[rbx]
mov ecx, dword ptr [rbp+10H]
call [<unknown method>]
; gcr arg pop 0
mov rdx, rax
; gcrRegs +[rdx]
+ mov rcx, rbx
+ ; gcrRegs +[rcx]
+ call [<unknown method>]
+ ; gcrRegs -[rcx rdx rbx]
+ ; gcr arg pop 0
+ mov rdx, rax
+ ; gcrRegs +[rdx]
mov rcx, rdi
; gcrRegs +[rcx]
call [<unknown method>]
- ; gcrRegs -[rcx rdx rdi]
- ; gcr arg pop 0
- mov rdx, rax
- ; gcrRegs +[rdx]
- mov rcx, rsi
- ; gcrRegs +[rcx]
- call [<unknown method>]
; gcrRegs -[rax rcx rdx]
; gcr arg pop 0
- mov rcx, rsi
+ mov rcx, rdi
; gcrRegs +[rcx]
call CORINFO_HELP_THROW
- ; gcrRegs -[rcx rsi]
+ ; gcrRegs -[rcx rdi]
; gcr arg pop 0
;; size=82 bbWeight=0 PerfScore 0.00
G_M8847_IG22: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
@@ -512,35 +515,35 @@ G_M8847_IG22: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
call CORINFO_HELP_NEWSFAST
; gcrRegs +[rax]
; gcr arg pop 0
- mov rsi, rax
- ; gcrRegs +[rsi]
+ mov rdi, rax
+ ; gcrRegs +[rdi]
mov ecx, 0x141E1
mov rdx, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
; gcr arg pop 0
- mov rdi, rax
- ; gcrRegs +[rdi]
+ mov rbx, rax
+ ; gcrRegs +[rbx]
mov ecx, dword ptr [rbp+10H]
call [<unknown method>]
; gcr arg pop 0
mov rdx, rax
; gcrRegs +[rdx]
+ mov rcx, rbx
...
+2 (+33.33%) : 139220.dasm - Newtonsoft.Json.Utilities.DynamicProxy`1[ubyte]:TryConvert(ubyte,System.Dynamic.ConvertBinder,byref):bool:this@@ -21,12 +21,14 @@ G_M29059_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0200 {r9}, byre
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [r9], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M29059_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=4d738e7c) for method Newtonsoft.Json.Utilities.DynamicProxy`1[ubyte]:TryConvert(ubyte,System.Dynamic.ConvertBinder,byref):bool:this
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=4d738e7c) for method Newtonsoft.Json.Utilities.DynamicProxy`1[ubyte]:TryConvert(ubyte,System.Dynamic.ConvertBinder,byref):bool:this
; ============================================================
Unwind Info:
+2 (+33.33%) : 139226.dasm - Newtonsoft.Json.Utilities.DynamicProxy`1[short]:TryConvert(short,System.Dynamic.ConvertBinder,byref):bool:this@@ -21,12 +21,14 @@ G_M25539_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0200 {r9}, byre
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [r9], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M25539_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=d1b29c3c) for method Newtonsoft.Json.Utilities.DynamicProxy`1[short]:TryConvert(short,System.Dynamic.ConvertBinder,byref):bool:this
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=d1b29c3c) for method Newtonsoft.Json.Utilities.DynamicProxy`1[short]:TryConvert(short,System.Dynamic.ConvertBinder,byref):bool:this
; ============================================================
Unwind Info:
+2 (+33.33%) : 139232.dasm - Newtonsoft.Json.Utilities.DynamicProxy`1[int]:TryConvert(int,System.Dynamic.ConvertBinder,byref):bool:this@@ -21,12 +21,14 @@ G_M31107_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0200 {r9}, byre
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [r9], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M31107_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=a106867c) for method Newtonsoft.Json.Utilities.DynamicProxy`1[int]:TryConvert(int,System.Dynamic.ConvertBinder,byref):bool:this
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=a106867c) for method Newtonsoft.Json.Utilities.DynamicProxy`1[int]:TryConvert(int,System.Dynamic.ConvertBinder,byref):bool:this
; ============================================================
Unwind Info:
libraries_tests.pmi.windows.x64.checked.mch+0 (0.00%) : 183183.dasm - System.Text.RegularExpressions.Tests.RegexGroupTests+d__0:MoveNext():bool:this@@ -65975,12 +65975,12 @@ G_M36547_IG882: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [rcx+10H], rax
- xor eax, eax
- ; gcrRegs -[rax]
- mov dword ptr [rbp-04H], eax
+ xor ecx, ecx
+ ; gcrRegs -[rcx]
+ mov dword ptr [rbp-04H], ecx
;; size=54 bbWeight=1 PerfScore 15.00
G_M36547_IG883: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- ; gcrRegs -[rcx]
+ ; gcrRegs -[rax]
mov eax, dword ptr [rbp-04H]
;; size=3 bbWeight=1 PerfScore 1.00
G_M36547_IG884: ; bbWeight=1, epilog, nogc, extend
+0 (0.00%) : 287448.dasm - System.ComponentModel.Tests.DecimalConverterTests+d__2:MoveNext():bool:this@@ -115,7 +115,7 @@
;* V105 tmp102 [V105 ] ( 0, 0 ) long -> zero-ref single-def V38._lo64(offs=0x08) P-INDEP "field V38._lo64 (fldOffset=0x8)"
;* V106 tmp103 [V106 ] ( 0, 0 ) byref -> zero-ref V39._reference(offs=0x00) P-INDEP "field V39._reference (fldOffset=0x0)"
;* V107 tmp104 [V107 ] ( 0, 0 ) int -> zero-ref V39._length(offs=0x08) P-INDEP "field V39._length (fldOffset=0x8)"
-; V108 tmp105 [V108,T47] ( 2, 1.00) byref -> rdx single-def V40._reference(offs=0x00) P-INDEP "field V40._reference (fldOffset=0x0)"
+; V108 tmp105 [V108,T47] ( 2, 1.00) byref -> rax single-def V40._reference(offs=0x00) P-INDEP "field V40._reference (fldOffset=0x0)"
;* V109 tmp106 [V109,T76] ( 0, 0 ) int -> zero-ref single-def V40._length(offs=0x08) P-INDEP "field V40._length (fldOffset=0x8)"
;* V110 tmp107 [V110 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect"
; V111 tmp108 [V111,T12] ( 4, 4.00) byref -> rax single-def "BlockOp address local"
@@ -240,15 +240,15 @@ G_M49258_IG04: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {},
xor edx, edx
mov dword ptr [rax+04H], edx
mov qword ptr [rax+08H], 11
+ xor rax, rax
mov dword ptr [rsp+40H], 0x10000
- xor eax, eax
- ; byrRegs -[rax]
- mov dword ptr [rsp+44H], eax
+ mov dword ptr [rsp+44H], edx
mov qword ptr [rsp+48H], 11
- mov bword ptr [rsp+30H], rdx
- mov dword ptr [rsp+38H], eax
+ mov bword ptr [rsp+30H], rax
+ mov dword ptr [rsp+38H], edx
call [System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo]
; gcrRegs +[rax]
+ ; byrRegs -[rax]
; gcr arg pop 0
mov r8, rax
; gcrRegs +[r8]
+2 (+0.01%) : 183686.dasm - System.Text.RegularExpressions.Tests.RegexReplaceTests+d__0:MoveNext():bool:this@@ -6862,9 +6862,11 @@ G_M48287_IG145: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, by
mov rcx, gword ptr [rbp+10H]
; gcrRegs +[rcx]
mov gword ptr [rcx+10H], rax
- ;; size=10 bbWeight=0.50 PerfScore 1.12
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=12 bbWeight=0.50 PerfScore 1.25
G_M48287_IG146: ; bbWeight=1, gcVars=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, epilog, nogc
- ; gcrRegs -[rax rcx]
+ ; gcrRegs -[rcx]
; GC ptr vars -{V00}
add rsp, 48
pop rsi
@@ -6969,7 +6971,7 @@ RWD00 dd G_M48287_IG04 - G_M48287_IG02
dd G_M48287_IG142 - G_M48287_IG02
-; Total bytes of code 18027, prolog size 20, PerfScore 3047.33, instruction count 3503, allocated bytes for code 18027 (MethodHash=03804360) for method System.Text.RegularExpressions.Tests.RegexReplaceTests+<Replace_String_TestData>d__0:MoveNext():bool:this
+; Total bytes of code 18029, prolog size 20, PerfScore 3047.65, instruction count 3504, allocated bytes for code 18029 (MethodHash=03804360) for method System.Text.RegularExpressions.Tests.RegexReplaceTests+<Replace_String_TestData>d__0:MoveNext():bool:this
; ============================================================
Unwind Info:
+2 (+33.33%) : 92736.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.mixedmode02.mixedmode02.MyClass`1[short]:OutMethod01[System.__Canon](short,byref,byref):short@@ -22,12 +22,14 @@ G_M48797_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0200 {r9}, byre
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [r9], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M48797_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=7bdc4162) for method ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.mixedmode02.mixedmode02.MyClass`1[short]:OutMethod01[System.__Canon](short,byref,byref):short
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=7bdc4162) for method ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.mixedmode02.mixedmode02.MyClass`1[short]:OutMethod01[System.__Canon](short,byref,byref):short
; ============================================================
Unwind Info:
+2 (+33.33%) : 205216.dasm - Microsoft.IdentityModel.Json.Utilities.DynamicProxy`1[System.__Canon]:TryConvert(System.__Canon,System.Dynamic.ConvertBinder,byref):bool:this@@ -21,12 +21,14 @@ G_M17159_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0200 {r9}, byre
xor rax, rax
; gcrRegs +[rax]
mov gword ptr [r9], rax
- ;; size=5 bbWeight=1 PerfScore 1.25
+ xor eax, eax
+ ; gcrRegs -[rax]
+ ;; size=7 bbWeight=1 PerfScore 1.50
G_M17159_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 6, prolog size 0, PerfScore 2.85, instruction count 3, allocated bytes for code 6 (MethodHash=2009bcf8) for method Microsoft.IdentityModel.Json.Utilities.DynamicProxy`1[System.__Canon]:TryConvert(System.__Canon,System.Dynamic.ConvertBinder,byref):bool:this
+; Total bytes of code 8, prolog size 0, PerfScore 3.30, instruction count 4, allocated bytes for code 8 (MethodHash=2009bcf8) for method Microsoft.IdentityModel.Json.Utilities.DynamicProxy`1[System.__Canon]:TryConvert(System.__Canon,System.Dynamic.ConvertBinder,byref):bool:this
; ============================================================
Unwind Info:
+2 (+40.00%) : 92637.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic:Method01(byref,ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic):ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic:this@@ -19,12 +19,14 @@ G_M16395_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byr
; byrRegs +[rdx]
xor eax, eax
mov dword ptr [rdx], eax
- ;; size=4 bbWeight=1 PerfScore 1.25
+ xor rax, rax
+ ; gcrRegs +[rax]
+ ;; size=6 bbWeight=1 PerfScore 1.50
G_M16395_IG03: ; bbWeight=1, epilog, nogc, extend
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 5, prolog size 0, PerfScore 2.75, instruction count 3, allocated bytes for code 5 (MethodHash=724ebff4) for method ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic:Method01(byref,ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic):ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic:this
+; Total bytes of code 7, prolog size 0, PerfScore 3.20, instruction count 4, allocated bytes for code 7 (MethodHash=724ebff4) for method ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic:Method01(byref,ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic):ManagedTests.DynamicCSharp.Conformance.dynamic.ClsCompliance.namingkeyword01.namingkeyword01.MyNamespace1.dynamic:this
; ============================================================
Unwind Info:
DetailsImprovements/regressions per collection
Context information
jit-analyze output |
This problem is similar to the "elided move" problem that at one point was solved by introducing a zero-size pseudo-instruction Here, you can imagine that a ReuseReg should at least generate a GC state update. The only place we see this issue (due to the LSRA code shown above) is when we have a zero reg, where we allow GC-ness mismatch. A "GC zero" that "becomes" a non-GC reg can still be tracked as a GC reg, and hit this assert. Presumably, a "non-GC zero" that "becomes" a GC reg wouldn't hit a problem because you would always have a write to the reg, not a RMW update. The solution here looks ok to me, as it captures the GCInfo tracking sets into the emitter GC sets which are used (together with the instrDesc idGCref() data) during emission. Introducing the label might cause some unrelated GC vars to be reported dead earlier than before. Ideally, we'd have a generic "GC reg update" pseudo-instruction on which we could hang these kind of elided instruction GC state updates. |
I opened #84313 to track the idea of adding a pseudo-instruction to track GC state changes of omitted instructions. |
Resolves #83963
Will need to run GC and JIT stress.