Assembly Diffs

linux arm

Diffs are based on 2,242,891 contexts (830,236 MinOpts, 1,412,655 FullOpts).

MISSED contexts: base: 73,620 (3.18%), diff: 73,633 (3.18%)

Overall (-78 bytes)

Collection Base size (bytes) Diff size (bytes)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 94,374,878 -78

FullOpts (-78 bytes)

Collection Base size (bytes) Diff size (bytes)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 84,345,052 -78

Example diffs

librariestestsnotieredcompilation.run.linux.arm.Release.mch

-78 (-43.82%) : 33176.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,19 +14,19 @@ ;# 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,T06] ( 3, 3 ) ref -> r6 class-hnd single-def "bubbling QMark2" <System.Predicate`1[System.__Canon]>
-; V06 tmp3 [V06,T10] ( 3, 1.25) int -> r3 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T09] ( 3, 1.25) int -> r7 "fgMakeTemp is creating a new local variable"
; V07 tmp4 [V07,T04] ( 5, 3.75) ref -> r1 class-hnd "spilling QMark2" <System.__Canon>
-;* V08 tmp5 [V08,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V09 tmp6 [V09,T08] ( 4, 2 ) ref -> r6 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> -; V10 cse0 [V10,T07] ( 5, 2.25) int -> r7 multi-def "CSE - aggressive"
+;* V08 tmp5 [V08,T10] ( 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 cse0 [V10,T07] ( 4, 1.75) int -> r7 multi-def "CSE - aggressive"
; V11 cse1 [V11,T05] ( 3, 2 ) int -> r6 "CSE - aggressive" ;* V12 rat0 [V12,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V13 rat1 [V13,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V13 rat1 [V13,T08] ( 0, 0 ) int -> zero-ref "runtime lookup"
;* V14 rat2 [V14,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] @@ -38,12 +38,13 @@ 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]
+ ldr r0, [r0]
ldr r7, [r0]
- ldr r0, [r7]
+ mov r0, r7
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff @@ -52,72 +53,34 @@ 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=24 bbWeight=0.50 PerfScore 5.00 -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]
- ldr 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=82 bbWeight=0.50 PerfScore 15.50 -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]
- ldr r3, [r7] - cmp r0, r3 - beq SHORT G_M40899_IG08 - ;; size=8 bbWeight=0.25 PerfScore 1.00 -G_M40899_IG07: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
+ cmp r0, r7 + beq SHORT G_M40899_IG09 + ;; size=6 bbWeight=0.25 PerfScore 0.75 +G_M40899_IG08: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
; gcrRegs -[r1]
- mov r0, r3
+ mov r0, r7
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff @@ -128,27 +91,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 178, prolog size 16, PerfScore 35.75, instruction count 70, allocated bytes for code 178 (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: @@ -160,16 +116,16 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 89 (0x00059) Actual length = 178 (0x0000b2)
+ 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 -78 +0
realworld.run.linux.arm.checked.mch 0 0 0 0 -0 +0
1 1 0 0 -78 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm.checked.mch 45,558 5,109 40,449 1,189 (2.54%) 1,189 (2.54%)
benchmarks.run_pgo.linux.arm.checked.mch 160,880 59,255 101,625 3,263 (1.99%) 3,263 (1.99%)
benchmarks.run_tiered.linux.arm.checked.mch 77,452 41,903 35,549 1,072 (1.37%) 1,072 (1.37%)
coreclr_tests.run.linux.arm.checked.mch 472,712 259,492 213,220 7,204 (1.50%) 7,204 (1.50%)
libraries.crossgen2.linux.arm.checked.mch 191,612 14 191,598 0 (0.00%) 1 (0.00%)
libraries.pmi.linux.arm.checked.mch 273,479 6 273,473 7,833 (2.78%) 7,833 (2.78%)
libraries_tests.run.linux.arm.Release.mch 710,136 442,685 267,451 18,089 (2.48%) 18,097 (2.49%)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 274,664 21,625 253,039 33,556 (10.89%) 33,560 (10.89%)
realworld.run.linux.arm.checked.mch 36,398 147 36,251 1,414 (3.74%) 1,414 (3.74%)
2,242,891 830,236 1,412,655 73,620 (3.18%) 73,633 (3.18%)

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: 94374878 (overridden on cmd)
Total bytes of diff: 94374800 (overridden on cmd)
Total bytes of delta: -78 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -78 : 33176.dasm (-43.82 % of base)

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

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

Top method improvements (percentages):
         -78 (-43.82 % of base) : 33176.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,599,900 contexts (1,005,465 MinOpts, 1,594,435 FullOpts).

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

Overall (-199 bytes)

Collection Base size (bytes) Diff size (bytes)
libraries_tests.run.windows.x86.Release.mch 198,337,512 -45
librariestestsnotieredcompilation.run.windows.x86.Release.mch 113,331,594 -154

FullOpts (-199 bytes)

Collection Base size (bytes) Diff size (bytes)
libraries_tests.run.windows.x86.Release.mch 93,832,270 -45
librariestestsnotieredcompilation.run.windows.x86.Release.mch 104,401,775 -154

Example diffs

libraries_tests.run.windows.x86.Release.mch

-15 (-9.55%) : 553226.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 62
-; 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 (-9.55%) : 554314.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 (-8.20%) : 553212.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> @@ -90,12 +90,6 @@ G_M33676_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_M33676_IG05 - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[ecx] test eax, eax @@ -110,7 +104,7 @@ G_M33676_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi test ecx, ecx je SHORT G_M33676_IG04 jmp SHORT G_M33676_IG05
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M33676_IG11: ; bbWeight=0, gcrefRegs=00000084 {edx edi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax esi] +[edx] push esi @@ -138,6 +132,6 @@ G_M33676_IG12: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 jmp SHORT G_M33676_IG08 ;; 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%) : 49937.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)
; ============================================================

-15 (-12.82%) : 63999.dasm - Moq.Match`1[int]: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[int]> @@ -44,12 +44,6 @@ G_M9654_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00 ; gcrRegs +[esi edi] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[ecx] - test eax, eax - je SHORT G_M9654_IG06 - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[ecx] test eax, eax @@ -60,7 +54,7 @@ G_M9654_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00 ; gcrRegs -[ecx] +[eax] cmp eax, 0xD1FFAB1E jne SHORT G_M9654_IG10
- ;; size=48 bbWeight=0.50 PerfScore 6.75
+ ;; size=33 bbWeight=0.50 PerfScore 4.50
G_M9654_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_M9654_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=7193da49) for method Moq.Match`1[int]: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=7193da49) for method Moq.Match`1[int]: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 4 4 0 0 -154 +0
realworld.run.windows.x86.checked.mch 0 0 0 0 -0 +0
7 7 0 0 -199 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.x86.checked.mch 35,457 7 35,450 0 (0.00%) 0 (0.00%)
benchmarks.run_pgo.windows.x86.checked.mch 164,077 68,181 95,896 0 (0.00%) 0 (0.00%)
benchmarks.run_tiered.windows.x86.checked.mch 71,260 44,050 27,210 0 (0.00%) 0 (0.00%)
coreclr_tests.run.windows.x86.checked.mch 668,880 399,413 269,467 0 (0.00%) 0 (0.00%)
libraries.crossgen2.windows.x86.checked.mch 273,635 15 273,620 0 (0.00%) 1 (0.00%)
libraries.pmi.windows.x86.checked.mch 307,081 6 307,075 0 (0.00%) 8 (0.00%)
libraries_tests.run.windows.x86.Release.mch 691,838 471,420 220,418 0 (0.00%) 11 (0.00%)
librariestestsnotieredcompilation.run.windows.x86.Release.mch 351,669 22,370 329,299 0 (0.00%) 6 (0.00%)
realworld.run.windows.x86.checked.mch 36,003 3 36,000 0 (0.00%) 0 (0.00%)
2,599,900 1,005,465 1,594,435 0 (0.00%) 26 (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: 198337512 (overridden on cmd)
Total bytes of diff: 198337467 (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 : 554314.dasm (-9.55 % of base)
         -15 : 553212.dasm (-8.20 % of base)
         -15 : 553226.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) : 553212.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
         -15 (-9.55 % of base) : 553226.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -15 (-9.55 % of base) : 554314.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) : 553226.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -15 (-9.55 % of base) : 554314.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -15 (-8.20 % of base) : 553212.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: 113331594 (overridden on cmd)
Total bytes of diff: 113331440 (overridden on cmd)
Total bytes of delta: -154 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -62 : 49850.dasm (-38.75 % of base)
         -62 : 41209.dasm (-38.75 % of base)
         -15 : 63999.dasm (-12.82 % of base)
         -15 : 49937.dasm (-12.82 % of base)

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

Top method improvements (bytes):
         -62 (-38.75 % of base) : 49850.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -62 (-38.75 % of base) : 41209.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -15 (-12.82 % of base) : 63999.dasm - Moq.Match`1[int]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -15 (-12.82 % of base) : 49937.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

Top method improvements (percentages):
         -62 (-38.75 % of base) : 49850.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -62 (-38.75 % of base) : 41209.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -15 (-12.82 % of base) : 63999.dasm - Moq.Match`1[int]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -15 (-12.82 % of base) : 49937.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

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