dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.27k stars 4.73k forks source link

JIT: If conversion does not check BasicBlock::isRunRarely() #81478

Open jakobbotsch opened 1 year ago

jakobbotsch commented 1 year ago

For basic blocks that we think are run rarely it is very likely that we should not if-convert them.

Noticed this due to a diff in System.GC:g__AllocateNewUninitializedArray|66_0[ubyte](int,bool):ubyte[] over in #81267.

cc @dotnet/jit-contrib @a74nh

ghost commented 1 year ago

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch, @kunalspathak See info in area-owners.md if you want to be subscribed.

Issue Details
For basic blocks that we think are run rarely it is very likely that we should not if-convert them. Noticed this due to a diff in ``System.GC:g__AllocateNewUninitializedArray|66_0[ubyte](int,bool):ubyte[]`` over in #81267. cc @dotnet/jit-contrib @a74nh
Author: jakobbotsch
Assignees: -
Labels: `area-CodeGen-coreclr`, `untriaged`
Milestone: -
jakobbotsch commented 1 year ago

The particular diff is:

@@ -9,13 +9,13 @@
 ; 1 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  3,  3   )     int  ->  rax         single-def
+;  V00 arg0         [V00,T00] (  3,  3   )     int  ->   r8         single-def
 ;  V01 arg1         [V01,T01] (  3,  3   )    bool  ->  rdx         single-def
-;  V02 loc0         [V02,T02] (  3,  2   )     int  ->   r8        
+;  V02 loc0         [V02,T02] (  4,  4.00)     int  ->  [rsp+24H]  
 ;* V03 loc1         [V03    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op
 ;  V04 OutArgs      [V04    ] (  1,  1   )  lclBlk (32) [rsp+00H]   "OutgoingArgSpace"
 ;* V05 tmp1         [V05    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp"
-;  V06 tmp2         [V06,T03] (  2,  2.00)    long  ->  rcx         "Inline return value spill temp"
+;  V06 tmp2         [V06,T03] (  2,  2.00)    long  ->  rdx         "Inline return value spill temp"
 ;* V07 tmp3         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "dup spill"
 ;* V08 tmp4         [V08,T04] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V09 tmp5         [V09    ] (  0,  0   )     ref  ->  zero-ref    single-def V03.m_type(offs=0x00) P-INDEP "field V03.m_type (fldOffset=0x0)"
@@ -23,35 +23,32 @@
 ;
 ; Lcl frame size = 40

-G_M51023_IG01:        ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
+G_M51023_IG01:        ; bbWeight=1.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
        sub      rsp, 40
-       mov      eax, ecx
-                       ;; size=6 bbWeight=1 PerfScore 0.50
-G_M51023_IG02:        ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
-       mov      r8d, 16
+       mov      r8d, ecx
+                       ;; size=7 bbWeight=1.00 PerfScore 0.50
+G_M51023_IG02:        ; bbWeight=1.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+       mov      ecx, 16
+       mov      eax, 80
        test     dl, dl
-       jne      SHORT G_M51023_IG05
-                       ;; size=10 bbWeight=1 PerfScore 1.50
-G_M51023_IG03:        ; bbWeight=1.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
-       mov      rcx, 0xD1FFAB1E
-       mov      rcx, qword ptr [rcx]
-       mov      edx, eax
+       cmovne   ecx, eax
+       mov      dword ptr [rsp+24H], ecx
+       mov      rdx, 0xD1FFAB1E
+       mov      rdx, qword ptr [rdx]
+       mov      rcx, rdx
+       mov      edx, r8d
+       mov      r8d, dword ptr [rsp+24H]
        call     <unknown method>
        ; gcrRegs +[rax]
        ; gcr arg pop 0
        nop      
-                       ;; size=21 bbWeight=1.00 PerfScore 3.75
-G_M51023_IG04:        ; bbWeight=1.00, epilog, nogc, extend
+                       ;; size=49 bbWeight=1.00 PerfScore 7.00
+G_M51023_IG03:        ; bbWeight=1.00, epilog, nogc, extend
        add      rsp, 40
        ret      
                        ;; size=5 bbWeight=1.00 PerfScore 1.25
-G_M51023_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
-       ; gcrRegs -[rax]
-       mov      r8d, 80
-       jmp      SHORT G_M51023_IG03
-                       ;; size=8 bbWeight=0 PerfScore 0.00
a74nh commented 1 year ago

For basic blocks that we think are run rarely it is very likely that we should not if-convert them.

Is this because the If conversion is causing that block to effectively always get executed?

jakobbotsch commented 1 year ago

Is this because the If conversion is causing that block to effectively always get executed?

Yeah, exactly. The JIT also has special handling to place these blocks separately, away from the hot code (as you can see in the diff), LSRA knows to pessimize register allocation in those blocks if that is better for other blocks, etc.

BruceForstall commented 1 year ago

If all blocks that contribute to if-conversion are RunRarely then it would be ok? It's just if some are and some are not that there is a possible concern?

AndyAyersMS commented 1 year ago

If all blocks that contribute to if-conversion are RunRarely then it would be ok? It's just if some are and some are not that there is a possible concern?

Probably so, but it really depends on why they are all marked run rarely. If conversion has both upside and downside, so if we don't know anything about relative likelihoods in some subgraph, perhaps it is better to avoid the downside.

JulieLeeMSFT commented 1 year ago

@jakobbotsch, assigning to you now. Please feel free to reassign.

jakobbotsch commented 1 year ago

Fixing this actually results in quite a few negative diffs:

Diffs are based on 1,564,337 contexts (467,626 MinOpts, 1,096,711 FullOpts).

MISSED contexts: 2,250 (0.14%)

Overall (+56,047 bytes)
|Collection|Base size (bytes)|Diff size (bytes)| |---|--:|--:| |aspnet.run.windows.x64.checked.mch|44,062,516|+18,791| |benchmarks.run_pgo.windows.x64.checked.mch|27,442,441|+18,456| |coreclr_tests.run.windows.x64.checked.mch|390,142,561|+18,574| |libraries.pmi.windows.x64.checked.mch|58,721,439|+128| |libraries_tests.pmi.windows.x64.checked.mch|115,330,150|+98|
FullOpts (+56,047 bytes)
|Collection|Base size (bytes)|Diff size (bytes)| |---|--:|--:| |aspnet.run.windows.x64.checked.mch|29,278,684|+18,791| |benchmarks.run_pgo.windows.x64.checked.mch|17,051,732|+18,456| |coreclr_tests.run.windows.x64.checked.mch|114,779,114|+18,574| |libraries.pmi.windows.x64.checked.mch|57,202,117|+128| |libraries_tests.pmi.windows.x64.checked.mch|108,968,210|+98|
Example diffs
aspnet.run.windows.x64.checked.mch
-2 (-16.67%) : 21443.dasm - System.Index:get_Value():int:this (Tier1)
```diff @@ -10,25 +10,30 @@ ; ; V00 this [V00,T00] ( 3, 3 ) byref -> rcx this single-def ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V02 cse0 [V02,T01] ( 4, 4 ) int -> rax "CSE - aggressive" +; V02 cse0 [V02,T01] ( 4, 3 ) int -> rax "CSE - aggressive" ; ; Lcl frame size = 0 -G_M18211_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M18211_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M18211_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M18211_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref, isz ; byrRegs +[rcx] mov eax, dword ptr [rcx] - mov edx, eax - not edx test eax, eax - cmovl eax, edx - ;; size=11 bbWeight=1 PerfScore 3.00 + jl SHORT G_M18211_IG04 + ;; size=6 bbWeight=1 PerfScore 3.25 G_M18211_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M18211_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[rcx] + not eax + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M18211_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 12, prolog size 0, PerfScore 5.20, instruction count 6, allocated bytes for code 12 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this (Tier1) +; Total bytes of code 10, prolog size 0, PerfScore 5.25, instruction count 6, allocated bytes for code 10 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this (Tier1) ; ============================================================ Unwind Info: ```
-2 (-16.67%) : 22384.dasm - System.Index:get_Value():int:this (Tier1)
```diff @@ -10,25 +10,30 @@ ; ; V00 this [V00,T00] ( 3, 3 ) byref -> rcx this single-def ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V02 cse0 [V02,T01] ( 4, 4 ) int -> rax "CSE - aggressive" +; V02 cse0 [V02,T01] ( 4, 3 ) int -> rax "CSE - aggressive" ; ; Lcl frame size = 0 -G_M18211_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M18211_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M18211_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M18211_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref, isz ; byrRegs +[rcx] mov eax, dword ptr [rcx] - mov edx, eax - not edx test eax, eax - cmovl eax, edx - ;; size=11 bbWeight=1 PerfScore 3.00 + jl SHORT G_M18211_IG04 + ;; size=6 bbWeight=1 PerfScore 3.25 G_M18211_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M18211_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[rcx] + not eax + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M18211_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 12, prolog size 0, PerfScore 5.20, instruction count 6, allocated bytes for code 12 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this (Tier1) +; Total bytes of code 10, prolog size 0, PerfScore 5.25, instruction count 6, allocated bytes for code 10 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this (Tier1) ; ============================================================ Unwind Info: ```
-2 (-16.67%) : 20572.dasm - System.Index:get_Value():int:this (Tier1)
```diff @@ -10,25 +10,30 @@ ; ; V00 this [V00,T00] ( 3, 3 ) byref -> rcx this single-def ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V02 cse0 [V02,T01] ( 4, 4 ) int -> rax "CSE - aggressive" +; V02 cse0 [V02,T01] ( 4, 3 ) int -> rax "CSE - aggressive" ; ; Lcl frame size = 0 -G_M18211_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M18211_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M18211_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M18211_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref, isz ; byrRegs +[rcx] mov eax, dword ptr [rcx] - mov edx, eax - not edx test eax, eax - cmovl eax, edx - ;; size=11 bbWeight=1 PerfScore 3.00 + jl SHORT G_M18211_IG04 + ;; size=6 bbWeight=1 PerfScore 3.25 G_M18211_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M18211_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[rcx] + not eax + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M18211_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 12, prolog size 0, PerfScore 5.20, instruction count 6, allocated bytes for code 12 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this (Tier1) +; Total bytes of code 10, prolog size 0, PerfScore 5.25, instruction count 6, allocated bytes for code 10 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this (Tier1) ; ============================================================ Unwind Info: ```
+5 (+55.56%) : 114708.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1)
```diff @@ -13,18 +13,24 @@ ; ; Lcl frame size = 0 -G_M4473_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M4473_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M4473_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - xor eax, eax +G_M4473_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz test cl, 128 - sete al - ;; size=8 bbWeight=1 PerfScore 1.50 + je SHORT G_M4473_IG04 + xor eax, eax + ;; size=7 bbWeight=1 PerfScore 1.50 G_M4473_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M4473_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + mov eax, 1 + ;; size=5 bbWeight=0 PerfScore 0.00 +G_M4473_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 9, prolog size 0, PerfScore 3.40, instruction count 4, allocated bytes for code 9 (MethodHash=7b85ee86) for method System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) +; Total bytes of code 14, prolog size 0, PerfScore 3.90, instruction count 6, allocated bytes for code 14 (MethodHash=7b85ee86) for method System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) ; ============================================================ Unwind Info: ```
+5 (+55.56%) : 95289.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1)
```diff @@ -13,18 +13,24 @@ ; ; Lcl frame size = 0 -G_M4473_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M4473_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M4473_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - xor eax, eax +G_M4473_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz test cl, 128 - sete al - ;; size=8 bbWeight=1 PerfScore 1.50 + je SHORT G_M4473_IG04 + xor eax, eax + ;; size=7 bbWeight=1 PerfScore 1.50 G_M4473_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M4473_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + mov eax, 1 + ;; size=5 bbWeight=0 PerfScore 0.00 +G_M4473_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 9, prolog size 0, PerfScore 3.40, instruction count 4, allocated bytes for code 9 (MethodHash=7b85ee86) for method System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) +; Total bytes of code 14, prolog size 0, PerfScore 3.90, instruction count 6, allocated bytes for code 14 (MethodHash=7b85ee86) for method System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) ; ============================================================ Unwind Info: ```
+5 (+55.56%) : 111035.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1)
```diff @@ -13,18 +13,24 @@ ; ; Lcl frame size = 0 -G_M4473_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M4473_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M4473_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - xor eax, eax +G_M4473_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz test cl, 128 - sete al - ;; size=8 bbWeight=1 PerfScore 1.50 + je SHORT G_M4473_IG04 + xor eax, eax + ;; size=7 bbWeight=1 PerfScore 1.50 G_M4473_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M4473_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + mov eax, 1 + ;; size=5 bbWeight=0 PerfScore 0.00 +G_M4473_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 9, prolog size 0, PerfScore 3.40, instruction count 4, allocated bytes for code 9 (MethodHash=7b85ee86) for method System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) +; Total bytes of code 14, prolog size 0, PerfScore 3.90, instruction count 6, allocated bytes for code 14 (MethodHash=7b85ee86) for method System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) ; ============================================================ Unwind Info: ```
benchmarks.run_pgo.windows.x64.checked.mch
-10 (-7.46%) : 70465.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1)
```diff @@ -17,7 +17,7 @@ ; V05 loc3 [V05,T06] ( 4, 0 ) int -> r8 ;* V06 loc4 [V06 ] ( 0, 0 ) int -> zero-ref ; V07 OutArgs [V07 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V08 tmp1 [V08,T04] ( 2, 2 ) int -> rax +; V08 tmp1 [V08,T04] ( 3, 2 ) int -> rax ; V09 tmp2 [V09,T08] ( 3, 0 ) int -> r8 ; V10 tmp3 [V10,T05] ( 5, 0 ) int -> rsi "Inline return value spill temp" ; @@ -31,35 +31,34 @@ G_M55382_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ; byrRegs +[rcx] mov eax, edx sub eax, dword ptr [rcx] - mov r8d, eax - neg r8d - add r8d, 500 - mov r9d, 1 cmp eax, 500 - cmovae r8d, r9d - mov eax, r8d + jae SHORT G_M55382_IG09 + neg eax + add eax, 500 + ;; size=18 bbWeight=1 PerfScore 5.00 +G_M55382_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref, isz cmp dword ptr [rcx+08H], 0 - jne SHORT G_M55382_IG04 + jne SHORT G_M55382_IG05 mov byte ptr [rcx+0CH], 1 mov byte ptr [rcx+0DH], 0 - ;; size=49 bbWeight=1 PerfScore 11.00 -G_M55382_IG03: ; bbWeight=1, epilog, nogc, extend + ;; size=14 bbWeight=1 PerfScore 6.00 +G_M55382_IG04: ; bbWeight=1, epilog, nogc, extend add rsp, 32 pop rsi ret ;; size=6 bbWeight=1 PerfScore 1.75 -G_M55382_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz +G_M55382_IG05: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz sub edx, dword ptr [rcx+04H] cmp edx, dword ptr [rcx+08H] - jb SHORT G_M55382_IG05 + jb SHORT G_M55382_IG06 mov r8d, 1 - jmp SHORT G_M55382_IG06 + jmp SHORT G_M55382_IG07 ;; size=16 bbWeight=0 PerfScore 0.00 -G_M55382_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref mov r8d, dword ptr [rcx+08H] sub r8d, edx ;; size=7 bbWeight=0 PerfScore 0.00 -G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M55382_IG07: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref cmp eax, r8d mov esi, r8d cmovbe esi, eax @@ -77,13 +76,18 @@ G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ; gcr arg pop 0 mov eax, esi ;; size=45 bbWeight=0 PerfScore 0.00 -G_M55382_IG07: ; bbWeight=0, epilog, nogc, extend +G_M55382_IG08: ; bbWeight=0, epilog, nogc, extend add rsp, 32 pop rsi ret ;; size=6 bbWeight=0 PerfScore 0.00 +G_M55382_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz + ; byrRegs +[rcx] + mov eax, 1 + jmp SHORT G_M55382_IG03 + ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 134, prolog size 5, PerfScore 27.40, instruction count 42, allocated bytes for code 134 (MethodHash=422727a9) for method System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) +; Total bytes of code 124, prolog size 5, PerfScore 26.40, instruction count 41, allocated bytes for code 124 (MethodHash=422727a9) for method System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) ; ============================================================ Unwind Info: ```
-10 (-7.46%) : 18820.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1)
```diff @@ -17,7 +17,7 @@ ; V05 loc3 [V05,T06] ( 4, 0 ) int -> r8 ;* V06 loc4 [V06 ] ( 0, 0 ) int -> zero-ref ; V07 OutArgs [V07 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V08 tmp1 [V08,T04] ( 2, 2 ) int -> rax +; V08 tmp1 [V08,T04] ( 3, 2 ) int -> rax ; V09 tmp2 [V09,T08] ( 3, 0 ) int -> r8 ; V10 tmp3 [V10,T05] ( 5, 0 ) int -> rsi "Inline return value spill temp" ; @@ -31,35 +31,34 @@ G_M55382_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ; byrRegs +[rcx] mov eax, edx sub eax, dword ptr [rcx] - mov r8d, eax - neg r8d - add r8d, 500 - mov r9d, 1 cmp eax, 500 - cmovae r8d, r9d - mov eax, r8d + jae SHORT G_M55382_IG09 + neg eax + add eax, 500 + ;; size=18 bbWeight=1 PerfScore 5.00 +G_M55382_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref, isz cmp dword ptr [rcx+08H], 0 - jne SHORT G_M55382_IG04 + jne SHORT G_M55382_IG05 mov byte ptr [rcx+0CH], 1 mov byte ptr [rcx+0DH], 0 - ;; size=49 bbWeight=1 PerfScore 11.00 -G_M55382_IG03: ; bbWeight=1, epilog, nogc, extend + ;; size=14 bbWeight=1 PerfScore 6.00 +G_M55382_IG04: ; bbWeight=1, epilog, nogc, extend add rsp, 32 pop rsi ret ;; size=6 bbWeight=1 PerfScore 1.75 -G_M55382_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz +G_M55382_IG05: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz sub edx, dword ptr [rcx+04H] cmp edx, dword ptr [rcx+08H] - jb SHORT G_M55382_IG05 + jb SHORT G_M55382_IG06 mov r8d, 1 - jmp SHORT G_M55382_IG06 + jmp SHORT G_M55382_IG07 ;; size=16 bbWeight=0 PerfScore 0.00 -G_M55382_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref mov r8d, dword ptr [rcx+08H] sub r8d, edx ;; size=7 bbWeight=0 PerfScore 0.00 -G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M55382_IG07: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref cmp eax, r8d mov esi, r8d cmovbe esi, eax @@ -77,13 +76,18 @@ G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ; gcr arg pop 0 mov eax, esi ;; size=45 bbWeight=0 PerfScore 0.00 -G_M55382_IG07: ; bbWeight=0, epilog, nogc, extend +G_M55382_IG08: ; bbWeight=0, epilog, nogc, extend add rsp, 32 pop rsi ret ;; size=6 bbWeight=0 PerfScore 0.00 +G_M55382_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz + ; byrRegs +[rcx] + mov eax, 1 + jmp SHORT G_M55382_IG03 + ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 134, prolog size 5, PerfScore 27.40, instruction count 42, allocated bytes for code 134 (MethodHash=422727a9) for method System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) +; Total bytes of code 124, prolog size 5, PerfScore 26.40, instruction count 41, allocated bytes for code 124 (MethodHash=422727a9) for method System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) ; ============================================================ Unwind Info: ```
-10 (-7.46%) : 52741.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1)
```diff @@ -17,7 +17,7 @@ ; V05 loc3 [V05,T06] ( 4, 0 ) int -> r8 ;* V06 loc4 [V06 ] ( 0, 0 ) int -> zero-ref ; V07 OutArgs [V07 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V08 tmp1 [V08,T04] ( 2, 2 ) int -> rax +; V08 tmp1 [V08,T04] ( 3, 2 ) int -> rax ; V09 tmp2 [V09,T08] ( 3, 0 ) int -> r8 ; V10 tmp3 [V10,T05] ( 5, 0 ) int -> rsi "Inline return value spill temp" ; @@ -31,35 +31,34 @@ G_M55382_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ; byrRegs +[rcx] mov eax, edx sub eax, dword ptr [rcx] - mov r8d, eax - neg r8d - add r8d, 500 - mov r9d, 1 cmp eax, 500 - cmovae r8d, r9d - mov eax, r8d + jae SHORT G_M55382_IG09 + neg eax + add eax, 500 + ;; size=18 bbWeight=1 PerfScore 5.00 +G_M55382_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref, isz cmp dword ptr [rcx+08H], 0 - jne SHORT G_M55382_IG04 + jne SHORT G_M55382_IG05 mov byte ptr [rcx+0CH], 1 mov byte ptr [rcx+0DH], 0 - ;; size=49 bbWeight=1 PerfScore 11.00 -G_M55382_IG03: ; bbWeight=1, epilog, nogc, extend + ;; size=14 bbWeight=1 PerfScore 6.00 +G_M55382_IG04: ; bbWeight=1, epilog, nogc, extend add rsp, 32 pop rsi ret ;; size=6 bbWeight=1 PerfScore 1.75 -G_M55382_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz +G_M55382_IG05: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz sub edx, dword ptr [rcx+04H] cmp edx, dword ptr [rcx+08H] - jb SHORT G_M55382_IG05 + jb SHORT G_M55382_IG06 mov r8d, 1 - jmp SHORT G_M55382_IG06 + jmp SHORT G_M55382_IG07 ;; size=16 bbWeight=0 PerfScore 0.00 -G_M55382_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref mov r8d, dword ptr [rcx+08H] sub r8d, edx ;; size=7 bbWeight=0 PerfScore 0.00 -G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M55382_IG07: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref cmp eax, r8d mov esi, r8d cmovbe esi, eax @@ -77,13 +76,18 @@ G_M55382_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ; gcr arg pop 0 mov eax, esi ;; size=45 bbWeight=0 PerfScore 0.00 -G_M55382_IG07: ; bbWeight=0, epilog, nogc, extend +G_M55382_IG08: ; bbWeight=0, epilog, nogc, extend add rsp, 32 pop rsi ret ;; size=6 bbWeight=0 PerfScore 0.00 +G_M55382_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz + ; byrRegs +[rcx] + mov eax, 1 + jmp SHORT G_M55382_IG03 + ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 134, prolog size 5, PerfScore 27.40, instruction count 42, allocated bytes for code 134 (MethodHash=422727a9) for method System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) +; Total bytes of code 124, prolog size 5, PerfScore 26.40, instruction count 41, allocated bytes for code 124 (MethodHash=422727a9) for method System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) ; ============================================================ Unwind Info: ```
+5 (+27.78%) : 59155.dasm - System.Int32:CompareTo(int):int:this (Tier1)
```diff @@ -28,17 +28,24 @@ G_M46370_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr G_M46370_IG04: ; bbWeight=0.80, epilog, nogc, extend ret ;; size=1 bbWeight=0.80 PerfScore 0.80 -G_M46370_IG05: ; bbWeight=0.20, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref +G_M46370_IG05: ; bbWeight=0.20, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz ; byrRegs +[rcx] - xor eax, eax cmp dword ptr [rcx], edx - setg al - ;; size=7 bbWeight=0.20 PerfScore 0.85 + jle SHORT G_M46370_IG07 + mov eax, 1 + ;; size=9 bbWeight=0.20 PerfScore 0.85 G_M46370_IG06: ; bbWeight=0.20, epilog, nogc, extend ret ;; size=1 bbWeight=0.20 PerfScore 0.20 +G_M46370_IG07: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[rcx] + xor eax, eax + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M46370_IG08: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 18, prolog size 0, PerfScore 7.85, instruction count 8, allocated bytes for code 18 (MethodHash=c9004add) for method System.Int32:CompareTo(int):int:this (Tier1) +; Total bytes of code 23, prolog size 0, PerfScore 8.35, instruction count 10, allocated bytes for code 23 (MethodHash=c9004add) for method System.Int32:CompareTo(int):int:this (Tier1) ; ============================================================ Unwind Info: ```
+5 (+27.78%) : 57269.dasm - System.Int32:CompareTo(int):int:this (Tier1)
```diff @@ -28,17 +28,24 @@ G_M46370_IG03: ; bbWeight=0.77, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr G_M46370_IG04: ; bbWeight=0.77, epilog, nogc, extend ret ;; size=1 bbWeight=0.77 PerfScore 0.77 -G_M46370_IG05: ; bbWeight=0.23, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref +G_M46370_IG05: ; bbWeight=0.23, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, gcvars, byref, isz ; byrRegs +[rcx] - xor eax, eax cmp dword ptr [rcx], edx - setg al - ;; size=7 bbWeight=0.23 PerfScore 0.99 + jle SHORT G_M46370_IG07 + mov eax, 1 + ;; size=9 bbWeight=0.23 PerfScore 0.99 G_M46370_IG06: ; bbWeight=0.23, epilog, nogc, extend ret ;; size=1 bbWeight=0.23 PerfScore 0.23 +G_M46370_IG07: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[rcx] + xor eax, eax + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M46370_IG08: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 18, prolog size 0, PerfScore 7.98, instruction count 8, allocated bytes for code 18 (MethodHash=c9004add) for method System.Int32:CompareTo(int):int:this (Tier1) +; Total bytes of code 23, prolog size 0, PerfScore 8.48, instruction count 10, allocated bytes for code 23 (MethodHash=c9004add) for method System.Int32:CompareTo(int):int:this (Tier1) ; ============================================================ Unwind Info: ```
+5 (+55.56%) : 71470.dasm - System.Threading.SpinWait:get_NextSpinWillYield():bool:this (Tier1)
```diff @@ -14,19 +14,26 @@ ; ; Lcl frame size = 0 -G_M23044_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M23044_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M23044_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref +G_M23044_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref, isz ; byrRegs +[rcx] - xor eax, eax cmp dword ptr [rcx], 10 - setge al - ;; size=8 bbWeight=1 PerfScore 4.25 + jge SHORT G_M23044_IG04 + xor eax, eax + ;; size=7 bbWeight=1 PerfScore 4.25 G_M23044_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M23044_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[rcx] + mov eax, 1 + ;; size=5 bbWeight=0 PerfScore 0.00 +G_M23044_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 9, prolog size 0, PerfScore 6.15, instruction count 4, allocated bytes for code 9 (MethodHash=d980a5fb) for method System.Threading.SpinWait:get_NextSpinWillYield():bool:this (Tier1) +; Total bytes of code 14, prolog size 0, PerfScore 6.65, instruction count 6, allocated bytes for code 14 (MethodHash=d980a5fb) for method System.Threading.SpinWait:get_NextSpinWillYield():bool:this (Tier1) ; ============================================================ Unwind Info: ```
coreclr_tests.run.windows.x64.checked.mch
-2 (-9.52%) : 223475.dasm - System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1)
```diff @@ -11,26 +11,30 @@ ; ; V00 arg0 [V00,T00] ( 3, 3 ) ushort -> rcx single-def ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V02 cse0 [V02,T01] ( 4, 4 ) int -> rax "CSE - aggressive" +; V02 cse0 [V02,T01] ( 4, 3 ) int -> rax "CSE - aggressive" ; ; Lcl frame size = 0 -G_M23032_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M23032_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M23032_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref +G_M23032_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movzx rax, cx lea edx, [rax-41H] - mov ecx, eax - or ecx, 32 - movzx rcx, cx cmp edx, 25 - cmovbe eax, ecx - ;; size=20 bbWeight=1 PerfScore 2.00 + jbe SHORT G_M23032_IG04 + ;; size=11 bbWeight=1 PerfScore 2.00 G_M23032_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M23032_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + or eax, 32 + movzx rax, ax + ;; size=6 bbWeight=0 PerfScore 0.00 +G_M23032_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 21, prolog size 0, PerfScore 5.10, instruction count 8, allocated bytes for code 21 (MethodHash=8470a607) for method System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) +; Total bytes of code 19, prolog size 0, PerfScore 4.90, instruction count 8, allocated bytes for code 19 (MethodHash=8470a607) for method System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) ; ============================================================ Unwind Info: ```
-2 (-8.33%) : 271020.dasm - Internal.TypeSystem.CallingConventionExtensions:GetPlatformDefaultUnmanagedCallingConvention(Internal.TypeSystem.TypeSystemContext):int (Tier1)
```diff @@ -15,25 +15,29 @@ ; ; Lcl frame size = 0 -G_M10940_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M10940_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M10940_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref +G_M10940_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rcx] mov rax, gword ptr [rcx+18H] ; gcrRegs +[rax] - mov edx, 2 - mov ecx, 1 - ; gcrRegs -[rcx] cmp dword ptr [rax+10H], 1 - mov eax, ecx + jne SHORT G_M10940_IG04 + mov eax, 2 ; gcrRegs -[rax] - cmove eax, edx - ;; size=23 bbWeight=1 PerfScore 6.00 + ;; size=15 bbWeight=1 PerfScore 6.25 G_M10940_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M10940_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs -[rcx] + mov eax, 1 + ;; size=5 bbWeight=0 PerfScore 0.00 +G_M10940_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 24, prolog size 0, PerfScore 9.40, instruction count 7, allocated bytes for code 24 (MethodHash=c964d543) for method Internal.TypeSystem.CallingConventionExtensions:GetPlatformDefaultUnmanagedCallingConvention(Internal.TypeSystem.TypeSystemContext):int (Tier1) +; Total bytes of code 22, prolog size 0, PerfScore 9.45, instruction count 7, allocated bytes for code 22 (MethodHash=c964d543) for method Internal.TypeSystem.CallingConventionExtensions:GetPlatformDefaultUnmanagedCallingConvention(Internal.TypeSystem.TypeSystemContext):int (Tier1) ; ============================================================ Unwind Info: ```
-2 (-8.33%) : 267445.dasm - Internal.TypeSystem.CallingConventionExtensions:GetPlatformDefaultUnmanagedCallingConvention(Internal.TypeSystem.TypeSystemContext):int (Tier1)
```diff @@ -15,25 +15,29 @@ ; ; Lcl frame size = 0 -G_M10940_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M10940_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M10940_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref +G_M10940_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rcx] mov rax, gword ptr [rcx+18H] ; gcrRegs +[rax] - mov edx, 2 - mov ecx, 1 - ; gcrRegs -[rcx] cmp dword ptr [rax+10H], 1 - mov eax, ecx + jne SHORT G_M10940_IG04 + mov eax, 2 ; gcrRegs -[rax] - cmove eax, edx - ;; size=23 bbWeight=1 PerfScore 6.00 + ;; size=15 bbWeight=1 PerfScore 6.25 G_M10940_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M10940_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs -[rcx] + mov eax, 1 + ;; size=5 bbWeight=0 PerfScore 0.00 +G_M10940_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 24, prolog size 0, PerfScore 9.40, instruction count 7, allocated bytes for code 24 (MethodHash=c964d543) for method Internal.TypeSystem.CallingConventionExtensions:GetPlatformDefaultUnmanagedCallingConvention(Internal.TypeSystem.TypeSystemContext):int (Tier1) +; Total bytes of code 22, prolog size 0, PerfScore 9.45, instruction count 7, allocated bytes for code 22 (MethodHash=c964d543) for method Internal.TypeSystem.CallingConventionExtensions:GetPlatformDefaultUnmanagedCallingConvention(Internal.TypeSystem.TypeSystemContext):int (Tier1) ; ============================================================ Unwind Info: ```
+6 (+28.57%) : 266839.dasm - System.Collections.Generic.EnumComparer`1[int]:Compare(int,int):int:this (Tier1)
```diff @@ -13,7 +13,7 @@ ; V02 arg2 [V02,T00] ( 4, 3.50) int -> r8 single-def ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T02] ( 3, 4.99) int -> rdx ld-addr-op "Inlining Arg" -; V05 tmp2 [V05,T03] ( 3, 1.50) int -> rax "Inline return value spill temp" +; V05 tmp2 [V05,T03] ( 4, 1.50) int -> rax "Inline return value spill temp" ; ; Lcl frame size = 0 @@ -23,11 +23,11 @@ G_M64386_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, cmp edx, r8d jl SHORT G_M64386_IG05 ;; size=5 bbWeight=1 PerfScore 1.25 -G_M64386_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - xor eax, eax +G_M64386_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz cmp edx, r8d - setg al - ;; size=8 bbWeight=0.50 PerfScore 0.74 + jle SHORT G_M64386_IG06 + mov eax, 1 + ;; size=10 bbWeight=0.50 PerfScore 0.74 G_M64386_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc ret ;; size=1 bbWeight=1 PerfScore 1.00 @@ -35,8 +35,12 @@ G_M64386_IG05: ; bbWeight=0.00, gcVars=0000000000000000 {}, gcrefRegs=000 mov eax, -1 jmp SHORT G_M64386_IG04 ;; size=7 bbWeight=0.00 PerfScore 0.01 +G_M64386_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + xor eax, eax + jmp SHORT G_M64386_IG04 + ;; size=4 bbWeight=0 PerfScore 0.00 -; Total bytes of code 21, prolog size 0, PerfScore 5.10, instruction count 8, allocated bytes for code 21 (MethodHash=7b56047d) for method System.Collections.Generic.EnumComparer`1[int]:Compare(int,int):int:this (Tier1) +; Total bytes of code 27, prolog size 0, PerfScore 5.70, instruction count 10, allocated bytes for code 27 (MethodHash=7b56047d) for method System.Collections.Generic.EnumComparer`1[int]:Compare(int,int):int:this (Tier1) ; ============================================================ Unwind Info: ```
+6 (+31.58%) : 266840.dasm - System.Runtime.CompilerServices.RuntimeHelpers:EnumCompareTo[int](int,int):int (Tier1)
```diff @@ -11,7 +11,7 @@ ; V00 arg0 [V00,T00] ( 4, 3.50) int -> rcx ld-addr-op single-def ; V01 arg1 [V01,T01] ( 4, 3.50) int -> rdx single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V03 tmp1 [V03,T02] ( 3, 1.50) int -> rax "Inline return value spill temp" +; V03 tmp1 [V03,T02] ( 4, 1.50) int -> rax "Inline return value spill temp" ; ; Lcl frame size = 0 @@ -21,11 +21,11 @@ G_M33613_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, cmp ecx, edx jl SHORT G_M33613_IG05 ;; size=4 bbWeight=1 PerfScore 1.25 -G_M33613_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - xor eax, eax +G_M33613_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz cmp ecx, edx - setg al - ;; size=7 bbWeight=0.50 PerfScore 0.74 + jle SHORT G_M33613_IG06 + mov eax, 1 + ;; size=9 bbWeight=0.50 PerfScore 0.74 G_M33613_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc ret ;; size=1 bbWeight=1 PerfScore 1.00 @@ -33,8 +33,12 @@ G_M33613_IG05: ; bbWeight=0.00, gcVars=0000000000000000 {}, gcrefRegs=000 mov eax, -1 jmp SHORT G_M33613_IG04 ;; size=7 bbWeight=0.00 PerfScore 0.01 +G_M33613_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + xor eax, eax + jmp SHORT G_M33613_IG04 + ;; size=4 bbWeight=0 PerfScore 0.00 -; Total bytes of code 19, prolog size 0, PerfScore 4.90, instruction count 8, allocated bytes for code 19 (MethodHash=55ec7cb2) for method System.Runtime.CompilerServices.RuntimeHelpers:EnumCompareTo[int](int,int):int (Tier1) +; Total bytes of code 25, prolog size 0, PerfScore 5.50, instruction count 10, allocated bytes for code 25 (MethodHash=55ec7cb2) for method System.Runtime.CompilerServices.RuntimeHelpers:EnumCompareTo[int](int,int):int (Tier1) ; ============================================================ Unwind Info: ```
+5 (+55.56%) : 266293.dasm - ILCompiler.ReadyToRunCompilationModuleGroupBase:IsCompilationUnitIndexExact(int):bool:this (Tier1)
```diff @@ -14,18 +14,24 @@ ; ; Lcl frame size = 0 -G_M21938_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG +G_M21938_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M21938_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - xor eax, eax +G_M21938_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz cmp edx, 2 - sete al - ;; size=8 bbWeight=1 PerfScore 1.50 + jne SHORT G_M21938_IG04 + mov eax, 1 + ;; size=10 bbWeight=1 PerfScore 1.50 G_M21938_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M21938_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + xor eax, eax + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M21938_IG05: ; bbWeight=0, epilog, nogc, extend + ret + ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 9, prolog size 0, PerfScore 3.40, instruction count 4, allocated bytes for code 9 (MethodHash=256caa4d) for method ILCompiler.ReadyToRunCompilationModuleGroupBase:IsCompilationUnitIndexExact(int):bool:this (Tier1) +; Total bytes of code 14, prolog size 0, PerfScore 3.90, instruction count 6, allocated bytes for code 14 (MethodHash=256caa4d) for method ILCompiler.ReadyToRunCompilationModuleGroupBase:IsCompilationUnitIndexExact(int):bool:this (Tier1) ; ============================================================ Unwind Info: ```
libraries.pmi.windows.x64.checked.mch
+0 (0.00%) : 67539.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
```diff @@ -74,20 +74,20 @@ ; V63 tmp59 [V63,T49] ( 3, 2.25) ref -> rdx single-def "CASTCLASS eval op1" ; V64 tmp60 [V64,T64] ( 3, 2.25) long -> rcx "fgMakeTemp is creating a new local variable" ; V65 tmp61 [V65,T20] ( 4, 3.25) ref -> rax class-hnd "spilling QMark2" -;* V66 tmp62 [V66,T67] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V67 tmp63 [V67,T68] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V68 tmp64 [V68,T69] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V69 tmp65 [V69,T70] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V70 tmp66 [V70,T71] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V71 tmp67 [V71,T72] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V72 tmp68 [V72,T73] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V73 tmp69 [V73,T74] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V74 tmp70 [V74,T75] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V75 tmp71 [V75,T76] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V76 tmp72 [V76,T77] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V77 tmp73 [V77,T78] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V78 tmp74 [V78,T79] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V79 tmp75 [V79,T80] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V66 tmp62 [V66,T74] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V67 tmp63 [V67,T67] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V68 tmp64 [V68,T75] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V69 tmp65 [V69,T68] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V70 tmp66 [V70,T76] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V71 tmp67 [V71,T69] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V72 tmp68 [V72,T77] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V73 tmp69 [V73,T70] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V74 tmp70 [V74,T78] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V75 tmp71 [V75,T71] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V76 tmp72 [V76,T79] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V77 tmp73 [V77,T72] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V78 tmp74 [V78,T80] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V79 tmp75 [V79,T73] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" ;* V80 tmp76 [V80,T81] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" ; V81 cse0 [V81,T65] ( 3, 1.50) long -> rbx "CSE - conservative" ; V82 cse1 [V82,T03] ( 17, 8.25) long -> rdi "CSE - aggressive" @@ -108,12 +108,12 @@ G_M46962_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byr test rsi, rsi jne SHORT G_M46962_IG04 ;; size=5 bbWeight=1 PerfScore 1.25 -G_M46962_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref +G_M46962_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rsi] xor rax, rax ; gcrRegs +[rax] - jmp G_M46962_IG52 - ;; size=7 bbWeight=0.50 PerfScore 1.12 + jmp SHORT G_M46962_IG06 + ;; size=4 bbWeight=0.50 PerfScore 1.12 G_M46962_IG04: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] +[rsi] mov rdi, qword ptr [rcx+38H] @@ -125,7 +125,10 @@ G_M46962_IG04: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, mov rcx, 0xD1FFAB1E ; gcrRegs +[rcx] cmp rax, rcx - jne SHORT G_M46962_IG07 + je SHORT G_M46962_IG08 + mov rcx, 0xD1FFAB1E + cmp rax, rcx + jne SHORT G_M46962_IG11 mov rcx, 0xD1FFAB1E ; ; gcrRegs -[rcx] call CORINFO_HELP_NEWSFAST @@ -145,25 +148,28 @@ G_M46962_IG04: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, mov rcx, qword ptr [rdi] cmp qword ptr [rax], rcx je SHORT G_M46962_IG06 - ;; size=74 bbWeight=0.50 PerfScore 9.50 + ;; size=89 bbWeight=0.50 PerfScore 10.25 G_M46962_IG05: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ; gcrRegs -[rax rbx] call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 ;; size=6 bbWeight=0.12 PerfScore 0.38 -G_M46962_IG06: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - jmp G_M46962_IG52 - ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M46962_IG07: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[rsi] - mov rcx, 0xD1FFAB1E - ; gcrRegs +[rcx] - cmp rax, rcx - jne SHORT G_M46962_IG10 +G_M46962_IG06: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref + nop + ;; size=1 bbWeight=1 PerfScore 0.25 +G_M46962_IG07: ; bbWeight=1, epilog, nogc, extend + add rsp, 48 + pop rbx + pop rsi + pop rdi + ret + ;; size=8 bbWeight=1 PerfScore 2.75 +G_M46962_IG08: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[rax] +[rsi] mov rcx, 0xD1FFAB1E ; - ; gcrRegs -[rcx] call CORINFO_HELP_NEWSFAST + ; gcrRegs +[rax] ; gcr arg pop 0 mov rbx, rax ; gcrRegs +[rbx] @@ -179,58 +185,26 @@ G_M46962_IG07: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 ; gcrRegs +[rax] mov rcx, qword ptr [rdi] cmp qword ptr [rax], rcx - je SHORT G_M46962_IG09 - ;; size=59 bbWeight=0.50 PerfScore 6.88 -G_M46962_IG08: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref + je SHORT G_M46962_IG10 + ;; size=44 bbWeight=0.50 PerfScore 6.12 +G_M46962_IG09: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ; gcrRegs -[rax rbx] call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 ;; size=6 bbWeight=0.12 PerfScore 0.38 -G_M46962_IG09: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - jmp G_M46962_IG52 - ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M46962_IG10: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz +G_M46962_IG10: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M46962_IG06 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M46962_IG11: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rsi] mov rcx, 0xD1FFAB1E ; gcrRegs +[rcx] cmp rax, rcx - jne SHORT G_M46962_IG13 - mov rcx, 0xD1FFAB1E ; - ; gcrRegs -[rcx] - call CORINFO_HELP_NEWSFAST - ; gcr arg pop 0 - mov rbx, rax - ; gcrRegs +[rbx] - mov rcx, rsi - ; gcrRegs +[rcx] - call [] - ; gcrRegs -[rax rcx rsi] - ; gcr arg pop 0 - mov byte ptr [rbx+08H], al - mov rdx, rbx - ; gcrRegs +[rdx] - mov rax, rdx - ; gcrRegs +[rax] - mov rcx, qword ptr [rdi] - cmp qword ptr [rax], rcx - je SHORT G_M46962_IG12 - ;; size=59 bbWeight=0.50 PerfScore 6.88 -G_M46962_IG11: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax rbx] - call [CORINFO_HELP_CHKCASTANY] - ; gcrRegs -[rdx] +[rax] - ; gcr arg pop 0 - ;; size=6 bbWeight=0.12 PerfScore 0.38 -G_M46962_IG12: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - jmp G_M46962_IG52 - ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M46962_IG13: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[rsi] + je SHORT G_M46962_IG14 mov rcx, 0xD1FFAB1E - ; gcrRegs +[rcx] cmp rax, rcx - jne SHORT G_M46962_IG16 + jne SHORT G_M46962_IG17 mov rcx, 0xD1FFAB1E ; ; gcrRegs -[rcx] call CORINFO_HELP_NEWSFAST @@ -249,23 +223,57 @@ G_M46962_IG13: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 ; gcrRegs +[rax] mov rcx, qword ptr [rdi] cmp qword ptr [rax], rcx - je SHORT G_M46962_IG15 - ;; size=60 bbWeight=0.50 PerfScore 6.88 -G_M46962_IG14: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref + je SHORT G_M46962_IG13 + ;; size=75 bbWeight=0.50 PerfScore 7.62 +G_M46962_IG12: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ; gcrRegs -[rax rbx] call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 ;; size=6 bbWeight=0.12 PerfScore 0.38 -G_M46962_IG15: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - jmp G_M46962_IG52 +G_M46962_IG13: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref + jmp G_M46962_IG06 ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M46962_IG16: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz +G_M46962_IG14: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] +[rsi] + mov rcx, 0xD1FFAB1E ; + call CORINFO_HELP_NEWSFAST + ; gcrRegs +[rax] + ; gcr arg pop 0 + mov rbx, rax + ; gcrRegs +[rbx] + mov rcx, rsi + ; gcrRegs +[rcx] + call [] + ; gcrRegs -[rax rcx rsi] + ; gcr arg pop 0 + mov byte ptr [rbx+08H], al + mov rdx, rbx + ; gcrRegs +[rdx] + mov rax, rdx + ; gcrRegs +[rax] + mov rcx, qword ptr [rdi] + cmp qword ptr [rax], rcx + je SHORT G_M46962_IG16 + ;; size=44 bbWeight=0.50 PerfScore 6.12 +G_M46962_IG15: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax rbx] + call [CORINFO_HELP_CHKCASTANY] + ; gcrRegs -[rdx] +[rax] + ; gcr arg pop 0 + ;; size=6 bbWeight=0.12 PerfScore 0.38 +G_M46962_IG16: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref + jmp G_M46962_IG06 + ;; size=5 bbWeight=0.50 PerfScore 1.00 +G_M46962_IG17: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rsi] mov rcx, 0xD1FFAB1E ; gcrRegs +[rcx] cmp rax, rcx - jne SHORT G_M46962_IG19 + je SHORT G_M46962_IG20 + mov rcx, 0xD1FFAB1E + cmp rax, rcx + jne SHORT G_M46962_IG23 mov rcx, 0xD1FFAB1E ; ; gcrRegs -[rcx] call CORINFO_HELP_NEWSFAST @@ -277,6 +285,37 @@ G_M46962_IG16: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 call [] ; gcrRegs -[rax rcx rsi] ; gcr arg pop 0 + mov dword ptr [rbx+08H], eax + mov rdx, rbx + ; gcrRegs +[rdx] + mov rax, rdx + ; gcrRegs +[rax] + mov rcx, qword ptr [rdi] + cmp qword ptr [rax], rcx + je SHORT G_M46962_IG19 + ;; size=74 bbWeight=0.50 PerfScore 7.62 +G_M46962_IG18: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ... ```
+7 (+0.63%) : 132105.dasm - Microsoft.CodeAnalysis.RealParser:ConvertDecimalToFloatingPointBits(Microsoft.CodeAnalysis.RealParser+DecimalFloatingPointString,Microsoft.CodeAnalysis.RealParser+FloatingPointType,byref):int (FullOpts)
```diff @@ -11,46 +11,46 @@ ; V00 arg0 [V00,T01] ( 4, 8 ) byref -> rcx ld-addr-op single-def ; V01 arg1 [V01,T00] ( 14, 8 ) ref -> rsi class-hnd single-def ; V02 arg2 [V02,T02] ( 7, 4.50) byref -> rdi single-def -; V03 loc0 [V03,T20] ( 3, 1.50) int -> r15 single-def +; V03 loc0 [V03,T21] ( 3, 1.50) int -> r15 single-def ;* V04 loc1 [V04 ] ( 0, 0 ) int -> zero-ref single-def -; V05 loc2 [V05,T14] ( 4, 2 ) int -> r12 single-def +; V05 loc2 [V05,T13] ( 4, 2 ) int -> r12 single-def ;* V06 loc3 [V06 ] ( 0, 0 ) int -> zero-ref single-def ;* V07 loc4 [V07 ] ( 0, 0 ) int -> zero-ref single-def -; V08 loc5 [V08,T15] ( 4, 2 ) int -> r13 single-def -; V09 loc6 [V09,T21] ( 3, 1.50) int -> [rsp+E4H] spill-single-def -; V10 loc7 [V10,T13] ( 5, 2.50) int -> [rsp+E0H] spill-single-def +; V08 loc5 [V08,T14] ( 4, 2 ) int -> r13 single-def +; V09 loc6 [V09,T22] ( 3, 1.50) int -> [rsp+E4H] spill-single-def +; V10 loc7 [V10,T12] ( 5, 2.50) int -> [rsp+E0H] spill-single-def ; V11 loc8 [V11 ] ( 4, 2 ) struct (16) [rsp+D0H] do-not-enreg[XS] must-init addr-exposed ld-addr-op ; V12 loc9 [V12 ] ( 2, 1 ) ref -> [rsp+C8H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ; V13 loc10 [V13,T03] ( 8, 4 ) int -> r12 single-def -; V14 loc11 [V14,T22] ( 3, 1.50) int -> [rsp+C4H] spill-single-def +; V14 loc11 [V14,T23] ( 3, 1.50) int -> [rsp+C4H] spill-single-def ; V15 loc12 [V15 ] ( 6, 3 ) struct (16) [rsp+B0H] do-not-enreg[XS] must-init addr-exposed ld-addr-op ; V16 loc13 [V16 ] ( 5, 2.50) struct (16) [rsp+A0H] do-not-enreg[XS] must-init addr-exposed ld-addr-op -; V17 loc14 [V17,T23] ( 3, 1.50) int -> rbx single-def -; V18 loc15 [V18,T24] ( 3, 1.50) int -> rax single-def +; V17 loc14 [V17,T24] ( 3, 1.50) int -> rbx single-def +; V18 loc15 [V18,T25] ( 3, 1.50) int -> rax single-def ; V19 loc16 [V19,T06] ( 7, 3.50) int -> rbp single-def ; V20 loc17 [V20,T07] ( 7, 3.50) int -> r15 single-def -; V21 loc18 [V21,T25] ( 3, 1.50) int -> rbx +; V21 loc18 [V21,T26] ( 3, 1.50) int -> rbx ; V22 loc19 [V22,T32] ( 2, 1 ) int -> r14 single-def ; V23 loc20 [V23 ] ( 2, 1 ) struct (16) [rsp+90H] do-not-enreg[XS] must-init addr-exposed ld-addr-op ; V24 loc21 [V24,T09] ( 6, 3 ) long -> rbx -; V25 loc22 [V25,T16] ( 4, 2 ) bool -> rbp -; V26 loc23 [V26,T26] ( 3, 1.50) int -> rax single-def +; V25 loc22 [V25,T15] ( 4, 2 ) bool -> rbp +; V26 loc23 [V26,T27] ( 3, 1.50) int -> rax single-def ; V27 loc24 [V27,T33] ( 2, 1 ) long -> rdx single-def ;* V28 loc25 [V28 ] ( 0, 0 ) int -> zero-ref -; V29 loc26 [V29,T27] ( 3, 1.50) int -> rax single-def +; V29 loc26 [V29,T28] ( 3, 1.50) int -> rax single-def ; V30 OutArgs [V30 ] ( 1, 1 ) struct (40) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V31 tmp1 [V31,T05] ( 4, 4 ) int -> r12 "dup spill" ; V32 tmp2 [V32,T34] ( 2, 1 ) int -> r8 -; V33 tmp3 [V33,T28] ( 3, 1.50) int -> rbp +; V33 tmp3 [V33,T29] ( 3, 1.50) int -> rbp ; V34 tmp4 [V34,T35] ( 2, 1 ) int -> r14 ; V35 tmp5 [V35 ] ( 2, 2 ) struct (16) [rsp+80H] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" -; V36 tmp6 [V36,T29] ( 3, 1.50) int -> r8 -; V37 tmp7 [V37,T30] ( 3, 1.50) int -> rcx +; V36 tmp6 [V36,T30] ( 3, 1.50) int -> r8 +; V37 tmp7 [V37,T31] ( 3, 1.50) int -> rcx ;* V38 tmp8 [V38 ] ( 0, 0 ) long -> zero-ref "impAppendStmt" ; V39 tmp9 [V39,T36] ( 2, 1 ) int -> r12 "Inline return value spill temp" ; V40 tmp10 [V40,T18] ( 2, 2 ) int -> rdx "Inlining Arg" -; V41 tmp11 [V41,T31] ( 3, 1.50) int -> r13 "Inline return value spill temp" -; V42 tmp12 [V42,T11] ( 3, 3 ) int -> rdx "Inlining Arg" +; V41 tmp11 [V41,T20] ( 4, 1.50) int -> r13 "Inline return value spill temp" +; V42 tmp12 [V42,T16] ( 3, 2 ) int -> r13 "Inlining Arg" ; V43 tmp13 [V43,T37] ( 2, 1 ) int -> rbx single-def "Inline return value spill temp" ;* V44 tmp14 [V44 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ; V45 tmp15 [V45 ] ( 2, 1 ) ref -> [rsp+78H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" @@ -59,7 +59,7 @@ ; V48 tmp18 [V48 ] ( 2, 1 ) ref -> [rsp+70H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" ; V49 tmp19 [V49 ] ( 2, 2 ) struct (16) [rsp+60H] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" ;* V50 tmp20 [V50 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -; V51 tmp21 [V51,T12] ( 3, 3 ) int -> rax "Single return block return value" +; V51 tmp21 [V51,T11] ( 3, 3 ) int -> rax "Single return block return value" ; V52 tmp22 [V52,T10] ( 4, 3 ) ref -> rbx single-def "field V00.Mantissa (fldOffset=0x0)" P-INDEP ; V53 tmp23 [V53,T04] ( 7, 4 ) int -> rbp single-def "field V00.Exponent (fldOffset=0x8)" P-INDEP ; V54 tmp24 [V54 ] ( 4, 2 ) ref -> [rsp+D0H] do-not-enreg[X] addr-exposed "field V11._bits (fldOffset=0x0)" P-DEP @@ -147,7 +147,7 @@ G_M8165_IG04: ; bbWeight=0.50, epilog, nogc, extend pop r15 ret ;; size=20 bbWeight=0.50 PerfScore 2.62 -G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref, isz +G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref ; gcrRegs +[rbx rsi] mov rcx, rsi ; gcrRegs +[rcx] @@ -163,10 +163,12 @@ G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 xor r12d, r12d test edx, edx cmovg r12d, ebp - mov edx, r14d - cmp r12d, edx - mov r13d, edx - cmovbe r13d, r12d + mov r13d, r14d + cmp r12d, r13d + ja G_M8165_IG41 + mov r13d, r12d + ;; size=48 bbWeight=0.50 PerfScore 5.38 +G_M8165_IG06: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, isz sub r12d, r13d mov eax, r14d mov dword ptr [rsp+E4H], eax @@ -182,7 +184,7 @@ G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 call [Microsoft.CodeAnalysis.RealParser:AccumulateDecimalDigitsIntoBigInteger(Microsoft.CodeAnalysis.RealParser+DecimalFloatingPointString,uint,uint):System.Numerics.BigInteger] ; gcr arg pop 0 test r12d, r12d - je SHORT G_M8165_IG08 + je SHORT G_M8165_IG09 mov rcx, rsi ; gcrRegs +[rcx] call [Microsoft.CodeAnalysis.RealParser+FloatingPointType:get_OverflowDecimalExponent():int:this] @@ -191,7 +193,7 @@ G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 movsxd rcx, eax mov eax, r12d cmp rcx, rax - jge SHORT G_M8165_IG07 + jge SHORT G_M8165_IG08 mov rcx, rsi ; gcrRegs +[rcx] mov rax, qword ptr [rsi] @@ -201,8 +203,8 @@ G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 ; gcr arg pop 0 mov qword ptr [rdi], rax mov eax, 3 - ;; size=153 bbWeight=0.50 PerfScore 17.12 -G_M8165_IG06: ; bbWeight=0.50, epilog, nogc, extend + ;; size=107 bbWeight=0.50 PerfScore 12.12 +G_M8165_IG07: ; bbWeight=0.50, epilog, nogc, extend add rsp, 232 pop rbx pop rbp @@ -214,30 +216,30 @@ G_M8165_IG06: ; bbWeight=0.50, epilog, nogc, extend pop r15 ret ;; size=20 bbWeight=0.50 PerfScore 2.62 -G_M8165_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref +G_M8165_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref ; gcrRegs +[rbx rsi] lea rcx, [rsp+D0H] mov edx, r12d call [Microsoft.CodeAnalysis.RealParser:MultiplyByPowerOfTen(byref,uint)] ; gcr arg pop 0 ;; size=17 bbWeight=0.50 PerfScore 1.88 -G_M8165_IG08: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, nogc +G_M8165_IG09: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, nogc vmovdqu xmm0, xmmword ptr [rsp+D0H] vmovdqu xmmword ptr [rsp+40H], xmm0 ;; size=15 bbWeight=0.50 PerfScore 2.00 -G_M8165_IG09: ; bbWeight=0.50, isz, extend +G_M8165_IG10: ; bbWeight=0.50, isz, extend lea rcx, [rsp+40H] lea rdx, [rsp+C8H] call [Microsoft.CodeAnalysis.RealParser:CountSignificantBits(System.Numerics.BigInteger,byref):uint] ; gcr arg pop 0 mov r12d, eax cmp r12d, r15d - jae SHORT G_M8165_IG10 + jae SHORT G_M8165_IG11 mov eax, dword ptr [rsp+E0H] test eax, eax - jne SHORT G_M8165_IG11 + jne SHORT G_M8165_IG12 ;; size=38 bbWeight=0.50 PerfScore 3.88 -G_M8165_IG10: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref +G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref ; gcrRegs -[rbx] mov bword ptr [rsp+20H], rdi ; byr arg write @@ -253,9 +255,9 @@ G_M8165_IG10: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi} ; gcrRegs -[rcx rsi r9] ; byrRegs -[rdi] ; gcr arg pop 0 - jmp G_M8165_IG38 + jmp G_M8165_IG39 ;; size=45 bbWeight=0.50 PerfScore 5.38 -G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, isz +G_M8165_IG12: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, isz ; gcrRegs +[rbx rsi] ; byrRegs +[rdi] mov edx, dword ptr [rsp+E0H] @@ -265,7 +267,7 @@ G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 { cmovge r8d, edx mov dword ptr [rsp+C4H], r8d test r12d, r12d - jne SHORT G_M8165_IG13 + jne SHORT G_M8165_IG14 mov rcx, rsi ; gcrRegs +[rcx] call [Microsoft.CodeAnalysis.RealParser+FloatingPointType:get_OverflowDecimalExponent():int:this] @@ -276,7 +278,7 @@ G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 { mov edx, dword ptr [rsp+C4H] sub rdx, rax cmp rcx, rdx - jge SHORT G_M8165_IG13 + jge SHORT G_M8165_IG14 mov rcx, rsi ; gcrRegs +[rcx] mov rax, qword ptr [rsi] @@ -287,7 +289,7 @@ G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 { mov qword ptr [rdi], rax mov eax, 2 ;; size=82 bbWeight=0.50 PerfScore 9.50 -G_M8165_IG12: ; bbWeight=0.50, epilog, nogc, extend +G_M8165_IG13: ; bbWeight=0.50, epilog, nogc, extend add rsp, 232 pop rbx pop rbp @@ -299,7 +301,7 @@ G_M8165_IG12: ; bbWeight=0.50, epilog, nogc, extend pop r15 ret ;; size=20 bbWeight=0.50 PerfScore 2.62 -G_M8165_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref +G_M8165_IG14: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref ; gcrRegs +[rbx rsi] mov gword ptr [rsp+50H], rbx mov dword ptr [rsp+58H], ebp @@ -311,29 +313,29 @@ G_M8165_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 ; gcrRegs -[rbx] ; gcr arg pop 0 test byte ptr [(reloc)], 1 ; global ptr - je G_M8165_IG40 + je G_M8165_IG42 ;; size=52 bbWeight=0.50 PerfScore 5.62 -G_M8165_IG14: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref +G_M8165_IG15: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref mov rcx, 0xD1FFAB1E ; box for : mov rcx, gword ptr [rcx] ; gcrRegs +[rcx] ;; size=13 bbWeight=0.50 PerfScore 1.12 -G_M8165_IG15: ; bbWeight=0.50, nogc, extend +G_M8165_IG16: ; bbWeight=0.50, nogc, extend vmovdqu xmm0, xmmword ptr [rcx+08H] vmovdqu xmmword ptr [rsp+A0H], xmm0 ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M8165_IG16: ; bbWeight=0.50, extend +G_M8165_IG17: ; bbWeight=0.50, extend lea rcx, [rsp+A0H] ; gcrRegs -[rcx] mov edx, dword ptr [rsp+C4H] call [Microsoft.CodeAnalysis.RealParser:MultiplyByPowerOfTen(byref,uint)] ; gcr arg pop 0 ;; size=21 bbWeight=0.50 PerfScore 2.25 -G_M8165_IG17: ; bbWeight=0.50, nogc, extend +G_M8165_IG18: ; bbWeight=0.50, nogc, extend vmovdqu xmm0, xmmword ptr [rsp+B0H] vmovdqu xmmword ptr [rsp+40H], xmm0 ;; size=15 bbWeight=0.50 PerfScore 2.00 -G_M8165_IG18: ; bbWeight=0.50, extend +G_M8165_IG19: ; bbWeight=0.50, extend lea rcx, [rsp+40H] lea rdx, [rsp+78H] call [Microsoft.CodeAnalysis.RealParser:CountSignificantBits(System.Numerics.BigInteger,byref):uint] @@ -343,11 +345,11 @@ G_M8165_IG18: ; bbWeight=0.50, extend ... ```
+7 (+0.63%) : 177428.dasm - Microsoft.CodeAnalysis.RealParser:ConvertDecimalToFloatingPointBits(Microsoft.CodeAnalysis.RealParser+DecimalFloatingPointString,Microsoft.CodeAnalysis.RealParser+FloatingPointType,byref):int (FullOpts)
```diff @@ -11,46 +11,46 @@ ; V00 arg0 [V00,T01] ( 4, 8 ) byref -> rcx ld-addr-op single-def ; V01 arg1 [V01,T00] ( 14, 8 ) ref -> rsi class-hnd single-def ; V02 arg2 [V02,T02] ( 7, 4.50) byref -> rdi single-def -; V03 loc0 [V03,T20] ( 3, 1.50) int -> r15 single-def +; V03 loc0 [V03,T21] ( 3, 1.50) int -> r15 single-def ;* V04 loc1 [V04 ] ( 0, 0 ) int -> zero-ref single-def -; V05 loc2 [V05,T14] ( 4, 2 ) int -> r12 single-def +; V05 loc2 [V05,T13] ( 4, 2 ) int -> r12 single-def ;* V06 loc3 [V06 ] ( 0, 0 ) int -> zero-ref single-def ;* V07 loc4 [V07 ] ( 0, 0 ) int -> zero-ref single-def -; V08 loc5 [V08,T15] ( 4, 2 ) int -> r13 single-def -; V09 loc6 [V09,T21] ( 3, 1.50) int -> [rsp+E4H] spill-single-def -; V10 loc7 [V10,T13] ( 5, 2.50) int -> [rsp+E0H] spill-single-def +; V08 loc5 [V08,T14] ( 4, 2 ) int -> r13 single-def +; V09 loc6 [V09,T22] ( 3, 1.50) int -> [rsp+E4H] spill-single-def +; V10 loc7 [V10,T12] ( 5, 2.50) int -> [rsp+E0H] spill-single-def ; V11 loc8 [V11 ] ( 4, 2 ) struct (16) [rsp+D0H] do-not-enreg[XS] must-init addr-exposed ld-addr-op ; V12 loc9 [V12 ] ( 2, 1 ) ref -> [rsp+C8H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ; V13 loc10 [V13,T03] ( 8, 4 ) int -> r12 single-def -; V14 loc11 [V14,T22] ( 3, 1.50) int -> [rsp+C4H] spill-single-def +; V14 loc11 [V14,T23] ( 3, 1.50) int -> [rsp+C4H] spill-single-def ; V15 loc12 [V15 ] ( 6, 3 ) struct (16) [rsp+B0H] do-not-enreg[XS] must-init addr-exposed ld-addr-op ; V16 loc13 [V16 ] ( 5, 2.50) struct (16) [rsp+A0H] do-not-enreg[XS] must-init addr-exposed ld-addr-op -; V17 loc14 [V17,T23] ( 3, 1.50) int -> rbx single-def -; V18 loc15 [V18,T24] ( 3, 1.50) int -> rax single-def +; V17 loc14 [V17,T24] ( 3, 1.50) int -> rbx single-def +; V18 loc15 [V18,T25] ( 3, 1.50) int -> rax single-def ; V19 loc16 [V19,T06] ( 7, 3.50) int -> rbp single-def ; V20 loc17 [V20,T07] ( 7, 3.50) int -> r15 single-def -; V21 loc18 [V21,T25] ( 3, 1.50) int -> rbx +; V21 loc18 [V21,T26] ( 3, 1.50) int -> rbx ; V22 loc19 [V22,T32] ( 2, 1 ) int -> r14 single-def ; V23 loc20 [V23 ] ( 2, 1 ) struct (16) [rsp+90H] do-not-enreg[XS] must-init addr-exposed ld-addr-op ; V24 loc21 [V24,T09] ( 6, 3 ) long -> rbx -; V25 loc22 [V25,T16] ( 4, 2 ) bool -> rbp -; V26 loc23 [V26,T26] ( 3, 1.50) int -> rax single-def +; V25 loc22 [V25,T15] ( 4, 2 ) bool -> rbp +; V26 loc23 [V26,T27] ( 3, 1.50) int -> rax single-def ; V27 loc24 [V27,T33] ( 2, 1 ) long -> rdx single-def ;* V28 loc25 [V28 ] ( 0, 0 ) int -> zero-ref -; V29 loc26 [V29,T27] ( 3, 1.50) int -> rax single-def +; V29 loc26 [V29,T28] ( 3, 1.50) int -> rax single-def ; V30 OutArgs [V30 ] ( 1, 1 ) struct (40) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V31 tmp1 [V31,T05] ( 4, 4 ) int -> r12 "dup spill" ; V32 tmp2 [V32,T34] ( 2, 1 ) int -> r8 -; V33 tmp3 [V33,T28] ( 3, 1.50) int -> rbp +; V33 tmp3 [V33,T29] ( 3, 1.50) int -> rbp ; V34 tmp4 [V34,T35] ( 2, 1 ) int -> r14 ; V35 tmp5 [V35 ] ( 2, 2 ) struct (16) [rsp+80H] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" -; V36 tmp6 [V36,T29] ( 3, 1.50) int -> r8 -; V37 tmp7 [V37,T30] ( 3, 1.50) int -> rcx +; V36 tmp6 [V36,T30] ( 3, 1.50) int -> r8 +; V37 tmp7 [V37,T31] ( 3, 1.50) int -> rcx ;* V38 tmp8 [V38 ] ( 0, 0 ) long -> zero-ref "impAppendStmt" ; V39 tmp9 [V39,T36] ( 2, 1 ) int -> r12 "Inline return value spill temp" ; V40 tmp10 [V40,T18] ( 2, 2 ) int -> rdx "Inlining Arg" -; V41 tmp11 [V41,T31] ( 3, 1.50) int -> r13 "Inline return value spill temp" -; V42 tmp12 [V42,T11] ( 3, 3 ) int -> rdx "Inlining Arg" +; V41 tmp11 [V41,T20] ( 4, 1.50) int -> r13 "Inline return value spill temp" +; V42 tmp12 [V42,T16] ( 3, 2 ) int -> r13 "Inlining Arg" ; V43 tmp13 [V43,T37] ( 2, 1 ) int -> rbx single-def "Inline return value spill temp" ;* V44 tmp14 [V44 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ; V45 tmp15 [V45 ] ( 2, 1 ) ref -> [rsp+78H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" @@ -59,7 +59,7 @@ ; V48 tmp18 [V48 ] ( 2, 1 ) ref -> [rsp+70H] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" ; V49 tmp19 [V49 ] ( 2, 2 ) struct (16) [rsp+60H] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" ;* V50 tmp20 [V50 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -; V51 tmp21 [V51,T12] ( 3, 3 ) int -> rax "Single return block return value" +; V51 tmp21 [V51,T11] ( 3, 3 ) int -> rax "Single return block return value" ; V52 tmp22 [V52,T10] ( 4, 3 ) ref -> rbx single-def "field V00.Mantissa (fldOffset=0x0)" P-INDEP ; V53 tmp23 [V53,T04] ( 7, 4 ) int -> rbp single-def "field V00.Exponent (fldOffset=0x8)" P-INDEP ; V54 tmp24 [V54 ] ( 4, 2 ) ref -> [rsp+D0H] do-not-enreg[X] addr-exposed "field V11._bits (fldOffset=0x0)" P-DEP @@ -147,7 +147,7 @@ G_M8165_IG04: ; bbWeight=0.50, epilog, nogc, extend pop r15 ret ;; size=20 bbWeight=0.50 PerfScore 2.62 -G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref, isz +G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref ; gcrRegs +[rbx rsi] mov rcx, rsi ; gcrRegs +[rcx] @@ -163,10 +163,12 @@ G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 xor r12d, r12d test edx, edx cmovg r12d, ebp - mov edx, r14d - cmp r12d, edx - mov r13d, edx - cmovbe r13d, r12d + mov r13d, r14d + cmp r12d, r13d + ja G_M8165_IG41 + mov r13d, r12d + ;; size=48 bbWeight=0.50 PerfScore 5.38 +G_M8165_IG06: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, isz sub r12d, r13d mov eax, r14d mov dword ptr [rsp+E4H], eax @@ -182,7 +184,7 @@ G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 call [Microsoft.CodeAnalysis.RealParser:AccumulateDecimalDigitsIntoBigInteger(Microsoft.CodeAnalysis.RealParser+DecimalFloatingPointString,uint,uint):System.Numerics.BigInteger] ; gcr arg pop 0 test r12d, r12d - je SHORT G_M8165_IG08 + je SHORT G_M8165_IG09 mov rcx, rsi ; gcrRegs +[rcx] call [Microsoft.CodeAnalysis.RealParser+FloatingPointType:get_OverflowDecimalExponent():int:this] @@ -191,7 +193,7 @@ G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 movsxd rcx, eax mov eax, r12d cmp rcx, rax - jge SHORT G_M8165_IG07 + jge SHORT G_M8165_IG08 mov rcx, rsi ; gcrRegs +[rcx] mov rax, qword ptr [rsi] @@ -201,8 +203,8 @@ G_M8165_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 ; gcr arg pop 0 mov qword ptr [rdi], rax mov eax, 3 - ;; size=153 bbWeight=0.50 PerfScore 17.12 -G_M8165_IG06: ; bbWeight=0.50, epilog, nogc, extend + ;; size=107 bbWeight=0.50 PerfScore 12.12 +G_M8165_IG07: ; bbWeight=0.50, epilog, nogc, extend add rsp, 232 pop rbx pop rbp @@ -214,30 +216,30 @@ G_M8165_IG06: ; bbWeight=0.50, epilog, nogc, extend pop r15 ret ;; size=20 bbWeight=0.50 PerfScore 2.62 -G_M8165_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref +G_M8165_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref ; gcrRegs +[rbx rsi] lea rcx, [rsp+D0H] mov edx, r12d call [Microsoft.CodeAnalysis.RealParser:MultiplyByPowerOfTen(byref,uint)] ; gcr arg pop 0 ;; size=17 bbWeight=0.50 PerfScore 1.88 -G_M8165_IG08: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, nogc +G_M8165_IG09: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, nogc vmovdqu xmm0, xmmword ptr [rsp+D0H] vmovdqu xmmword ptr [rsp+40H], xmm0 ;; size=15 bbWeight=0.50 PerfScore 2.00 -G_M8165_IG09: ; bbWeight=0.50, isz, extend +G_M8165_IG10: ; bbWeight=0.50, isz, extend lea rcx, [rsp+40H] lea rdx, [rsp+C8H] call [Microsoft.CodeAnalysis.RealParser:CountSignificantBits(System.Numerics.BigInteger,byref):uint] ; gcr arg pop 0 mov r12d, eax cmp r12d, r15d - jae SHORT G_M8165_IG10 + jae SHORT G_M8165_IG11 mov eax, dword ptr [rsp+E0H] test eax, eax - jne SHORT G_M8165_IG11 + jne SHORT G_M8165_IG12 ;; size=38 bbWeight=0.50 PerfScore 3.88 -G_M8165_IG10: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref +G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref ; gcrRegs -[rbx] mov bword ptr [rsp+20H], rdi ; byr arg write @@ -253,9 +255,9 @@ G_M8165_IG10: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi} ; gcrRegs -[rcx rsi r9] ; byrRegs -[rdi] ; gcr arg pop 0 - jmp G_M8165_IG38 + jmp G_M8165_IG39 ;; size=45 bbWeight=0.50 PerfScore 5.38 -G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, isz +G_M8165_IG12: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, byref, isz ; gcrRegs +[rbx rsi] ; byrRegs +[rdi] mov edx, dword ptr [rsp+E0H] @@ -265,7 +267,7 @@ G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 { cmovge r8d, edx mov dword ptr [rsp+C4H], r8d test r12d, r12d - jne SHORT G_M8165_IG13 + jne SHORT G_M8165_IG14 mov rcx, rsi ; gcrRegs +[rcx] call [Microsoft.CodeAnalysis.RealParser+FloatingPointType:get_OverflowDecimalExponent():int:this] @@ -276,7 +278,7 @@ G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 { mov edx, dword ptr [rsp+C4H] sub rdx, rax cmp rcx, rdx - jge SHORT G_M8165_IG13 + jge SHORT G_M8165_IG14 mov rcx, rsi ; gcrRegs +[rcx] mov rax, qword ptr [rsi] @@ -287,7 +289,7 @@ G_M8165_IG11: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 { mov qword ptr [rdi], rax mov eax, 2 ;; size=82 bbWeight=0.50 PerfScore 9.50 -G_M8165_IG12: ; bbWeight=0.50, epilog, nogc, extend +G_M8165_IG13: ; bbWeight=0.50, epilog, nogc, extend add rsp, 232 pop rbx pop rbp @@ -299,7 +301,7 @@ G_M8165_IG12: ; bbWeight=0.50, epilog, nogc, extend pop r15 ret ;; size=20 bbWeight=0.50 PerfScore 2.62 -G_M8165_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref +G_M8165_IG14: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 {rbx rsi}, byrefRegs=0080 {rdi}, gcvars, byref ; gcrRegs +[rbx rsi] mov gword ptr [rsp+50H], rbx mov dword ptr [rsp+58H], ebp @@ -311,29 +313,29 @@ G_M8165_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0048 ; gcrRegs -[rbx] ; gcr arg pop 0 test byte ptr [(reloc)], 1 ; global ptr - je G_M8165_IG40 + je G_M8165_IG42 ;; size=52 bbWeight=0.50 PerfScore 5.62 -G_M8165_IG14: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref +G_M8165_IG15: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref mov rcx, 0xD1FFAB1E ; box for : mov rcx, gword ptr [rcx] ; gcrRegs +[rcx] ;; size=13 bbWeight=0.50 PerfScore 1.12 -G_M8165_IG15: ; bbWeight=0.50, nogc, extend +G_M8165_IG16: ; bbWeight=0.50, nogc, extend vmovdqu xmm0, xmmword ptr [rcx+08H] vmovdqu xmmword ptr [rsp+A0H], xmm0 ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M8165_IG16: ; bbWeight=0.50, extend +G_M8165_IG17: ; bbWeight=0.50, extend lea rcx, [rsp+A0H] ; gcrRegs -[rcx] mov edx, dword ptr [rsp+C4H] call [Microsoft.CodeAnalysis.RealParser:MultiplyByPowerOfTen(byref,uint)] ; gcr arg pop 0 ;; size=21 bbWeight=0.50 PerfScore 2.25 -G_M8165_IG17: ; bbWeight=0.50, nogc, extend +G_M8165_IG18: ; bbWeight=0.50, nogc, extend vmovdqu xmm0, xmmword ptr [rsp+B0H] vmovdqu xmmword ptr [rsp+40H], xmm0 ;; size=15 bbWeight=0.50 PerfScore 2.00 -G_M8165_IG18: ; bbWeight=0.50, extend +G_M8165_IG19: ; bbWeight=0.50, extend lea rcx, [rsp+40H] lea rdx, [rsp+78H] call [Microsoft.CodeAnalysis.RealParser:CountSignificantBits(System.Numerics.BigInteger,byref):uint] @@ -343,11 +345,11 @@ G_M8165_IG18: ; bbWeight=0.50, extend ... ```
+7 (+2.88%) : 257823.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
```diff @@ -9,17 +9,17 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 10 ) byref -> rsi this single-def -; V01 arg1 [V01,T06] ( 3, 3 ) int -> rdx single-def +; V01 arg1 [V01,T05] ( 3, 3 ) int -> rdx single-def ;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref -; V03 loc1 [V03,T05] ( 5, 5 ) ref -> rdi class-hnd single-def +; V03 loc1 [V03,T04] ( 5, 5 ) ref -> rdi class-hnd single-def ; V04 loc2 [V04,T12] ( 3, 2.50) ref -> r14 class-hnd single-def ;* V05 loc3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op ; V06 loc4 [V06,T07] ( 5, 4 ) ref -> rdi class-hnd single-def ; V07 OutArgs [V07 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V08 tmp1 [V08,T03] ( 3, 6 ) int -> rdx "impAppendStmt" ;* V09 tmp2 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V10 tmp3 [V10,T11] ( 3, 3 ) int -> rcx "Inline return value spill temp" -; V11 tmp4 [V11,T04] ( 3, 6 ) int -> rcx "Inlining Arg" +; V10 tmp3 [V10,T11] ( 4, 2.50) int -> rax "Inline return value spill temp" +; V11 tmp4 [V11,T06] ( 3, 5 ) int -> rax "Inlining Arg" ; V12 tmp5 [V12,T18] ( 2, 2 ) int -> rdx "Inline return value spill temp" ; V13 tmp6 [V13,T01] ( 4, 8 ) int -> rbx "Inlining Arg" ; V14 tmp7 [V14,T02] ( 3, 6 ) byref -> rcx single-def "Inlining Arg" @@ -60,15 +60,16 @@ G_M51876_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov rsi, rcx ; byrRegs +[rsi] ;; size=15 bbWeight=1 PerfScore 6.50 -G_M51876_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref, isz +G_M51876_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref add edx, dword ptr [rsi+08H] - mov ecx, dword ptr [rsi+18H] - add ecx, ecx - mov eax, 0xD1FFAB1E - cmp ecx, 0xD1FFAB1E - cmova ecx, eax - cmp edx, ecx - cmovb edx, ecx + mov eax, dword ptr [rsi+18H] + add eax, eax + cmp eax, 0xD1FFAB1E + ja G_M51876_IG12 + ;; size=19 bbWeight=1 PerfScore 6.50 +G_M51876_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref, isz + cmp edx, eax + cmovb edx, eax mov rcx, 0xD1FFAB1E ; const ptr mov rcx, gword ptr [rcx] ; gcrRegs +[rcx] @@ -81,13 +82,13 @@ G_M51876_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byr ; byrRegs +[rcx] mov ebx, dword ptr [rsi+08H] cmp ebx, dword ptr [rcx+08H] - ja G_M51876_IG11 + ja G_M51876_IG13 mov rbp, bword ptr [rcx] ; byrRegs +[rbp] test ebx, ebx - jge SHORT G_M51876_IG04 - ;; size=72 bbWeight=1 PerfScore 21.75 -G_M51876_IG03: ; bbWeight=0.50, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp rsi}, byref + jge SHORT G_M51876_IG05 + ;; size=50 bbWeight=1 PerfScore 15.75 +G_M51876_IG04: ; bbWeight=0.50, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp rsi}, byref ; gcrRegs -[rax] ; byrRegs -[rcx] mov rdx, 0xD1FFAB1E @@ -98,19 +99,19 @@ G_M51876_IG03: ; bbWeight=0.50, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp ; gcrRegs -[rcx rdx] ; gcr arg pop 0 ;; size=19 bbWeight=0.50 PerfScore 1.75 -G_M51876_IG04: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp rsi}, byref, isz +G_M51876_IG05: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp rsi}, byref, isz mov rdx, rbp ; byrRegs +[rdx] test rdi, rdi - je SHORT G_M51876_IG12 + je SHORT G_M51876_IG14 lea rcx, bword ptr [rdi+10H] ; byrRegs +[rcx] mov ebp, dword ptr [rdi+08H] ; byrRegs -[rbp] cmp ebx, ebp - ja SHORT G_M51876_IG13 + ja SHORT G_M51876_IG15 ;; size=19 bbWeight=1 PerfScore 5.25 -G_M51876_IG05: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0046 {rcx rdx rsi}, byref, isz +G_M51876_IG06: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0046 {rcx rdx rsi}, byref, isz mov r8d, ebx add r8, r8 call [] @@ -126,21 +127,21 @@ G_M51876_IG05: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0046 {rcx rd ; gcrRegs -[rdx] ; byrRegs -[rcx] test rdi, rdi - je SHORT G_M51876_IG14 + je SHORT G_M51876_IG16 ;; size=31 bbWeight=1 PerfScore 8.25 -G_M51876_IG06: ; bbWeight=0.50, gcrefRegs=4080 {rdi r14}, byrefRegs=0040 {rsi}, byref +G_M51876_IG07: ; bbWeight=0.50, gcrefRegs=4080 {rdi r14}, byrefRegs=0040 {rsi}, byref lea r15, bword ptr [rdi+10H] ; byrRegs +[r15] mov edi, dword ptr [rdi+08H] ; gcrRegs -[rdi] ;; size=7 bbWeight=0.50 PerfScore 1.25 -G_M51876_IG07: ; bbWeight=1, gcrefRegs=4000 {r14}, byrefRegs=8040 {rsi r15}, byref, isz +G_M51876_IG08: ; bbWeight=1, gcrefRegs=4000 {r14}, byrefRegs=8040 {rsi r15}, byref, isz mov bword ptr [rsi+10H], r15 mov dword ptr [rsi+18H], edi test r14, r14 - je SHORT G_M51876_IG09 + je SHORT G_M51876_IG10 ;; size=12 bbWeight=1 PerfScore 3.25 -G_M51876_IG08: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref +G_M51876_IG09: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref ; byrRegs -[rsi r15] mov rcx, 0xD1FFAB1E ; const ptr mov rcx, gword ptr [rcx] @@ -152,10 +153,10 @@ G_M51876_IG08: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, ; gcrRegs -[rcx rdx r14] ; gcr arg pop 0 ;; size=25 bbWeight=0.50 PerfScore 2.88 -G_M51876_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref +G_M51876_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref nop ;; size=1 bbWeight=1 PerfScore 0.25 -G_M51876_IG10: ; bbWeight=1, epilog, nogc, extend +G_M51876_IG11: ; bbWeight=1, epilog, nogc, extend add rsp, 40 pop rbx pop rbp @@ -165,37 +166,43 @@ G_M51876_IG10: ; bbWeight=1, epilog, nogc, extend pop r15 ret ;; size=13 bbWeight=1 PerfScore 4.25 -G_M51876_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref +G_M51876_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, gcvars, byref + ; byrRegs +[rsi] + mov eax, 0xD1FFAB1E + jmp G_M51876_IG03 + ;; size=10 bbWeight=0 PerfScore 0.00 +G_M51876_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; byrRegs -[rsi] call [System.ThrowHelper:ThrowArgumentOutOfRangeException()] ; gcr arg pop 0 int3 ;; size=7 bbWeight=0 PerfScore 0.00 -G_M51876_IG12: ; bbWeight=0, gcrefRegs=0080 {rdi}, byrefRegs=0044 {rdx rsi}, byref, isz +G_M51876_IG14: ; bbWeight=0, gcrefRegs=0080 {rdi}, byrefRegs=0044 {rdx rsi}, byref, isz ; gcrRegs +[rdi] ; byrRegs +[rdx rsi] xor rcx, rcx ; byrRegs +[rcx] xor ebp, ebp cmp ebx, ebp - jbe SHORT G_M51876_IG05 + jbe SHORT G_M51876_IG06 ;; size=8 bbWeight=0 PerfScore 0.00 -G_M51876_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref +G_M51876_IG15: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[rdi] ; byrRegs -[rcx rdx rsi] call [System.ThrowHelper:ThrowArgumentException_DestinationTooShort()] ; gcr arg pop 0 int3 ;; size=7 bbWeight=0 PerfScore 0.00 -G_M51876_IG14: ; bbWeight=0, gcrefRegs=4000 {r14}, byrefRegs=0040 {rsi}, byref, isz +G_M51876_IG16: ; bbWeight=0, gcrefRegs=4000 {r14}, byrefRegs=0040 {rsi}, byref, isz ; gcrRegs +[r14] ; byrRegs +[rsi] xor r15, r15 ; byrRegs +[r15] xor edi, edi - jmp SHORT G_M51876_IG07 + jmp SHORT G_M51876_IG08 ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 243, prolog size 12, PerfScore 79.68, instruction count 77, allocated bytes for code 243 (MethodHash=7caf355b) for method System.Text.ValueStringBuilder:Grow(int):this (FullOpts) +; Total bytes of code 250, prolog size 12, PerfScore 80.88, instruction count 78, allocated bytes for code 250 (MethodHash=7caf355b) for method System.Text.ValueStringBuilder:Grow(int):this (FullOpts) ; ============================================================ Unwind Info: ```
+5 (+26.32%) : 145114.dasm - Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts)
```diff @@ -12,27 +12,36 @@ ; V01 arg1 [V01,T00] ( 3, 3 ) ref -> rdx class-hnd single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" -; V04 tmp2 [V04,T01] ( 2, 2 ) bool -> rax "Inline return value spill temp" +; V04 tmp2 [V04,T01] ( 3, 1.50) bool -> rdx "Inline return value spill temp" ;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd "Inlining Arg" ; ; Lcl frame size = 0 G_M16435_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M16435_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref +G_M16435_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rdx] - xor eax, eax cmp gword ptr [rdx+10H], 0 + je SHORT G_M16435_IG06 + ;; size=7 bbWeight=1 PerfScore 4.00 +G_M16435_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[rdx] + xor edx, edx + ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M16435_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + xor eax, eax + test edx, edx sete al - test eax, eax - sete al - movzx rax, al - ;; size=18 bbWeight=1 PerfScore 5.75 -G_M16435_IG03: ; bbWeight=1, epilog, nogc, extend + ;; size=7 bbWeight=1 PerfScore 1.50 +G_M16435_IG05: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M16435_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz + mov edx, 1 + jmp SHORT G_M16435_IG04 + ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 19, prolog size 0, PerfScore 8.65, instruction count 7, allocated bytes for code 19 (MethodHash=63ccbfcc) for method Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts) +; Total bytes of code 24, prolog size 0, PerfScore 9.03, instruction count 9, allocated bytes for code 24 (MethodHash=63ccbfcc) for method Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts) ; ============================================================ Unwind Info: ```
+5 (+26.32%) : 189536.dasm - Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts)
```diff @@ -12,27 +12,36 @@ ; V01 arg1 [V01,T00] ( 3, 3 ) ref -> rdx class-hnd single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" -; V04 tmp2 [V04,T01] ( 2, 2 ) bool -> rax "Inline return value spill temp" +; V04 tmp2 [V04,T01] ( 3, 1.50) bool -> rdx "Inline return value spill temp" ;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd "Inlining Arg" ; ; Lcl frame size = 0 G_M16435_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG ;; size=0 bbWeight=1 PerfScore 0.00 -G_M16435_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref +G_M16435_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rdx] - xor eax, eax cmp gword ptr [rdx+10H], 0 + je SHORT G_M16435_IG06 + ;; size=7 bbWeight=1 PerfScore 4.00 +G_M16435_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[rdx] + xor edx, edx + ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M16435_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + xor eax, eax + test edx, edx sete al - test eax, eax - sete al - movzx rax, al - ;; size=18 bbWeight=1 PerfScore 5.75 -G_M16435_IG03: ; bbWeight=1, epilog, nogc, extend + ;; size=7 bbWeight=1 PerfScore 1.50 +G_M16435_IG05: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 +G_M16435_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz + mov edx, 1 + jmp SHORT G_M16435_IG04 + ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 19, prolog size 0, PerfScore 8.65, instruction count 7, allocated bytes for code 19 (MethodHash=63ccbfcc) for method Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts) +; Total bytes of code 24, prolog size 0, PerfScore 9.03, instruction count 9, allocated bytes for code 24 (MethodHash=63ccbfcc) for method Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts) ; ============================================================ Unwind Info: ```
libraries_tests.pmi.windows.x64.checked.mch
+0 (0.00%) : 190150.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
```diff @@ -74,20 +74,20 @@ ; V63 tmp59 [V63,T49] ( 3, 2.25) ref -> rdx single-def "CASTCLASS eval op1" ; V64 tmp60 [V64,T64] ( 3, 2.25) long -> rcx "fgMakeTemp is creating a new local variable" ; V65 tmp61 [V65,T20] ( 4, 3.25) ref -> rax class-hnd "spilling QMark2" -;* V66 tmp62 [V66,T67] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V67 tmp63 [V67,T68] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V68 tmp64 [V68,T69] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V69 tmp65 [V69,T70] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V70 tmp66 [V70,T71] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V71 tmp67 [V71,T72] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V72 tmp68 [V72,T73] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V73 tmp69 [V73,T74] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V74 tmp70 [V74,T75] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V75 tmp71 [V75,T76] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V76 tmp72 [V76,T77] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V77 tmp73 [V77,T78] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V78 tmp74 [V78,T79] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" -;* V79 tmp75 [V79,T80] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V66 tmp62 [V66,T74] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V67 tmp63 [V67,T67] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V68 tmp64 [V68,T75] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V69 tmp65 [V69,T68] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V70 tmp66 [V70,T76] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V71 tmp67 [V71,T69] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V72 tmp68 [V72,T77] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V73 tmp69 [V73,T70] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V74 tmp70 [V74,T78] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V75 tmp71 [V75,T71] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V76 tmp72 [V76,T79] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V77 tmp73 [V77,T72] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V78 tmp74 [V78,T80] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" +;* V79 tmp75 [V79,T73] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" ;* V80 tmp76 [V80,T81] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp" ; V81 cse0 [V81,T65] ( 3, 1.50) long -> rbx "CSE - conservative" ; V82 cse1 [V82,T03] ( 17, 8.25) long -> rdi "CSE - aggressive" @@ -108,12 +108,12 @@ G_M46962_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byr test rsi, rsi jne SHORT G_M46962_IG04 ;; size=5 bbWeight=1 PerfScore 1.25 -G_M46962_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref +G_M46962_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rsi] xor rax, rax ; gcrRegs +[rax] - jmp G_M46962_IG52 - ;; size=7 bbWeight=0.50 PerfScore 1.12 + jmp SHORT G_M46962_IG06 + ;; size=4 bbWeight=0.50 PerfScore 1.12 G_M46962_IG04: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] +[rsi] mov rdi, qword ptr [rcx+38H] @@ -125,7 +125,10 @@ G_M46962_IG04: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, mov rcx, 0xD1FFAB1E ; gcrRegs +[rcx] cmp rax, rcx - jne SHORT G_M46962_IG07 + je SHORT G_M46962_IG08 + mov rcx, 0xD1FFAB1E + cmp rax, rcx + jne SHORT G_M46962_IG11 mov rcx, 0xD1FFAB1E ; ; gcrRegs -[rcx] call CORINFO_HELP_NEWSFAST @@ -145,25 +148,28 @@ G_M46962_IG04: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, mov rcx, qword ptr [rdi] cmp qword ptr [rax], rcx je SHORT G_M46962_IG06 - ;; size=74 bbWeight=0.50 PerfScore 9.50 + ;; size=89 bbWeight=0.50 PerfScore 10.25 G_M46962_IG05: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ; gcrRegs -[rax rbx] call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 ;; size=6 bbWeight=0.12 PerfScore 0.38 -G_M46962_IG06: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - jmp G_M46962_IG52 - ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M46962_IG07: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[rsi] - mov rcx, 0xD1FFAB1E - ; gcrRegs +[rcx] - cmp rax, rcx - jne SHORT G_M46962_IG10 +G_M46962_IG06: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref + nop + ;; size=1 bbWeight=1 PerfScore 0.25 +G_M46962_IG07: ; bbWeight=1, epilog, nogc, extend + add rsp, 48 + pop rbx + pop rsi + pop rdi + ret + ;; size=8 bbWeight=1 PerfScore 2.75 +G_M46962_IG08: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[rax] +[rsi] mov rcx, 0xD1FFAB1E ; - ; gcrRegs -[rcx] call CORINFO_HELP_NEWSFAST + ; gcrRegs +[rax] ; gcr arg pop 0 mov rbx, rax ; gcrRegs +[rbx] @@ -179,58 +185,26 @@ G_M46962_IG07: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 ; gcrRegs +[rax] mov rcx, qword ptr [rdi] cmp qword ptr [rax], rcx - je SHORT G_M46962_IG09 - ;; size=59 bbWeight=0.50 PerfScore 6.88 -G_M46962_IG08: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref + je SHORT G_M46962_IG10 + ;; size=44 bbWeight=0.50 PerfScore 6.12 +G_M46962_IG09: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ; gcrRegs -[rax rbx] call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 ;; size=6 bbWeight=0.12 PerfScore 0.38 -G_M46962_IG09: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - jmp G_M46962_IG52 - ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M46962_IG10: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz +G_M46962_IG10: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M46962_IG06 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M46962_IG11: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rsi] mov rcx, 0xD1FFAB1E ; gcrRegs +[rcx] cmp rax, rcx - jne SHORT G_M46962_IG13 - mov rcx, 0xD1FFAB1E ; - ; gcrRegs -[rcx] - call CORINFO_HELP_NEWSFAST - ; gcr arg pop 0 - mov rbx, rax - ; gcrRegs +[rbx] - mov rcx, rsi - ; gcrRegs +[rcx] - call [] - ; gcrRegs -[rax rcx rsi] - ; gcr arg pop 0 - mov byte ptr [rbx+08H], al - mov rdx, rbx - ; gcrRegs +[rdx] - mov rax, rdx - ; gcrRegs +[rax] - mov rcx, qword ptr [rdi] - cmp qword ptr [rax], rcx - je SHORT G_M46962_IG12 - ;; size=59 bbWeight=0.50 PerfScore 6.88 -G_M46962_IG11: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax rbx] - call [CORINFO_HELP_CHKCASTANY] - ; gcrRegs -[rdx] +[rax] - ; gcr arg pop 0 - ;; size=6 bbWeight=0.12 PerfScore 0.38 -G_M46962_IG12: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - jmp G_M46962_IG52 - ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M46962_IG13: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[rsi] + je SHORT G_M46962_IG14 mov rcx, 0xD1FFAB1E - ; gcrRegs +[rcx] cmp rax, rcx - jne SHORT G_M46962_IG16 + jne SHORT G_M46962_IG17 mov rcx, 0xD1FFAB1E ; ; gcrRegs -[rcx] call CORINFO_HELP_NEWSFAST @@ -249,23 +223,57 @@ G_M46962_IG13: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 ; gcrRegs +[rax] mov rcx, qword ptr [rdi] cmp qword ptr [rax], rcx - je SHORT G_M46962_IG15 - ;; size=60 bbWeight=0.50 PerfScore 6.88 -G_M46962_IG14: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref + je SHORT G_M46962_IG13 + ;; size=75 bbWeight=0.50 PerfScore 7.62 +G_M46962_IG12: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ; gcrRegs -[rax rbx] call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 ;; size=6 bbWeight=0.12 PerfScore 0.38 -G_M46962_IG15: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - jmp G_M46962_IG52 +G_M46962_IG13: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref + jmp G_M46962_IG06 ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M46962_IG16: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz +G_M46962_IG14: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] +[rsi] + mov rcx, 0xD1FFAB1E ; + call CORINFO_HELP_NEWSFAST + ; gcrRegs +[rax] + ; gcr arg pop 0 + mov rbx, rax + ; gcrRegs +[rbx] + mov rcx, rsi + ; gcrRegs +[rcx] + call [] + ; gcrRegs -[rax rcx rsi] + ; gcr arg pop 0 + mov byte ptr [rbx+08H], al + mov rdx, rbx + ; gcrRegs +[rdx] + mov rax, rdx + ; gcrRegs +[rax] + mov rcx, qword ptr [rdi] + cmp qword ptr [rax], rcx + je SHORT G_M46962_IG16 + ;; size=44 bbWeight=0.50 PerfScore 6.12 +G_M46962_IG15: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax rbx] + call [CORINFO_HELP_CHKCASTANY] + ; gcrRegs -[rdx] +[rax] + ; gcr arg pop 0 + ;; size=6 bbWeight=0.12 PerfScore 0.38 +G_M46962_IG16: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref + jmp G_M46962_IG06 + ;; size=5 bbWeight=0.50 PerfScore 1.00 +G_M46962_IG17: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rsi] mov rcx, 0xD1FFAB1E ; gcrRegs +[rcx] cmp rax, rcx - jne SHORT G_M46962_IG19 + je SHORT G_M46962_IG20 + mov rcx, 0xD1FFAB1E + cmp rax, rcx + jne SHORT G_M46962_IG23 mov rcx, 0xD1FFAB1E ; ; gcrRegs -[rcx] call CORINFO_HELP_NEWSFAST @@ -277,6 +285,37 @@ G_M46962_IG16: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 call [] ; gcrRegs -[rax rcx rsi] ; gcr arg pop 0 + mov dword ptr [rbx+08H], eax + mov rdx, rbx + ; gcrRegs +[rdx] + mov rax, rdx + ; gcrRegs +[rax] + mov rcx, qword ptr [rdi] + cmp qword ptr [rax], rcx + je SHORT G_M46962_IG19 + ;; size=74 bbWeight=0.50 PerfScore 7.62 +G_M46962_IG18: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ... ```
+0 (0.00%) : 195702.dasm - Microsoft.Diagnostics.Runtime.DacInterface.DacDataTargetWrapper:GetMetadata(long,System.String,uint,uint,long,uint,uint,uint,long,ulong):int:this (FullOpts)
```diff @@ -18,13 +18,13 @@ ;* V07 arg7 [V07 ] ( 0, 0 ) int -> zero-ref single-def ; V08 arg8 [V08,T16] ( 3, 1.50) int -> rbp single-def ; V09 arg9 [V09,T19] ( 2, 1.50) long -> r14 single-def -; V10 arg10 [V10,T21] ( 2, 1 ) long -> [rsp+C0H] single-def +; V10 arg10 [V10,T22] ( 2, 1 ) long -> [rsp+C0H] single-def ; V11 loc0 [V11,T15] ( 3, 1.50) ref -> rdi class-hnd single-def -; V12 loc1 [V12,T12] ( 4, 2 ) ref -> rsi class-hnd single-def -; V13 loc2 [V13,T13] ( 4, 2 ) int -> rdi +; V12 loc1 [V12,T11] ( 4, 2 ) ref -> rsi class-hnd single-def +; V13 loc2 [V13,T12] ( 4, 2 ) int -> rdi ; V14 loc3 [V14,T17] ( 3, 1.50) int -> rbx ;* V15 loc4 [V15 ] ( 0, 0 ) struct ( 8) zero-ref -; V16 loc5 [V16,T22] ( 2, 1 ) int -> rax single-def +; V16 loc5 [V16,T23] ( 2, 1 ) int -> rax single-def ; V17 OutArgs [V17 ] ( 1, 1 ) struct (40) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V18 tmp1 [V18,T04] ( 4, 4 ) ref -> r15 class-hnd single-def "Inlining Arg" ; V19 tmp2 [V19,T07] ( 3, 3 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp" @@ -35,10 +35,10 @@ ; V24 tmp7 [V24,T05] ( 4, 3 ) ref -> rcx class-hnd single-def "Inlining Arg" ; V25 tmp8 [V25,T14] ( 4, 1.50) ref -> rax class-hnd "Inline return value spill temp" ; V26 tmp9 [V26,T06] ( 4, 3 ) ref -> rcx class-hnd single-def "Inlining Arg" -; V27 tmp10 [V27,T23] ( 2, 1 ) int -> rbx "Inline return value spill temp" -; V28 tmp11 [V28,T11] ( 3, 3 ) int -> rax "Inlining Arg" +; V27 tmp10 [V27,T21] ( 3, 1 ) int -> rbx "Inline return value spill temp" +; V28 tmp11 [V28,T13] ( 3, 2 ) int -> rbx "Inlining Arg" ; V29 tmp12 [V29,T18] ( 3, 1.50) int -> rdi single-def "field V15.VirtualAddress (fldOffset=0x0)" P-INDEP -; V30 tmp13 [V30,T24] ( 2, 1 ) int -> rax single-def "field V15.Size (fldOffset=0x4)" P-INDEP +; V30 tmp13 [V30,T24] ( 2, 1 ) int -> rbx single-def "field V15.Size (fldOffset=0x4)" P-INDEP ; V31 tmp14 [V31,T09] ( 3, 3 ) ref -> rcx single-def "argument with side effect" ; V32 tmp15 [V32,T10] ( 3, 3 ) byref -> rax single-def "BlockOp address local" ; @@ -187,20 +187,20 @@ G_M23269_IG10: ; bbWeight=0.48, gcrefRegs=0042 {rcx rsi}, byrefRegs=0000 G_M23269_IG11: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rcx] cmp dword ptr [rax+08H], 14 - jbe SHORT G_M23269_IG20 + jbe SHORT G_M23269_IG21 add rax, 128 ; gcrRegs -[rax] ; byrRegs +[rax] mov edi, dword ptr [rax] - mov eax, dword ptr [rax+04H] - ; byrRegs -[rax] + mov ebx, dword ptr [rax+04H] test edi, edi je SHORT G_M23269_IG17 - cmp ebp, eax - cmova ebp, eax + cmp ebp, ebx + ja SHORT G_M23269_IG20 mov ebx, ebp - ;; size=28 bbWeight=0.50 PerfScore 5.12 + ;; size=27 bbWeight=0.50 PerfScore 5.50 G_M23269_IG12: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz + ; byrRegs -[rax] test edi, edi jl SHORT G_M23269_IG19 mov r8d, edi @@ -213,10 +213,10 @@ G_M23269_IG12: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, call [Microsoft.Diagnostics.Runtime.Utilities.PEImage:Read(long,int,int):int:this] ; gcrRegs -[rcx rsi] ; gcr arg pop 0 - mov rsi, qword ptr [rsp+C0H] - test rsi, rsi + mov rbx, qword ptr [rsp+C0H] + test rbx, rbx je SHORT G_M23269_IG13 - mov dword ptr [rsi], eax + mov dword ptr [rbx], eax ;; size=41 bbWeight=0.50 PerfScore 4.88 G_M23269_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref xor eax, eax @@ -264,15 +264,19 @@ G_M23269_IG18: ; bbWeight=0.50, epilog, nogc, extend G_M23269_IG19: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref call CORINFO_HELP_OVERFLOW ; gcr arg pop 0 - int3 - ;; size=6 bbWeight=0 PerfScore 0.00 -G_M23269_IG20: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ;; size=5 bbWeight=0 PerfScore 0.00 +G_M23269_IG20: ; bbWeight=0, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[rsi] + jmp SHORT G_M23269_IG12 + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M23269_IG21: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[rsi] call CORINFO_HELP_RNGCHKFAIL ; gcr arg pop 0 int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 418, prolog size 14, PerfScore 103.92, instruction count 129, allocated bytes for code 418 (MethodHash=09fba51a) for method Microsoft.Diagnostics.Runtime.DacInterface.DacDataTargetWrapper:GetMetadata(long,System.String,uint,uint,long,uint,uint,uint,long,ulong):int:this (FullOpts) +; Total bytes of code 418, prolog size 14, PerfScore 104.30, instruction count 129, allocated bytes for code 418 (MethodHash=09fba51a) for method Microsoft.Diagnostics.Runtime.DacInterface.DacDataTargetWrapper:GetMetadata(long,System.String,uint,uint,long,uint,uint,uint,long,ulong):int:this (FullOpts) ; ============================================================ Unwind Info: ```
+5 (+1.88%) : 74049.dasm - Microsoft.CodeAnalysis.Rename.ConflictResolution:.ctor(Microsoft.CodeAnalysis.Solution,Microsoft.CodeAnalysis.Solution,bool,System.ValueTuple`2[Microsoft.CodeAnalysis.DocumentId,System.String],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.DocumentId],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.Text.TextSpan,Microsoft.CodeAnalysis.Text.TextSpan]]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.ComplexifiedSpan]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation]]):this (FullOpts)
```diff @@ -21,15 +21,15 @@ ; V10 OutArgs [V10 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V11 tmp1 [V11 ] ( 0, 0 ) struct (24) zero-ref do-not-enreg[SF] ld-addr-op "NewObj constructor temp" ;* V12 tmp2 [V12 ] ( 0, 0 ) struct (16) zero-ref "location for address-of(RValue)" -; V13 tmp3 [V13,T17] ( 2, 1.50) byref -> rdx single-def -; V14 tmp4 [V14,T16] ( 2, 1 ) byref -> rax +; V13 tmp3 [V13,T17] ( 2, 1.50) byref -> rcx single-def +; V14 tmp4 [V14,T15] ( 2, 1 ) byref -> rax ; V15 tmp5 [V15,T08] ( 3, 2 ) ref -> rax ; V16 tmp6 [V16,T09] ( 2, 2 ) ref -> rcx class-hnd single-def "impAppendStmt" ;* V17 tmp7 [V17 ] ( 0, 0 ) struct (16) zero-ref "location for address-of(RValue)" ;* V18 tmp8 [V18 ] ( 0, 0 ) struct (16) zero-ref "location for address-of(RValue)" ; V19 tmp9 [V19,T02] ( 3, 6 ) byref -> rcx single-def "Inlining Arg" ;* V20 tmp10 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" -; V21 tmp11 [V21,T15] ( 2, 2 ) bool -> rcx "Inline return value spill temp" +; V21 tmp11 [V21,T16] ( 3, 1.50) bool -> rdi "Inline return value spill temp" ;* V22 tmp12 [V22 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd "Inlining Arg" ; V23 tmp13 [V23,T10] ( 2, 2 ) byref -> rdx single-def "Inlining Arg" ; V24 tmp14 [V24,T11] ( 2, 2 ) byref -> rbx single-def "Inlining Arg" @@ -144,23 +144,29 @@ G_M33771_IG02: ; bbWeight=1, gcrefRegs=0084 {rdx rdi}, byrefRegs=0060 {rb mov rcx, rbx ; byrRegs +[rcx] cmp byte ptr [rcx], 0 - je SHORT G_M33771_IG07 + je SHORT G_M33771_IG10 mov rcx, gword ptr [rcx+08H] ; gcrRegs +[rcx] ; byrRegs -[rcx] test rcx, rcx - sete cl + je SHORT G_M33771_IG09 + ;; size=172 bbWeight=1 PerfScore 35.50 +G_M33771_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0048 {rbx rsi}, byref ; gcrRegs -[rcx] - movzx rcx, cl - mov rdx, rsi - ; byrRegs +[rdx] - test ecx, ecx - jne SHORT G_M33771_IG04 - ;; size=183 bbWeight=1 PerfScore 37.25 -G_M33771_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=004C {rdx rbx rsi}, byref, isz - mov rcx, gword ptr [rdx+08H] + xor edi, edi + ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M33771_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0048 {rbx rsi}, byref, isz + mov rcx, rsi + ; byrRegs +[rcx] + test edi, edi + jne SHORT G_M33771_IG06 + ;; size=7 bbWeight=1 PerfScore 1.50 +G_M33771_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=004A {rcx rbx rsi}, byref, isz + mov rcx, gword ptr [rcx+08H] ; gcrRegs +[rcx] + ; byrRegs -[rcx] mov rdx, rbx + ; byrRegs +[rdx] mov rdx, gword ptr [rdx+08H] ; gcrRegs +[rdx] ; byrRegs -[rdx] @@ -171,9 +177,9 @@ G_M33771_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=004C {rdx rb ; gcrRegs -[rcx rdx r8] +[rax] ; byrRegs -[rbx] ; gcr arg pop 0 - jmp SHORT G_M33771_IG05 + jmp SHORT G_M33771_IG07 ;; size=25 bbWeight=0.50 PerfScore 7.12 -G_M33771_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref +G_M33771_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref ; gcrRegs -[rax] mov rax, rsi ; byrRegs +[rax] @@ -181,7 +187,7 @@ G_M33771_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, ; gcrRegs +[rax] ; byrRegs -[rax] ;; size=7 bbWeight=0.50 PerfScore 1.12 -G_M33771_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0040 {rsi}, byref +G_M33771_IG07: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0040 {rsi}, byref lea rcx, bword ptr [rsi+18H] ; byrRegs +[rcx] mov rdx, rax @@ -191,7 +197,7 @@ G_M33771_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0040 {rsi}, ; byrRegs -[rcx rsi] nop ;; size=13 bbWeight=1 PerfScore 2.00 -G_M33771_IG06: ; bbWeight=1, epilog, nogc, extend +G_M33771_IG08: ; bbWeight=1, epilog, nogc, extend add rsp, 40 pop rbx pop rbp @@ -199,13 +205,19 @@ G_M33771_IG06: ; bbWeight=1, epilog, nogc, extend pop rdi ret ;; size=9 bbWeight=1 PerfScore 3.25 -G_M33771_IG07: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref +G_M33771_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0048 {rbx rsi}, gcvars, byref, isz + ; byrRegs +[rbx rsi] + mov edi, 1 + jmp SHORT G_M33771_IG04 + ;; size=7 bbWeight=0 PerfScore 0.00 +G_M33771_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; byrRegs -[rbx rsi] call [System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_NoValue()] ; gcr arg pop 0 int3 ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 266, prolog size 8, PerfScore 83.35, instruction count 74, allocated bytes for code 266 (MethodHash=4ad97c14) for method Microsoft.CodeAnalysis.Rename.ConflictResolution:.ctor(Microsoft.CodeAnalysis.Solution,Microsoft.CodeAnalysis.Solution,bool,System.ValueTuple`2[Microsoft.CodeAnalysis.DocumentId,System.String],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.DocumentId],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.Text.TextSpan,Microsoft.CodeAnalysis.Text.TextSpan]]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.ComplexifiedSpan]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation]]):this (FullOpts) +; Total bytes of code 271, prolog size 8, PerfScore 83.73, instruction count 76, allocated bytes for code 271 (MethodHash=4ad97c14) for method Microsoft.CodeAnalysis.Rename.ConflictResolution:.ctor(Microsoft.CodeAnalysis.Solution,Microsoft.CodeAnalysis.Solution,bool,System.ValueTuple`2[Microsoft.CodeAnalysis.DocumentId,System.String],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.DocumentId],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.Text.TextSpan,Microsoft.CodeAnalysis.Text.TextSpan]]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.ComplexifiedSpan]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation]]):this (FullOpts) ; ============================================================ Unwind Info: ```
+7 (+2.88%) : 230847.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
```diff @@ -9,17 +9,17 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 10 ) byref -> rsi this single-def -; V01 arg1 [V01,T06] ( 3, 3 ) int -> rdx single-def +; V01 arg1 [V01,T05] ( 3, 3 ) int -> rdx single-def ;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref -; V03 loc1 [V03,T05] ( 5, 5 ) ref -> rdi class-hnd single-def +; V03 loc1 [V03,T04] ( 5, 5 ) ref -> rdi class-hnd single-def ; V04 loc2 [V04,T12] ( 3, 2.50) ref -> r14 class-hnd single-def ;* V05 loc3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op ; V06 loc4 [V06,T07] ( 5, 4 ) ref -> rdi class-hnd single-def ; V07 OutArgs [V07 ] ( 1, 1 ) struct (32) [rsp+00H] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V08 tmp1 [V08,T03] ( 3, 6 ) int -> rdx "impAppendStmt" ;* V09 tmp2 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V10 tmp3 [V10,T11] ( 3, 3 ) int -> rcx "Inline return value spill temp" -; V11 tmp4 [V11,T04] ( 3, 6 ) int -> rcx "Inlining Arg" +; V10 tmp3 [V10,T11] ( 4, 2.50) int -> rax "Inline return value spill temp" +; V11 tmp4 [V11,T06] ( 3, 5 ) int -> rax "Inlining Arg" ; V12 tmp5 [V12,T18] ( 2, 2 ) int -> rdx "Inline return value spill temp" ; V13 tmp6 [V13,T01] ( 4, 8 ) int -> rbx "Inlining Arg" ; V14 tmp7 [V14,T02] ( 3, 6 ) byref -> rcx single-def "Inlining Arg" @@ -60,15 +60,16 @@ G_M51876_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov rsi, rcx ; byrRegs +[rsi] ;; size=15 bbWeight=1 PerfScore 6.50 -G_M51876_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref, isz +G_M51876_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref add edx, dword ptr [rsi+08H] - mov ecx, dword ptr [rsi+18H] - add ecx, ecx - mov eax, 0xD1FFAB1E - cmp ecx, 0xD1FFAB1E - cmova ecx, eax - cmp edx, ecx - cmovb edx, ecx + mov eax, dword ptr [rsi+18H] + add eax, eax + cmp eax, 0xD1FFAB1E + ja G_M51876_IG12 + ;; size=19 bbWeight=1 PerfScore 6.50 +G_M51876_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref, isz + cmp edx, eax + cmovb edx, eax mov rcx, 0xD1FFAB1E ; const ptr mov rcx, gword ptr [rcx] ; gcrRegs +[rcx] @@ -81,13 +82,13 @@ G_M51876_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byr ; byrRegs +[rcx] mov ebx, dword ptr [rsi+08H] cmp ebx, dword ptr [rcx+08H] - ja G_M51876_IG11 + ja G_M51876_IG13 mov rbp, bword ptr [rcx] ; byrRegs +[rbp] test ebx, ebx - jge SHORT G_M51876_IG04 - ;; size=72 bbWeight=1 PerfScore 21.75 -G_M51876_IG03: ; bbWeight=0.50, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp rsi}, byref + jge SHORT G_M51876_IG05 + ;; size=50 bbWeight=1 PerfScore 15.75 +G_M51876_IG04: ; bbWeight=0.50, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp rsi}, byref ; gcrRegs -[rax] ; byrRegs -[rcx] mov rdx, 0xD1FFAB1E @@ -98,19 +99,19 @@ G_M51876_IG03: ; bbWeight=0.50, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp ; gcrRegs -[rcx rdx] ; gcr arg pop 0 ;; size=19 bbWeight=0.50 PerfScore 1.75 -G_M51876_IG04: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp rsi}, byref, isz +G_M51876_IG05: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0060 {rbp rsi}, byref, isz mov rdx, rbp ; byrRegs +[rdx] test rdi, rdi - je SHORT G_M51876_IG12 + je SHORT G_M51876_IG14 lea rcx, bword ptr [rdi+10H] ; byrRegs +[rcx] mov ebp, dword ptr [rdi+08H] ; byrRegs -[rbp] cmp ebx, ebp - ja SHORT G_M51876_IG13 + ja SHORT G_M51876_IG15 ;; size=19 bbWeight=1 PerfScore 5.25 -G_M51876_IG05: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0046 {rcx rdx rsi}, byref, isz +G_M51876_IG06: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0046 {rcx rdx rsi}, byref, isz mov r8d, ebx add r8, r8 call [] @@ -126,21 +127,21 @@ G_M51876_IG05: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0046 {rcx rd ; gcrRegs -[rdx] ; byrRegs -[rcx] test rdi, rdi - je SHORT G_M51876_IG14 + je SHORT G_M51876_IG16 ;; size=31 bbWeight=1 PerfScore 8.25 -G_M51876_IG06: ; bbWeight=0.50, gcrefRegs=4080 {rdi r14}, byrefRegs=0040 {rsi}, byref +G_M51876_IG07: ; bbWeight=0.50, gcrefRegs=4080 {rdi r14}, byrefRegs=0040 {rsi}, byref lea r15, bword ptr [rdi+10H] ; byrRegs +[r15] mov edi, dword ptr [rdi+08H] ; gcrRegs -[rdi] ;; size=7 bbWeight=0.50 PerfScore 1.25 -G_M51876_IG07: ; bbWeight=1, gcrefRegs=4000 {r14}, byrefRegs=8040 {rsi r15}, byref, isz +G_M51876_IG08: ; bbWeight=1, gcrefRegs=4000 {r14}, byrefRegs=8040 {rsi r15}, byref, isz mov bword ptr [rsi+10H], r15 mov dword ptr [rsi+18H], edi test r14, r14 - je SHORT G_M51876_IG09 + je SHORT G_M51876_IG10 ;; size=12 bbWeight=1 PerfScore 3.25 -G_M51876_IG08: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref +G_M51876_IG09: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref ; byrRegs -[rsi r15] mov rcx, 0xD1FFAB1E ; const ptr mov rcx, gword ptr [rcx] @@ -152,10 +153,10 @@ G_M51876_IG08: ; bbWeight=0.50, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, ; gcrRegs -[rcx rdx r14] ; gcr arg pop 0 ;; size=25 bbWeight=0.50 PerfScore 2.88 -G_M51876_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref +G_M51876_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref nop ;; size=1 bbWeight=1 PerfScore 0.25 -G_M51876_IG10: ; bbWeight=1, epilog, nogc, extend +G_M51876_IG11: ; bbWeight=1, epilog, nogc, extend add rsp, 40 pop rbx pop rbp @@ -165,37 +166,43 @@ G_M51876_IG10: ; bbWeight=1, epilog, nogc, extend pop r15 ret ;; size=13 bbWeight=1 PerfScore 4.25 -G_M51876_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref +G_M51876_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, gcvars, byref + ; byrRegs +[rsi] + mov eax, 0xD1FFAB1E + jmp G_M51876_IG03 + ;; size=10 bbWeight=0 PerfScore 0.00 +G_M51876_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; byrRegs -[rsi] call [System.ThrowHelper:ThrowArgumentOutOfRangeException()] ; gcr arg pop 0 int3 ;; size=7 bbWeight=0 PerfScore 0.00 -G_M51876_IG12: ; bbWeight=0, gcrefRegs=0080 {rdi}, byrefRegs=0044 {rdx rsi}, byref, isz +G_M51876_IG14: ; bbWeight=0, gcrefRegs=0080 {rdi}, byrefRegs=0044 {rdx rsi}, byref, isz ; gcrRegs +[rdi] ; byrRegs +[rdx rsi] xor rcx, rcx ; byrRegs +[rcx] xor ebp, ebp cmp ebx, ebp - jbe SHORT G_M51876_IG05 + jbe SHORT G_M51876_IG06 ;; size=8 bbWeight=0 PerfScore 0.00 -G_M51876_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref +G_M51876_IG15: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[rdi] ; byrRegs -[rcx rdx rsi] call [System.ThrowHelper:ThrowArgumentException_DestinationTooShort()] ; gcr arg pop 0 int3 ;; size=7 bbWeight=0 PerfScore 0.00 -G_M51876_IG14: ; bbWeight=0, gcrefRegs=4000 {r14}, byrefRegs=0040 {rsi}, byref, isz +G_M51876_IG16: ; bbWeight=0, gcrefRegs=4000 {r14}, byrefRegs=0040 {rsi}, byref, isz ; gcrRegs +[r14] ; byrRegs +[rsi] xor r15, r15 ; byrRegs +[r15] xor edi, edi - jmp SHORT G_M51876_IG07 + jmp SHORT G_M51876_IG08 ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 243, prolog size 12, PerfScore 79.68, instruction count 77, allocated bytes for code 243 (MethodHash=7caf355b) for method System.Text.ValueStringBuilder:Grow(int):this (FullOpts) +; Total bytes of code 250, prolog size 12, PerfScore 80.88, instruction count 78, allocated bytes for code 250 (MethodHash=7caf355b) for method System.Text.ValueStringBuilder:Grow(int):this (FullOpts) ; ============================================================ Unwind Info: ```
+12 (+3.95%) : 224212.dasm - System.Memory.Tests.SequencePositionTests:ComparisonMembers_NotEquals():this (FullOpts)
```diff @@ -31,8 +31,8 @@ ; V20 tmp17 [V20,T04] ( 3, 6 ) ref -> rdi class-hnd exact single-def "Inlining Arg" ;* V21 tmp18 [V21 ] ( 0, 0 ) struct (16) zero-ref "Inline stloc first use temp" ; V22 tmp19 [V22,T10] ( 3, 2 ) bool -> rcx "Inline return value spill temp" -; V23 tmp20 [V23,T24] ( 2, 1 ) bool -> rcx "Inline return value spill temp" -;* V24 tmp21 [V24,T25] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" +; V23 tmp20 [V23,T32] ( 3, 0.72) bool -> rcx "Inline return value spill temp" +;* V24 tmp21 [V24,T24] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" ; V25 tmp22 [V25,T11] ( 2, 2 ) ref -> rcx class-hnd single-def "Inlining Arg" ;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" ;* V27 tmp24 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" @@ -41,7 +41,7 @@ ;* V30 tmp27 [V30 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V31 tmp28 [V31 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" ;* V32 tmp29 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill" -;* V33 tmp30 [V33,T26] ( 0, 0 ) ref -> zero-ref single-def +;* V33 tmp30 [V33,T25] ( 0, 0 ) ref -> zero-ref single-def ; V34 tmp31 [V34,T16] ( 2, 2 ) int -> rcx ;* V35 tmp32 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill" ; V36 tmp33 [V36,T12] ( 2, 2 ) ref -> rcx single-def @@ -51,17 +51,17 @@ ;* V40 tmp37 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" ; V41 tmp38 [V41,T09] ( 3, 3 ) ref -> rbp class-hnd exact single-def "Inline stloc first use temp" ; V42 tmp39 [V42,T02] ( 4, 8 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" -;* V43 tmp40 [V43,T27] ( 0, 0 ) ref -> zero-ref single-def "field V01._object (fldOffset=0x0)" P-INDEP -;* V44 tmp41 [V44,T29] ( 0, 0 ) int -> zero-ref single-def "field V01._integer (fldOffset=0x8)" P-INDEP +;* V43 tmp40 [V43,T26] ( 0, 0 ) ref -> zero-ref single-def "field V01._object (fldOffset=0x0)" P-INDEP +;* V44 tmp41 [V44,T28] ( 0, 0 ) int -> zero-ref single-def "field V01._integer (fldOffset=0x8)" P-INDEP ; V45 tmp42 [V45,T06] ( 3, 3 ) ref -> rsi single-def "field V02._object (fldOffset=0x0)" P-INDEP -;* V46 tmp43 [V46,T30] ( 0, 0 ) int -> zero-ref single-def "field V02._integer (fldOffset=0x8)" P-INDEP -;* V47 tmp44 [V47,T28] ( 0, 0 ) ref -> zero-ref single-def "field V09._object (fldOffset=0x0)" P-INDEP +;* V46 tmp43 [V46,T29] ( 0, 0 ) int -> zero-ref single-def "field V02._integer (fldOffset=0x8)" P-INDEP +;* V47 tmp44 [V47,T27] ( 0, 0 ) ref -> zero-ref single-def "field V09._object (fldOffset=0x0)" P-INDEP ;* V48 tmp45 [V48 ] ( 0, 0 ) int -> zero-ref single-def "field V09._integer (fldOffset=0x8)" P-INDEP -;* V49 tmp46 [V49,T31] ( 0, 0 ) bool -> zero-ref single-def "field V18.hasValue (fldOffset=0x0)" P-INDEP +;* V49 tmp46 [V49,T30] ( 0, 0 ) bool -> zero-ref single-def "field V18.hasValue (fldOffset=0x0)" P-INDEP ; V50 tmp47 [V50,T18] ( 2, 2 ) bool -> rcx single-def "field V18.value (fldOffset=0x1)" P-INDEP ; V51 tmp48 [V51,T23] ( 2, 1.50) ref -> rcx single-def "field V21._object (fldOffset=0x0)" P-INDEP ; V52 tmp49 [V52,T19] ( 2, 2 ) int -> rdx single-def "field V21._integer (fldOffset=0x8)" P-INDEP -;* V53 tmp50 [V53,T32] ( 0, 0 ) bool -> zero-ref single-def "field V31.hasValue (fldOffset=0x0)" P-INDEP +;* V53 tmp50 [V53,T31] ( 0, 0 ) bool -> zero-ref single-def "field V31.hasValue (fldOffset=0x0)" P-INDEP ; V54 tmp51 [V54,T20] ( 2, 2 ) bool -> rcx single-def "field V31.value (fldOffset=0x1)" P-INDEP ; V55 tmp52 [V55,T00] ( 5, 10 ) struct ( 8) [rsp+28H] do-not-enreg[SF] "by-value struct argument" ; @@ -110,20 +110,24 @@ G_M55454_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs +[rcx] mov edx, dword ptr [rdi+10H] cmp edx, 2 - jne SHORT G_M55454_IG04 + jne SHORT G_M55454_IG06 ;; size=98 bbWeight=1 PerfScore 18.50 -G_M55454_IG03: ; bbWeight=0.50, gcrefRegs=0042 {rcx rsi}, byrefRegs=0000 {}, byref, isz +G_M55454_IG03: ; bbWeight=0.50, gcrefRegs=0042 {rcx rsi}, byrefRegs=0000 {}, byref ; gcrRegs -[rdi] test rcx, rcx - sete cl + jne G_M55454_IG09 + ;; size=9 bbWeight=0.50 PerfScore 0.62 +G_M55454_IG04: ; bbWeight=0.22, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref ; gcrRegs -[rcx] - movzx rcx, cl - jmp SHORT G_M55454_IG05 - ;; size=11 bbWeight=0.50 PerfScore 1.75 -G_M55454_IG04: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref + mov ecx, 1 + ;; size=5 bbWeight=0.22 PerfScore 0.05 +G_M55454_IG05: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M55454_IG07 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M55454_IG06: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref xor ecx, ecx ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M55454_IG05: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref +G_M55454_IG07: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref mov byte ptr [rsp+29H], cl movzx rcx, word ptr [rsp+28H] xor rdx, rdx @@ -192,7 +196,7 @@ G_M55454_IG05: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byr ; gcr arg pop 0 nop ;; size=172 bbWeight=1 PerfScore 32.50 -G_M55454_IG06: ; bbWeight=1, epilog, nogc, extend +G_M55454_IG08: ; bbWeight=1, epilog, nogc, extend add rsp, 48 pop rbx pop rbp @@ -201,8 +205,13 @@ G_M55454_IG06: ; bbWeight=1, epilog, nogc, extend pop r14 ret ;; size=11 bbWeight=1 PerfScore 3.75 +G_M55454_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs +[rsi] + xor ecx, ecx + jmp G_M55454_IG05 + ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 304, prolog size 10, PerfScore 92.28, instruction count 78, allocated bytes for code 304 (MethodHash=3a352761) for method System.Memory.Tests.SequencePositionTests:ComparisonMembers_NotEquals():this (FullOpts) +; Total bytes of code 316, prolog size 10, PerfScore 93.40, instruction count 80, allocated bytes for code 316 (MethodHash=3a352761) for method System.Memory.Tests.SequencePositionTests:ComparisonMembers_NotEquals():this (FullOpts) ; ============================================================ Unwind Info: ```
+12 (+4.62%) : 224210.dasm - System.Memory.Tests.SequencePositionTests:ComparisonMembers_NullSegment():this (FullOpts)
```diff @@ -29,8 +29,8 @@ ; V18 tmp15 [V18,T03] ( 3, 6 ) ref -> rax class-hnd exact single-def "Inlining Arg" ;* V19 tmp16 [V19 ] ( 0, 0 ) struct (16) zero-ref "Inline stloc first use temp" ; V20 tmp17 [V20,T08] ( 3, 2 ) bool -> rcx "Inline return value spill temp" -; V21 tmp18 [V21,T21] ( 2, 1 ) bool -> rcx "Inline return value spill temp" -;* V22 tmp19 [V22,T22] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" +; V21 tmp18 [V21,T31] ( 3, 0.72) bool -> rcx "Inline return value spill temp" +;* V22 tmp19 [V22,T21] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" ; V23 tmp20 [V23,T09] ( 2, 2 ) ref -> rcx class-hnd single-def "Inlining Arg" ;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" ;* V25 tmp22 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" @@ -39,27 +39,27 @@ ;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V29 tmp26 [V29 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" ;* V30 tmp27 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill" -;* V31 tmp28 [V31,T23] ( 0, 0 ) ref -> zero-ref single-def +;* V31 tmp28 [V31,T22] ( 0, 0 ) ref -> zero-ref single-def ; V32 tmp29 [V32,T13] ( 2, 2 ) int -> rcx ;* V33 tmp30 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill" -;* V34 tmp31 [V34,T24] ( 0, 0 ) ref -> zero-ref single-def +;* V34 tmp31 [V34,T23] ( 0, 0 ) ref -> zero-ref single-def ; V35 tmp32 [V35,T14] ( 2, 2 ) int -> rcx ; V36 tmp33 [V36,T06] ( 2, 4 ) int -> rdi "Inlining Arg" ; V37 tmp34 [V37,T04] ( 3, 6 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ;* V38 tmp35 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" ; V39 tmp36 [V39,T07] ( 3, 3 ) ref -> rbp class-hnd exact single-def "Inline stloc first use temp" ; V40 tmp37 [V40,T02] ( 4, 8 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" -;* V41 tmp38 [V41,T25] ( 0, 0 ) ref -> zero-ref single-def "field V01._object (fldOffset=0x0)" P-INDEP -;* V42 tmp39 [V42,T28] ( 0, 0 ) int -> zero-ref single-def "field V01._integer (fldOffset=0x8)" P-INDEP -;* V43 tmp40 [V43,T26] ( 0, 0 ) ref -> zero-ref single-def "field V02._object (fldOffset=0x0)" P-INDEP -;* V44 tmp41 [V44,T29] ( 0, 0 ) int -> zero-ref single-def "field V02._integer (fldOffset=0x8)" P-INDEP -;* V45 tmp42 [V45,T27] ( 0, 0 ) ref -> zero-ref single-def "field V07._object (fldOffset=0x0)" P-INDEP +;* V41 tmp38 [V41,T24] ( 0, 0 ) ref -> zero-ref single-def "field V01._object (fldOffset=0x0)" P-INDEP +;* V42 tmp39 [V42,T27] ( 0, 0 ) int -> zero-ref single-def "field V01._integer (fldOffset=0x8)" P-INDEP +;* V43 tmp40 [V43,T25] ( 0, 0 ) ref -> zero-ref single-def "field V02._object (fldOffset=0x0)" P-INDEP +;* V44 tmp41 [V44,T28] ( 0, 0 ) int -> zero-ref single-def "field V02._integer (fldOffset=0x8)" P-INDEP +;* V45 tmp42 [V45,T26] ( 0, 0 ) ref -> zero-ref single-def "field V07._object (fldOffset=0x0)" P-INDEP ;* V46 tmp43 [V46 ] ( 0, 0 ) int -> zero-ref single-def "field V07._integer (fldOffset=0x8)" P-INDEP -;* V47 tmp44 [V47,T30] ( 0, 0 ) bool -> zero-ref single-def "field V16.hasValue (fldOffset=0x0)" P-INDEP +;* V47 tmp44 [V47,T29] ( 0, 0 ) bool -> zero-ref single-def "field V16.hasValue (fldOffset=0x0)" P-INDEP ; V48 tmp45 [V48,T15] ( 2, 2 ) bool -> rcx single-def "field V16.value (fldOffset=0x1)" P-INDEP ; V49 tmp46 [V49,T20] ( 2, 1.50) ref -> rcx single-def "field V19._object (fldOffset=0x0)" P-INDEP ; V50 tmp47 [V50,T16] ( 2, 2 ) int -> rdx single-def "field V19._integer (fldOffset=0x8)" P-INDEP -;* V51 tmp48 [V51,T31] ( 0, 0 ) bool -> zero-ref single-def "field V29.hasValue (fldOffset=0x0)" P-INDEP +;* V51 tmp48 [V51,T30] ( 0, 0 ) bool -> zero-ref single-def "field V29.hasValue (fldOffset=0x0)" P-INDEP ; V52 tmp49 [V52,T17] ( 2, 2 ) bool -> rcx single-def "field V29.value (fldOffset=0x1)" P-INDEP ; V53 tmp50 [V53,T00] ( 5, 10 ) struct ( 8) [rsp+28H] do-not-enreg[SF] "by-value struct argument" ; @@ -94,20 +94,24 @@ G_M8460_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov rcx, gword ptr [rax+08H] mov edx, dword ptr [rax+10H] cmp edx, 2 - jne SHORT G_M8460_IG04 + jne SHORT G_M8460_IG06 ;; size=67 bbWeight=1 PerfScore 15.25 -G_M8460_IG03: ; bbWeight=0.50, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref, isz +G_M8460_IG03: ; bbWeight=0.50, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs -[rax] test rcx, rcx - sete cl + jne G_M8460_IG09 + ;; size=9 bbWeight=0.50 PerfScore 0.62 +G_M8460_IG04: ; bbWeight=0.22, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[rcx] - movzx rcx, cl - jmp SHORT G_M8460_IG05 - ;; size=11 bbWeight=0.50 PerfScore 1.75 -G_M8460_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov ecx, 1 + ;; size=5 bbWeight=0.22 PerfScore 0.05 +G_M8460_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M8460_IG07 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M8460_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref xor ecx, ecx ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M8460_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref +G_M8460_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov byte ptr [rsp+29H], cl movzx rcx, word ptr [rsp+28H] xor rdx, rdx @@ -170,7 +174,7 @@ G_M8460_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 nop ;; size=159 bbWeight=1 PerfScore 27.25 -G_M8460_IG06: ; bbWeight=1, epilog, nogc, extend +G_M8460_IG08: ; bbWeight=1, epilog, nogc, extend add rsp, 48 pop rbx pop rbp @@ -179,8 +183,12 @@ G_M8460_IG06: ; bbWeight=1, epilog, nogc, extend pop r14 ret ;; size=11 bbWeight=1 PerfScore 3.75 +G_M8460_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + xor ecx, ecx + jmp G_M8460_IG05 + ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 260, prolog size 10, PerfScore 79.38, instruction count 69, allocated bytes for code 260 (MethodHash=d5d5def3) for method System.Memory.Tests.SequencePositionTests:ComparisonMembers_NullSegment():this (FullOpts) +; Total bytes of code 272, prolog size 10, PerfScore 80.50, instruction count 71, allocated bytes for code 272 (MethodHash=d5d5def3) for method System.Memory.Tests.SequencePositionTests:ComparisonMembers_NullSegment():this (FullOpts) ; ============================================================ Unwind Info: ```
Details
#### Improvements/regressions per collection |Collection|Contexts with diffs|Improvements|Regressions|Same size|Improvements (bytes)|Regressions (bytes)| |---|--:|--:|--:|--:|--:|--:| |aspnet.run.windows.x64.checked.mch|2,090|170|1,705|215|-636|+19,427| |benchmarks.run.windows.x64.checked.mch|0|0|0|0|-0|+0| |benchmarks.run_pgo.windows.x64.checked.mch|1,876|125|1,699|52|-324|+18,780| |benchmarks.run_tiered.windows.x64.checked.mch|0|0|0|0|-0|+0| |coreclr_tests.run.windows.x64.checked.mch|1,838|100|1,688|50|-429|+19,003| |libraries.crossgen2.windows.x64.checked.mch|0|0|0|0|-0|+0| |libraries.pmi.windows.x64.checked.mch|20|0|19|1|-0|+128| |libraries_tests.pmi.windows.x64.checked.mch|12|0|10|2|-0|+98| |realworld.run.windows.x64.checked.mch|0|0|0|0|-0|+0| ||5,836|395|5,121|320|-1,389|+57,436| --- #### Context information |Collection|Diffed contexts|MinOpts|FullOpts|Missed, base|Missed, diff| |---|--:|--:|--:|--:|--:| |aspnet.run.windows.x64.checked.mch|116,950|48,179|68,771|572 (0.49%)|572 (0.49%)| |benchmarks.run.windows.x64.checked.mch|24,518|1,115|23,403|51 (0.21%)|51 (0.21%)| |benchmarks.run_pgo.windows.x64.checked.mch|81,654|36,976|44,678|675 (0.83%)|675 (0.83%)| |benchmarks.run_tiered.windows.x64.checked.mch|44,498|30,113|14,385|48 (0.11%)|48 (0.11%)| |coreclr_tests.run.windows.x64.checked.mch|550,607|333,694|216,913|366 (0.07%)|366 (0.07%)| |libraries.crossgen2.windows.x64.checked.mch|65,155|11|65,144|66 (0.10%)|66 (0.10%)| |libraries.pmi.windows.x64.checked.mch|294,715|5,588|289,127|243 (0.08%)|243 (0.08%)| |libraries_tests.pmi.windows.x64.checked.mch|347,586|7,467|340,119|158 (0.05%)|158 (0.05%)| |realworld.run.windows.x64.checked.mch|38,654|4,483|34,171|71 (0.18%)|71 (0.18%)| ||1,564,337|467,626|1,096,711|2,250 (0.14%)|2,250 (0.14%)| --- #### jit-analyze output
aspnet.run.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 44062516 (overridden on cmd) Total bytes of diff: 44081307 (overridden on cmd) Total bytes of delta: 18791 (0.04 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 105 : 59543.dasm (2.37% of base) 100 : 71703.dasm (7.11% of base) 97 : 61033.dasm (1.21% of base) 89 : 71678.dasm (2.94% of base) 80 : 79606.dasm (2.03% of base) 77 : 76234.dasm (15.98% of base) 71 : 30937.dasm (10.53% of base) 68 : 29425.dasm (5.56% of base) 68 : 31341.dasm (5.56% of base) 68 : 32352.dasm (5.56% of base) 66 : 61039.dasm (13.98% of base) 66 : 61038.dasm (13.98% of base) 66 : 61047.dasm (13.98% of base) 64 : 84748.dasm (3.85% of base) 64 : 83838.dasm (4.00% of base) 63 : 81104.dasm (0.67% of base) 59 : 80117.dasm (4.44% of base) 59 : 62390.dasm (4.45% of base) 59 : 57690.dasm (4.44% of base) 55 : 114318.dasm (2.86% of base) Top file improvements (bytes): -82 : 109842.dasm (-2.15% of base) -59 : 112972.dasm (-1.54% of base) -45 : 19650.dasm (-1.71% of base) -34 : 16024.dasm (-1.29% of base) -17 : 32287.dasm (-1.93% of base) -17 : 29500.dasm (-0.38% of base) -15 : 25369.dasm (-0.50% of base) -12 : 79589.dasm (-0.71% of base) -10 : 1648.dasm (-9.80% of base) -10 : 17515.dasm (-0.38% of base) -9 : 115580.dasm (-0.75% of base) -8 : 60965.dasm (-0.70% of base) -7 : 79743.dasm (-0.23% of base) -7 : 59334.dasm (-0.20% of base) -7 : 63356.dasm (-0.19% of base) -7 : 25035.dasm (-1.38% of base) -7 : 59329.dasm (-0.25% of base) -7 : 81025.dasm (-0.19% of base) -5 : 1378.dasm (-0.94% of base) -5 : 31555.dasm (-0.94% of base) 90 total files with Code Size differences (40 improved, 50 regressed), 20 unchanged. Top method regressions (bytes): 105 ( 2.37% of base) : 59543.dasm - OrchardCore.ResourceManagement.ResourceDefinition:GetTagBuilder(OrchardCore.ResourceManagement.RequireSettings,System.String,Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider):Microsoft.AspNetCore.Mvc.Rendering.TagBuilder:this (Tier1) 100 ( 7.11% of base) : 71703.dasm - OrchardCore.ResourceManagement.ResourceManager:RegisterLink(OrchardCore.ResourceManagement.LinkEntry):this (FullOpts) 97 ( 1.21% of base) : 61033.dasm - OrchardCore.Resources.Liquid.LinkTag+d__0:MoveNext():this (Tier1) 89 ( 2.94% of base) : 71678.dasm - AspNetCoreGeneratedDocument.Views_ListPartFeed+d__0:MoveNext():this (FullOpts) 80 ( 2.03% of base) : 79606.dasm - OrchardCore.ResourceManagement.ResourceDefinition:GetTagBuilder(OrchardCore.ResourceManagement.RequireSettings,System.String,Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider):Microsoft.AspNetCore.Mvc.Rendering.TagBuilder:this (Tier1) 77 (15.98% of base) : 76234.dasm - Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary:set_Item(System.String,System.String):this (Instrumented Tier1) 71 (10.53% of base) : 30937.dasm - System.Net.Http.Headers.HeaderDescriptor:TryGet(System.String,byref):bool (Tier1) 68 ( 5.56% of base) : 29425.dasm - System.Uri:CheckSchemeSyntax(System.ReadOnlySpan`1[ushort],byref):int (Tier1) 68 ( 5.56% of base) : 31341.dasm - System.Uri:CheckSchemeSyntax(System.ReadOnlySpan`1[ushort],byref):int (Tier1) 68 ( 5.56% of base) : 32352.dasm - System.Uri:CheckSchemeSyntax(System.ReadOnlySpan`1[ushort],byref):int (Tier1) 66 (13.98% of base) : 61047.dasm - OrchardCore.ResourceManagement.LinkEntry:set_Href(System.String):this (Tier1) 66 (13.98% of base) : 61038.dasm - OrchardCore.ResourceManagement.LinkEntry:set_Rel(System.String):this (Tier1) 66 (13.98% of base) : 61039.dasm - OrchardCore.ResourceManagement.LinkEntry:set_Type(System.String):this (Tier1) 64 ( 3.85% of base) : 84748.dasm - Benchmarks.Data.DapperDb+d__9:MoveNext():this (Tier1) 64 ( 4.00% of base) : 83838.dasm - Benchmarks.Data.DapperDb+d__9:MoveNext():this (Tier1) 63 ( 0.67% of base) : 81104.dasm - OrchardCore.DisplayManagement.Liquid.LiquidViewTemplate+d__7:MoveNext():this (Tier1) 59 ( 4.44% of base) : 80117.dasm - System.Globalization.Ordinal:IndexOf(System.String,System.String,int,int,bool):int (Tier1) 59 ( 4.45% of base) : 62390.dasm - System.Globalization.Ordinal:IndexOf(System.String,System.String,int,int,bool):int (Tier1) 59 ( 4.44% of base) : 57690.dasm - System.Globalization.Ordinal:IndexOf(System.String,System.String,int,int,bool):int (Tier1) 55 ( 2.86% of base) : 114318.dasm - System.String:IndexOf(System.String,int,int,int):int:this (Tier1) Top method improvements (bytes): -82 (-2.15% of base) : 109842.dasm - Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine:LocatePageFromViewLocations(Microsoft.AspNetCore.Mvc.ActionContext,System.String,bool):Microsoft.AspNetCore.Mvc.Razor.ViewLocationCacheResult:this (Tier1) -59 (-1.54% of base) : 112972.dasm - Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine:LocatePageFromViewLocations(Microsoft.AspNetCore.Mvc.ActionContext,System.String,bool):Microsoft.AspNetCore.Mvc.Razor.ViewLocationCacheResult:this (Tier1) -45 (-1.71% of base) : 19650.dasm - Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware:Invoke(Microsoft.AspNetCore.Http.HttpContext):System.Threading.Tasks.Task:this (Tier1) -34 (-1.29% of base) : 16024.dasm - Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware:Invoke(Microsoft.AspNetCore.Http.HttpContext):System.Threading.Tasks.Task:this (Tier1) -17 (-1.93% of base) : 32287.dasm - System.Uri:CreateHostString():this (Tier1) -17 (-0.38% of base) : 29500.dasm - System.Uri:ParseRemaining():this (Tier1) -15 (-0.50% of base) : 25369.dasm - System.Uri:ParseRemaining():this (Tier1) -12 (-0.71% of base) : 79589.dasm - OrchardCore.ContentManagement.ContentDefinitionManager:CheckDocumentIdentifier(OrchardCore.ContentManagement.Metadata.Records.ContentDefinitionRecord):this (Tier1) -10 (-0.38% of base) : 17515.dasm - Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware:Invoke(Microsoft.AspNetCore.Http.HttpContext):System.Threading.Tasks.Task:this (Tier1) -10 (-9.80% of base) : 1648.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -9 (-0.75% of base) : 115580.dasm - System.Number:g__FormatUInt32Slow|43_0(uint,System.String,System.IFormatProvider):System.String (Tier1) -8 (-0.70% of base) : 60965.dasm - OrchardCore.Liquid.Filters.ShortcodeFilter+d__2:MoveNext():this (Tier1) -7 (-0.25% of base) : 59329.dasm - OrchardCore.DisplayManagement.Descriptors.ShapeTemplateStrategy.ShapeTemplateBindingStrategy+<>c__DisplayClass12_5:b__15(OrchardCore.DisplayManagement.Implementation.DisplayContext):System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Html.IHtmlContent]:this (Tier1) -7 (-0.23% of base) : 79743.dasm - OrchardCore.DisplayManagement.Razor.RazorShapeTemplateViewEngine:RenderAsync(System.String,OrchardCore.DisplayManagement.Implementation.DisplayContext):System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Html.IHtmlContent]:this (Tier1) -7 (-0.20% of base) : 59334.dasm - OrchardCore.DisplayManagement.Razor.RazorShapeTemplateViewEngine:RenderAsync(System.String,OrchardCore.DisplayManagement.Implementation.DisplayContext):System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Html.IHtmlContent]:this (Tier1) -7 (-0.19% of base) : 63356.dasm - OrchardCore.DisplayManagement.Razor.RazorShapeTemplateViewEngine:RenderAsync(System.String,OrchardCore.DisplayManagement.Implementation.DisplayContext):System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Html.IHtmlContent]:this (Tier1) -7 (-0.19% of base) : 81025.dasm - OrchardCore.DisplayManagement.Razor.RazorShapeTemplateViewEngine:RenderAsync(System.String,OrchardCore.DisplayManagement.Implementation.DisplayContext):System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Html.IHtmlContent]:this (Tier1) -7 (-1.38% of base) : 25035.dasm - System.Net.Http.Headers.HttpHeaders:TryAddWithoutValidation(System.String,System.String):bool:this (Tier1) -5 (-0.94% of base) : 1378.dasm - System.Net.Sockets.Socket:InternalSetBlocking(bool,byref):int:this (Tier1) -5 (-0.94% of base) : 31555.dasm - System.Net.Sockets.Socket:InternalSetBlocking(bool,byref):int:this (Tier1) Top method regressions (percentages): 5 (55.56% of base) : 111035.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) 5 (55.56% of base) : 86985.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) 5 (55.56% of base) : 95289.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) 5 (55.56% of base) : 114708.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) 5 (55.56% of base) : 109128.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) 5 (55.56% of base) : 112530.dasm - System.Text.Unicode.Utf8Utility:UInt32FirstByteIsAscii(uint):bool (Tier1) 5 (41.67% of base) : 84798.dasm - System.Text.Ascii:FirstCharInUInt32IsAscii(uint):bool (Tier1) 5 (41.67% of base) : 111258.dasm - System.Text.Ascii:FirstCharInUInt32IsAscii(uint):bool (Tier1) 5 (41.67% of base) : 104912.dasm - System.Text.Ascii:FirstCharInUInt32IsAscii(uint):bool (Tier1) 5 (41.67% of base) : 95517.dasm - System.Text.Ascii:FirstCharInUInt32IsAscii(uint):bool (Tier1) 5 (41.67% of base) : 115264.dasm - System.Text.Ascii:FirstCharInUInt32IsAscii(uint):bool (Tier1) 5 (41.67% of base) : 83987.dasm - System.Text.Ascii:FirstCharInUInt32IsAscii(uint):bool (Tier1) 5 (41.67% of base) : 87196.dasm - System.Text.Ascii:FirstCharInUInt32IsAscii(uint):bool (Tier1) 5 (41.67% of base) : 95518.dasm - System.Text.Unicode.Utf8Utility:IsFirstCharAscii(uint):bool (Tier1) 5 (41.67% of base) : 111324.dasm - System.Text.Unicode.Utf8Utility:IsFirstCharAscii(uint):bool (Tier1) 5 (41.67% of base) : 113112.dasm - System.Text.Unicode.Utf8Utility:IsFirstCharAscii(uint):bool (Tier1) 5 (41.67% of base) : 87056.dasm - System.Text.Unicode.Utf8Utility:IsSecondCharAscii(uint):bool (Tier1) 5 (41.67% of base) : 111353.dasm - System.Text.Unicode.Utf8Utility:IsSecondCharAscii(uint):bool (Tier1) 5 (41.67% of base) : 114861.dasm - System.Text.Unicode.Utf8Utility:IsSecondCharAscii(uint):bool (Tier1) 5 (41.67% of base) : 111351.dasm - System.Text.Unicode.Utf8Utility:IsSecondCharAtLeastThreeUtf8Bytes(uint):bool (Tier1) Top method improvements (percentages): -2 (-16.67% of base) : 22384.dasm - System.Index:get_Value():int:this (Tier1) -2 (-16.67% of base) : 20572.dasm - System.Index:get_Value():int:this (Tier1) -2 (-16.67% of base) : 21443.dasm - System.Index:get_Value():int:this (Tier1) -2 (-10.53% of base) : 9411.dasm - System.Numerics.INumber`1[ushort]:Min(ushort,ushort):ushort (FullOpts) -2 (-10.53% of base) : 75865.dasm - System.Numerics.INumber`1[ushort]:Min(ushort,ushort):ushort (Tier1) -10 (-9.80% of base) : 1648.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -2 (-9.52% of base) : 81180.dasm - System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) -2 (-9.52% of base) : 32180.dasm - System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) -2 (-9.52% of base) : 59842.dasm - System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) -2 (-9.52% of base) : 63527.dasm - System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) -2 (-9.52% of base) : 30968.dasm - System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) -2 (-9.52% of base) : 29158.dasm - System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) -2 (-8.70% of base) : 57834.dasm - System.Array:get_Rank():int:this (Tier1) -2 (-8.70% of base) : 62431.dasm - System.Array:get_Rank():int:this (Tier1) -2 (-8.70% of base) : 80156.dasm - System.Array:get_Rank():int:this (Tier1) -1 (-8.33% of base) : 64431.dasm - Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.TargetOffsetPathLength:get_Length():int:this (Tier1) -1 (-8.33% of base) : 10217.dasm - Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.TargetOffsetPathLength:get_Length():int:this (Tier1) -1 (-8.33% of base) : 9286.dasm - Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.TargetOffsetPathLength:get_Length():int:this (Tier1) -1 (-8.33% of base) : 1068.dasm - Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.TargetOffsetPathLength:get_Length():int:this (Tier1) -1 (-8.33% of base) : 1860.dasm - Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.TargetOffsetPathLength:get_Length():int:this (Tier1) ```
--------------------------------------------------------------------------------
benchmarks.run_pgo.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 27442441 (overridden on cmd) Total bytes of diff: 27460897 (overridden on cmd) Total bytes of delta: 18456 (0.07 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 117 : 48574.dasm (14.70% of base) 117 : 48573.dasm (14.62% of base) 86 : 48572.dasm (9.94% of base) 79 : 48571.dasm (8.40% of base) 77 : 52755.dasm (2.80% of base) 57 : 72659.dasm (24.68% of base) 57 : 67330.dasm (24.68% of base) 57 : 68991.dasm (24.68% of base) 57 : 22821.dasm (24.68% of base) 56 : 52718.dasm (1.63% of base) 55 : 12991.dasm (4.41% of base) 52 : 67047.dasm (2.91% of base) 50 : 22716.dasm (0.89% of base) 49 : 16242.dasm (6.73% of base) 49 : 16659.dasm (6.73% of base) 49 : 58949.dasm (6.73% of base) 47 : 81579.dasm (1.70% of base) 47 : 68029.dasm (1.44% of base) 46 : 44362.dasm (1.86% of base) 46 : 69050.dasm (5.37% of base) Top file improvements (bytes): -34 : 53210.dasm (-1.07% of base) -16 : 77328.dasm (-0.50% of base) -12 : 30489.dasm (-0.42% of base) -12 : 80275.dasm (-0.42% of base) -10 : 52741.dasm (-7.46% of base) -10 : 18820.dasm (-7.46% of base) -10 : 20960.dasm (-7.46% of base) -10 : 73083.dasm (-7.46% of base) -10 : 81574.dasm (-7.46% of base) -10 : 70465.dasm (-7.46% of base) -10 : 79839.dasm (-7.46% of base) -10 : 78360.dasm (-7.46% of base) -8 : 76715.dasm (-0.25% of base) -8 : 35500.dasm (-0.25% of base) -6 : 81335.dasm (-0.18% of base) -6 : 76205.dasm (-0.19% of base) -5 : 60831.dasm (-0.46% of base) -4 : 18798.dasm (-0.13% of base) -4 : 74836.dasm (-0.13% of base) -4 : 30855.dasm (-0.13% of base) 82 total files with Code Size differences (32 improved, 50 regressed), 20 unchanged. Top method regressions (bytes): 117 (14.62% of base) : 48573.dasm - System.Globalization.CompareInfo:CompareStringCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):int:this (Tier1) 117 (14.70% of base) : 48574.dasm - System.Globalization.CompareInfo:NlsCompareString(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):int:this (Tier1) 86 ( 9.94% of base) : 48572.dasm - System.Globalization.CompareInfo:Compare(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):int:this (Tier1) 79 ( 8.40% of base) : 48571.dasm - System.Globalization.CompareInfo:Compare(System.String,System.String,int):int:this (Tier1) 77 ( 2.80% of base) : 52755.dasm - System.Threading.PortableThreadPool:PerformBlockingAdjustment(bool,byref):uint:this (Tier1) 57 (24.68% of base) : 72659.dasm - System.Collections.Generic.List`1[System.Text.RegularExpressions.RegexFindOptimizations+FixedDistanceSet]:Grow(int):this (Tier1) 57 (24.68% of base) : 67330.dasm - System.Collections.Generic.List`1[System.Text.RegularExpressions.RegexFindOptimizations+FixedDistanceSet]:Grow(int):this (Tier1) 57 (24.68% of base) : 68991.dasm - System.Collections.Generic.List`1[System.Text.RegularExpressions.RegexFindOptimizations+FixedDistanceSet]:Grow(int):this (Tier1) 57 (24.68% of base) : 22821.dasm - System.Collections.Generic.List`1[System.Text.RegularExpressions.RegexFindOptimizations+FixedDistanceSet]:Grow(int):this (Tier1) 56 ( 1.63% of base) : 52718.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) 55 ( 4.41% of base) : 12991.dasm - System.Reflection.Emit.DynamicMethod:GetILGenerator(int):System.Reflection.Emit.ILGenerator:this (Tier1) 52 ( 2.91% of base) : 67047.dasm - System.Number:NumberToDouble(byref):double (Tier1) 50 ( 0.89% of base) : 22716.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexRunnerFactory:.ctor(System.Text.RegularExpressions.RegexTree,int,System.TimeSpan):this (Tier1) 49 ( 6.73% of base) : 16242.dasm - System.PackedSpanHelpers:IndexOf[System.SpanHelpers+DontNegate`1[short]](byref,short,int):int (Tier1) 49 ( 6.73% of base) : 16659.dasm - System.PackedSpanHelpers:IndexOf[System.SpanHelpers+DontNegate`1[short]](byref,short,int):int (Tier1) 49 ( 6.73% of base) : 58949.dasm - System.PackedSpanHelpers:IndexOf[System.SpanHelpers+DontNegate`1[short]](byref,short,int):int (Tier1) 47 ( 1.70% of base) : 81579.dasm - System.Threading.PortableThreadPool:PerformBlockingAdjustment(bool,byref):uint:this (Tier1) 47 ( 1.44% of base) : 68029.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) 46 ( 5.37% of base) : 69050.dasm - System.PackedSpanHelpers:IndexOf[System.SpanHelpers+DontNegate`1[short]](byref,short,int):int (Tier1) 46 ( 1.86% of base) : 44362.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) Top method improvements (bytes): -34 (-1.07% of base) : 53210.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -16 (-0.50% of base) : 77328.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -12 (-0.42% of base) : 30489.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -12 (-0.42% of base) : 80275.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -10 (-7.46% of base) : 52741.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 18820.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 20960.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 73083.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 81574.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 70465.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 79839.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 78360.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -8 (-0.25% of base) : 76715.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -8 (-0.25% of base) : 35500.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -6 (-0.18% of base) : 81335.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -6 (-0.19% of base) : 76205.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -5 (-0.46% of base) : 60831.dasm - System.String:IndexOf(System.String,int,int,int):int:this (Tier1) -4 (-0.13% of base) : 18798.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -4 (-0.13% of base) : 74836.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) -4 (-0.13% of base) : 30855.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) Top method regressions (percentages): 5 (55.56% of base) : 71470.dasm - System.Threading.SpinWait:get_NextSpinWillYield():bool:this (Tier1) 5 (27.78% of base) : 57269.dasm - System.Int32:CompareTo(int):int:this (Tier1) 5 (27.78% of base) : 59155.dasm - System.Int32:CompareTo(int):int:this (Tier1) 2 (25.00% of base) : 23195.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 59354.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 55103.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 82175.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 68861.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 35867.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 74076.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 57853.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 27255.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 35680.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 66623.dasm - System.Math:Min(uint,uint):uint (Tier1) 2 (25.00% of base) : 81469.dasm - System.Math:Min(uint,uint):uint (Tier1) 2 (25.00% of base) : 76128.dasm - System.Math:Min(uint,uint):uint (Tier1) 2 (25.00% of base) : 46042.dasm - System.Math:Min(uint,uint):uint (Tier1) 2 (25.00% of base) : 63904.dasm - System.Math:Min(uint,uint):uint (Tier1) 2 (25.00% of base) : 64024.dasm - System.Math:Min(uint,uint):uint (Tier1) 2 (25.00% of base) : 66839.dasm - System.Math:Min(uint,uint):uint (Tier1) Top method improvements (percentages): -10 (-7.46% of base) : 52741.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 18820.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 20960.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 73083.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 81574.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 70465.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 79839.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 78360.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -3 (-6.25% of base) : 82092.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 79555.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 16324.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 77540.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 21299.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 71716.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -1 (-4.00% of base) : 39855.dasm - System.RuntimeType+RuntimeTypeCache+Filter:RequiresStringComparison():bool:this (Tier1) -1 (-4.00% of base) : 77396.dasm - System.RuntimeType+RuntimeTypeCache+Filter:RequiresStringComparison():bool:this (Tier1) -1 (-4.00% of base) : 78165.dasm - System.RuntimeType+RuntimeTypeCache+Filter:RequiresStringComparison():bool:this (Tier1) -1 (-3.70% of base) : 21281.dasm - Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid:get_IsInvalid():bool:this (Tier1) -1 (-3.70% of base) : 77473.dasm - Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid:get_IsInvalid():bool:this (Tier1) -1 (-3.70% of base) : 25926.dasm - Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid:get_IsInvalid():bool:this (Tier1) ```
--------------------------------------------------------------------------------
coreclr_tests.run.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 390142561 (overridden on cmd) Total bytes of diff: 390161135 (overridden on cmd) Total bytes of delta: 18574 (0.00 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 144 : 273507.dasm (13.02% of base) 106 : 273491.dasm (13.64% of base) 101 : 270983.dasm (2.98% of base) 101 : 267384.dasm (3.06% of base) 99 : 216415.dasm (13.25% of base) 93 : 271444.dasm (12.67% of base) 93 : 268550.dasm (12.67% of base) 90 : 271711.dasm (18.48% of base) 90 : 269466.dasm (18.48% of base) 83 : 336542.dasm (6.54% of base) 80 : 216124.dasm (17.28% of base) 75 : 275696.dasm (4.80% of base) 69 : 273451.dasm (4.08% of base) 63 : 266581.dasm (2.84% of base) 57 : 271556.dasm (15.08% of base) 57 : 267587.dasm (15.97% of base) 57 : 270693.dasm (4.28% of base) 53 : 253980.dasm (8.65% of base) 49 : 336418.dasm (1.45% of base) 47 : 289707.dasm (1.75% of base) Top file improvements (bytes): -90 : 216424.dasm (-4.24% of base) -36 : 216659.dasm (-0.71% of base) -22 : 5470.dasm (-1.42% of base) -22 : 201247.dasm (-1.42% of base) -16 : 267008.dasm (-0.24% of base) -11 : 482818.dasm (-0.35% of base) -10 : 281942.dasm (-7.46% of base) -10 : 238358.dasm (-7.46% of base) -10 : 5587.dasm (-7.46% of base) -10 : 29518.dasm (-7.46% of base) -10 : 223997.dasm (-7.46% of base) -10 : 95456.dasm (-7.46% of base) -6 : 245863.dasm (-2.15% of base) -6 : 236621.dasm (-2.15% of base) -6 : 219492.dasm (-0.69% of base) -4 : 270805.dasm (-7.84% of base) -4 : 266646.dasm (-7.84% of base) -4 : 274112.dasm (-0.93% of base) -4 : 267518.dasm (-0.19% of base) -3 : 21670.dasm (-6.25% of base) 81 total files with Code Size differences (31 improved, 50 regressed), 20 unchanged. Top method regressions (bytes): 144 (13.02% of base) : 273507.dasm - System.PackedSpanHelpers:IndexOfAny[System.SpanHelpers+DontNegate`1[short]](byref,short,short,short,int):int (Tier1) 106 (13.64% of base) : 273491.dasm - System.Globalization.CompareInfo:NlsCompareString(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):int:this (Tier1) 101 ( 2.98% of base) : 270983.dasm - Internal.TypeSystem.Ecma.EcmaMethod:GetPInvokeMethodMetadata():Internal.TypeSystem.PInvokeMetadata:this (Tier1) 101 ( 3.06% of base) : 267384.dasm - Internal.TypeSystem.Ecma.EcmaMethod:GetPInvokeMethodMetadata():Internal.TypeSystem.PInvokeMetadata:this (Tier1) 99 (13.25% of base) : 216415.dasm - System.Globalization.CompareInfo:NlsCompareString(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):int:this (Tier1) 93 (12.67% of base) : 271444.dasm - System.Globalization.CompareInfo:NlsCompareString(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):int:this (Tier1) 93 (12.67% of base) : 268550.dasm - System.Globalization.CompareInfo:NlsCompareString(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):int:this (Tier1) 90 (18.48% of base) : 271711.dasm - System.Globalization.CompareInfo:IsPrefix(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):bool:this (Tier1) 90 (18.48% of base) : 269466.dasm - System.Globalization.CompareInfo:IsPrefix(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):bool:this (Tier1) 83 ( 6.54% of base) : 336542.dasm - System.String:EndsWith(System.String,int):bool:this (Tier1) 80 (17.28% of base) : 216124.dasm - System.Globalization.CompareInfo:IsPrefix(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int):bool:this (Tier1) 75 ( 4.80% of base) : 275696.dasm - System.Reflection.Emit.RuntimeTypeBuilder:DefineDefaultConstructorNoLock(int):System.Reflection.Emit.RuntimeConstructorBuilder:this (Tier1) 69 ( 4.08% of base) : 273451.dasm - System.Diagnostics.Tracing.ActivityTracker:OnStart(System.String,System.String,int,byref,byref,int,bool):this (Tier1) 63 ( 2.84% of base) : 266581.dasm - Internal.JitInterface.CorInfoImpl:getMethodNameFromMetadata(ulong,ulong,ulong,ulong):ulong:this (Tier1) 57 (15.08% of base) : 271556.dasm - Internal.TypeSystem.Ecma.EcmaGenericParameter:get_Name():System.String:this (Tier1) 57 ( 4.28% of base) : 270693.dasm - Internal.TypeSystem.ExplicitLayoutValidator:SetFieldLayout(System.Collections.Generic.List`1[Internal.TypeSystem.ExplicitLayoutValidator+FieldLayoutInterval],int,int,ubyte):this (Tier1) 57 (15.97% of base) : 267587.dasm - System.Collections.Generic.List`1[Internal.TypeSystem.ExplicitLayoutValidator+FieldLayoutInterval]:Insert(int,Internal.TypeSystem.ExplicitLayoutValidator+FieldLayoutInterval):this (Tier1) 53 ( 8.65% of base) : 253980.dasm - System.PackedSpanHelpers:IndexOf[System.SpanHelpers+DontNegate`1[short]](byref,short,int):int (Tier1) 49 ( 1.45% of base) : 336418.dasm - Internal.TypeSystem.Ecma.EcmaModule+EcmaObjectLookupHashtable:CreateValueFromKey(System.Reflection.Metadata.EntityHandle):Internal.TypeSystem.Ecma.EcmaModule+IEntityHandleObject:this (Tier1) 47 ( 1.75% of base) : 289707.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this (Tier1) Top method improvements (bytes): -90 (-4.24% of base) : 216424.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateMethods(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeMethodInfo[]:this (Tier1) -36 (-0.71% of base) : 216659.dasm - UnrollEqualsStartsWIth:RunTests(System.Type):int (Tier1) -22 (-1.42% of base) : 5470.dasm - System.Text.RegularExpressions.Regex:RunSingleMatch(int,int,System.String,int,int,int):System.Text.RegularExpressions.Match:this (Tier1) -22 (-1.42% of base) : 201247.dasm - System.Text.RegularExpressions.Regex:RunSingleMatch(int,int,System.String,int,int,int):System.Text.RegularExpressions.Match:this (Tier1) -16 (-0.24% of base) : 267008.dasm - Internal.JitInterface.CorInfoImpl:resolveVirtualMethod(ulong):bool:this (Tier1) -11 (-0.35% of base) : 482818.dasm - Test_throw2dimarray.App:Main():int (FullOpts) -10 (-7.46% of base) : 281942.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 238358.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 5587.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 29518.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 223997.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 95456.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -6 (-2.15% of base) : 245863.dasm - System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int (Tier1) -6 (-2.15% of base) : 236621.dasm - System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int (Tier1) -6 (-0.69% of base) : 219492.dasm - System.PackedSpanHelpers:IndexOfAny[System.SpanHelpers+DontNegate`1[short]](byref,short,short,int):int (Tier1) -4 (-0.19% of base) : 267518.dasm - Internal.JitInterface.CorInfoImpl:getAddressOfPInvokeTarget(ulong,byref):this (Tier1) -4 (-7.84% of base) : 270805.dasm - Internal.JitInterface.CorInfoImpl:getRelocTypeHint(ulong):ushort:this (Tier1) -4 (-7.84% of base) : 266646.dasm - Internal.JitInterface.CorInfoImpl:getRelocTypeHint(ulong):ushort:this (Tier1) -4 (-0.93% of base) : 274112.dasm - System.Reflection.Internal.MemoryBlock:Utf8NullTerminatedEquals(int,System.String,System.Reflection.Metadata.MetadataStringDecoder,ushort,bool):bool:this (Tier1) -3 (-6.25% of base) : 21670.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) Top method regressions (percentages): 5 (55.56% of base) : 266293.dasm - ILCompiler.ReadyToRunCompilationModuleGroupBase:IsCompilationUnitIndexExact(int):bool:this (Tier1) 6 (31.58% of base) : 266840.dasm - System.Runtime.CompilerServices.RuntimeHelpers:EnumCompareTo[int](int,int):int (Tier1) 6 (28.57% of base) : 266839.dasm - System.Collections.Generic.EnumComparer`1[int]:Compare(int,int):int:this (Tier1) 5 (27.78% of base) : 337644.dasm - Microsoft.Win32.SafeHandles.SafeThreadHandle:get_IsInvalid():bool:this (Tier1) 18 (27.27% of base) : 277217.dasm - System.Globalization.DateTimeFormatInfo:get_HasForceTwoDigitYears():bool:this (Tier1) 18 (27.27% of base) : 243357.dasm - System.Globalization.DateTimeFormatInfo:get_HasForceTwoDigitYears():bool:this (Tier1) 18 (27.27% of base) : 357282.dasm - System.Globalization.DateTimeFormatInfo:get_HasForceTwoDigitYears():bool:this (Tier1) 5 (25.00% of base) : 265907.dasm - System.Int32:CompareTo(int):int:this (Tier1) 5 (25.00% of base) : 270438.dasm - System.Int32:CompareTo(int):int:this (Tier1) 2 (25.00% of base) : 47643.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 216572.dasm - System.Math:Max(int,int):int (Tier1) 2 (25.00% of base) : 47653.dasm - System.Math:Max(uint,uint):uint (Tier1) 2 (25.00% of base) : 309796.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 323386.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 202165.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 197786.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 210523.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 320005.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 277174.dasm - System.Math:Min(int,int):int (Tier1) 2 (25.00% of base) : 291327.dasm - System.Math:Min(int,int):int (Tier1) Top method improvements (percentages): -2 (-9.52% of base) : 223475.dasm - System.Uri:g__ToLowerCaseAscii|160_0(ushort):ushort (Tier1) -2 (-8.33% of base) : 267445.dasm - Internal.TypeSystem.CallingConventionExtensions:GetPlatformDefaultUnmanagedCallingConvention(Internal.TypeSystem.TypeSystemContext):int (Tier1) -2 (-8.33% of base) : 271020.dasm - Internal.TypeSystem.CallingConventionExtensions:GetPlatformDefaultUnmanagedCallingConvention(Internal.TypeSystem.TypeSystemContext):int (Tier1) -4 (-7.84% of base) : 270805.dasm - Internal.JitInterface.CorInfoImpl:getRelocTypeHint(ulong):ushort:this (Tier1) -4 (-7.84% of base) : 266646.dasm - Internal.JitInterface.CorInfoImpl:getRelocTypeHint(ulong):ushort:this (Tier1) -10 (-7.46% of base) : 281942.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 238358.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 5587.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 29518.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 223997.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -10 (-7.46% of base) : 95456.dasm - System.Threading.PortableThreadPool+GateThread+DelayHelper:GetNextDelay(int):uint:this (Tier1) -1 (-7.14% of base) : 273284.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[ushort,ushort]:GetPinnableReference(ushort[]):byref (Tier1) -3 (-6.25% of base) : 21670.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 223940.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 290852.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 261933.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 95500.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 29313.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 63660.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) -3 (-6.25% of base) : 238081.dasm - System.IO.PathInternal:EndsWithPeriodOrSpace(System.String):bool (Tier1) ```
--------------------------------------------------------------------------------
libraries.pmi.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 58721439 (overridden on cmd) Total bytes of diff: 58721567 (overridden on cmd) Total bytes of delta: 128 (0.00 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 8 : 11662.dasm (1.95% of base) 7 : 286523.dasm (2.88% of base) 7 : 205592.dasm (2.88% of base) 7 : 257823.dasm (2.88% of base) 7 : 177428.dasm (0.63% of base) 7 : 286566.dasm (2.88% of base) 7 : 171155.dasm (2.27% of base) 7 : 132105.dasm (0.63% of base) 7 : 263469.dasm (2.88% of base) 7 : 282257.dasm (2.88% of base) 7 : 125648.dasm (2.88% of base) 7 : 278286.dasm (2.88% of base) 7 : 256327.dasm (2.88% of base) 7 : 239688.dasm (2.88% of base) 7 : 256226.dasm (2.88% of base) 7 : 227489.dasm (2.88% of base) 5 : 189536.dasm (26.32% of base) 5 : 177226.dasm (1.09% of base) 5 : 145114.dasm (26.32% of base) 19 total files with Code Size differences (0 improved, 19 regressed), 1 unchanged. Top method regressions (bytes): 8 ( 1.95% of base) : 11662.dasm - System.Collections.Concurrent.ConcurrentQueue`1[ubyte]:.ctor(System.Collections.Generic.IEnumerable`1[ubyte]):this (FullOpts) 7 ( 0.63% of base) : 177428.dasm - Microsoft.CodeAnalysis.RealParser:ConvertDecimalToFloatingPointBits(Microsoft.CodeAnalysis.RealParser+DecimalFloatingPointString,Microsoft.CodeAnalysis.RealParser+FloatingPointType,byref):int (FullOpts) 7 ( 0.63% of base) : 132105.dasm - Microsoft.CodeAnalysis.RealParser:ConvertDecimalToFloatingPointBits(Microsoft.CodeAnalysis.RealParser+DecimalFloatingPointString,Microsoft.CodeAnalysis.RealParser+FloatingPointType,byref):int (FullOpts) 7 ( 2.88% of base) : 286523.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 205592.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 257823.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 286566.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.27% of base) : 171155.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 263469.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 282257.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 125648.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 278286.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 256327.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 239688.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 256226.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 227489.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 5 ( 1.09% of base) : 177226.dasm - Microsoft.CodeAnalysis.AssemblyIdentity:TryParseDisplayName(System.String,byref,byref):bool (FullOpts) 5 (26.32% of base) : 189536.dasm - Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts) 5 (26.32% of base) : 145114.dasm - Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts) Top method regressions (percentages): 5 (26.32% of base) : 189536.dasm - Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts) 5 (26.32% of base) : 145114.dasm - Microsoft.CodeAnalysis.CommonCompiler+ExistingReferencesResolver+<>c:<.ctor>b__3_2(<>f__AnonymousType0`2[Microsoft.CodeAnalysis.MetadataReference,Microsoft.CodeAnalysis.AssemblyIdentity]):bool:this (FullOpts) 7 ( 2.88% of base) : 286523.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 205592.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 257823.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 286566.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 263469.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 282257.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 125648.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 278286.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 256327.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 239688.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 256226.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 227489.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.27% of base) : 171155.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 8 ( 1.95% of base) : 11662.dasm - System.Collections.Concurrent.ConcurrentQueue`1[ubyte]:.ctor(System.Collections.Generic.IEnumerable`1[ubyte]):this (FullOpts) 5 ( 1.09% of base) : 177226.dasm - Microsoft.CodeAnalysis.AssemblyIdentity:TryParseDisplayName(System.String,byref,byref):bool (FullOpts) 7 ( 0.63% of base) : 177428.dasm - Microsoft.CodeAnalysis.RealParser:ConvertDecimalToFloatingPointBits(Microsoft.CodeAnalysis.RealParser+DecimalFloatingPointString,Microsoft.CodeAnalysis.RealParser+FloatingPointType,byref):int (FullOpts) 7 ( 0.63% of base) : 132105.dasm - Microsoft.CodeAnalysis.RealParser:ConvertDecimalToFloatingPointBits(Microsoft.CodeAnalysis.RealParser+DecimalFloatingPointString,Microsoft.CodeAnalysis.RealParser+FloatingPointType,byref):int (FullOpts) 19 total methods with Code Size differences (0 improved, 19 regressed). ```
--------------------------------------------------------------------------------
libraries_tests.pmi.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 115330150 (overridden on cmd) Total bytes of diff: 115330248 (overridden on cmd) Total bytes of delta: 98 (0.00 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 27 : 235902.dasm (2.26% of base) 12 : 224212.dasm (3.95% of base) 12 : 224210.dasm (4.62% of base) 7 : 289316.dasm (2.88% of base) 7 : 322769.dasm (2.88% of base) 7 : 230847.dasm (2.88% of base) 7 : 211495.dasm (2.88% of base) 7 : 323481.dasm (2.27% of base) 7 : 337372.dasm (2.88% of base) 5 : 74049.dasm (1.88% of base) 10 total files with Code Size differences (0 improved, 10 regressed), 2 unchanged. Top method regressions (bytes): 27 ( 2.26% of base) : 235902.dasm - System.Net.Sockets.Tests.UdpClientTest:UdpReceiveResult_Equality():this (FullOpts) 12 ( 3.95% of base) : 224212.dasm - System.Memory.Tests.SequencePositionTests:ComparisonMembers_NotEquals():this (FullOpts) 12 ( 4.62% of base) : 224210.dasm - System.Memory.Tests.SequencePositionTests:ComparisonMembers_NullSegment():this (FullOpts) 7 ( 2.88% of base) : 289316.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 322769.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 230847.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 211495.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.27% of base) : 323481.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 337372.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 5 ( 1.88% of base) : 74049.dasm - Microsoft.CodeAnalysis.Rename.ConflictResolution:.ctor(Microsoft.CodeAnalysis.Solution,Microsoft.CodeAnalysis.Solution,bool,System.ValueTuple`2[Microsoft.CodeAnalysis.DocumentId,System.String],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.DocumentId],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.Text.TextSpan,Microsoft.CodeAnalysis.Text.TextSpan]]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.ComplexifiedSpan]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation]]):this (FullOpts) Top method regressions (percentages): 12 ( 4.62% of base) : 224210.dasm - System.Memory.Tests.SequencePositionTests:ComparisonMembers_NullSegment():this (FullOpts) 12 ( 3.95% of base) : 224212.dasm - System.Memory.Tests.SequencePositionTests:ComparisonMembers_NotEquals():this (FullOpts) 7 ( 2.88% of base) : 289316.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 322769.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 230847.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 211495.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.88% of base) : 337372.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 7 ( 2.27% of base) : 323481.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts) 27 ( 2.26% of base) : 235902.dasm - System.Net.Sockets.Tests.UdpClientTest:UdpReceiveResult_Equality():this (FullOpts) 5 ( 1.88% of base) : 74049.dasm - Microsoft.CodeAnalysis.Rename.ConflictResolution:.ctor(Microsoft.CodeAnalysis.Solution,Microsoft.CodeAnalysis.Solution,bool,System.ValueTuple`2[Microsoft.CodeAnalysis.DocumentId,System.String],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.DocumentId],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.Text.TextSpan,Microsoft.CodeAnalysis.Text.TextSpan]]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.ComplexifiedSpan]],System.Collections.Immutable.ImmutableDictionary`2[Microsoft.CodeAnalysis.DocumentId,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Rename.ConflictEngine.RelatedLocation]]):this (FullOpts) 10 total methods with Code Size differences (0 improved, 10 regressed). ```
--------------------------------------------------------------------------------

Checking the diffs it's quite clear that the JIT has a tendency to mark blocks as run rarely based on very little evidence, e.g. Math.Min in benchmarks.run_pgo has a fgCalledCount = 4 and still has a block marked as rarely run. Similarly for System.Int32.CompareTo. I think I will move this item to future for now.