Assembly Diffs

linux arm

Diffs are based on 2,250,497 contexts (832,187 MinOpts, 1,418,310 FullOpts).

MISSED contexts: base: 73,582 (3.17%), diff: 73,597 (3.17%)

Overall (-80 bytes)

Collection Base size (bytes) Diff size (bytes)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 94,233,016 -80

FullOpts (-80 bytes)

Collection Base size (bytes) Diff size (bytes)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 84,203,152 -80

Example diffs

librariestestsnotieredcompilation.run.linux.arm.Release.mch

-80 (-44.44%) : 33178.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

@@ -5,7 +5,7 @@ ; r11 based frame ; fully interruptible ; No matching PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments ; ; V00 this [V00,T02] ( 4, 3.50) ref -> r5 this class-hnd single-def <Moq.Match`1[System.__Canon]> @@ -14,20 +14,20 @@ ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V05 tmp2 [V05,T05] ( 3, 3 ) ref -> r6 class-hnd single-def "bubbling QMark2" <System.Predicate`1[System.__Canon]>
-; V06 tmp3 [V06,T11] ( 3, 1.25) int -> r7 "fgMakeTemp is creating a new local variable" -; V07 tmp4 [V07,T08] ( 2, 2 ) ref -> r1 class-hnd single-def "spilling QMark2" <System.__Canon> -;* V08 tmp5 [V08,T12] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V09 tmp6 [V09,T07] ( 4, 2 ) ref -> r6 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> -; V10 tmp7 [V10,T10] ( 5, 1.88) ref -> r1 "CastInstOf QMark result" -; V11 cse0 [V11,T06] ( 5, 2.25) int -> r7 multi-def "CSE - aggressive"
+; V06 tmp3 [V06,T10] ( 3, 1.25) int -> r7 "fgMakeTemp is creating a new local variable" +; V07 tmp4 [V07,T07] ( 2, 2 ) ref -> r1 class-hnd single-def "spilling QMark2" <System.__Canon> +;* V08 tmp5 [V08,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> +; V10 tmp7 [V10,T09] ( 5, 1.88) ref -> r1 "CastInstOf QMark result" +; V11 cse0 [V11,T06] ( 4, 1.75) int -> r7 multi-def "CSE - aggressive"
; V12 cse1 [V12,T04] ( 3, 2 ) int -> r6 "CSE - aggressive" ;* V13 rat0 [V13,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V14 rat1 [V14,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V14 rat1 [V14,T08] ( 0, 0 ) int -> zero-ref "runtime lookup"
;* V15 rat2 [V15,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" ; ; Lcl frame size = 8
-G_M40899_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M40899_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r2,r3,r4,r5,r6,r7,r11,lr} add r11, sp, 24 str r0, [r11-0x14] @@ -39,7 +39,7 @@ G_M40899_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref G_M40899_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz ldr r6, [r5] cmp r4, 0
- beq SHORT G_M40899_IG04
+ beq SHORT G_M40899_IG05
;; size=6 bbWeight=1 PerfScore 3.00 G_M40899_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz ldr r0, [r6+0x24] @@ -54,70 +54,32 @@ G_M40899_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {} ; gcrRegs -[r1] +[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M40899_IG10 - b SHORT G_M40899_IG05 - ;; size=26 bbWeight=0.50 PerfScore 5.50 -G_M40899_IG04: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
+ bne SHORT G_M40899_IG06 + movs r0, 0
; gcrRegs -[r0]
+ ;; size=26 bbWeight=0.50 PerfScore 5.50 +G_M40899_IG04: ; bbWeight=0.50, epilog, nogc, extend + pop {r2,r3,r4,r5,r6,r7,r11,pc} + ;; size=4 bbWeight=0.50 PerfScore 0.50 +G_M40899_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref
ldr r0, [r6+0x24] ldr r0, [r0] ldr r7, [r0]
- mov r0, r7 - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE - ; gcrRegs +[r0] - ; gcr arg pop 0 - mov r6, r0 - ; gcrRegs +[r6] - mov r0, r6 - movw r3, 0xd1ff - movt r3, 0xd1ff - ldr r3, [r3] - ldr r2, [r0] - blx r3 // System.RuntimeType:IsValueTypeImpl():ubyte:this - ; gcrRegs -[r0] - ; gcr arg pop 0 - cmp r0, 0 - beq SHORT G_M40899_IG05 - mov r0, r6 - ; gcrRegs +[r0] - movw r3, 0xd1ff - movt r3, 0xd1ff - ldr r3, [r3] - blx r3 // System.RuntimeType:get_IsGenericType():ubyte:this - ; gcrRegs -[r0] - ; gcr arg pop 0 - cmp r0, 0 - beq SHORT G_M40899_IG10 - mov r0, r6 - ; gcrRegs +[r0] - movw r3, 0xd1ff - movt r3, 0xd1ff - ldr r3, [r3] - blx r3 // System.RuntimeType:GetGenericTypeDefinition():System.Type:this - ; gcrRegs -[r6] - ; gcr arg pop 0 - movw r1, 0xd1ff - movt r1, 0xd1ff - cmp r0, r1 - bne SHORT G_M40899_IG10 - ;; size=84 bbWeight=0.50 PerfScore 16.00 -G_M40899_IG05: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0]
+ ;; size=6 bbWeight=0.50 PerfScore 1.50 +G_M40899_IG06: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r6, [r5+0x08] ; gcrRegs +[r6] mov r1, r4 ; gcrRegs +[r1] cmp r1, 0
- beq SHORT G_M40899_IG08
+ beq SHORT G_M40899_IG09
;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M40899_IG06: ; bbWeight=0.25, gcrefRegs=0072 {r1 r4 r5 r6}, byrefRegs=0000 {}, byref, isz
+G_M40899_IG07: ; bbWeight=0.25, gcrefRegs=0072 {r1 r4 r5 r6}, byrefRegs=0000 {}, byref, isz
ldr r0, [r1] cmp r0, r7
- beq SHORT G_M40899_IG08
+ beq SHORT G_M40899_IG09
;; size=6 bbWeight=0.25 PerfScore 0.75
-G_M40899_IG07: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
+G_M40899_IG08: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
; gcrRegs -[r1] mov r0, r7 mov r1, r4 @@ -130,27 +92,20 @@ G_M40899_IG07: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 mov r1, r0 ; gcrRegs +[r1] ;; size=16 bbWeight=0.12 PerfScore 0.75
-G_M40899_IG08: ; bbWeight=0.50, gcrefRegs=0062 {r1 r5 r6}, byrefRegs=0000 {}, byref
+G_M40899_IG09: ; bbWeight=0.50, gcrefRegs=0062 {r1 r5 r6}, byrefRegs=0000 {}, byref
; gcrRegs -[r0] ldr r0, [r6+0x04] ; gcrRegs +[r0] ldr r3, [r6+0x0C] ;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M40899_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M40899_IG10: ; bbWeight=0.50, epilog, nogc, extend
add sp, 8 pop {r4,r5,r6,r7,r11,lr} bx r3 // <unknown method> ; gcr arg pop 0 ;; size=8 bbWeight=0.50 PerfScore 1.50
-G_M40899_IG10: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[r0-r1 r6] - movs r0, 0 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M40899_IG11: ; bbWeight=0.50, epilog, nogc, extend - pop {r2,r3,r4,r5,r6,r7,r11,pc} - ;; size=4 bbWeight=0.50 PerfScore 0.50
-; Total bytes of code 180, prolog size 16, PerfScore 36.50, instruction count 71, allocated bytes for code 180 (MethodHash=cd6c603c) for method Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 100, prolog size 16, PerfScore 21.50, instruction count 41, allocated bytes for code 100 (MethodHash=cd6c603c) for method Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -162,16 +117,16 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 90 (0x0005a) Actual length = 180 (0x0000b4)
+ Function Length : 50 (0x00032) Actual length = 100 (0x000064)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) Condition : 14 (0xe) (always)
- Epilog Start Index : 3 (0x03)
+ Epilog Start Index : 0 (0x00)
---- Scope 1 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) Condition : 14 (0xe) (always)
- Epilog Start Index : 0 (0x00)
+ Epilog Start Index : 3 (0x03)
---- Unwind codes ---- ---- Epilog start at index 0 ---- A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo.linux.arm.checked.mch 0 0 0 0 -0 +0
benchmarks.run_tiered.linux.arm.checked.mch 0 0 0 0 -0 +0
coreclr_tests.run.linux.arm.checked.mch 0 0 0 0 -0 +0
libraries.crossgen2.linux.arm.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.arm.checked.mch 0 0 0 0 -0 +0
libraries_tests.run.linux.arm.Release.mch 0 0 0 0 -0 +0
librariestestsnotieredcompilation.run.linux.arm.Release.mch 1 1 0 0 -80 +0
realworld.run.linux.arm.checked.mch 0 0 0 0 -0 +0
1 1 0 0 -80 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm.checked.mch 50,989 6,738 44,251 1,277 (2.44%) 1,277 (2.44%)
benchmarks.run_pgo.linux.arm.checked.mch 164,943 59,003 105,940 3,254 (1.93%) 3,254 (1.93%)
benchmarks.run_tiered.linux.arm.checked.mch 77,426 41,851 35,575 1,061 (1.35%) 1,061 (1.35%)
coreclr_tests.run.linux.arm.checked.mch 472,420 259,271 213,149 7,207 (1.50%) 7,207 (1.50%)
libraries.crossgen2.linux.arm.checked.mch 189,603 14 189,589 0 (0.00%) 1 (0.00%)
libraries.pmi.linux.arm.checked.mch 274,270 6 274,264 7,835 (2.78%) 7,835 (2.78%)
libraries_tests.run.linux.arm.Release.mch 709,952 443,604 266,348 17,932 (2.46%) 17,942 (2.46%)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 274,704 21,625 253,079 33,604 (10.90%) 33,608 (10.90%)
realworld.run.linux.arm.checked.mch 36,190 75 36,115 1,412 (3.76%) 1,412 (3.76%)
2,250,497 832,187 1,418,310 73,582 (3.17%) 73,597 (3.17%)

jit-analyze output

librariestestsnotieredcompilation.run.linux.arm.Release.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 94233016 (overridden on cmd)
Total bytes of diff: 94232936 (overridden on cmd)
Total bytes of delta: -80 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -80 : 33178.dasm (-44.44 % of base)

1 total files with Code Size differences (1 improved, 0 regressed), 0 unchanged.

Top method improvements (bytes):
         -80 (-44.44 % of base) : 33178.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

Top method improvements (percentages):
         -80 (-44.44 % of base) : 33178.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

1 total methods with Code Size differences (1 improved, 0 regressed).



windows x86

Diffs are based on 2,354,228 contexts (851,833 MinOpts, 1,502,395 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 24 (0.00%)

Overall (-121 bytes)

Collection Base size (bytes) Diff size (bytes)
libraries_tests.run.windows.x86.Release.mch 190,248,273 -45
librariestestsnotieredcompilation.run.windows.x86.Release.mch 104,013,755 -76

FullOpts (-121 bytes)

Collection Base size (bytes) Diff size (bytes)
libraries_tests.run.windows.x86.Release.mch 91,155,217 -45
librariestestsnotieredcompilation.run.windows.x86.Release.mch 95,338,820 -76

Example diffs

libraries_tests.run.windows.x86.Release.mch

-15 (-9.55%) : 505185.dasm - Moq.Match1[System.ReadOnlyMemory1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -6,7 +6,7 @@ ; ebp based frame ; partially interruptible ; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 5
-; 1 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 1 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments ; ; V00 this [V00,T01] ( 3, 3 ) ref -> edi this class-hnd single-def <Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]> @@ -90,12 +90,6 @@ G_M6273_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi e ; gcrRegs +[esi edi] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[ecx] - test eax, eax - je SHORT G_M6273_IG03 - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[ecx] test eax, eax @@ -110,7 +104,7 @@ G_M6273_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi e test ecx, ecx je SHORT G_M6273_IG08 jmp SHORT G_M6273_IG03
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M6273_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax esi] +[ebx] push esi @@ -124,6 +118,6 @@ G_M6273_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000 jmp SHORT G_M6273_IG06 ;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 157, prolog size 6, PerfScore 31.25, instruction count 58, allocated bytes for code 157 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 142, prolog size 6, PerfScore 31.25, instruction count 54, allocated bytes for code 142 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================

-15 (-9.55%) : 504443.dasm - Moq.Match1[System.Memory1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -6,7 +6,7 @@ ; ebp based frame ; partially interruptible ; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 78
-; 1 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 1 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments ; ; V00 this [V00,T01] ( 3, 3 ) ref -> edi this class-hnd single-def <Moq.Match`1[System.Memory`1[ubyte]]> @@ -90,12 +90,6 @@ G_M16199_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi ; gcrRegs +[esi edi] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[ecx] - test eax, eax - je SHORT G_M16199_IG03 - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[ecx] test eax, eax @@ -110,7 +104,7 @@ G_M16199_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi test ecx, ecx je SHORT G_M16199_IG08 jmp SHORT G_M16199_IG03
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M16199_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax esi] +[ebx] push esi @@ -124,6 +118,6 @@ G_M16199_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=0000 jmp SHORT G_M16199_IG06 ;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 157, prolog size 6, PerfScore 31.25, instruction count 58, allocated bytes for code 157 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 142, prolog size 6, PerfScore 31.25, instruction count 54, allocated bytes for code 142 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================

-15 (-8.20%) : 504427.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -4,7 +4,7 @@ ; optimized code ; ebp based frame ; partially interruptible
-; 2 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 2 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments ; ; V00 this [V00,T01] ( 6, 3.50) ref -> edi this class-hnd single-def <Moq.Match> @@ -92,12 +92,6 @@ G_M33676_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi ; gcrRegs +[esi edi] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[ecx] - test eax, eax - je SHORT G_M33676_IG04 - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[ecx] test eax, eax @@ -112,7 +106,7 @@ G_M33676_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi test ecx, ecx je SHORT G_M33676_IG09 jmp SHORT G_M33676_IG04
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M33676_IG13: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax esi] +[ebx] push esi @@ -140,6 +134,6 @@ G_M33676_IG14: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 jmp SHORT G_M33676_IG10 ;; size=19 bbWeight=0 PerfScore 0.00
-; Total bytes of code 183, prolog size 6, PerfScore 25.25, instruction count 64, allocated bytes for code 183 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 168, prolog size 6, PerfScore 25.25, instruction count 60, allocated bytes for code 168 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================

librariestestsnotieredcompilation.run.windows.x86.Release.mch

-15 (-12.82%) : 40729.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

@@ -5,7 +5,7 @@ ; ebp based frame ; partially interruptible ; No matching PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments ; ; V00 this [V00,T01] ( 3, 2.50) ref -> edi this class-hnd single-def <Moq.Match`1[System.Threading.CancellationToken]> @@ -44,12 +44,6 @@ G_M42274_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 ; gcrRegs +[esi edi] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[ecx] - test eax, eax - je SHORT G_M42274_IG06 - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[ecx] test eax, eax @@ -60,7 +54,7 @@ G_M42274_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 ; gcrRegs -[ecx] +[eax] cmp eax, 0xD1FFAB1E jne SHORT G_M42274_IG10
- ;; size=48 bbWeight=0.50 PerfScore 6.75
+ ;; size=33 bbWeight=0.50 PerfScore 4.50
G_M42274_IG06: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax] mov edi, gword ptr [edi+0x08] @@ -97,6 +91,6 @@ G_M42274_IG11: ; bbWeight=0.50, epilog, nogc, extend ret 4 ;; size=6 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 117, prolog size 5, PerfScore 24.75, instruction count 41, allocated bytes for code 117 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 102, prolog size 5, PerfScore 22.50, instruction count 37, allocated bytes for code 102 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.x86.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo.windows.x86.checked.mch 0 0 0 0 -0 +0
benchmarks.run_tiered.windows.x86.checked.mch 0 0 0 0 -0 +0
coreclr_tests.run.windows.x86.checked.mch 0 0 0 0 -0 +0
libraries.crossgen2.windows.x86.checked.mch 0 0 0 0 -0 +0
libraries.pmi.windows.x86.checked.mch 0 0 0 0 -0 +0
libraries_tests.run.windows.x86.Release.mch 3 3 0 0 -45 +0
librariestestsnotieredcompilation.run.windows.x86.Release.mch 2 2 0 0 -76 +0
realworld.run.windows.x86.checked.mch 0 0 0 0 -0 +0
5 5 0 0 -121 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.x86.checked.mch 24,694 4 24,690 0 (0.00%) 0 (0.00%)
benchmarks.run_pgo.windows.x86.checked.mch 123,995 42,622 81,373 0 (0.00%) 0 (0.00%)
benchmarks.run_tiered.windows.x86.checked.mch 48,297 29,031 19,266 0 (0.00%) 0 (0.00%)
coreclr_tests.run.windows.x86.checked.mch 585,246 326,478 258,768 0 (0.00%) 0 (0.00%)
libraries.crossgen2.windows.x86.checked.mch 273,594 15 273,579 0 (0.00%) 1 (0.00%)
libraries.pmi.windows.x86.checked.mch 307,483 6 307,477 0 (0.00%) 8 (0.00%)
libraries_tests.run.windows.x86.Release.mch 638,032 431,743 206,289 0 (0.00%) 9 (0.00%)
librariestestsnotieredcompilation.run.windows.x86.Release.mch 316,856 21,931 294,925 0 (0.00%) 6 (0.00%)
realworld.run.windows.x86.checked.mch 36,031 3 36,028 0 (0.00%) 0 (0.00%)
2,354,228 851,833 1,502,395 0 (0.00%) 24 (0.00%)

jit-analyze output

libraries_tests.run.windows.x86.Release.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 190248273 (overridden on cmd)
Total bytes of diff: 190248228 (overridden on cmd)
Total bytes of delta: -45 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -15 : 504427.dasm (-8.20 % of base)
         -15 : 505185.dasm (-9.55 % of base)
         -15 : 504443.dasm (-9.55 % of base)

3 total files with Code Size differences (3 improved, 0 regressed), 0 unchanged.

Top method improvements (bytes):
         -15 (-8.20 % of base) : 504427.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
         -15 (-9.55 % of base) : 504443.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -15 (-9.55 % of base) : 505185.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

Top method improvements (percentages):
         -15 (-9.55 % of base) : 504443.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -15 (-9.55 % of base) : 505185.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -15 (-8.20 % of base) : 504427.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)

3 total methods with Code Size differences (3 improved, 0 regressed).


librariestestsnotieredcompilation.run.windows.x86.Release.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 104013755 (overridden on cmd)
Total bytes of diff: 104013679 (overridden on cmd)
Total bytes of delta: -76 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -61 : 33556.dasm (-38.36 % of base)
         -15 : 40729.dasm (-12.82 % of base)

2 total files with Code Size differences (2 improved, 0 regressed), 0 unchanged.

Top method improvements (bytes):
         -61 (-38.36 % of base) : 33556.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -15 (-12.82 % of base) : 40729.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

Top method improvements (percentages):
         -61 (-38.36 % of base) : 33556.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -15 (-12.82 % of base) : 40729.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

2 total methods with Code Size differences (2 improved, 0 regressed).