Assembly Diffs

linux arm64

Diffs are based on 2,544,323 contexts (1,012,486 MinOpts, 1,531,837 FullOpts).

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

Overall (-260 bytes)

Collection Base size (bytes) Diff size (bytes)
libraries_tests.run.linux.arm64.Release.mch 383,425,724 -108
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 165,117,628 -152

FullOpts (-260 bytes)

Collection Base size (bytes) Diff size (bytes)
libraries_tests.run.linux.arm64.Release.mch 167,614,840 -108
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 151,714,824 -152

Example diffs

libraries_tests.run.linux.arm64.Release.mch

-36 (-10.98%) : 579422.dasm - Moq.Match1[System.Memory1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -6,7 +6,7 @@ ; fp based frame ; fully interruptible ; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 36
-; 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 -> x20 this class-hnd single-def <Moq.Match`1[System.Memory`1[ubyte]]> @@ -99,16 +99,6 @@ G_M16199_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- movz x1, #0xD1FFAB1E // code for System.RuntimeType:IsValueTypeImpl():ubyte:this - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - ldr x1, [x1] - blr x1 - ; gcr arg pop 0 - cbz w0, G_M16199_IG03 - movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:get_IsGenericType():ubyte:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -133,7 +123,7 @@ G_M16199_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 cset x1, eq cbz w1, G_M16199_IG07 b G_M16199_IG03
- ;; size=132 bbWeight=0 PerfScore 0.00
+ ;; size=96 bbWeight=0 PerfScore 0.00
G_M16199_IG10: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref ; gcrRegs -[x0 x19] ldp x1, x2, [fp, #0x10] // [V06 tmp3], [V06 tmp3+0x08] @@ -149,7 +139,7 @@ G_M16199_IG11: ; bbWeight=0, epilog, nogc, extend ; gcr arg pop 0 ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 328, prolog size 24, PerfScore 39.50, instruction count 82, allocated bytes for code 328 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 292, prolog size 24, PerfScore 39.50, instruction count 73, allocated bytes for code 292 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -160,7 +150,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 82 (0x00052) Actual length = 328 (0x000148)
+ Function Length : 73 (0x00049) Actual length = 292 (0x000124)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-36 (-10.98%) : 579942.dasm - Moq.Match1[System.ReadOnlyMemory1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -6,7 +6,7 @@ ; fp based frame ; fully 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 -> x20 this class-hnd single-def <Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]> @@ -99,16 +99,6 @@ G_M6273_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- movz x1, #0xD1FFAB1E // code for System.RuntimeType:IsValueTypeImpl():ubyte:this - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - ldr x1, [x1] - blr x1 - ; gcr arg pop 0 - cbz w0, G_M6273_IG03 - movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:get_IsGenericType():ubyte:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -133,7 +123,7 @@ G_M6273_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 cset x1, eq cbz w1, G_M6273_IG07 b G_M6273_IG03
- ;; size=132 bbWeight=0 PerfScore 0.00
+ ;; size=96 bbWeight=0 PerfScore 0.00
G_M6273_IG10: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref ; gcrRegs -[x0 x19] ldp x1, x2, [fp, #0x10] // [V06 tmp3], [V06 tmp3+0x08] @@ -149,7 +139,7 @@ G_M6273_IG11: ; bbWeight=0, epilog, nogc, extend ; gcr arg pop 0 ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 328, prolog size 24, PerfScore 39.50, instruction count 82, allocated bytes for code 328 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 292, prolog size 24, PerfScore 39.50, instruction count 73, allocated bytes for code 292 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -160,7 +150,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 82 (0x00052) Actual length = 328 (0x000148)
+ Function Length : 73 (0x00049) Actual length = 292 (0x000124)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-36 (-9.00%) : 579412.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -4,7 +4,7 @@ ; optimized code ; fp based frame ; fully 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 -> x20 this class-hnd single-def <Moq.Match> @@ -127,16 +127,6 @@ G_M33676_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- movz x1, #0xD1FFAB1E // code for System.RuntimeType:IsValueTypeImpl():ubyte:this - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - ldr x1, [x1] - blr x1 - ; gcr arg pop 0 - cbz w0, G_M33676_IG05 - movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:get_IsGenericType():ubyte:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -162,7 +152,7 @@ G_M33676_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 ; gcrRegs -[x0] cbz w0, G_M33676_IG04 b G_M33676_IG05
- ;; size=132 bbWeight=0 PerfScore 0.00
+ ;; size=96 bbWeight=0 PerfScore 0.00
G_M33676_IG13: ; bbWeight=0, gcrefRegs=180004 {x2 x19 x20}, byrefRegs=0000 {}, byref ; gcrRegs +[x2] mov x0, x20 @@ -181,7 +171,7 @@ G_M33676_IG14: ; bbWeight=0, epilog, nogc, extend ; gcr arg pop 0 ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 400, prolog size 28, PerfScore 38.50, instruction count 100, allocated bytes for code 400 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 364, prolog size 28, PerfScore 38.50, instruction count 91, allocated bytes for code 364 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -192,7 +182,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 100 (0x00064) Actual length = 400 (0x000190)
+ Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

librariestestsnotieredcompilation.run.linux.arm64.Release.mch

-36 (-13.64%) : 40129.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

@@ -5,7 +5,7 @@ ; fp 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,T01] ( 3, 2.50) ref -> x20 this class-hnd single-def <Moq.Match`1[System.Threading.CancellationToken]> @@ -13,23 +13,21 @@ ;* V02 arg2 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Type> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T02] ( 3, 3 ) ref -> x20 class-hnd single-def "impAppendStmt" <System.Predicate`1[System.Threading.CancellationToken]>
-;* V05 tmp2 [V05,T05] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V05 tmp2 [V05,T04] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType>
-;* V07 tmp4 [V07,T04] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.CancellationToken> -; V08 cse0 [V08,T03] ( 4, 2 ) ref -> x21 "CSE - aggressive"
+;* V07 tmp4 [V07,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.CancellationToken>
;
-; Lcl frame size = 8
+; Lcl frame size = 0
G_M42274_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x20]! + stp x19, x20, [sp, #0x10]
mov fp, sp mov x20, x0 ; gcrRegs +[x20] mov x19, x1 ; gcrRegs +[x19]
- ;; size=24 bbWeight=1 PerfScore 4.50
+ ;; size=20 bbWeight=1 PerfScore 3.50
G_M42274_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz cbz x19, G_M42274_IG05 ;; size=4 bbWeight=1 PerfScore 1.00 @@ -47,44 +45,32 @@ G_M42274_IG04: ; bbWeight=0.25, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ;; size=4 bbWeight=0.25 PerfScore 0.25 G_M42274_IG05: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[x19-x20]
- movz x21, #0xD1FFAB1E - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - mov x0, x21 - ; gcrRegs +[x0] - movz x1, #0xD1FFAB1E // code for System.RuntimeType:IsValueTypeImpl():ubyte:this - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - ldr x1, [x1] - blr x1 - ; gcrRegs -[x0] +[x21] - ; gcr arg pop 0 - cbz w0, G_M42274_IG06 - mov x0, x21 - ; gcrRegs +[x0]
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:get_IsGenericType():ubyte:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- ; gcrRegs -[x0]
; gcr arg pop 0 cbz w0, G_M42274_IG10
- mov x0, x21 - ; gcrRegs +[x0]
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:GetGenericTypeDefinition():System.Type:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- ; gcrRegs -[x21]
+ ; gcrRegs +[x0]
; gcr arg pop 0 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 cmp x0, x1 bne G_M42274_IG10
- ;; size=112 bbWeight=0.50 PerfScore 12.25
+ ;; size=88 bbWeight=0.50 PerfScore 9.00
G_M42274_IG06: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] ldr x20, [x20, #0x10] @@ -113,24 +99,22 @@ G_M42274_IG08: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=000 ldr x2, [x20, #0x18] ;; size=12 bbWeight=0.50 PerfScore 4.50 G_M42274_IG09: ; bbWeight=0.50, epilog, nogc, extend
- ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ ldp x19, x20, [sp, #0x10] + ldp fp, lr, [sp], #0x20
br x2 ; gcr arg pop 0
- ;; size=16 bbWeight=0.50 PerfScore 2.50
+ ;; size=12 bbWeight=0.50 PerfScore 1.50
G_M42274_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref ; gcrRegs -[x0-x1 x19-x20] mov w0, wzr ;; size=4 bbWeight=0.50 PerfScore 0.25 G_M42274_IG11: ; bbWeight=0.50, epilog, nogc, extend
- ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ ldp x19, x20, [sp, #0x10] + ldp fp, lr, [sp], #0x20
ret lr
- ;; size=16 bbWeight=0.50 PerfScore 2.50
+ ;; size=12 bbWeight=0.50 PerfScore 1.50
-; Total bytes of code 264, prolog size 24, PerfScore 36.00, instruction count 66, allocated bytes for code 264 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 228, prolog size 20, PerfScore 29.75, instruction count 57, allocated bytes for code 228 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -141,7 +125,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 66 (0x00042) Actual length = 264 (0x000108)
+ Function Length : 57 (0x00039) Actual length = 228 (0x0000e4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -152,9 +136,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ C8 02 save_regp X#0 Z#2 (0x02); stp x19, x20, [sp, #16] + 83 save_fplr_x #3 (0x03); stp fp, lr, [sp, #-32]! + E4 end + E4 end
E4 end E4 end

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm64.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo.linux.arm64.checked.mch 0 0 0 0 -0 +0
benchmarks.run_tiered.linux.arm64.checked.mch 0 0 0 0 -0 +0
coreclr_tests.run.linux.arm64.checked.mch 0 0 0 0 -0 +0
libraries.crossgen2.linux.arm64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.arm64.checked.mch 0 0 0 0 -0 +0
libraries_tests.run.linux.arm64.Release.mch 3 3 0 0 -108 +0
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 2 2 0 0 -152 +0
realworld.run.linux.arm64.checked.mch 0 0 0 0 -0 +0
smoke_tests.nativeaot.linux.arm64.checked.mch 0 0 0 0 -0 +0
5 5 0 0 -260 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm64.checked.mch 36,750 3,694 33,056 0 (0.00%) 0 (0.00%)
benchmarks.run_pgo.linux.arm64.checked.mch 150,824 57,618 93,206 0 (0.00%) 0 (0.00%)
benchmarks.run_tiered.linux.arm64.checked.mch 64,740 48,874 15,866 0 (0.00%) 0 (0.00%)
coreclr_tests.run.linux.arm64.checked.mch 636,247 390,444 245,803 0 (0.00%) 0 (0.00%)
libraries.crossgen2.linux.arm64.checked.mch 265,472 15 265,457 0 (0.00%) 1 (0.00%)
libraries.pmi.linux.arm64.checked.mch 297,579 6 297,573 0 (0.00%) 8 (0.00%)
libraries_tests.run.linux.arm64.Release.mch 735,160 490,061 245,099 0 (0.00%) 12 (0.00%)
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 305,209 21,620 283,589 0 (0.00%) 6 (0.00%)
realworld.run.linux.arm64.checked.mch 33,342 147 33,195 0 (0.00%) 0 (0.00%)
smoke_tests.nativeaot.linux.arm64.checked.mch 19,000 7 18,993 0 (0.00%) 0 (0.00%)
2,544,323 1,012,486 1,531,837 0 (0.00%) 27 (0.00%)

jit-analyze output

libraries_tests.run.linux.arm64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 383425724 (overridden on cmd)
Total bytes of diff: 383425616 (overridden on cmd)
Total bytes of delta: -108 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -36 : 579412.dasm (-9.00 % of base)
         -36 : 579422.dasm (-10.98 % of base)
         -36 : 579942.dasm (-10.98 % of base)

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

Top method improvements (bytes):
         -36 (-9.00 % of base) : 579412.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
         -36 (-10.98 % of base) : 579422.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -36 (-10.98 % of base) : 579942.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

Top method improvements (percentages):
         -36 (-10.98 % of base) : 579422.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -36 (-10.98 % of base) : 579942.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -36 (-9.00 % of base) : 579412.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.linux.arm64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 165117628 (overridden on cmd)
Total bytes of diff: 165117476 (overridden on cmd)
Total bytes of delta: -152 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
        -116 : 33036.dasm (-42.03 % of base)
         -36 : 40129.dasm (-13.64 % of base)

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

Top method improvements (bytes):
        -116 (-42.03 % of base) : 33036.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -36 (-13.64 % of base) : 40129.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

Top method improvements (percentages):
        -116 (-42.03 % of base) : 33036.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -36 (-13.64 % of base) : 40129.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).



linux x64

Diffs are based on 2,535,346 contexts (984,660 MinOpts, 1,550,686 FullOpts).

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

Overall (-162 bytes)

Collection Base size (bytes) Diff size (bytes)
libraries_tests.run.linux.x64.Release.mch 331,724,724 -64
librariestestsnotieredcompilation.run.linux.x64.Release.mch 132,521,916 -98

FullOpts (-162 bytes)

Collection Base size (bytes) Diff size (bytes)
libraries_tests.run.linux.x64.Release.mch 147,893,997 -64
librariestestsnotieredcompilation.run.linux.x64.Release.mch 121,949,734 -98

Example diffs

libraries_tests.run.linux.x64.Release.mch

-20 (-7.81%) : 596639.dasm - Moq.Match1[System.Memory1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -6,7 +6,7 @@ ; rbp based frame ; fully interruptible ; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 29
-; 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 -> r15 this class-hnd single-def <Moq.Match`1[System.Memory`1[ubyte]]> @@ -97,13 +97,6 @@ G_M16199_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=8008 { ; gcrRegs +[rbx r15] mov rdi, 0xD1FFAB1E ; gcrRegs +[rdi]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[rdi] - ; gcr arg pop 0 - test eax, eax - je SHORT G_M16199_IG03 - mov rdi, 0xD1FFAB1E - ; gcrRegs +[rdi]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[rdi] ; gcr arg pop 0 @@ -123,7 +116,7 @@ G_M16199_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=8008 { test esi, esi je SHORT G_M16199_IG07 jmp G_M16199_IG03
- ;; size=86 bbWeight=0 PerfScore 0.00
+ ;; size=66 bbWeight=0 PerfScore 0.00
G_M16199_IG10: ; bbWeight=0, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref ; gcrRegs -[rax rbx] mov rsi, gword ptr [rbp-0x20] @@ -142,7 +135,7 @@ G_M16199_IG11: ; bbWeight=0, epilog, nogc, extend tail.jmp [rax+0x18]System.Predicate`1[System.Memory`1[ubyte]]:Invoke(System.Memory`1[ubyte]):ubyte:this ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 256, prolog size 25, PerfScore 34.25, instruction count 68, allocated bytes for code 256 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 236, prolog size 25, PerfScore 34.25, instruction count 64, allocated bytes for code 236 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================ Unwind Info:

-20 (-7.81%) : 597095.dasm - Moq.Match1[System.ReadOnlyMemory1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -6,7 +6,7 @@ ; rbp based frame ; fully 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 -> r15 this class-hnd single-def <Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]> @@ -97,13 +97,6 @@ G_M6273_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=8008 {r ; gcrRegs +[rbx r15] mov rdi, 0xD1FFAB1E ; gcrRegs +[rdi]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[rdi] - ; gcr arg pop 0 - test eax, eax - je SHORT G_M6273_IG03 - mov rdi, 0xD1FFAB1E - ; gcrRegs +[rdi]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[rdi] ; gcr arg pop 0 @@ -123,7 +116,7 @@ G_M6273_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=8008 {r test esi, esi je SHORT G_M6273_IG07 jmp G_M6273_IG03
- ;; size=86 bbWeight=0 PerfScore 0.00
+ ;; size=66 bbWeight=0 PerfScore 0.00
G_M6273_IG10: ; bbWeight=0, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref ; gcrRegs -[rax rbx] mov rsi, gword ptr [rbp-0x20] @@ -142,7 +135,7 @@ G_M6273_IG11: ; bbWeight=0, epilog, nogc, extend tail.jmp [rax+0x18]System.Predicate`1[System.ReadOnlyMemory`1[ubyte]]:Invoke(System.ReadOnlyMemory`1[ubyte]):ubyte:this ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 256, prolog size 25, PerfScore 34.25, instruction count 68, allocated bytes for code 256 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 236, prolog size 25, PerfScore 34.25, instruction count 64, allocated bytes for code 236 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================ Unwind Info:

-24 (-7.38%) : 596628.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)

@@ -4,7 +4,7 @@ ; optimized code ; rbp based frame ; fully 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 -> r15 this class-hnd single-def <Moq.Match> @@ -123,13 +123,6 @@ G_M33676_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=8008 { ; gcrRegs +[rbx r15] mov rdi, 0xD1FFAB1E ; gcrRegs +[rdi]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[rdi] - ; gcr arg pop 0 - test eax, eax - je G_M33676_IG05 - mov rdi, 0xD1FFAB1E - ; gcrRegs +[rdi]
call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[rdi] ; gcr arg pop 0 @@ -149,7 +142,7 @@ G_M33676_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=8008 { test edi, edi je G_M33676_IG04 jmp G_M33676_IG05
- ;; size=98 bbWeight=0 PerfScore 0.00
+ ;; size=74 bbWeight=0 PerfScore 0.00
G_M33676_IG13: ; bbWeight=0, gcrefRegs=800C {rdx rbx r15}, byrefRegs=0000 {}, byref ; gcrRegs -[rax] +[rdx] mov rdi, r15 @@ -168,7 +161,7 @@ G_M33676_IG14: ; bbWeight=0, epilog, nogc, extend tail.jmp [rax+0x20]<unknown method> ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 325, prolog size 27, PerfScore 31.88, instruction count 82, allocated bytes for code 325 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 301, prolog size 27, PerfScore 31.88, instruction count 78, allocated bytes for code 301 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================ Unwind Info:

librariestestsnotieredcompilation.run.linux.x64.Release.mch

-24 (-13.71%) : 40195.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

@@ -5,7 +5,7 @@ ; rbp 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,T01] ( 3, 2.50) ref -> r15 this class-hnd single-def <Moq.Match`1[System.Threading.CancellationToken]> @@ -13,25 +13,22 @@ ;* V02 arg2 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Type> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T02] ( 3, 3 ) ref -> r15 class-hnd single-def "impAppendStmt" <System.Predicate`1[System.Threading.CancellationToken]>
-;* V05 tmp2 [V05,T05] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V05 tmp2 [V05,T04] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType>
-;* V07 tmp4 [V07,T04] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.CancellationToken> -; V08 cse0 [V08,T03] ( 4, 2 ) ref -> r14 "CSE - aggressive"
+;* V07 tmp4 [V07,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.CancellationToken>
;
-; Lcl frame size = 8
+; Lcl frame size = 0
G_M42274_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG push rbp push r15
- push r14
push rbx
- push rax - lea rbp, [rsp+0x20]
+ lea rbp, [rsp+0x10]
mov r15, rdi ; gcrRegs +[r15] mov rbx, rsi ; gcrRegs +[rbx]
- ;; size=18 bbWeight=1 PerfScore 6.00
+ ;; size=15 bbWeight=1 PerfScore 4.00
G_M42274_IG02: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz test rbx, rbx je SHORT G_M42274_IG05 @@ -47,32 +44,23 @@ G_M42274_IG04: ; bbWeight=0.25, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ;; size=2 bbWeight=0.25 PerfScore 0.50 G_M42274_IG05: ; bbWeight=0.50, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rbx r15]
- mov r14, 0xD1FFAB1E - ; gcrRegs +[r14] - mov rdi, r14 - ; gcrRegs +[rdi] - call [System.RuntimeType:IsValueTypeImpl():ubyte:this] - ; gcrRegs -[rdi] - ; gcr arg pop 0 - test eax, eax - je SHORT G_M42274_IG06 - mov rdi, r14
+ mov rdi, 0xD1FFAB1E
; gcrRegs +[rdi] call [System.RuntimeType:get_IsGenericType():ubyte:this] ; gcrRegs -[rdi] ; gcr arg pop 0 test eax, eax je SHORT G_M42274_IG10
- mov rdi, r14
+ mov rdi, 0xD1FFAB1E
; gcrRegs +[rdi] call [System.RuntimeType:GetGenericTypeDefinition():System.Type:this]
- ; gcrRegs -[rdi r14] +[rax]
+ ; gcrRegs -[rdi] +[rax]
; gcr arg pop 0 mov rsi, 0xD1FFAB1E ; gcrRegs +[rsi] cmp rax, rsi jne SHORT G_M42274_IG10
- ;; size=60 bbWeight=0.50 PerfScore 7.00
+ ;; size=51 bbWeight=0.50 PerfScore 4.62
G_M42274_IG06: ; bbWeight=0.50, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax rsi] mov r15, gword ptr [r15+0x10] @@ -97,27 +85,23 @@ G_M42274_IG08: ; bbWeight=0.50, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 ; gcrRegs +[rax] ;; size=11 bbWeight=0.50 PerfScore 2.12 G_M42274_IG09: ; bbWeight=0.50, epilog, nogc, extend
- add rsp, 8
pop rbx
- pop r14
pop r15 pop rbp tail.jmp [rax+0x18]<unknown method>
- ;; size=14 bbWeight=0.50 PerfScore 2.12
+ ;; size=8 bbWeight=0.50 PerfScore 1.75
G_M42274_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref ; gcrRegs -[rax rbx rsi rdi r15] xor eax, eax ;; size=2 bbWeight=0.50 PerfScore 0.12 G_M42274_IG11: ; bbWeight=0.50, epilog, nogc, extend
- add rsp, 8
pop rbx
- pop r14
pop r15 pop rbp ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
-; Total bytes of code 175, prolog size 18, PerfScore 26.38, instruction count 51, allocated bytes for code 175 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 151, prolog size 15, PerfScore 21.25, instruction count 40, allocated bytes for code 151 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -125,13 +109,11 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x07 - CountOfUnwindCodes: 5
+ SizeOfProlog : 0x04 + CountOfUnwindCodes: 3
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x07 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x06 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14)
+ CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.x64.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo.linux.x64.checked.mch 0 0 0 0 -0 +0
benchmarks.run_tiered.linux.x64.checked.mch 0 0 0 0 -0 +0
coreclr_tests.run.linux.x64.checked.mch 0 0 0 0 -0 +0
libraries.crossgen2.linux.x64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.x64.checked.mch 0 0 0 0 -0 +0
libraries_tests.run.linux.x64.Release.mch 3 3 0 0 -64 +0
librariestestsnotieredcompilation.run.linux.x64.Release.mch 2 2 0 0 -98 +0
realworld.run.linux.x64.checked.mch 0 0 0 0 -0 +0
smoke_tests.nativeaot.linux.x64.checked.mch 0 0 0 0 -0 +0
5 5 0 0 -162 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.x64.checked.mch 31,764 2,052 29,712 0 (0.00%) 0 (0.00%)
benchmarks.run_pgo.linux.x64.checked.mch 155,049 57,390 97,659 0 (0.00%) 0 (0.00%)
benchmarks.run_tiered.linux.x64.checked.mch 58,135 43,840 14,295 0 (0.00%) 0 (0.00%)
coreclr_tests.run.linux.x64.checked.mch 608,390 362,472 245,918 0 (0.00%) 0 (0.00%)
libraries.crossgen2.linux.x64.checked.mch 265,300 15 265,285 0 (0.00%) 1 (0.00%)
libraries.pmi.linux.x64.checked.mch 298,699 6 298,693 0 (0.00%) 8 (0.00%)
libraries_tests.run.linux.x64.Release.mch 751,526 496,897 254,629 0 (0.00%) 10 (0.00%)
librariestestsnotieredcompilation.run.linux.x64.Release.mch 305,831 21,933 283,898 0 (0.00%) 6 (0.00%)
realworld.run.linux.x64.checked.mch 33,245 45 33,200 0 (0.00%) 0 (0.00%)
smoke_tests.nativeaot.linux.x64.checked.mch 27,407 10 27,397 0 (0.00%) 0 (0.00%)
2,535,346 984,660 1,550,686 0 (0.00%) 25 (0.00%)

jit-analyze output

libraries_tests.run.linux.x64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 331724724 (overridden on cmd)
Total bytes of diff: 331724660 (overridden on cmd)
Total bytes of delta: -64 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -24 : 596628.dasm (-7.38 % of base)
         -20 : 596639.dasm (-7.81 % of base)
         -20 : 597095.dasm (-7.81 % of base)

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

Top method improvements (bytes):
         -24 (-7.38 % of base) : 596628.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
         -20 (-7.81 % of base) : 596639.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -20 (-7.81 % of base) : 597095.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)

Top method improvements (percentages):
         -20 (-7.81 % of base) : 596639.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -20 (-7.81 % of base) : 597095.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
         -24 (-7.38 % of base) : 596628.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.linux.x64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 132521916 (overridden on cmd)
Total bytes of diff: 132521818 (overridden on cmd)
Total bytes of delta: -98 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -74 : 33073.dasm (-34.58 % of base)
         -24 : 40195.dasm (-13.71 % of base)

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

Top method improvements (bytes):
         -74 (-34.58 % of base) : 33073.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -24 (-13.71 % of base) : 40195.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)

Top method improvements (percentages):
         -74 (-34.58 % of base) : 33073.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
         -24 (-13.71 % of base) : 40195.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).