Assembly Diffs
linux arm
Diffs are based on 2,239,391 contexts (829,328 MinOpts, 1,410,063 FullOpts).
MISSED contexts: 71,273 (3.08%)
Overall (+52 bytes)
| Collection |
Base size (bytes) |
Diff size (bytes) |
| libraries.crossgen2.linux.arm.checked.mch |
34,522,542 |
+52 |
FullOpts (+52 bytes)
| Collection |
Base size (bytes) |
Diff size (bytes) |
| libraries.crossgen2.linux.arm.checked.mch |
34,521,312 |
+52 |
Example diffs
libraries.crossgen2.linux.arm.checked.mch
+52 (+7.08%) : 159916.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:MethodsDifferOnlyByReturnType(System.Reflection.MethodBase,System.Reflection.MethodBase):ubyte:this (FullOpts)
@@ -12,33 +12,32 @@
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Microsoft.VisualBasic.CompilerServices.VBBinder>
; V01 arg1 [V01,T11] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Reflection.MethodBase>
; V02 arg2 [V02,T12] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Reflection.MethodBase>
-; V03 loc0 [V03,T16] ( 3, 2 ) ubyte -> r0
-; V04 loc1 [V04,T10] ( 9, 5.58) ref -> r6 class-hnd single-def <<unknown class>>
+; V03 loc0 [V03,T15] ( 3, 2 ) ubyte -> r0
+; V04 loc1 [V04,T08] ( 13, 6.66) ref -> r6 class-hnd single-def <<unknown class>>
; V05 loc2 [V05,T06] ( 13, 9.62) ref -> r5 class-hnd single-def <<unknown class>>
-; V06 loc3 [V06,T00] ( 31, 55.66) int -> r7
-; V07 loc4 [V07,T01] ( 10, 16 ) ref -> [sp+0x0C] class-hnd <<unknown class>>
-; V08 loc5 [V08,T02] ( 10, 16 ) ref -> [sp+0x08] class-hnd <<unknown class>>
+; V06 loc3 [V06,T00] ( 36, 52.20) int -> r7
+; V07 loc4 [V07,T01] ( 10, 16 ) ref -> [sp+0x04] class-hnd <<unknown class>>
+; V08 loc5 [V08,T02] ( 10, 16 ) ref -> r10 class-hnd <<unknown class>>
; V09 loc6 [V09,T05] ( 8, 9 ) int -> r8 single-def
-;* V10 loc7 [V10,T20] ( 0, 0 ) int -> zero-ref single-def
-; V11 loc8 [V11,T13] ( 3, 5 ) int -> registers single-def
-; V12 loc9 [V12,T09] ( 6, 6 ) int -> r8 single-def
+;* V10 loc7 [V10,T19] ( 0, 0 ) int -> zero-ref single-def
+; V11 loc8 [V11,T09] ( 6, 6 ) int -> registers single-def
+; V12 loc9 [V12,T10] ( 6, 6 ) int -> r8 single-def
;# V13 OutArgs [V13 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V14 tmp1 [V14,T14] ( 3, 5 ) int -> r7 "non-inline candidate call"
-; V15 tmp2 [V15,T18] ( 2, 2 ) int -> r7 "non-inline candidate call"
-; V16 tmp3 [V16,T19] ( 2, 2 ) int -> r7 "non-inline candidate call"
-; V17 tmp4 [V17,T17] ( 3, 2 ) int -> r8 "Inline return value spill temp"
-; V18 tmp5 [V18,T15] ( 3, 5 ) int -> r0 "Inlining Arg"
-; V19 cse0 [V19,T07] ( 6, 9.54) byref -> [sp+0x04] hoist multi-def "CSE - aggressive"
-; V20 cse1 [V20,T08] ( 8, 7.58) int -> r9 multi-def "CSE - aggressive"
-; V21 cse2 [V21,T04] ( 3, 11.88) int -> r9 "CSE - aggressive"
-; V22 cse3 [V22,T03] ( 8, 12.54) byref -> registers hoist multi-def "CSE - aggressive"
+; V14 tmp1 [V14,T13] ( 3, 5 ) int -> r7 "non-inline candidate call"
+; V15 tmp2 [V15,T17] ( 2, 2 ) int -> r7 "non-inline candidate call"
+; V16 tmp3 [V16,T18] ( 2, 2 ) int -> r7 "non-inline candidate call"
+; V17 tmp4 [V17,T16] ( 3, 2 ) int -> r8 "Inline return value spill temp"
+; V18 tmp5 [V18,T14] ( 3, 5 ) int -> r0 "Inlining Arg"
+; V19 cse0 [V19,T07] ( 8, 9.58) byref -> [sp+0x00] hoist multi-def "CSE - aggressive"
+; V20 cse1 [V20,T04] ( 3, 11.88) int -> r10 "CSE - aggressive"
+; V21 cse2 [V21,T03] ( 8, 12.54) byref -> registers hoist multi-def "CSE - aggressive"
;
-; Lcl frame size = 20
+; Lcl frame size = 12
G_M40132_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r4,r5,r6,r7,r8,r9,r10,r11,lr}
- sub sp, 20
- add r11, sp, 48
+ sub sp, 12
+ add r11, sp, 40
mov r5, r2
; gcrRegs +[r5]
;; size=12 bbWeight=1 PerfScore 4.00
@@ -99,18 +98,18 @@ G_M40132_IG05: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, b
movs r7, 0
cmp r8, 0
blt G_M40132_IG17
- ldr r9, [r6+0x04]
- cmp r9, r8
+ ldr r0, [r6+0x04]
+ cmp r0, r8
ble SHORT G_M40132_IG12
ldr r0, [r5+0x04]
cmp r0, r8
ble SHORT G_M40132_IG12
- add r10, r6, 8
- ; byrRegs +[r10]
- ;; size=28 bbWeight=1 PerfScore 10.00
-G_M40132_IG06: ; bbWeight=3.96, gcrefRegs=0060 {r5 r6}, byrefRegs=0400 {r10}, byref, isz
- lsl r9, r7, 2
- ldr r0, [r10+r9]
+ add r9, r6, 8
+ ; byrRegs +[r9]
+ ;; size=26 bbWeight=1 PerfScore 10.00
+G_M40132_IG06: ; bbWeight=3.96, gcrefRegs=0060 {r5 r6}, byrefRegs=0200 {r9}, byref, isz
+ lsl r10, r7, 2
+ ldr r0, [r9+r10]
; gcrRegs +[r0]
movw r4, LOW RELOC 0xD1FFAB1E
movt r4, HIGH RELOC 0xD1FFAB1E
@@ -120,7 +119,7 @@ G_M40132_IG06: ; bbWeight=3.96, gcrefRegs=0060 {r5 r6}, byrefRegs=0400 {r
blx r3 // <unknown method>
mov r3, r0
; gcrRegs +[r3]
- str r3, [sp+0x0C]
+ str r3, [sp+0x04]
; GC ptr vars +{V07}
mov r0, r3
movw r4, LOW RELOC 0xD1FFAB1E
@@ -133,8 +132,8 @@ G_M40132_IG06: ; bbWeight=3.96, gcrefRegs=0060 {r5 r6}, byrefRegs=0400 {r
cmp r0, 0
beq SHORT G_M40132_IG08
;; size=50 bbWeight=3.96 PerfScore 75.24
-G_M40132_IG07: ; bbWeight=1.98, gcrefRegs=0060 {r5 r6}, byrefRegs=0400 {r10}, byref
- ldr r0, [sp+0x0C] // [V07 loc4]
+G_M40132_IG07: ; bbWeight=1.98, gcrefRegs=0060 {r5 r6}, byrefRegs=0200 {r9}, byref
+ ldr r0, [sp+0x04] // [V07 loc4]
; gcrRegs +[r0]
movw r4, LOW RELOC 0xD1FFAB1E
movt r4, HIGH RELOC 0xD1FFAB1E
@@ -142,14 +141,14 @@ G_M40132_IG07: ; bbWeight=1.98, gcrefRegs=0060 {r5 r6}, byrefRegs=0400 {r
ldr r3, [r4]
; GC ptr vars -{V07}
blx r3 // <unknown method>
- str r0, [sp+0x0C] // [V07 loc4]
+ str r0, [sp+0x04] // [V07 loc4]
; GC ptr vars +{V07}
;; size=18 bbWeight=1.98 PerfScore 13.86
-G_M40132_IG08: ; bbWeight=3.96, gcVars=00000002 {V07}, gcrefRegs=0060 {r5 r6}, byrefRegs=0400 {r10}, gcvars, byref, isz
+G_M40132_IG08: ; bbWeight=3.96, gcVars=00000002 {V07}, gcrefRegs=0060 {r5 r6}, byrefRegs=0200 {r9}, gcvars, byref, isz
; gcrRegs -[r0]
add r2, r5, 8
; byrRegs +[r2]
- ldr r0, [r2+r9]
+ ldr r0, [r2+r10]
; gcrRegs +[r0]
movw r4, LOW RELOC 0xD1FFAB1E
movt r4, HIGH RELOC 0xD1FFAB1E
@@ -158,9 +157,9 @@ G_M40132_IG08: ; bbWeight=3.96, gcVars=00000002 {V07}, gcrefRegs=0060 {r5
ldr r2, [r4]
; byrRegs -[r2]
blx r2 // <unknown method>
- mov r9, r0
- ; gcrRegs +[r9]
- mov r0, r9
+ mov r10, r0
+ ; gcrRegs +[r10]
+ mov r0, r10
movw r4, LOW RELOC 0xD1FFAB1E
movt r4, HIGH RELOC 0xD1FFAB1E
add r4, pc
@@ -171,43 +170,43 @@ G_M40132_IG08: ; bbWeight=3.96, gcVars=00000002 {V07}, gcrefRegs=0060 {r5
cmp r0, 0
beq SHORT G_M40132_IG10
;; size=48 bbWeight=3.96 PerfScore 71.28
-G_M40132_IG09: ; bbWeight=1.98, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0400 {r10}, byref
- mov r0, r9
+G_M40132_IG09: ; bbWeight=1.98, gcrefRegs=0460 {r5 r6 r10}, byrefRegs=0200 {r9}, byref
+ mov r0, r10
; gcrRegs +[r0]
movw r4, LOW RELOC 0xD1FFAB1E
movt r4, HIGH RELOC 0xD1FFAB1E
add r4, pc
ldr r3, [r4]
blx r3 // <unknown method>
- ; gcrRegs -[r9]
- mov r9, r0
- ; gcrRegs +[r9]
+ ; gcrRegs -[r10]
+ mov r10, r0
+ ; gcrRegs +[r10]
;; size=18 bbWeight=1.98 PerfScore 13.86
-G_M40132_IG10: ; bbWeight=3.96, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0400 {r10}, byref, isz
+G_M40132_IG10: ; bbWeight=3.96, gcrefRegs=0460 {r5 r6 r10}, byrefRegs=0200 {r9}, byref, isz
; gcrRegs -[r0]
- ldr r3, [sp+0x0C] // [V07 loc4]
+ ldr r3, [sp+0x04] // [V07 loc4]
; gcrRegs +[r3]
- cmp r3, r9
+ cmp r3, r10
bne SHORT G_M40132_IG18
adds r7, r7, 1
- bvs G_M40132_IG29
+ bvs G_M40132_IG31
cmp r7, r8
ble SHORT G_M40132_IG06
;; size=16 bbWeight=3.96 PerfScore 27.72
G_M40132_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, gcvars, byref, isz
- ; gcrRegs -[r3 r9]
- ; byrRegs -[r10]
+ ; gcrRegs -[r3 r10]
+ ; byrRegs -[r9]
; GC ptr vars -{V07}
b SHORT G_M40132_IG17
;; size=2 bbWeight=0.50 PerfScore 0.50
G_M40132_IG12: ; bbWeight=0.04, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
- ldr r9, [r6+0x04]
- cmp r7, r9
- bhs G_M40132_IG30
- add r10, r6, 8
- ; byrRegs +[r10]
+ ldr r0, [r6+0x04]
+ cmp r7, r0
+ bhs G_M40132_IG32
+ add r9, r6, 8
+ ; byrRegs +[r9]
lsls r0, r7, 2
- ldr r0, [r10+r0]
+ ldr r0, [r9+r0]
; gcrRegs +[r0]
movw r4, LOW RELOC 0xD1FFAB1E
movt r4, HIGH RELOC 0xD1FFAB1E
@@ -215,7 +214,7 @@ G_M40132_IG12: ; bbWeight=0.04, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}
ldr r2, [r0]
ldr r3, [r4]
blx r3 // <unknown method>
- ; byrRegs -[r10]
+ ; byrRegs -[r9]
mov r9, r0
; gcrRegs +[r9]
mov r0, r9
@@ -228,7 +227,7 @@ G_M40132_IG12: ; bbWeight=0.04, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}
; gcrRegs -[r0]
cmp r0, 0
beq SHORT G_M40132_IG14
- ;; size=60 bbWeight=0.04 PerfScore 0.88
+ ;; size=58 bbWeight=0.04 PerfScore 0.88
G_M40132_IG13: ; bbWeight=0.02, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref
mov r0, r9
; gcrRegs +[r0]
@@ -245,7 +244,7 @@ G_M40132_IG14: ; bbWeight=0.04, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000
; gcrRegs -[r0]
ldr r0, [r5+0x04]
cmp r7, r0
- bhs G_M40132_IG30
+ bhs G_M40132_IG32
add r2, r5, 8
; byrRegs +[r2]
mov r10, r2
@@ -261,53 +260,48 @@ G_M40132_IG14: ; bbWeight=0.04, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000
ldr r3, [r4]
blx r3 // <unknown method>
; byrRegs -[r10]
- mov r3, r0
- ; gcrRegs +[r3]
- str r3, [sp+0x08] // [V08 loc5]
- ; GC ptr vars +{V08}
- mov r0, r3
+ mov r10, r0
+ ; gcrRegs +[r10]
+ mov r0, r10
movw r4, LOW RELOC 0xD1FFAB1E
movt r4, HIGH RELOC 0xD1FFAB1E
add r4, pc
- ldr r1, [r0]
- ldr r2, [r4]
- blx r2 // <unknown method>
- ; gcrRegs -[r0 r3]
+ ldr r2, [r0]
+ ldr r3, [r4]
+ blx r3 // <unknown method>
+ ; gcrRegs -[r0]
cmp r0, 0
beq SHORT G_M40132_IG16
- ;; size=62 bbWeight=0.04 PerfScore 0.96
-G_M40132_IG15: ; bbWeight=0.02, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref
- ldr r0, [sp+0x08] // [V08 loc5]
+ ;; size=60 bbWeight=0.04 PerfScore 0.92
+G_M40132_IG15: ; bbWeight=0.02, gcrefRegs=0660 {r5 r6 r9 r10}, byrefRegs=0000 {}, byref
+ mov r0, r10
...
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 |
1 |
0 |
1 |
0 |
-0 |
+52 |
| 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 |
0 |
0 |
0 |
0 |
-0 |
+0 |
| realworld.run.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
|
1 |
0 |
1 |
0 |
-0 |
+52 |
Context information
| Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
| benchmarks.run.linux.arm.checked.mch |
45,964 |
5,344 |
40,620 |
1,203 (2.55%) |
1,203 (2.55%) |
| benchmarks.run_pgo.linux.arm.checked.mch |
159,513 |
56,729 |
102,784 |
3,201 (1.97%) |
3,201 (1.97%) |
| benchmarks.run_tiered.linux.arm.checked.mch |
80,099 |
43,607 |
36,492 |
1,086 (1.34%) |
1,086 (1.34%) |
| coreclr_tests.run.linux.arm.checked.mch |
471,993 |
259,195 |
212,798 |
7,170 (1.50%) |
7,170 (1.50%) |
| libraries.crossgen2.linux.arm.checked.mch |
188,191 |
14 |
188,177 |
0 (0.00%) |
0 (0.00%) |
| libraries.pmi.linux.arm.checked.mch |
272,360 |
6 |
272,354 |
7,786 (2.78%) |
7,786 (2.78%) |
| libraries_tests.run.linux.arm.Release.mch |
710,231 |
442,672 |
267,559 |
16,195 (2.23%) |
16,195 (2.23%) |
| librariestestsnotieredcompilation.run.linux.arm.Release.mch |
274,633 |
21,604 |
253,029 |
33,224 (10.79%) |
33,224 (10.79%) |
| realworld.run.linux.arm.checked.mch |
36,407 |
157 |
36,250 |
1,408 (3.72%) |
1,408 (3.72%) |
|
2,239,391 |
829,328 |
1,410,063 |
71,273 (3.08%) |
71,273 (3.08%) |
jit-analyze output
libraries.crossgen2.linux.arm.checked.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: 34522542 (overridden on cmd)
Total bytes of diff: 34522594 (overridden on cmd)
Total bytes of delta: 52 (0.00 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
52 : 159916.dasm (7.08 % of base)
1 total files with Code Size differences (0 improved, 1 regressed), 0 unchanged.
Top method regressions (bytes):
52 (7.08 % of base) : 159916.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:MethodsDifferOnlyByReturnType(System.Reflection.MethodBase,System.Reflection.MethodBase):ubyte:this (FullOpts)
Top method regressions (percentages):
52 (7.08 % of base) : 159916.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:MethodsDifferOnlyByReturnType(System.Reflection.MethodBase,System.Reflection.MethodBase):ubyte:this (FullOpts)
1 total methods with Code Size differences (0 improved, 1 regressed).
windows x86
Diffs are based on 2,293,495 contexts (839,658 MinOpts, 1,453,837 FullOpts).
MISSED contexts: 1 (0.00%)
Overall (+46 bytes)
| Collection |
Base size (bytes) |
Diff size (bytes) |
| libraries.crossgen2.windows.x86.checked.mch |
31,716,932 |
+46 |
FullOpts (+46 bytes)
| Collection |
Base size (bytes) |
Diff size (bytes) |
| libraries.crossgen2.windows.x86.checked.mch |
31,715,872 |
+46 |
Example diffs
libraries.crossgen2.windows.x86.checked.mch
+46 (+7.71%) : 197648.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:MethodsDifferOnlyByReturnType(System.Reflection.MethodBase,System.Reflection.MethodBase):ubyte:this (FullOpts)
@@ -11,25 +11,24 @@
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Microsoft.VisualBasic.CompilerServices.VBBinder>
; V01 arg1 [V01,T10] ( 3, 3 ) ref -> edx class-hnd single-def <System.Reflection.MethodBase>
-; V02 arg2 [V02,T16] ( 1, 1 ) ref -> [ebp+0x08] class-hnd single-def <System.Reflection.MethodBase>
-; V03 loc0 [V03,T12] ( 3, 2 ) ubyte -> eax
-; V04 loc1 [V04,T04] ( 9, 12.04) ref -> esi class-hnd single-def <<unknown class>>
-; V05 loc2 [V05,T03] ( 13, 13.08) ref -> edi class-hnd single-def <<unknown class>>
-; V06 loc3 [V06,T00] ( 32, 59.62) int -> [ebp-0x10]
-; V07 loc4 [V07,T01] ( 10, 16 ) ref -> [ebp-0x18] class-hnd <<unknown class>>
-; V08 loc5 [V08,T02] ( 10, 16 ) ref -> [ebp-0x1C] class-hnd <<unknown class>>
+; V02 arg2 [V02,T15] ( 1, 1 ) ref -> [ebp+0x08] class-hnd single-def <System.Reflection.MethodBase>
+; V03 loc0 [V03,T11] ( 3, 2 ) ubyte -> eax
+; V04 loc1 [V04,T03] ( 13, 13.08) ref -> esi class-hnd single-def <<unknown class>>
+; V05 loc2 [V05,T04] ( 13, 13.08) ref -> edi class-hnd single-def <<unknown class>>
+; V06 loc3 [V06,T00] ( 37, 56.16) int -> [ebp-0x10]
+; V07 loc4 [V07,T01] ( 10, 16 ) ref -> [ebp-0x14] class-hnd <<unknown class>>
+; V08 loc5 [V08,T02] ( 10, 16 ) ref -> [ebp-0x18] class-hnd <<unknown class>>
; V09 loc6 [V09,T05] ( 8, 9 ) int -> ebx single-def
-;* V10 loc7 [V10,T17] ( 0, 0 ) int -> zero-ref single-def
-; V11 loc8 [V11,T11] ( 3, 5 ) int -> edi single-def
+;* V10 loc7 [V10,T16] ( 0, 0 ) int -> zero-ref single-def
+; V11 loc8 [V11,T06] ( 6, 6 ) int -> edi single-def
; V12 loc9 [V12,T07] ( 6, 6 ) int -> esi single-def
; V13 tmp0 [V13,T08] ( 3, 6 ) int -> ebx "non-inline candidate call"
-; V14 tmp1 [V14,T13] ( 2, 2 ) int -> ebx "non-inline candidate call"
-; V15 tmp2 [V15,T14] ( 2, 2 ) int -> ebx "non-inline candidate call"
-; V16 tmp3 [V16,T15] ( 2, 2 ) int -> ebx "Inline return value spill temp"
+; V14 tmp1 [V14,T12] ( 2, 2 ) int -> ebx "non-inline candidate call"
+; V15 tmp2 [V15,T13] ( 2, 2 ) int -> ebx "non-inline candidate call"
+; V16 tmp3 [V16,T14] ( 2, 2 ) int -> ebx "Inline return value spill temp"
; V17 tmp4 [V17,T09] ( 3, 6 ) int -> eax "Inlining Arg"
-; V18 cse0 [V18,T06] ( 8, 7.58) int -> [ebp-0x14] multi-def "CSE - moderate"
;
-; Lcl frame size = 16
+; Lcl frame size = 12
G_M40132_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -37,7 +36,7 @@ G_M40132_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 16
+ sub esp, 12
;; size=9 bbWeight=1 PerfScore 4.50
G_M40132_IG02: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[edx]
@@ -73,12 +72,11 @@ G_M40132_IG02: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000
xor eax, eax
test ebx, ebx
jl G_M40132_IG14
- mov edx, dword ptr [esi+0x04]
- cmp edx, ebx
+ cmp dword ptr [esi+0x04], ebx
jle G_M40132_IG09
cmp dword ptr [edi+0x04], ebx
jle SHORT G_M40132_IG09
- ;; size=82 bbWeight=1 PerfScore 36.25
+ ;; size=80 bbWeight=1 PerfScore 37.00
G_M40132_IG03: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov dword ptr [ebp-0x10], eax
mov ecx, gword ptr [esi+4*eax+0x08]
@@ -86,7 +84,7 @@ G_M40132_IG03: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
cmp dword ptr [ecx], ecx
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x18], eax
+ mov gword ptr [ebp-0x14], eax
; GC ptr vars +{V07}
mov ecx, eax
; gcrRegs +[ecx]
@@ -97,12 +95,12 @@ G_M40132_IG03: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
je SHORT G_M40132_IG05
;; size=32 bbWeight=3.96 PerfScore 69.30
G_M40132_IG04: ; bbWeight=1.98, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, gword ptr [ebp-0x18]
+ mov ecx, gword ptr [ebp-0x14]
; gcrRegs +[ecx]
; GC ptr vars -{V07}
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x18], eax
+ mov gword ptr [ebp-0x14], eax
; GC ptr vars +{V07}
;; size=12 bbWeight=1.98 PerfScore 9.90
G_M40132_IG05: ; bbWeight=3.96, gcVars=00000002 {V07}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
@@ -113,7 +111,7 @@ G_M40132_IG05: ; bbWeight=3.96, gcVars=00000002 {V07}, gcrefRegs=000000C0
cmp dword ptr [ecx], ecx
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x1C], eax
+ mov gword ptr [ebp-0x18], eax
; GC ptr vars +{V08}
mov ecx, eax
; gcrRegs +[ecx]
@@ -124,24 +122,24 @@ G_M40132_IG05: ; bbWeight=3.96, gcVars=00000002 {V07}, gcrefRegs=000000C0
je SHORT G_M40132_IG07
;; size=32 bbWeight=3.96 PerfScore 69.30
G_M40132_IG06: ; bbWeight=1.98, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, gword ptr [ebp-0x1C]
+ mov ecx, gword ptr [ebp-0x18]
; gcrRegs +[ecx]
; GC ptr vars -{V08}
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x1C], eax
+ mov gword ptr [ebp-0x18], eax
; GC ptr vars +{V08}
;; size=12 bbWeight=1.98 PerfScore 9.90
G_M40132_IG07: ; bbWeight=3.96, gcVars=00000006 {V07 V08}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov edx, gword ptr [ebp-0x18]
+ mov edx, gword ptr [ebp-0x14]
; gcrRegs +[edx]
- cmp edx, gword ptr [ebp-0x1C]
+ cmp edx, gword ptr [ebp-0x18]
jne G_M40132_IG15
mov edx, dword ptr [ebp-0x10]
; gcrRegs -[edx]
add edx, 1
- jo G_M40132_IG24
+ jo G_M40132_IG27
cmp edx, ebx
mov eax, edx
jle SHORT G_M40132_IG03
@@ -151,16 +149,15 @@ G_M40132_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {e
jmp G_M40132_IG14
;; size=5 bbWeight=0.50 PerfScore 1.00
G_M40132_IG09: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov edx, dword ptr [esi+0x04]
- cmp eax, edx
- jae G_M40132_IG25
+ cmp eax, dword ptr [esi+0x04]
+ jae G_M40132_IG28
mov dword ptr [ebp-0x10], eax
mov ecx, gword ptr [esi+4*eax+0x08]
; gcrRegs +[ecx]
cmp dword ptr [ecx], ecx
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x18], eax
+ mov gword ptr [ebp-0x14], eax
; GC ptr vars +{V07}
mov ecx, eax
; gcrRegs +[ecx]
@@ -169,28 +166,28 @@ G_M40132_IG09: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
; gcrRegs -[eax ecx]
test eax, eax
je SHORT G_M40132_IG11
- ;; size=43 bbWeight=0.04 PerfScore 0.83
+ ;; size=41 bbWeight=0.04 PerfScore 0.86
G_M40132_IG10: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, gword ptr [ebp-0x18]
+ mov ecx, gword ptr [ebp-0x14]
; gcrRegs +[ecx]
; GC ptr vars -{V07}
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x18], eax
+ mov gword ptr [ebp-0x14], eax
; GC ptr vars +{V07}
;; size=12 bbWeight=0.02 PerfScore 0.10
G_M40132_IG11: ; bbWeight=0.04, gcVars=00000002 {V07}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
mov edx, dword ptr [ebp-0x10]
cmp edx, dword ptr [edi+0x04]
- jae G_M40132_IG25
+ jae G_M40132_IG28
mov dword ptr [ebp-0x10], edx
mov ecx, gword ptr [edi+4*edx+0x08]
; gcrRegs +[ecx]
cmp dword ptr [ecx], ecx
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x1C], eax
+ mov gword ptr [ebp-0x18], eax
; GC ptr vars +{V08}
mov ecx, eax
; gcrRegs +[ecx]
@@ -201,37 +198,36 @@ G_M40132_IG11: ; bbWeight=0.04, gcVars=00000002 {V07}, gcrefRegs=000000C0
je SHORT G_M40132_IG13
;; size=44 bbWeight=0.04 PerfScore 0.90
G_M40132_IG12: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, gword ptr [ebp-0x1C]
+ mov ecx, gword ptr [ebp-0x18]
; gcrRegs +[ecx]
; GC ptr vars -{V08}
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
mov ecx, eax
; gcrRegs +[ecx]
- mov gword ptr [ebp-0x1C], ecx
+ mov gword ptr [ebp-0x18], ecx
; GC ptr vars +{V08}
;; size=14 bbWeight=0.02 PerfScore 0.11
G_M40132_IG13: ; bbWeight=0.04, gcVars=00000006 {V07 V08}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax ecx]
- mov edx, gword ptr [ebp-0x18]
+ mov edx, gword ptr [ebp-0x14]
; gcrRegs +[edx]
- cmp edx, gword ptr [ebp-0x1C]
+ cmp edx, gword ptr [ebp-0x18]
jne SHORT G_M40132_IG15
mov eax, dword ptr [ebp-0x10]
add eax, 1
- jo G_M40132_IG24
+ jo G_M40132_IG27
cmp eax, ebx
jle G_M40132_IG09
;; size=28 bbWeight=0.04 PerfScore 0.30
G_M40132_IG14: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[edx]
; GC ptr vars -{V07 V08}
- mov edx, dword ptr [esi+0x04]
- mov dword ptr [ebp-0x14], edx
- cmp edx, dword ptr [edi+0x04]
- jle SHORT G_M40132_IG18
+ mov ecx, dword ptr [esi+0x04]
+ cmp ecx, dword ptr [edi+0x04]
+ jle G_M40132_IG21
add ebx, 1
- jo G_M40132_IG24
+ jo G_M40132_IG27
mov ecx, edi
; gcrRegs +[ecx]
xor edx, edx
@@ -239,18 +235,23 @@ G_M40132_IG14: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {e
; gcrRegs -[ecx edi]
mov edi, eax
cmp ebx, edi
- jg G_M40132_IG22
+ jg G_M40132_IG25
jmp SHORT G_M40132_IG16
- ;; size=42 bbWeight=0.50 PerfScore 7.62
+ ;; size=43 bbWeight=0.50 PerfScore 7.12
G_M40132_IG15: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi]
xor eax, eax
- jmp G_M40132_IG23
+ jmp G_M40132_IG26
;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M40132_IG16: ; bbWeight=4, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M40132_IG16: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[esi]
- cmp ebx, dword ptr [ebp-0x14]
- jae G_M40132_IG25
+ mov ecx, ebx
+ or ecx, edi
+ jl SHORT G_M40132_IG19
...
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 |
1 |
0 |
1 |
0 |
-0 |
+46 |
| libraries.pmi.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
| libraries_tests.run.windows.x86.Release.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
| librariestestsnotieredcompilation.run.windows.x86.Release.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
| realworld.run.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
|
1 |
0 |
1 |
0 |
-0 |
+46 |
Context information
| Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
| benchmarks.run.windows.x86.checked.mch |
24,493 |
4 |
24,489 |
0 (0.00%) |
0 (0.00%) |
| benchmarks.run_pgo.windows.x86.checked.mch |
117,807 |
41,904 |
75,903 |
0 (0.00%) |
0 (0.00%) |
| benchmarks.run_tiered.windows.x86.checked.mch |
47,883 |
28,747 |
19,136 |
0 (0.00%) |
0 (0.00%) |
| coreclr_tests.run.windows.x86.checked.mch |
574,667 |
319,847 |
254,820 |
1 (0.00%) |
1 (0.00%) |
| libraries.crossgen2.windows.x86.checked.mch |
242,619 |
15 |
242,604 |
0 (0.00%) |
0 (0.00%) |
| libraries.pmi.windows.x86.checked.mch |
305,773 |
6 |
305,767 |
0 (0.00%) |
0 (0.00%) |
| libraries_tests.run.windows.x86.Release.mch |
627,833 |
427,222 |
200,611 |
0 (0.00%) |
0 (0.00%) |
| librariestestsnotieredcompilation.run.windows.x86.Release.mch |
316,435 |
21,910 |
294,525 |
0 (0.00%) |
0 (0.00%) |
| realworld.run.windows.x86.checked.mch |
35,985 |
3 |
35,982 |
0 (0.00%) |
0 (0.00%) |
|
2,293,495 |
839,658 |
1,453,837 |
1 (0.00%) |
1 (0.00%) |
jit-analyze output
libraries.crossgen2.windows.x86.checked.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: 31716932 (overridden on cmd)
Total bytes of diff: 31716978 (overridden on cmd)
Total bytes of delta: 46 (0.00 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
46 : 197648.dasm (7.71 % of base)
1 total files with Code Size differences (0 improved, 1 regressed), 0 unchanged.
Top method regressions (bytes):
46 (7.71 % of base) : 197648.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:MethodsDifferOnlyByReturnType(System.Reflection.MethodBase,System.Reflection.MethodBase):ubyte:this (FullOpts)
Top method regressions (percentages):
46 (7.71 % of base) : 197648.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:MethodsDifferOnlyByReturnType(System.Reflection.MethodBase,System.Reflection.MethodBase):ubyte:this (FullOpts)
1 total methods with Code Size differences (0 improved, 1 regressed).