Assembly Diffs
osx arm64
Diffs are based on 2,293,419 contexts (933,869 MinOpts, 1,359,550 FullOpts).
MISSED contexts: base: 0 (0.00%), diff: 24 (0.00%)
Overall (-260 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.osx.arm64.Release.mch |
313,596,116 |
-108 |
librariestestsnotieredcompilation.run.osx.arm64.Release.mch |
161,380,836 |
-152 |
FullOpts (-260 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.osx.arm64.Release.mch |
110,668,672 |
-108 |
librariestestsnotieredcompilation.run.osx.arm64.Release.mch |
148,332,748 |
-152 |
Example diffs
libraries_tests.run.osx.arm64.Release.mch
-36 (-10.98%) : 492801.dasm - Moq.Match1[System.Memory
1[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 49
-; 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, #1 LSL #32
- movz x1, #0xD1FFAB1E // code for System.RuntimeType:IsValueTypeImpl():ubyte:this
- movk x1, #0xD1FFAB1E LSL #16
- movk x1, #2 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, #1 LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:get_IsGenericType():ubyte:this
movk x1, #0xD1FFAB1E LSL #16
movk x1, #2 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%) : 493497.dasm - Moq.Match1[System.ReadOnlyMemory
1[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, #1 LSL #32
- movz x1, #0xD1FFAB1E // code for System.RuntimeType:IsValueTypeImpl():ubyte:this
- movk x1, #0xD1FFAB1E LSL #16
- movk x1, #2 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, #1 LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:get_IsGenericType():ubyte:this
movk x1, #0xD1FFAB1E LSL #16
movk x1, #2 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%) : 492785.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, #1 LSL #32
- movz x1, #0xD1FFAB1E // code for System.RuntimeType:IsValueTypeImpl():ubyte:this
- movk x1, #0xD1FFAB1E LSL #16
- movk x1, #2 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, #1 LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:get_IsGenericType():ubyte:this
movk x1, #0xD1FFAB1E LSL #16
movk x1, #2 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.osx.arm64.Release.mch
-36 (-13.64%) : 39290.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, #1 LSL #32
- mov x0, x21
- ; gcrRegs +[x0]
- movz x1, #0xD1FFAB1E // code for System.RuntimeType:IsValueTypeImpl():ubyte:this
- movk x1, #0xD1FFAB1E LSL #16
- movk x1, #1 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, #1 LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:get_IsGenericType():ubyte:this
movk x1, #0xD1FFAB1E LSL #16
movk x1, #1 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, #1 LSL #32
movz x1, #0xD1FFAB1E // code for System.RuntimeType:GetGenericTypeDefinition():System.Type:this
movk x1, #0xD1FFAB1E LSL #16
movk x1, #1 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, #1 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.osx.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_pgo.osx.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_tiered.osx.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
coreclr_tests.run.osx.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.crossgen2.osx.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.osx.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries_tests.run.osx.arm64.Release.mch |
3 |
3 |
0 |
0 |
-108 |
+0 |
librariestestsnotieredcompilation.run.osx.arm64.Release.mch |
2 |
2 |
0 |
0 |
-152 |
+0 |
realworld.run.osx.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.osx.arm64.checked.mch |
25,053 |
4 |
25,049 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_pgo.osx.arm64.checked.mch |
83,954 |
48,224 |
35,730 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_tiered.osx.arm64.checked.mch |
48,600 |
37,748 |
10,852 |
0 (0.00%) |
0 (0.00%) |
coreclr_tests.run.osx.arm64.checked.mch |
587,982 |
360,346 |
227,636 |
0 (0.00%) |
0 (0.00%) |
libraries.crossgen2.osx.arm64.checked.mch |
265,043 |
15 |
265,028 |
0 (0.00%) |
1 (0.00%) |
libraries.pmi.osx.arm64.checked.mch |
318,217 |
18 |
318,199 |
0 (0.00%) |
8 (0.00%) |
libraries_tests.run.osx.arm64.Release.mch |
632,606 |
465,976 |
166,630 |
0 (0.00%) |
9 (0.00%) |
librariestestsnotieredcompilation.run.osx.arm64.Release.mch |
300,364 |
21,535 |
278,829 |
0 (0.00%) |
6 (0.00%) |
realworld.run.osx.arm64.checked.mch |
31,600 |
3 |
31,597 |
0 (0.00%) |
0 (0.00%) |
|
2,293,419 |
933,869 |
1,359,550 |
0 (0.00%) |
24 (0.00%) |
jit-analyze output
libraries_tests.run.osx.arm64.Release.mch
To reproduce these diffs on Windows x64:
superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 313596116 (overridden on cmd)
Total bytes of diff: 313596008 (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 : 492785.dasm (-9.00 % of base)
-36 : 493497.dasm (-10.98 % of base)
-36 : 492801.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) : 492785.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
-36 (-10.98 % of base) : 492801.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-36 (-10.98 % of base) : 493497.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) : 492801.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-36 (-10.98 % of base) : 493497.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-36 (-9.00 % of base) : 492785.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.osx.arm64.Release.mch
To reproduce these diffs on Windows x64:
superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 161380836 (overridden on cmd)
Total bytes of diff: 161380684 (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 : 32083.dasm (-42.03 % of base)
-36 : 39290.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) : 32083.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-36 (-13.64 % of base) : 39290.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
Top method improvements (percentages):
-116 (-42.03 % of base) : 32083.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-36 (-13.64 % of base) : 39290.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).
windows arm64
Diffs are based on 2,376,907 contexts (945,143 MinOpts, 1,431,764 FullOpts).
MISSED contexts: base: 5 (0.00%), diff: 29 (0.00%)
Overall (-260 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.windows.arm64.Release.mch |
321,613,268 |
-108 |
librariestestsnotieredcompilation.run.windows.arm64.Release.mch |
171,355,492 |
-152 |
FullOpts (-260 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.windows.arm64.Release.mch |
117,556,728 |
-108 |
librariestestsnotieredcompilation.run.windows.arm64.Release.mch |
158,296,296 |
-152 |
Example diffs
libraries_tests.run.windows.arm64.Release.mch
-36 (-10.98%) : 512827.dasm - Moq.Match1[System.Memory
1[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 51
-; 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%) : 513891.dasm - Moq.Match1[System.ReadOnlyMemory
1[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%) : 512814.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.windows.arm64.Release.mch
-36 (-13.64%) : 40566.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.windows.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_pgo.windows.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_tiered.windows.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
coreclr_tests.run.windows.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.crossgen2.windows.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.windows.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries_tests.run.windows.arm64.Release.mch |
3 |
3 |
0 |
0 |
-108 |
+0 |
librariestestsnotieredcompilation.run.windows.arm64.Release.mch |
2 |
2 |
0 |
0 |
-152 |
+0 |
realworld.run.windows.arm64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
smoke_tests.nativeaot.windows.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.windows.arm64.checked.mch |
24,654 |
4 |
24,650 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_pgo.windows.arm64.checked.mch |
96,699 |
49,319 |
47,380 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_tiered.windows.arm64.checked.mch |
49,429 |
37,113 |
12,316 |
0 (0.00%) |
0 (0.00%) |
coreclr_tests.run.windows.arm64.checked.mch |
605,280 |
369,845 |
235,435 |
5 (0.00%) |
5 (0.00%) |
libraries.crossgen2.windows.arm64.checked.mch |
275,112 |
15 |
275,097 |
0 (0.00%) |
1 (0.00%) |
libraries.pmi.windows.arm64.checked.mch |
307,374 |
6 |
307,368 |
0 (0.00%) |
8 (0.00%) |
libraries_tests.run.windows.arm64.Release.mch |
643,558 |
467,212 |
176,346 |
0 (0.00%) |
9 (0.00%) |
librariestestsnotieredcompilation.run.windows.arm64.Release.mch |
317,383 |
21,618 |
295,765 |
0 (0.00%) |
6 (0.00%) |
realworld.run.windows.arm64.checked.mch |
33,259 |
3 |
33,256 |
0 (0.00%) |
0 (0.00%) |
smoke_tests.nativeaot.windows.arm64.checked.mch |
24,159 |
8 |
24,151 |
0 (0.00%) |
0 (0.00%) |
|
2,376,907 |
945,143 |
1,431,764 |
5 (0.00%) |
29 (0.00%) |
jit-analyze output
libraries_tests.run.windows.arm64.Release.mch
To reproduce these diffs on Windows x64:
superpmi.py asmdiffs -target_os windows -target_arch arm64 -arch x64
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 321613268 (overridden on cmd)
Total bytes of diff: 321613160 (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 : 513891.dasm (-10.98 % of base)
-36 : 512827.dasm (-10.98 % of base)
-36 : 512814.dasm (-9.00 % of base)
3 total files with Code Size differences (3 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-36 (-9.00 % of base) : 512814.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
-36 (-10.98 % of base) : 512827.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-36 (-10.98 % of base) : 513891.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) : 512827.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-36 (-10.98 % of base) : 513891.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-36 (-9.00 % of base) : 512814.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.arm64.Release.mch
To reproduce these diffs on Windows x64:
superpmi.py asmdiffs -target_os windows -target_arch arm64 -arch x64
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 171355492 (overridden on cmd)
Total bytes of diff: 171355340 (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 : 33490.dasm (-42.03 % of base)
-36 : 40566.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) : 33490.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-36 (-13.64 % of base) : 40566.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
Top method improvements (percentages):
-116 (-42.03 % of base) : 33490.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-36 (-13.64 % of base) : 40566.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).
windows x64
Diffs are based on 2,416,952 contexts (937,064 MinOpts, 1,479,888 FullOpts).
MISSED contexts: base: 0 (0.00%), diff: 24 (0.00%)
Overall (-354 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.windows.x64.Release.mch |
281,663,453 |
-273 |
librariestestsnotieredcompilation.run.windows.x64.Release.mch |
136,467,122 |
-81 |
FullOpts (-354 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.windows.x64.Release.mch |
106,974,625 |
-273 |
librariestestsnotieredcompilation.run.windows.x64.Release.mch |
126,174,325 |
-81 |
Example diffs
libraries_tests.run.windows.x64.Release.mch
-23 (-9.27%) : 537053.dasm - Moq.Match1[System.ReadOnlyMemory
1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
@@ -6,7 +6,7 @@
; rsp 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 -> rsi this class-hnd single-def <Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]>
@@ -100,13 +100,6 @@ G_M6273_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0048 {r
; gcrRegs +[rbx rsi]
mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[rcx]
- ; gcr arg pop 0
- test eax, eax
- je SHORT G_M6273_IG03
- mov rcx, 0xD1FFAB1E
- ; gcrRegs +[rcx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[rcx]
; gcr arg pop 0
@@ -126,8 +119,8 @@ G_M6273_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0048 {r
test edx, edx
je SHORT G_M6273_IG08
jmp G_M6273_IG03
- ;; size=84 bbWeight=0 PerfScore 0.00
-G_M6273_IG11: ; bbWeight=0, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref
+ ;; size=64 bbWeight=0 PerfScore 0.00
+G_M6273_IG11: ; bbWeight=0, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rax rbx] +[rdi]
mov gword ptr [rsp+0x28], rdi
mov dword ptr [rsp+0x30], ebp
@@ -139,10 +132,10 @@ G_M6273_IG11: ; bbWeight=0, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {},
; gcrRegs -[rcx rsi rdi]
; gcr arg pop 0
mov edx, eax
- jmp G_M6273_IG06
- ;; size=32 bbWeight=0 PerfScore 0.00
+ jmp SHORT G_M6273_IG06
+ ;; size=29 bbWeight=0 PerfScore 0.00
-; Total bytes of code 248, prolog size 15, PerfScore 32.50, instruction count 67, allocated bytes for code 248 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 225, prolog size 15, PerfScore 32.50, instruction count 63, allocated bytes for code 225 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================
Unwind Info:
-23 (-9.27%) : 536063.dasm - Moq.Match1[System.Memory
1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
@@ -6,7 +6,7 @@
; rsp based frame
; partially interruptible
; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 20
-; 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 -> rsi this class-hnd single-def <Moq.Match`1[System.Memory`1[ubyte]]>
@@ -100,13 +100,6 @@ G_M16199_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0048 {
; gcrRegs +[rbx rsi]
mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[rcx]
- ; gcr arg pop 0
- test eax, eax
- je SHORT G_M16199_IG03
- mov rcx, 0xD1FFAB1E
- ; gcrRegs +[rcx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[rcx]
; gcr arg pop 0
@@ -126,8 +119,8 @@ G_M16199_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0048 {
test edx, edx
je SHORT G_M16199_IG08
jmp G_M16199_IG03
- ;; size=84 bbWeight=0 PerfScore 0.00
-G_M16199_IG11: ; bbWeight=0, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref
+ ;; size=64 bbWeight=0 PerfScore 0.00
+G_M16199_IG11: ; bbWeight=0, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rax rbx] +[rdi]
mov gword ptr [rsp+0x28], rdi
mov dword ptr [rsp+0x30], ebp
@@ -139,10 +132,10 @@ G_M16199_IG11: ; bbWeight=0, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {},
; gcrRegs -[rcx rsi rdi]
; gcr arg pop 0
mov edx, eax
- jmp G_M16199_IG06
- ;; size=32 bbWeight=0 PerfScore 0.00
+ jmp SHORT G_M16199_IG06
+ ;; size=29 bbWeight=0 PerfScore 0.00
-; Total bytes of code 248, prolog size 15, PerfScore 32.50, instruction count 67, allocated bytes for code 248 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 225, prolog size 15, PerfScore 32.50, instruction count 63, allocated bytes for code 225 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================
Unwind Info:
-24 (-8.11%) : 536050.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
@@ -4,7 +4,7 @@
; optimized code
; rsp 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 -> rsi this class-hnd single-def <Moq.Match>
@@ -112,13 +112,6 @@ G_M33676_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0048 {
; gcrRegs +[rbx rsi]
mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[rcx]
- ; gcr arg pop 0
- test eax, eax
- je G_M33676_IG05
- mov rcx, 0xD1FFAB1E
- ; gcrRegs +[rcx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[rcx]
; gcr arg pop 0
@@ -138,7 +131,7 @@ G_M33676_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0048 {
test ecx, ecx
je G_M33676_IG04
jmp G_M33676_IG05
- ;; size=96 bbWeight=0 PerfScore 0.00
+ ;; size=72 bbWeight=0 PerfScore 0.00
G_M33676_IG12: ; bbWeight=0, gcrefRegs=0148 {rbx rsi r8}, byrefRegs=0000 {}, byref
; gcrRegs -[rax] +[r8]
mov rcx, rsi
@@ -156,7 +149,7 @@ G_M33676_IG13: ; bbWeight=0, epilog, nogc, extend
tail.jmp [rax+0x20]<unknown method>
;; size=11 bbWeight=0 PerfScore 0.00
-; Total bytes of code 296, prolog size 20, PerfScore 28.75, instruction count 72, allocated bytes for code 296 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 272, prolog size 20, PerfScore 28.75, instruction count 68, allocated bytes for code 272 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================
Unwind Info:
-48 (-3.53%) : 536035.dasm - Moq.MethodExpectation:IsMatch(Moq.Invocation):ubyte:this (Tier1)
@@ -6,7 +6,7 @@
; rsp based frame
; fully interruptible
; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 1755
-; 8 inlinees with PGO data; 11 single block inlinees; 1 inlinees without PGO data
+; 8 inlinees with PGO data; 10 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T07] ( 7, 5.95) ref -> rbx this class-hnd single-def <Moq.MethodExpectation>
@@ -476,13 +476,6 @@ G_M62220_IG44: ; bbWeight=0, gcrefRegs=5068 {rbx rbp rsi r12 r14}, byrefR
; gcrRegs -[rax r8]
mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[rcx]
- ; gcr arg pop 0
- test eax, eax
- je G_M62220_IG16
- mov rcx, 0xD1FFAB1E
- ; gcrRegs +[rcx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[rcx]
; gcr arg pop 0
@@ -502,7 +495,7 @@ G_M62220_IG44: ; bbWeight=0, gcrefRegs=5068 {rbx rbp rsi r12 r14}, byrefR
test eax, eax
je SHORT G_M62220_IG46
jmp G_M62220_IG16
- ;; size=88 bbWeight=0 PerfScore 0.00
+ ;; size=64 bbWeight=0 PerfScore 0.00
G_M62220_IG45: ; bbWeight=0, gcrefRegs=40A9 {rax rbx rbp rdi r14}, byrefRegs=0000 {}, byref
; gcrRegs -[rdx rsi r12] +[rax rdi]
mov gword ptr [rsp+0x28], rax
@@ -584,13 +577,6 @@ G_M62220_IG51: ; bbWeight=0, gcrefRegs=5068 {rbx rbp rsi r12 r14}, byrefR
; gcrRegs -[rax r8]
mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[rcx]
- ; gcr arg pop 0
- test eax, eax
- je G_M62220_IG28
- mov rcx, 0xD1FFAB1E
- ; gcrRegs +[rcx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[rcx]
; gcr arg pop 0
@@ -610,7 +596,7 @@ G_M62220_IG51: ; bbWeight=0, gcrefRegs=5068 {rbx rbp rsi r12 r14}, byrefR
test eax, eax
je SHORT G_M62220_IG53
jmp G_M62220_IG28
- ;; size=88 bbWeight=0 PerfScore 0.00
+ ;; size=64 bbWeight=0 PerfScore 0.00
G_M62220_IG52: ; bbWeight=0, gcrefRegs=40A9 {rax rbx rbp rdi r14}, byrefRegs=0000 {}, byref
; gcrRegs -[rdx rsi r12] +[rax rdi]
mov gword ptr [rsp+0x28], rax
@@ -630,7 +616,7 @@ G_M62220_IG53: ; bbWeight=0, gcrefRegs=4028 {rbx rbp r14}, byrefRegs=0000
jmp G_M62220_IG32
;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1361, prolog size 34, PerfScore 157.26, instruction count 323, allocated bytes for code 1361 (MethodHash=064b0cf3) for method Moq.MethodExpectation:IsMatch(Moq.Invocation):ubyte:this (Tier1)
+; Total bytes of code 1313, prolog size 34, PerfScore 157.26, instruction count 315, allocated bytes for code 1313 (MethodHash=064b0cf3) for method Moq.MethodExpectation:IsMatch(Moq.Invocation):ubyte:this (Tier1)
; ============================================================
Unwind Info:
-44 (-2.83%) : 536034.dasm - Moq.Setup:Matches(Moq.Invocation):ubyte:this (Tier1)
@@ -6,7 +6,7 @@
; rsp based frame
; fully interruptible
; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 40
-; 9 inlinees with PGO data; 12 single block inlinees; 1 inlinees without PGO data
+; 9 inlinees with PGO data; 11 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T10] ( 9, 5 ) ref -> rsi this class-hnd single-def <Moq.Setup>
@@ -370,14 +370,7 @@ G_M3322_IG33: ; bbWeight=0.01, gcrefRegs=A0E8 {rbx rbp rsi rdi r13 r15},
test rbx, rbx
jne G_M3322_IG41
;; size=9 bbWeight=0.01 PerfScore 0.01
-G_M3322_IG34: ; bbWeight=0, gcrefRegs=A0E8 {rbx rbp rsi rdi r13 r15}, byrefRegs=0000 {}, byref, isz
- mov rcx, 0xD1FFAB1E
- ; gcrRegs +[rcx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[rcx]
- ; gcr arg pop 0
- test eax, eax
- je SHORT G_M3322_IG35
+G_M3322_IG34: ; bbWeight=0, gcrefRegs=A0E8 {rbx rbp rsi rdi r13 r15}, byrefRegs=0000 {}, byref
mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
@@ -398,7 +391,7 @@ G_M3322_IG34: ; bbWeight=0, gcrefRegs=A0E8 {rbx rbp rsi rdi r13 r15}, byr
movzx rax, al
test eax, eax
je G_M3322_IG43
- ;; size=87 bbWeight=0 PerfScore 0.00
+ ;; size=67 bbWeight=0 PerfScore 0.00
G_M3322_IG35: ; bbWeight=0.01, gcrefRegs=A0E8 {rbx rbp rsi rdi r13 r15}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rdx]
mov rbp, gword ptr [rbp+0x10]
@@ -627,13 +620,6 @@ G_M3322_IG57: ; bbWeight=0, gcrefRegs=A0E8 {rbx rbp rsi rdi r13 r15}, byr
; gcrRegs -[rax r8]
mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[rcx]
- ; gcr arg pop 0
- test eax, eax
- je G_M3322_IG16
- mov rcx, 0xD1FFAB1E
- ; gcrRegs +[rcx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[rcx]
; gcr arg pop 0
@@ -653,7 +639,7 @@ G_M3322_IG57: ; bbWeight=0, gcrefRegs=A0E8 {rbx rbp rsi rdi r13 r15}, byr
test eax, eax
je SHORT G_M3322_IG59
jmp G_M3322_IG16
- ;; size=88 bbWeight=0 PerfScore 0.00
+ ;; size=64 bbWeight=0 PerfScore 0.00
G_M3322_IG58: ; bbWeight=0, gcrefRegs=A0E1 {rax rbp rsi rdi r13 r15}, byrefRegs=0000 {}, byref
; gcrRegs -[rdx rbx] +[rax]
mov gword ptr [rsp+0x38], rax
@@ -746,7 +732,7 @@ G_M3322_IG63: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=A0E9 {r
jmp G_M3322_IG29
;; size=21 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1557, prolog size 29, PerfScore 179.55, instruction count 378, allocated bytes for code 1557 (MethodHash=4fbcf305) for method Moq.Setup:Matches(Moq.Invocation):ubyte:this (Tier1)
+; Total bytes of code 1513, prolog size 29, PerfScore 179.55, instruction count 370, allocated bytes for code 1513 (MethodHash=4fbcf305) for method Moq.Setup:Matches(Moq.Invocation):ubyte:this (Tier1)
; ============================================================
Unwind Info:
librariestestsnotieredcompilation.run.windows.x64.Release.mch
-12 (-7.32%) : 40885.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
@@ -5,7 +5,7 @@
; rsp 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 -> rsi 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 (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V04 tmp1 [V04,T02] ( 3, 3 ) ref -> rsi 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 -> rdi "CSE - aggressive"
+;* V07 tmp4 [V07,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.CancellationToken>
;
-; Lcl frame size = 32
+; Lcl frame size = 40
G_M42274_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- push rdi
push rsi
push rbx
- sub rsp, 32
+ sub rsp, 40
mov rsi, rcx
; gcrRegs +[rsi]
mov rbx, rdx
; gcrRegs +[rbx]
- ;; size=13 bbWeight=1 PerfScore 3.75
+ ;; size=12 bbWeight=1 PerfScore 2.75
G_M42274_IG02: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz
test rbx, rbx
je SHORT G_M42274_IG05
@@ -45,32 +43,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=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[rbx rsi]
- mov rdi, 0xD1FFAB1E
- ; gcrRegs +[rdi]
- mov rcx, rdi
- ; gcrRegs +[rcx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[rcx]
- ; gcr arg pop 0
- test eax, eax
- je SHORT G_M42274_IG06
- mov rcx, rdi
+ mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[rcx]
; gcr arg pop 0
test eax, eax
je SHORT G_M42274_IG10
- mov rcx, rdi
+ mov rcx, 0xD1FFAB1E
; gcrRegs +[rcx]
call [System.RuntimeType:GetGenericTypeDefinition():System.Type:this]
- ; gcrRegs -[rcx rdi] +[rax]
+ ; gcrRegs -[rcx] +[rax]
; gcr arg pop 0
mov rdx, 0xD1FFAB1E
; gcrRegs +[rdx]
cmp rax, rdx
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=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rax rdx]
mov rsi, gword ptr [rsi+0x10]
@@ -95,25 +84,23 @@ G_M42274_IG08: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000
; gcrRegs +[rax]
;; size=11 bbWeight=0.50 PerfScore 2.12
G_M42274_IG09: ; bbWeight=0.50, epilog, nogc, extend
- add rsp, 32
+ add rsp, 40
pop rbx
pop rsi
- pop rdi
tail.jmp [rax+0x18]<unknown method>
- ;; size=11 bbWeight=0.50 PerfScore 1.88
+ ;; size=10 bbWeight=0.50 PerfScore 1.62
G_M42274_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[rax rcx rdx rbx rsi]
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M42274_IG11: ; bbWeight=0.50, epilog, nogc, extend
- add rsp, 32
+ add rsp, 40
pop rbx
pop rsi
- pop rdi
ret
- ;; size=8 bbWeight=0.50 PerfScore 1.38
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
-; Total bytes of code 164, prolog size 13, PerfScore 23.62, instruction count 47, allocated bytes for code 164 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 152, prolog size 12, PerfScore 19.75, instruction count 39, allocated bytes for code 152 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================
Unwind Info:
@@ -121,12 +108,11 @@ Unwind Info:
>> End offset : 0xd1ffab1e (not in unwind data)
Version : 1
Flags : 0x00
- SizeOfProlog : 0x07
- CountOfUnwindCodes: 4
+ SizeOfProlog : 0x06
+ CountOfUnwindCodes: 3
FrameRegister : none (0)
FrameOffset : N/A (no FrameRegister) (Value=0)
UnwindCodes :
- CodeOffset: 0x07 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20
- CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
- CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rsi (6)
- CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rdi (7)
+ CodeOffset: 0x06 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 4 * 8 + 8 = 40 = 0x28
+ CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
+ CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rsi (6)
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.windows.x64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_pgo.windows.x64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_tiered.windows.x64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
coreclr_tests.run.windows.x64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.crossgen2.windows.x64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.windows.x64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries_tests.run.windows.x64.Release.mch |
6 |
6 |
0 |
0 |
-273 |
+0 |
librariestestsnotieredcompilation.run.windows.x64.Release.mch |
2 |
2 |
0 |
0 |
-81 |
+0 |
realworld.run.windows.x64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
smoke_tests.nativeaot.windows.x64.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
|
8 |
8 |
0 |
0 |
-354 |
+0 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.windows.x64.checked.mch |
27,982 |
4 |
27,978 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_pgo.windows.x64.checked.mch |
96,695 |
48,836 |
47,859 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_tiered.windows.x64.checked.mch |
54,111 |
37,293 |
16,818 |
0 (0.00%) |
0 (0.00%) |
coreclr_tests.run.windows.x64.checked.mch |
584,001 |
348,100 |
235,901 |
0 (0.00%) |
0 (0.00%) |
libraries.crossgen2.windows.x64.checked.mch |
274,685 |
15 |
274,670 |
0 (0.00%) |
1 (0.00%) |
libraries.pmi.windows.x64.checked.mch |
310,920 |
6 |
310,914 |
0 (0.00%) |
8 (0.00%) |
libraries_tests.run.windows.x64.Release.mch |
678,233 |
480,852 |
197,381 |
0 (0.00%) |
9 (0.00%) |
librariestestsnotieredcompilation.run.windows.x64.Release.mch |
320,857 |
21,944 |
298,913 |
0 (0.00%) |
6 (0.00%) |
realworld.run.windows.x64.checked.mch |
36,896 |
3 |
36,893 |
0 (0.00%) |
0 (0.00%) |
smoke_tests.nativeaot.windows.x64.checked.mch |
32,572 |
11 |
32,561 |
0 (0.00%) |
0 (0.00%) |
|
2,416,952 |
937,064 |
1,479,888 |
0 (0.00%) |
24 (0.00%) |
jit-analyze output
libraries_tests.run.windows.x64.Release.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: 281663453 (overridden on cmd)
Total bytes of diff: 281663180 (overridden on cmd)
Total bytes of delta: -273 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-111 : 536042.dasm (-2.96 % of base)
-48 : 536035.dasm (-3.53 % of base)
-44 : 536034.dasm (-2.83 % of base)
-24 : 536050.dasm (-8.11 % of base)
-23 : 536063.dasm (-9.27 % of base)
-23 : 537053.dasm (-9.27 % of base)
6 total files with Code Size differences (6 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-111 (-2.96 % of base) : 536042.dasm - Moq.SetupCollection:FindLast(System.Func`2[Moq.Setup,ubyte]):Moq.Setup:this (Tier1)
-48 (-3.53 % of base) : 536035.dasm - Moq.MethodExpectation:IsMatch(Moq.Invocation):ubyte:this (Tier1)
-44 (-2.83 % of base) : 536034.dasm - Moq.Setup:Matches(Moq.Invocation):ubyte:this (Tier1)
-24 (-8.11 % of base) : 536050.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
-23 (-9.27 % of base) : 536063.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-23 (-9.27 % of base) : 537053.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
Top method improvements (percentages):
-23 (-9.27 % of base) : 536063.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-23 (-9.27 % of base) : 537053.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-24 (-8.11 % of base) : 536050.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
-48 (-3.53 % of base) : 536035.dasm - Moq.MethodExpectation:IsMatch(Moq.Invocation):ubyte:this (Tier1)
-111 (-2.96 % of base) : 536042.dasm - Moq.SetupCollection:FindLast(System.Func`2[Moq.Setup,ubyte]):Moq.Setup:this (Tier1)
-44 (-2.83 % of base) : 536034.dasm - Moq.Setup:Matches(Moq.Invocation):ubyte:this (Tier1)
6 total methods with Code Size differences (6 improved, 0 regressed).
librariestestsnotieredcompilation.run.windows.x64.Release.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: 136467122 (overridden on cmd)
Total bytes of diff: 136467041 (overridden on cmd)
Total bytes of delta: -81 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-69 : 33653.dasm (-35.75 % of base)
-12 : 40885.dasm (-7.32 % of base)
2 total files with Code Size differences (2 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-69 (-35.75 % of base) : 33653.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-12 (-7.32 % of base) : 40885.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
Top method improvements (percentages):
-69 (-35.75 % of base) : 33653.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-12 (-7.32 % of base) : 40885.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).