Assembly Diffs
linux arm
Diffs are based on 2,242,891 contexts (830,236 MinOpts, 1,412,655 FullOpts).
MISSED contexts: base: 73,620 (3.18%), diff: 73,633 (3.18%)
Overall (-78 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
94,374,878 |
-78 |
FullOpts (-78 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
84,345,052 |
-78 |
Example diffs
librariestestsnotieredcompilation.run.linux.arm.Release.mch
-78 (-43.82%) : 33176.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
@@ -5,7 +5,7 @@
; r11 based frame
; fully interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T02] ( 4, 3.50) ref -> r5 this class-hnd single-def <Moq.Match`1[System.__Canon]>
@@ -14,19 +14,19 @@
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V05 tmp2 [V05,T06] ( 3, 3 ) ref -> r6 class-hnd single-def "bubbling QMark2" <System.Predicate`1[System.__Canon]>
-; V06 tmp3 [V06,T10] ( 3, 1.25) int -> r3 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T09] ( 3, 1.25) int -> r7 "fgMakeTemp is creating a new local variable"
; V07 tmp4 [V07,T04] ( 5, 3.75) ref -> r1 class-hnd "spilling QMark2" <System.__Canon>
-;* V08 tmp5 [V08,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V09 tmp6 [V09,T08] ( 4, 2 ) ref -> r6 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType>
-; V10 cse0 [V10,T07] ( 5, 2.25) int -> r7 multi-def "CSE - aggressive"
+;* V08 tmp5 [V08,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType>
+; V10 cse0 [V10,T07] ( 4, 1.75) int -> r7 multi-def "CSE - aggressive"
; V11 cse1 [V11,T05] ( 3, 2 ) int -> r6 "CSE - aggressive"
;* V12 rat0 [V12,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V13 rat1 [V13,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V13 rat1 [V13,T08] ( 0, 0 ) int -> zero-ref "runtime lookup"
;* V14 rat2 [V14,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 8
-G_M40899_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M40899_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r2,r3,r4,r5,r6,r7,r11,lr}
add r11, sp, 24
str r0, [r11-0x14]
@@ -38,12 +38,13 @@ G_M40899_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
G_M40899_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r6, [r5]
cmp r4, 0
- beq SHORT G_M40899_IG04
+ beq SHORT G_M40899_IG05
;; size=6 bbWeight=1 PerfScore 3.00
G_M40899_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r0, [r6+0x24]
+ ldr r0, [r0]
ldr r7, [r0]
- ldr r0, [r7]
+ mov r0, r7
mov r1, r4
; gcrRegs +[r1]
movw r3, 0xd1ff
@@ -52,72 +53,34 @@ G_M40899_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}
; gcrRegs -[r1] +[r0]
; gcr arg pop 0
cmp r0, 0
- beq SHORT G_M40899_IG10
- b SHORT G_M40899_IG05
- ;; size=24 bbWeight=0.50 PerfScore 5.00
-G_M40899_IG04: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
+ bne SHORT G_M40899_IG06
+ movs r0, 0
; gcrRegs -[r0]
+ ;; size=26 bbWeight=0.50 PerfScore 5.50
+G_M40899_IG04: ; bbWeight=0.50, epilog, nogc, extend
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
+ ;; size=4 bbWeight=0.50 PerfScore 0.50
+G_M40899_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref
ldr r0, [r6+0x24]
+ ldr r0, [r0]
ldr r7, [r0]
- ldr r0, [r7]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE
- ; gcrRegs +[r0]
- ; gcr arg pop 0
- mov r6, r0
- ; gcrRegs +[r6]
- mov r0, r6
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- ldr r3, [r3]
- ldr r2, [r0]
- blx r3 // System.RuntimeType:IsValueTypeImpl():ubyte:this
- ; gcrRegs -[r0]
- ; gcr arg pop 0
- cmp r0, 0
- beq SHORT G_M40899_IG05
- mov r0, r6
- ; gcrRegs +[r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- ldr r3, [r3]
- blx r3 // System.RuntimeType:get_IsGenericType():ubyte:this
- ; gcrRegs -[r0]
- ; gcr arg pop 0
- cmp r0, 0
- beq SHORT G_M40899_IG10
- mov r0, r6
- ; gcrRegs +[r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- ldr r3, [r3]
- blx r3 // System.RuntimeType:GetGenericTypeDefinition():System.Type:this
- ; gcrRegs -[r6]
- ; gcr arg pop 0
- movw r1, 0xd1ff
- movt r1, 0xd1ff
- cmp r0, r1
- bne SHORT G_M40899_IG10
- ;; size=82 bbWeight=0.50 PerfScore 15.50
-G_M40899_IG05: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
+ ;; size=6 bbWeight=0.50 PerfScore 1.50
+G_M40899_IG06: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r6, [r5+0x08]
; gcrRegs +[r6]
mov r1, r4
; gcrRegs +[r1]
cmp r1, 0
- beq SHORT G_M40899_IG08
+ beq SHORT G_M40899_IG09
;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M40899_IG06: ; bbWeight=0.25, gcrefRegs=0072 {r1 r4 r5 r6}, byrefRegs=0000 {}, byref, isz
+G_M40899_IG07: ; bbWeight=0.25, gcrefRegs=0072 {r1 r4 r5 r6}, byrefRegs=0000 {}, byref, isz
ldr r0, [r1]
- ldr r3, [r7]
- cmp r0, r3
- beq SHORT G_M40899_IG08
- ;; size=8 bbWeight=0.25 PerfScore 1.00
-G_M40899_IG07: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
+ cmp r0, r7
+ beq SHORT G_M40899_IG09
+ ;; size=6 bbWeight=0.25 PerfScore 0.75
+G_M40899_IG08: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
; gcrRegs -[r1]
- mov r0, r3
+ mov r0, r7
mov r1, r4
; gcrRegs +[r1]
movw r3, 0xd1ff
@@ -128,27 +91,20 @@ G_M40899_IG07: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000
mov r1, r0
; gcrRegs +[r1]
;; size=16 bbWeight=0.12 PerfScore 0.75
-G_M40899_IG08: ; bbWeight=0.50, gcrefRegs=0062 {r1 r5 r6}, byrefRegs=0000 {}, byref
+G_M40899_IG09: ; bbWeight=0.50, gcrefRegs=0062 {r1 r5 r6}, byrefRegs=0000 {}, byref
; gcrRegs -[r0]
ldr r0, [r6+0x04]
; gcrRegs +[r0]
ldr r3, [r6+0x0C]
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M40899_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M40899_IG10: ; bbWeight=0.50, epilog, nogc, extend
add sp, 8
pop {r4,r5,r6,r7,r11,lr}
bx r3 // <unknown method>
; gcr arg pop 0
;; size=8 bbWeight=0.50 PerfScore 1.50
-G_M40899_IG10: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
- ; gcrRegs -[r0-r1 r6]
- movs r0, 0
- ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M40899_IG11: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r6,r7,r11,pc}
- ;; size=4 bbWeight=0.50 PerfScore 0.50
-; Total bytes of code 178, prolog size 16, PerfScore 35.75, instruction count 70, allocated bytes for code 178 (MethodHash=cd6c603c) for method Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 100, prolog size 16, PerfScore 21.50, instruction count 41, allocated bytes for code 100 (MethodHash=cd6c603c) for method Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================
Unwind Info:
@@ -160,16 +116,16 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 89 (0x00059) Actual length = 178 (0x0000b2)
+ Function Length : 50 (0x00032) Actual length = 100 (0x000064)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Condition : 14 (0xe) (always)
- Epilog Start Index : 3 (0x03)
+ Epilog Start Index : 0 (0x00)
---- Scope 1
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Condition : 14 (0xe) (always)
- Epilog Start Index : 0 (0x00)
+ Epilog Start Index : 3 (0x03)
---- Unwind codes ----
---- Epilog start at index 0 ----
A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_pgo.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_tiered.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
coreclr_tests.run.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.crossgen2.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries_tests.run.linux.arm.Release.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
1 |
1 |
0 |
0 |
-78 |
+0 |
realworld.run.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
|
1 |
1 |
0 |
0 |
-78 |
+0 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.linux.arm.checked.mch |
45,558 |
5,109 |
40,449 |
1,189 (2.54%) |
1,189 (2.54%) |
benchmarks.run_pgo.linux.arm.checked.mch |
160,880 |
59,255 |
101,625 |
3,263 (1.99%) |
3,263 (1.99%) |
benchmarks.run_tiered.linux.arm.checked.mch |
77,452 |
41,903 |
35,549 |
1,072 (1.37%) |
1,072 (1.37%) |
coreclr_tests.run.linux.arm.checked.mch |
472,712 |
259,492 |
213,220 |
7,204 (1.50%) |
7,204 (1.50%) |
libraries.crossgen2.linux.arm.checked.mch |
191,612 |
14 |
191,598 |
0 (0.00%) |
1 (0.00%) |
libraries.pmi.linux.arm.checked.mch |
273,479 |
6 |
273,473 |
7,833 (2.78%) |
7,833 (2.78%) |
libraries_tests.run.linux.arm.Release.mch |
710,136 |
442,685 |
267,451 |
18,089 (2.48%) |
18,097 (2.49%) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
274,664 |
21,625 |
253,039 |
33,556 (10.89%) |
33,560 (10.89%) |
realworld.run.linux.arm.checked.mch |
36,398 |
147 |
36,251 |
1,414 (3.74%) |
1,414 (3.74%) |
|
2,242,891 |
830,236 |
1,412,655 |
73,620 (3.18%) |
73,633 (3.18%) |
jit-analyze output
librariestestsnotieredcompilation.run.linux.arm.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 94374878 (overridden on cmd)
Total bytes of diff: 94374800 (overridden on cmd)
Total bytes of delta: -78 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-78 : 33176.dasm (-43.82 % of base)
1 total files with Code Size differences (1 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-78 (-43.82 % of base) : 33176.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
Top method improvements (percentages):
-78 (-43.82 % of base) : 33176.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
1 total methods with Code Size differences (1 improved, 0 regressed).
windows x86
Diffs are based on 2,599,900 contexts (1,005,465 MinOpts, 1,594,435 FullOpts).
MISSED contexts: base: 0 (0.00%), diff: 26 (0.00%)
Overall (-199 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.windows.x86.Release.mch |
198,337,512 |
-45 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
113,331,594 |
-154 |
FullOpts (-199 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.windows.x86.Release.mch |
93,832,270 |
-45 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
104,401,775 |
-154 |
Example diffs
libraries_tests.run.windows.x86.Release.mch
-15 (-9.55%) : 553226.dasm - Moq.Match1[System.Memory
1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
@@ -6,7 +6,7 @@
; ebp based frame
; partially interruptible
; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 62
-; 1 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 1 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> edi this class-hnd single-def <Moq.Match`1[System.Memory`1[ubyte]]>
@@ -90,12 +90,6 @@ G_M16199_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi
; gcrRegs +[esi edi]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[ecx]
- test eax, eax
- je SHORT G_M16199_IG03
- mov ecx, 0xD1FFAB1E
- ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[ecx]
test eax, eax
@@ -110,7 +104,7 @@ G_M16199_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi
test ecx, ecx
je SHORT G_M16199_IG08
jmp SHORT G_M16199_IG03
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M16199_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax esi] +[ebx]
push esi
@@ -124,6 +118,6 @@ G_M16199_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=0000
jmp SHORT G_M16199_IG06
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 157, prolog size 6, PerfScore 31.25, instruction count 58, allocated bytes for code 157 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 142, prolog size 6, PerfScore 31.25, instruction count 54, allocated bytes for code 142 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================
-15 (-9.55%) : 554314.dasm - Moq.Match1[System.ReadOnlyMemory
1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
@@ -6,7 +6,7 @@
; ebp based frame
; partially interruptible
; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 5
-; 1 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 1 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> edi this class-hnd single-def <Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]>
@@ -90,12 +90,6 @@ G_M6273_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi e
; gcrRegs +[esi edi]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[ecx]
- test eax, eax
- je SHORT G_M6273_IG03
- mov ecx, 0xD1FFAB1E
- ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[ecx]
test eax, eax
@@ -110,7 +104,7 @@ G_M6273_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi e
test ecx, ecx
je SHORT G_M6273_IG08
jmp SHORT G_M6273_IG03
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M6273_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax esi] +[ebx]
push esi
@@ -124,6 +118,6 @@ G_M6273_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000
jmp SHORT G_M6273_IG06
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 157, prolog size 6, PerfScore 31.25, instruction count 58, allocated bytes for code 157 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 142, prolog size 6, PerfScore 31.25, instruction count 54, allocated bytes for code 142 (MethodHash=cc09e77e) for method Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================
-15 (-8.20%) : 553212.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
@@ -4,7 +4,7 @@
; optimized code
; ebp based frame
; partially interruptible
-; 2 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 2 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 6, 3.50) ref -> edi this class-hnd single-def <Moq.Match>
@@ -90,12 +90,6 @@ G_M33676_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi
; gcrRegs +[esi edi]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[ecx]
- test eax, eax
- je SHORT G_M33676_IG05
- mov ecx, 0xD1FFAB1E
- ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[ecx]
test eax, eax
@@ -110,7 +104,7 @@ G_M33676_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi
test ecx, ecx
je SHORT G_M33676_IG04
jmp SHORT G_M33676_IG05
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M33676_IG11: ; bbWeight=0, gcrefRegs=00000084 {edx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax esi] +[edx]
push esi
@@ -138,6 +132,6 @@ G_M33676_IG12: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000
jmp SHORT G_M33676_IG08
;; size=19 bbWeight=0 PerfScore 0.00
-; Total bytes of code 183, prolog size 6, PerfScore 25.25, instruction count 64, allocated bytes for code 183 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 168, prolog size 6, PerfScore 25.25, instruction count 60, allocated bytes for code 168 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================
librariestestsnotieredcompilation.run.windows.x86.Release.mch
-15 (-12.82%) : 49937.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
@@ -5,7 +5,7 @@
; ebp based frame
; partially interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 2.50) ref -> edi this class-hnd single-def <Moq.Match`1[System.Threading.CancellationToken]>
@@ -44,12 +44,6 @@ G_M42274_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
; gcrRegs +[esi edi]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[ecx]
- test eax, eax
- je SHORT G_M42274_IG06
- mov ecx, 0xD1FFAB1E
- ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[ecx]
test eax, eax
@@ -60,7 +54,7 @@ G_M42274_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
; gcrRegs -[ecx] +[eax]
cmp eax, 0xD1FFAB1E
jne SHORT G_M42274_IG10
- ;; size=48 bbWeight=0.50 PerfScore 6.75
+ ;; size=33 bbWeight=0.50 PerfScore 4.50
G_M42274_IG06: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax]
mov edi, gword ptr [edi+0x08]
@@ -97,6 +91,6 @@ G_M42274_IG11: ; bbWeight=0.50, epilog, nogc, extend
ret 4
;; size=6 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 117, prolog size 5, PerfScore 24.75, instruction count 41, allocated bytes for code 117 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 102, prolog size 5, PerfScore 22.50, instruction count 37, allocated bytes for code 102 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================
-15 (-12.82%) : 63999.dasm - Moq.Match`1[int]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
@@ -5,7 +5,7 @@
; ebp based frame
; partially interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 2.50) ref -> edi this class-hnd single-def <Moq.Match`1[int]>
@@ -44,12 +44,6 @@ G_M9654_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00
; gcrRegs +[esi edi]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[ecx]
- test eax, eax
- je SHORT G_M9654_IG06
- mov ecx, 0xD1FFAB1E
- ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[ecx]
test eax, eax
@@ -60,7 +54,7 @@ G_M9654_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00
; gcrRegs -[ecx] +[eax]
cmp eax, 0xD1FFAB1E
jne SHORT G_M9654_IG10
- ;; size=48 bbWeight=0.50 PerfScore 6.75
+ ;; size=33 bbWeight=0.50 PerfScore 4.50
G_M9654_IG06: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax]
mov edi, gword ptr [edi+0x08]
@@ -97,6 +91,6 @@ G_M9654_IG11: ; bbWeight=0.50, epilog, nogc, extend
ret 4
;; size=6 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 117, prolog size 5, PerfScore 24.75, instruction count 41, allocated bytes for code 117 (MethodHash=7193da49) for method Moq.Match`1[int]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 102, prolog size 5, PerfScore 22.50, instruction count 37, allocated bytes for code 102 (MethodHash=7193da49) for method Moq.Match`1[int]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_pgo.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_tiered.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
coreclr_tests.run.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.crossgen2.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries_tests.run.windows.x86.Release.mch |
3 |
3 |
0 |
0 |
-45 |
+0 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
4 |
4 |
0 |
0 |
-154 |
+0 |
realworld.run.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
|
7 |
7 |
0 |
0 |
-199 |
+0 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.windows.x86.checked.mch |
35,457 |
7 |
35,450 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_pgo.windows.x86.checked.mch |
164,077 |
68,181 |
95,896 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_tiered.windows.x86.checked.mch |
71,260 |
44,050 |
27,210 |
0 (0.00%) |
0 (0.00%) |
coreclr_tests.run.windows.x86.checked.mch |
668,880 |
399,413 |
269,467 |
0 (0.00%) |
0 (0.00%) |
libraries.crossgen2.windows.x86.checked.mch |
273,635 |
15 |
273,620 |
0 (0.00%) |
1 (0.00%) |
libraries.pmi.windows.x86.checked.mch |
307,081 |
6 |
307,075 |
0 (0.00%) |
8 (0.00%) |
libraries_tests.run.windows.x86.Release.mch |
691,838 |
471,420 |
220,418 |
0 (0.00%) |
11 (0.00%) |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
351,669 |
22,370 |
329,299 |
0 (0.00%) |
6 (0.00%) |
realworld.run.windows.x86.checked.mch |
36,003 |
3 |
36,000 |
0 (0.00%) |
0 (0.00%) |
|
2,599,900 |
1,005,465 |
1,594,435 |
0 (0.00%) |
26 (0.00%) |
jit-analyze output
libraries_tests.run.windows.x86.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 198337512 (overridden on cmd)
Total bytes of diff: 198337467 (overridden on cmd)
Total bytes of delta: -45 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-15 : 554314.dasm (-9.55 % of base)
-15 : 553212.dasm (-8.20 % of base)
-15 : 553226.dasm (-9.55 % of base)
3 total files with Code Size differences (3 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-15 (-8.20 % of base) : 553212.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
-15 (-9.55 % of base) : 553226.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-15 (-9.55 % of base) : 554314.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
Top method improvements (percentages):
-15 (-9.55 % of base) : 553226.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-15 (-9.55 % of base) : 554314.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-15 (-8.20 % of base) : 553212.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
3 total methods with Code Size differences (3 improved, 0 regressed).
librariestestsnotieredcompilation.run.windows.x86.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 113331594 (overridden on cmd)
Total bytes of diff: 113331440 (overridden on cmd)
Total bytes of delta: -154 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-62 : 49850.dasm (-38.75 % of base)
-62 : 41209.dasm (-38.75 % of base)
-15 : 63999.dasm (-12.82 % of base)
-15 : 49937.dasm (-12.82 % of base)
4 total files with Code Size differences (4 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-62 (-38.75 % of base) : 49850.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-62 (-38.75 % of base) : 41209.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-15 (-12.82 % of base) : 63999.dasm - Moq.Match`1[int]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-15 (-12.82 % of base) : 49937.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
Top method improvements (percentages):
-62 (-38.75 % of base) : 49850.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-62 (-38.75 % of base) : 41209.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-15 (-12.82 % of base) : 63999.dasm - Moq.Match`1[int]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-15 (-12.82 % of base) : 49937.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
4 total methods with Code Size differences (4 improved, 0 regressed).