Assembly Diffs
linux arm
Diffs are based on 2,250,497 contexts (832,187 MinOpts, 1,418,310 FullOpts).
MISSED contexts: base: 73,582 (3.17%), diff: 73,597 (3.17%)
Overall (-80 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
94,233,016 |
-80 |
FullOpts (-80 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
84,203,152 |
-80 |
Example diffs
librariestestsnotieredcompilation.run.linux.arm.Release.mch
-80 (-44.44%) : 33178.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
@@ -5,7 +5,7 @@
; r11 based frame
; fully interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T02] ( 4, 3.50) ref -> r5 this class-hnd single-def <Moq.Match`1[System.__Canon]>
@@ -14,20 +14,20 @@
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V05 tmp2 [V05,T05] ( 3, 3 ) ref -> r6 class-hnd single-def "bubbling QMark2" <System.Predicate`1[System.__Canon]>
-; V06 tmp3 [V06,T11] ( 3, 1.25) int -> r7 "fgMakeTemp is creating a new local variable"
-; V07 tmp4 [V07,T08] ( 2, 2 ) ref -> r1 class-hnd single-def "spilling QMark2" <System.__Canon>
-;* V08 tmp5 [V08,T12] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V09 tmp6 [V09,T07] ( 4, 2 ) ref -> r6 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType>
-; V10 tmp7 [V10,T10] ( 5, 1.88) ref -> r1 "CastInstOf QMark result"
-; V11 cse0 [V11,T06] ( 5, 2.25) int -> r7 multi-def "CSE - aggressive"
+; V06 tmp3 [V06,T10] ( 3, 1.25) int -> r7 "fgMakeTemp is creating a new local variable"
+; V07 tmp4 [V07,T07] ( 2, 2 ) ref -> r1 class-hnd single-def "spilling QMark2" <System.__Canon>
+;* V08 tmp5 [V08,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType>
+; V10 tmp7 [V10,T09] ( 5, 1.88) ref -> r1 "CastInstOf QMark result"
+; V11 cse0 [V11,T06] ( 4, 1.75) int -> r7 multi-def "CSE - aggressive"
; V12 cse1 [V12,T04] ( 3, 2 ) int -> r6 "CSE - aggressive"
;* V13 rat0 [V13,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V14 rat1 [V14,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V14 rat1 [V14,T08] ( 0, 0 ) int -> zero-ref "runtime lookup"
;* V15 rat2 [V15,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 8
-G_M40899_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M40899_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r2,r3,r4,r5,r6,r7,r11,lr}
add r11, sp, 24
str r0, [r11-0x14]
@@ -39,7 +39,7 @@ G_M40899_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
G_M40899_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r6, [r5]
cmp r4, 0
- beq SHORT G_M40899_IG04
+ beq SHORT G_M40899_IG05
;; size=6 bbWeight=1 PerfScore 3.00
G_M40899_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r0, [r6+0x24]
@@ -54,70 +54,32 @@ G_M40899_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}
; gcrRegs -[r1] +[r0]
; gcr arg pop 0
cmp r0, 0
- beq SHORT G_M40899_IG10
- b SHORT G_M40899_IG05
- ;; size=26 bbWeight=0.50 PerfScore 5.50
-G_M40899_IG04: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
+ bne SHORT G_M40899_IG06
+ movs r0, 0
; gcrRegs -[r0]
+ ;; size=26 bbWeight=0.50 PerfScore 5.50
+G_M40899_IG04: ; bbWeight=0.50, epilog, nogc, extend
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
+ ;; size=4 bbWeight=0.50 PerfScore 0.50
+G_M40899_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref
ldr r0, [r6+0x24]
ldr r0, [r0]
ldr r7, [r0]
- mov r0, r7
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE
- ; gcrRegs +[r0]
- ; gcr arg pop 0
- mov r6, r0
- ; gcrRegs +[r6]
- mov r0, r6
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- ldr r3, [r3]
- ldr r2, [r0]
- blx r3 // System.RuntimeType:IsValueTypeImpl():ubyte:this
- ; gcrRegs -[r0]
- ; gcr arg pop 0
- cmp r0, 0
- beq SHORT G_M40899_IG05
- mov r0, r6
- ; gcrRegs +[r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- ldr r3, [r3]
- blx r3 // System.RuntimeType:get_IsGenericType():ubyte:this
- ; gcrRegs -[r0]
- ; gcr arg pop 0
- cmp r0, 0
- beq SHORT G_M40899_IG10
- mov r0, r6
- ; gcrRegs +[r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- ldr r3, [r3]
- blx r3 // System.RuntimeType:GetGenericTypeDefinition():System.Type:this
- ; gcrRegs -[r6]
- ; gcr arg pop 0
- movw r1, 0xd1ff
- movt r1, 0xd1ff
- cmp r0, r1
- bne SHORT G_M40899_IG10
- ;; size=84 bbWeight=0.50 PerfScore 16.00
-G_M40899_IG05: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
+ ;; size=6 bbWeight=0.50 PerfScore 1.50
+G_M40899_IG06: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r6, [r5+0x08]
; gcrRegs +[r6]
mov r1, r4
; gcrRegs +[r1]
cmp r1, 0
- beq SHORT G_M40899_IG08
+ beq SHORT G_M40899_IG09
;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M40899_IG06: ; bbWeight=0.25, gcrefRegs=0072 {r1 r4 r5 r6}, byrefRegs=0000 {}, byref, isz
+G_M40899_IG07: ; bbWeight=0.25, gcrefRegs=0072 {r1 r4 r5 r6}, byrefRegs=0000 {}, byref, isz
ldr r0, [r1]
cmp r0, r7
- beq SHORT G_M40899_IG08
+ beq SHORT G_M40899_IG09
;; size=6 bbWeight=0.25 PerfScore 0.75
-G_M40899_IG07: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
+G_M40899_IG08: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
; gcrRegs -[r1]
mov r0, r7
mov r1, r4
@@ -130,27 +92,20 @@ G_M40899_IG07: ; bbWeight=0.12, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000
mov r1, r0
; gcrRegs +[r1]
;; size=16 bbWeight=0.12 PerfScore 0.75
-G_M40899_IG08: ; bbWeight=0.50, gcrefRegs=0062 {r1 r5 r6}, byrefRegs=0000 {}, byref
+G_M40899_IG09: ; bbWeight=0.50, gcrefRegs=0062 {r1 r5 r6}, byrefRegs=0000 {}, byref
; gcrRegs -[r0]
ldr r0, [r6+0x04]
; gcrRegs +[r0]
ldr r3, [r6+0x0C]
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M40899_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M40899_IG10: ; bbWeight=0.50, epilog, nogc, extend
add sp, 8
pop {r4,r5,r6,r7,r11,lr}
bx r3 // <unknown method>
; gcr arg pop 0
;; size=8 bbWeight=0.50 PerfScore 1.50
-G_M40899_IG10: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
- ; gcrRegs -[r0-r1 r6]
- movs r0, 0
- ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M40899_IG11: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r6,r7,r11,pc}
- ;; size=4 bbWeight=0.50 PerfScore 0.50
-; Total bytes of code 180, prolog size 16, PerfScore 36.50, instruction count 71, allocated bytes for code 180 (MethodHash=cd6c603c) for method Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 100, prolog size 16, PerfScore 21.50, instruction count 41, allocated bytes for code 100 (MethodHash=cd6c603c) for method Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================
Unwind Info:
@@ -162,16 +117,16 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 90 (0x0005a) Actual length = 180 (0x0000b4)
+ Function Length : 50 (0x00032) Actual length = 100 (0x000064)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Condition : 14 (0xe) (always)
- Epilog Start Index : 3 (0x03)
+ Epilog Start Index : 0 (0x00)
---- Scope 1
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Condition : 14 (0xe) (always)
- Epilog Start Index : 0 (0x00)
+ Epilog Start Index : 3 (0x03)
---- Unwind codes ----
---- Epilog start at index 0 ----
A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_pgo.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_tiered.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
coreclr_tests.run.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.crossgen2.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries_tests.run.linux.arm.Release.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
1 |
1 |
0 |
0 |
-80 |
+0 |
realworld.run.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
|
1 |
1 |
0 |
0 |
-80 |
+0 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.linux.arm.checked.mch |
50,989 |
6,738 |
44,251 |
1,277 (2.44%) |
1,277 (2.44%) |
benchmarks.run_pgo.linux.arm.checked.mch |
164,943 |
59,003 |
105,940 |
3,254 (1.93%) |
3,254 (1.93%) |
benchmarks.run_tiered.linux.arm.checked.mch |
77,426 |
41,851 |
35,575 |
1,061 (1.35%) |
1,061 (1.35%) |
coreclr_tests.run.linux.arm.checked.mch |
472,420 |
259,271 |
213,149 |
7,207 (1.50%) |
7,207 (1.50%) |
libraries.crossgen2.linux.arm.checked.mch |
189,603 |
14 |
189,589 |
0 (0.00%) |
1 (0.00%) |
libraries.pmi.linux.arm.checked.mch |
274,270 |
6 |
274,264 |
7,835 (2.78%) |
7,835 (2.78%) |
libraries_tests.run.linux.arm.Release.mch |
709,952 |
443,604 |
266,348 |
17,932 (2.46%) |
17,942 (2.46%) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
274,704 |
21,625 |
253,079 |
33,604 (10.90%) |
33,608 (10.90%) |
realworld.run.linux.arm.checked.mch |
36,190 |
75 |
36,115 |
1,412 (3.76%) |
1,412 (3.76%) |
|
2,250,497 |
832,187 |
1,418,310 |
73,582 (3.17%) |
73,597 (3.17%) |
jit-analyze output
librariestestsnotieredcompilation.run.linux.arm.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 94233016 (overridden on cmd)
Total bytes of diff: 94232936 (overridden on cmd)
Total bytes of delta: -80 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-80 : 33178.dasm (-44.44 % of base)
1 total files with Code Size differences (1 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-80 (-44.44 % of base) : 33178.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
Top method improvements (percentages):
-80 (-44.44 % of base) : 33178.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
1 total methods with Code Size differences (1 improved, 0 regressed).
windows x86
Diffs are based on 2,354,228 contexts (851,833 MinOpts, 1,502,395 FullOpts).
MISSED contexts: base: 0 (0.00%), diff: 24 (0.00%)
Overall (-121 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.windows.x86.Release.mch |
190,248,273 |
-45 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
104,013,755 |
-76 |
FullOpts (-121 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
libraries_tests.run.windows.x86.Release.mch |
91,155,217 |
-45 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
95,338,820 |
-76 |
Example diffs
libraries_tests.run.windows.x86.Release.mch
-15 (-9.55%) : 505185.dasm - Moq.Match1[System.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 (-9.55%) : 504443.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 78
-; 1 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 1 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> edi this class-hnd single-def <Moq.Match`1[System.Memory`1[ubyte]]>
@@ -90,12 +90,6 @@ G_M16199_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi
; gcrRegs +[esi edi]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[ecx]
- test eax, eax
- je SHORT G_M16199_IG03
- mov ecx, 0xD1FFAB1E
- ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[ecx]
test eax, eax
@@ -110,7 +104,7 @@ G_M16199_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi
test ecx, ecx
je SHORT G_M16199_IG08
jmp SHORT G_M16199_IG03
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M16199_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax esi] +[ebx]
push esi
@@ -124,6 +118,6 @@ G_M16199_IG11: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=0000
jmp SHORT G_M16199_IG06
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 157, prolog size 6, PerfScore 31.25, instruction count 58, allocated bytes for code 157 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 142, prolog size 6, PerfScore 31.25, instruction count 54, allocated bytes for code 142 (MethodHash=97c3c0b8) for method Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================
-15 (-8.20%) : 504427.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
@@ -4,7 +4,7 @@
; optimized code
; ebp based frame
; partially interruptible
-; 2 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 2 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 6, 3.50) ref -> edi this class-hnd single-def <Moq.Match>
@@ -92,12 +92,6 @@ G_M33676_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi
; gcrRegs +[esi edi]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[ecx]
- test eax, eax
- je SHORT G_M33676_IG04
- mov ecx, 0xD1FFAB1E
- ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[ecx]
test eax, eax
@@ -112,7 +106,7 @@ G_M33676_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C0 {esi
test ecx, ecx
je SHORT G_M33676_IG09
jmp SHORT G_M33676_IG04
- ;; size=57 bbWeight=0 PerfScore 0.00
+ ;; size=42 bbWeight=0 PerfScore 0.00
G_M33676_IG13: ; bbWeight=0, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax esi] +[ebx]
push esi
@@ -140,6 +134,6 @@ G_M33676_IG14: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000
jmp SHORT G_M33676_IG10
;; size=19 bbWeight=0 PerfScore 0.00
-; Total bytes of code 183, prolog size 6, PerfScore 25.25, instruction count 64, allocated bytes for code 183 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
+; Total bytes of code 168, prolog size 6, PerfScore 25.25, instruction count 60, allocated bytes for code 168 (MethodHash=72e57c73) for method Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
; ============================================================
librariestestsnotieredcompilation.run.windows.x86.Release.mch
-15 (-12.82%) : 40729.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
@@ -5,7 +5,7 @@
; ebp based frame
; partially interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 2.50) ref -> edi this class-hnd single-def <Moq.Match`1[System.Threading.CancellationToken]>
@@ -44,12 +44,6 @@ G_M42274_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
; gcrRegs +[esi edi]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
- call [System.RuntimeType:IsValueTypeImpl():ubyte:this]
- ; gcrRegs -[ecx]
- test eax, eax
- je SHORT G_M42274_IG06
- mov ecx, 0xD1FFAB1E
- ; gcrRegs +[ecx]
call [System.RuntimeType:get_IsGenericType():ubyte:this]
; gcrRegs -[ecx]
test eax, eax
@@ -60,7 +54,7 @@ G_M42274_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
; gcrRegs -[ecx] +[eax]
cmp eax, 0xD1FFAB1E
jne SHORT G_M42274_IG10
- ;; size=48 bbWeight=0.50 PerfScore 6.75
+ ;; size=33 bbWeight=0.50 PerfScore 4.50
G_M42274_IG06: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax]
mov edi, gword ptr [edi+0x08]
@@ -97,6 +91,6 @@ G_M42274_IG11: ; bbWeight=0.50, epilog, nogc, extend
ret 4
;; size=6 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 117, prolog size 5, PerfScore 24.75, instruction count 41, allocated bytes for code 117 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
+; Total bytes of code 102, prolog size 5, PerfScore 22.50, instruction count 37, allocated bytes for code 102 (MethodHash=f8335add) for method Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
; ============================================================
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_pgo.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
benchmarks.run_tiered.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
coreclr_tests.run.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.crossgen2.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries_tests.run.windows.x86.Release.mch |
3 |
3 |
0 |
0 |
-45 |
+0 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
2 |
2 |
0 |
0 |
-76 |
+0 |
realworld.run.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
|
5 |
5 |
0 |
0 |
-121 |
+0 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.windows.x86.checked.mch |
24,694 |
4 |
24,690 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_pgo.windows.x86.checked.mch |
123,995 |
42,622 |
81,373 |
0 (0.00%) |
0 (0.00%) |
benchmarks.run_tiered.windows.x86.checked.mch |
48,297 |
29,031 |
19,266 |
0 (0.00%) |
0 (0.00%) |
coreclr_tests.run.windows.x86.checked.mch |
585,246 |
326,478 |
258,768 |
0 (0.00%) |
0 (0.00%) |
libraries.crossgen2.windows.x86.checked.mch |
273,594 |
15 |
273,579 |
0 (0.00%) |
1 (0.00%) |
libraries.pmi.windows.x86.checked.mch |
307,483 |
6 |
307,477 |
0 (0.00%) |
8 (0.00%) |
libraries_tests.run.windows.x86.Release.mch |
638,032 |
431,743 |
206,289 |
0 (0.00%) |
9 (0.00%) |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
316,856 |
21,931 |
294,925 |
0 (0.00%) |
6 (0.00%) |
realworld.run.windows.x86.checked.mch |
36,031 |
3 |
36,028 |
0 (0.00%) |
0 (0.00%) |
|
2,354,228 |
851,833 |
1,502,395 |
0 (0.00%) |
24 (0.00%) |
jit-analyze output
libraries_tests.run.windows.x86.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 190248273 (overridden on cmd)
Total bytes of diff: 190248228 (overridden on cmd)
Total bytes of delta: -45 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-15 : 504427.dasm (-8.20 % of base)
-15 : 505185.dasm (-9.55 % of base)
-15 : 504443.dasm (-9.55 % of base)
3 total files with Code Size differences (3 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-15 (-8.20 % of base) : 504427.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
-15 (-9.55 % of base) : 504443.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-15 (-9.55 % of base) : 505185.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
Top method improvements (percentages):
-15 (-9.55 % of base) : 504443.dasm - Moq.Match`1[System.Memory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-15 (-9.55 % of base) : 505185.dasm - Moq.Match`1[System.ReadOnlyMemory`1[ubyte]]:Matches(System.Object,System.Type):ubyte:this (Tier1)
-15 (-8.20 % of base) : 504427.dasm - Moq.Match:Moq.IMatcher.Matches(System.Object,System.Type):ubyte:this (Tier1)
3 total methods with Code Size differences (3 improved, 0 regressed).
librariestestsnotieredcompilation.run.windows.x86.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 104013755 (overridden on cmd)
Total bytes of diff: 104013679 (overridden on cmd)
Total bytes of delta: -76 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-61 : 33556.dasm (-38.36 % of base)
-15 : 40729.dasm (-12.82 % of base)
2 total files with Code Size differences (2 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-61 (-38.36 % of base) : 33556.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-15 (-12.82 % of base) : 40729.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
Top method improvements (percentages):
-61 (-38.36 % of base) : 33556.dasm - Moq.Match`1[System.__Canon]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
-15 (-12.82 % of base) : 40729.dasm - Moq.Match`1[System.Threading.CancellationToken]:Matches(System.Object,System.Type):ubyte:this (FullOpts)
2 total methods with Code Size differences (2 improved, 0 regressed).