Skip to content

arm64: Fold negative variable eq/ne to 0#124332

Open
jonathandavies-arm wants to merge 5 commits intodotnet:mainfrom
jonathandavies-arm:upstream/co/fold-shift-cmp-#0
Open

arm64: Fold negative variable eq/ne to 0#124332
jonathandavies-arm wants to merge 5 commits intodotnet:mainfrom
jonathandavies-arm:upstream/co/fold-shift-cmp-#0

Conversation

@jonathandavies-arm
Copy link
Contributor

i.e. Fold: (-(x)) == 0 -> x == 0

arm64 asmdiffs
Diffs are based on 436,095 contexts (26,618 MinOpts, 409,477 FullOpts).

Overall (-40 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 183,146,276 -40 -0.09%
benchmarks.run.linux.arm64.checked.mch 21,285,888 +0 0.00%
smoke_tests.nativeaot.linux.arm64.checked.mch 3,003,400 +0 0.00%
FullOpts (-40 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 168,630,412 -40 -0.09%
benchmarks.run.linux.arm64.checked.mch 20,953,436 +0 0.00%
smoke_tests.nativeaot.linux.arm64.checked.mch 3,001,776 +0 0.00%
Example diffs
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch
-4 (-1.27%) : 142473.dasm - System.IO.Pipelines.Tests.BufferSegmentPoolTest:GetSegments(System.IO.Pipelines.ReadResult):System.Collections.Generic.List`1[System.Buffers.ReadOnlySequenceSegment`1[byte]] (FullOpts)
@@ -53,8 +53,7 @@ G_M13215_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byre
 G_M13215_IG03:        ; bbWeight=0.50, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
             asr     w2, w2, #31
             lsl     w2, w2, #1
-            add     w0, w2, w0,  ASR #31
-            negs    w0, w0
+            adds    w0, w2, w0,  ASR #31
             bne     G_M13215_IG04
             movz    x0, #0xD1FFAB1E
             movk    x0, #0xD1FFAB1E LSL #16
@@ -76,7 +75,7 @@ G_M13215_IG03:        ; bbWeight=0.50, gcrefRegs=80002 {x1 x19}, byrefRegs=0000
             mov     x19, x0
             ; gcrRegs +[x19]
             b       G_M13215_IG05
-						;; size=68 bbWeight=0.50 PerfScore 6.00
+						;; size=64 bbWeight=0.50 PerfScore 5.75
 G_M13215_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[x0 x19-x20]
             mov     x20, xzr
@@ -179,7 +178,7 @@ G_M13215_IG13:        ; bbWeight=0, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=00
             b       G_M13215_IG06
 						;; size=12 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 316, prolog size 16, PerfScore 140.93, instruction count 79, allocated bytes for code 316 (MethodHash=c6bccc60) for method System.IO.Pipelines.Tests.BufferSegmentPoolTest:GetSegments(System.IO.Pipelines.ReadResult):System.Collections.Generic.List`1[System.Buffers.ReadOnlySequenceSegment`1[byte]] (FullOpts)
+; Total bytes of code 312, prolog size 16, PerfScore 140.68, instruction count 78, allocated bytes for code 312 (MethodHash=c6bccc60) for method System.IO.Pipelines.Tests.BufferSegmentPoolTest:GetSegments(System.IO.Pipelines.ReadResult):System.Collections.Generic.List`1[System.Buffers.ReadOnlySequenceSegment`1[byte]] (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -190,7 +189,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 79 (0x0004f) Actual length = 316 (0x00013c)
+  Function Length   : 78 (0x0004e) Actual length = 312 (0x000138)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.27%) : 162917.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory():this (FullOpts)
@@ -531,10 +531,9 @@ G_M17523_IG25:        ; bbWeight=1, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}
 G_M17523_IG26:        ; bbWeight=0.50, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
             asr     w0, w0, #31
             lsl     w0, w0, #1
-            add     w0, w0, w2,  ASR #31
-            negs    w0, w0
+            adds    w0, w0, w2,  ASR #31
             beq     G_M17523_IG29
-						;; size=20 bbWeight=0.50 PerfScore 2.25
+						;; size=16 bbWeight=0.50 PerfScore 2.00
 G_M17523_IG27:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[x1 x19]
             mov     w19, wzr
@@ -733,7 +732,7 @@ G_M17523_IG43:        ; bbWeight=0.00, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b
             brk     #0
 						;; size=32 bbWeight=0.00 PerfScore 0.00
 
-; Total bytes of code 1488, prolog size 36, PerfScore 200.96, instruction count 372, allocated bytes for code 1488 (MethodHash=abb9bb8c) for method System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory():this (FullOpts)
+; Total bytes of code 1484, prolog size 36, PerfScore 200.71, instruction count 371, allocated bytes for code 1484 (MethodHash=abb9bb8c) for method System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -744,7 +743,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 372 (0x00174) Actual length = 1488 (0x0005d0)
+  Function Length   : 371 (0x00173) Actual length = 1484 (0x0005cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.26%) : 162915.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory_String():this (FullOpts)
@@ -208,7 +208,7 @@
 ;  V197 cse1        [V197,T40] (  2,  1   )     ref  ->   x0         "CSE #07: moderate"
 ;  V198 cse2        [V198,T44] (  2,  1   )     int  ->  x23         "CSE #04: moderate"
 ;  V199 cse3        [V199,T45] (  2,  1   )    long  ->   x1         "CSE #05: moderate"
-;  V200 cse4        [V200,T33] (  3,  1.50)     int  ->   x1         "CSE #17: moderate"
+;  V200 cse4        [V200,T33] (  3,  1.50)     int  ->   x1         "CSE #16: moderate"
 ;  V201 rat0        [V201,T01] (  3,  5.62)   byref  ->   x1         "fgMakeTemp is creating a new local variable"
 ;  V202 rat1        [V202,T07] (  5,  3.75)     ref  ->   x0         "replacement local"
 ;  V203 rat2        [V203,T37] (  3,  1.25)    long  ->   x2         "CSE for expectedClsNode"
@@ -623,8 +623,7 @@ G_M55449_IG30:        ; bbWeight=1, gcrefRegs=4180002 {x1 x19 x20 x26}, byrefReg
 G_M55449_IG31:        ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
             asr     w1, w21, #31
             lsl     w1, w1, #1
-            add     w1, w1, w22,  ASR #31
-            negs    w1, w1
+            adds    w1, w1, w22,  ASR #31
             bne     G_M55449_IG32
             mov     x1, x19
             ; gcrRegs +[x1]
@@ -642,7 +641,7 @@ G_M55449_IG31:        ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=000
             ; gcrRegs -[x1 x20]
             mov     w20, #1
             b       G_M55449_IG33
-						;; size=68 bbWeight=0.50 PerfScore 6.00
+						;; size=64 bbWeight=0.50 PerfScore 5.75
 G_M55449_IG32:        ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
             mov     w20, wzr
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -776,7 +775,7 @@ G_M55449_IG46:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk     #0
 						;; size=40 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1516, prolog size 48, PerfScore 174.78, instruction count 379, allocated bytes for code 1516 (MethodHash=a4562766) for method System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory_String():this (FullOpts)
+; Total bytes of code 1512, prolog size 48, PerfScore 174.53, instruction count 378, allocated bytes for code 1512 (MethodHash=a4562766) for method System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory_String():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -787,7 +786,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 379 (0x0017b) Actual length = 1516 (0x0005ec)
+  Function Length   : 378 (0x0017a) Actual length = 1512 (0x0005e8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+0 (0.00%) : 223365.dasm - System.Resources.Extensions.DeserializingResourceReader:CompareStringEqualsName(System.String):bool:this (FullOpts)
@@ -106,7 +106,7 @@ G_M52056_IG05:        ; bbWeight=0.50, gcrefRegs=500000 {x20 x22}, byrefRegs=000
             ldr     x3, [x3]
             blr     x3
             ; gcrRegs -[x0-x1 x20 x22]
-            negs    w0, w0
+            cmp     w0, #0
             cset    x0, eq
 						;; size=40 bbWeight=0.50 PerfScore 4.25
 G_M52056_IG06:        ; bbWeight=0.50, epilog, nogc, extend
-4 (-0.02%) : 106573.dasm - System.Data.Tests.DataTableTest2:Select_ByFilter():this (FullOpts)
@@ -3678,8 +3678,7 @@ G_M43941_IG97:        ; bbWeight=1, gcVars=0000000000000000000000000000000000000
 G_M43941_IG98:        ; bbWeight=4, gcrefRegs=4780004 {x2 x19 x20 x21 x22 x26}, byrefRegs=0000 {}, byref, isz
             ldr     w1, [x2, #0x08]
             ldr     w0, [fp, #0xD1FFAB1E]	// [V74 tmp49]
-            sub     w1, w0, w1
-            negs    w1, w1
+            subs    w1, w0, w1
             beq     G_M43941_IG90
             ldp     w0, w1, [x22, #0x10]
             add     w1, w1, #1
@@ -3688,7 +3687,7 @@ G_M43941_IG98:        ; bbWeight=4, gcrefRegs=4780004 {x2 x19 x20 x21 x22 x26},
             ldr     w1, [x2, #0x08]
             cmp     w1, w0
             bls     G_M43941_IG100
-						;; size=48 bbWeight=4 PerfScore 76.00
+						;; size=44 bbWeight=4 PerfScore 74.00
 G_M43941_IG99:        ; bbWeight=3.03, gcVars=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 {V06}, gcrefRegs=4780004 {x2 x19 x20 x21 x22 x26}, byrefRegs=0000 {}, gcvars, byref
             ; GC ptr vars -{V75}
             add     w1, w0, #1
@@ -7803,7 +7802,7 @@ RWD00  	dq	00740053002D0031h, 0067006E00690072h
 RWD16  	dq	007200740053002Dh, 00310067006E0069h
 
 
-; Total bytes of code 18184, prolog size 44, PerfScore 10435.99, instruction count 4546, allocated bytes for code 18184 (MethodHash=c958545a) for method System.Data.Tests.DataTableTest2:Select_ByFilter():this (FullOpts)
+; Total bytes of code 18180, prolog size 44, PerfScore 10433.99, instruction count 4545, allocated bytes for code 18180 (MethodHash=c958545a) for method System.Data.Tests.DataTableTest2:Select_ByFilter():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -7814,7 +7813,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 4130 (0x01022) Actual length = 16520 (0x004088)
+  Function Length   : 4129 (0x01021) Actual length = 16516 (0x004084)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.16%) : 141855.dasm - System.IO.Pipelines.Tests.PipePoolTests:GetMemoryOverMaxPoolSizeAllocatesArray():this (FullOpts)
@@ -595,8 +595,7 @@ G_M36412_IG24:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefReg
 G_M36412_IG25:        ; bbWeight=0.50, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref, isz
             asr     w1, w24, #31
             lsl     w1, w1, #1
-            add     w1, w1, w25,  ASR #31
-            negs    w1, w1
+            adds    w1, w1, w25,  ASR #31
             bne     G_M36412_IG26
             mov     x1, x20
             ; gcrRegs +[x1]
@@ -618,7 +617,7 @@ G_M36412_IG25:        ; bbWeight=0.50, gcrefRegs=B80000 {x19 x20 x21 x23}, byref
             ; gcrRegs -[x1] +[x0]
             ; gcr arg pop 0
             b       G_M36412_IG27
-						;; size=68 bbWeight=0.50 PerfScore 6.00
+						;; size=64 bbWeight=0.50 PerfScore 5.75
 G_M36412_IG26:        ; bbWeight=0.50, gcrefRegs=A80000 {x19 x21 x23}, byrefRegs=0000 {}, byref
             ; gcrRegs -[x0 x20]
             mov     x20, xzr
@@ -1232,7 +1231,7 @@ RWD16  	dq	<unknown method>
 	dq	G_M36412_IG51
 
 
-; Total bytes of code 2528, prolog size 48, PerfScore 347.37, instruction count 632, allocated bytes for code 2528 (MethodHash=f7d471c3) for method System.IO.Pipelines.Tests.PipePoolTests:GetMemoryOverMaxPoolSizeAllocatesArray():this (FullOpts)
+; Total bytes of code 2524, prolog size 48, PerfScore 347.12, instruction count 631, allocated bytes for code 2524 (MethodHash=f7d471c3) for method System.IO.Pipelines.Tests.PipePoolTests:GetMemoryOverMaxPoolSizeAllocatesArray():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -1243,7 +1242,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 591 (0x0024f) Actual length = 2364 (0x00093c)
+  Function Length   : 590 (0x0024e) Actual length = 2360 (0x000938)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
benchmarks.run.linux.arm64.checked.mch
+0 (0.00%) : 3177.dasm - System.Resources.ResourceReader:CompareStringEqualsName(System.String):bool:this (FullOpts)
@@ -106,7 +106,7 @@ G_M1070_IG05:        ; bbWeight=0.50, gcrefRegs=500000 {x20 x22}, byrefRegs=0000
             ldr     x3, [x3]
             blr     x3
             ; gcrRegs -[x0-x1 x20 x22]
-            negs    w0, w0
+            cmp     w0, #0
             cset    x0, eq
 						;; size=40 bbWeight=0.50 PerfScore 4.25
 G_M1070_IG06:        ; bbWeight=0.50, epilog, nogc, extend
smoke_tests.nativeaot.linux.arm64.checked.mch
+0 (0.00%) : 18583.dasm - Generics+TestAsyncGVMScenarios:RunAsync() (FullOpts)

No diffs found?

+0 (0.00%) : 18730.dasm - Generics+TestAsyncGVMScenarios:AsyncGvm1[System.__Canon]():this (FullOpts)

No diffs found?

+0 (0.00%) : 18865.dasm - Generics+TestAsyncGVMScenarios:AsyncGvm2[System.__Canon]():this (FullOpts)

No diffs found?

+0 (0.00%) : 18873.dasm - System.Threading.Tasks.Task:get_CompletedTask() (FullOpts)

No diffs found?

Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 11 10 0 1 -40 +0
benchmarks.run.linux.arm64.checked.mch 1 0 0 1 -0 +0
smoke_tests.nativeaot.linux.arm64.checked.mch 4 0 0 4 -0 +0
16 10 0 6 -40 +0

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 11 10 0 1 -0.10% 0.00% -0.0000%
benchmarks.run.linux.arm64.checked.mch 1 0 0 1 0.00% 0.00% 0.0000%
smoke_tests.nativeaot.linux.arm64.checked.mch 4 0 0 4 0.00% 0.00% 0.0000%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 354,001 23,273 330,728 0 (0.00%) 0 (0.00%)
benchmarks.run.linux.arm64.checked.mch 63,204 3,337 59,867 0 (0.00%) 0 (0.00%)
smoke_tests.nativeaot.linux.arm64.checked.mch 18,890 8 18,882 0 (0.00%) 0 (0.00%)
436,095 26,618 409,477 0 (0.00%) 0 (0.00%)

jit-analyze output

libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 183146276 (overridden on cmd)
Total bytes of diff: 183146236 (overridden on cmd)
Total bytes of delta: -40 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file improvements (bytes):
          -4 : 162916.dasm (-0.242% of base)
          -4 : 141852.dasm (-0.162% of base)
          -4 : 141855.dasm (-0.158% of base)
          -4 : 141861.dasm (-0.201% of base)
          -4 : 162917.dasm (-0.269% of base)
          -4 : 142473.dasm (-1.266% of base)
          -4 : 142389.dasm (-0.182% of base)
          -4 : 162915.dasm (-0.264% of base)
          -4 : 162918.dasm (-0.185% of base)
          -4 : 106573.dasm (-0.022% of base)

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

Top method improvements (bytes):
          -4 (-0.022% of base) : 106573.dasm - System.Data.Tests.DataTableTest2:Select_ByFilter():this (FullOpts)
          -4 (-1.266% of base) : 142473.dasm - System.IO.Pipelines.Tests.BufferSegmentPoolTest:GetSegments(System.IO.Pipelines.ReadResult):System.Collections.Generic.List`1[System.Buffers.ReadOnlySequenceSegment`1[byte]] (FullOpts)
          -4 (-0.182% of base) : 142389.dasm - System.IO.Pipelines.Tests.PipelineReaderWriterFacts:ResetAfterCompleteReaderAndWriterWithoutAdvancingClearsEverything():this (FullOpts)
          -4 (-0.162% of base) : 141852.dasm - System.IO.Pipelines.Tests.PipePoolTests:GetMemoryAtMaxPoolSizeAllocatesFromPool():this (FullOpts)
          -4 (-0.158% of base) : 141855.dasm - System.IO.Pipelines.Tests.PipePoolTests:GetMemoryOverMaxPoolSizeAllocatesArray():this (FullOpts)
          -4 (-0.201% of base) : 141861.dasm - System.IO.Pipelines.Tests.PipePoolTests:WritesToArrayPoolByDefault():this (FullOpts)
          -4 (-0.242% of base) : 162916.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_IMemoryList_MultiBlock():this (FullOpts)
          -4 (-0.185% of base) : 162918.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_IMemoryList_SingleBlock():this (FullOpts)
          -4 (-0.264% of base) : 162915.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory_String():this (FullOpts)
          -4 (-0.269% of base) : 162917.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory():this (FullOpts)

Top method improvements (percentages):
          -4 (-1.266% of base) : 142473.dasm - System.IO.Pipelines.Tests.BufferSegmentPoolTest:GetSegments(System.IO.Pipelines.ReadResult):System.Collections.Generic.List`1[System.Buffers.ReadOnlySequenceSegment`1[byte]] (FullOpts)
          -4 (-0.269% of base) : 162917.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory():this (FullOpts)
          -4 (-0.264% of base) : 162915.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_Memory_String():this (FullOpts)
          -4 (-0.242% of base) : 162916.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_IMemoryList_MultiBlock():this (FullOpts)
          -4 (-0.201% of base) : 141861.dasm - System.IO.Pipelines.Tests.PipePoolTests:WritesToArrayPoolByDefault():this (FullOpts)
          -4 (-0.185% of base) : 162918.dasm - System.Memory.Tests.ReadOnlySequenceTryGetTests:Ctor_IMemoryList_SingleBlock():this (FullOpts)
          -4 (-0.182% of base) : 142389.dasm - System.IO.Pipelines.Tests.PipelineReaderWriterFacts:ResetAfterCompleteReaderAndWriterWithoutAdvancingClearsEverything():this (FullOpts)
          -4 (-0.162% of base) : 141852.dasm - System.IO.Pipelines.Tests.PipePoolTests:GetMemoryAtMaxPoolSizeAllocatesFromPool():this (FullOpts)
          -4 (-0.158% of base) : 141855.dasm - System.IO.Pipelines.Tests.PipePoolTests:GetMemoryOverMaxPoolSizeAllocatesArray():this (FullOpts)
          -4 (-0.022% of base) : 106573.dasm - System.Data.Tests.DataTableTest2:Select_ByFilter():this (FullOpts)

10 total methods with Code Size differences (10 improved, 0 regressed).


benchmarks.run.linux.arm64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 21285888 (overridden on cmd)
Total bytes of diff: 21285888 (overridden on cmd)
Total bytes of delta: 0 (0.00 % of base)
Detail diffs


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

0 total methods with Code Size differences (0 improved, 0 regressed).


x64 asmdiffs
Diffs are based on 2,787,549 contexts (1,078,277 MinOpts, 1,709,272 FullOpts).

Overall (-116 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
coreclr_tests.run.linux.x64.checked.mch 305,501,642 -110 -14.87%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 157,729,192 -2 -0.01%
libraries_tests.run.linux.x64.Release.mch 392,784,680 -4 -0.01%
MinOpts (-14 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
coreclr_tests.run.linux.x64.checked.mch 197,469,852 -10 -1.28%
libraries_tests.run.linux.x64.Release.mch 215,792,030 -4 -0.01%
FullOpts (-102 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
coreclr_tests.run.linux.x64.checked.mch 108,031,790 -100 -16.74%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 146,383,976 -2 -0.01%
Example diffs
coreclr_tests.run.linux.x64.checked.mch
-8 (-29.63%) : 199901.dasm - TestNeg.Program:NegsBinOpSingleLine(int,int):bool (FullOpts)
@@ -18,23 +18,19 @@ G_M18888_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M18888_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
        sar      edi, 1
-       mov      eax, edi
-       neg      eax
        setne    al
        movzx    rax, al
-       add      esi, esi
-       mov      ecx, esi
-       neg      ecx
+       shl      esi, 1
        setne    cl
        movzx    rcx, cl
        or       eax, ecx
-						;; size=26 bbWeight=1 PerfScore 4.50
+						;; size=18 bbWeight=1 PerfScore 3.75
 G_M18888_IG03:        ; bbWeight=1, epilog, nogc, extend
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 ; END METHOD TestNeg.Program:NegsBinOpSingleLine(int,int):bool
 
-; Total bytes of code 27, prolog size 0, PerfScore 5.50, instruction count 12, allocated bytes for code 27 (MethodHash=d08ab637) for method TestNeg.Program:NegsBinOpSingleLine(int,int):bool (FullOpts)
+; Total bytes of code 19, prolog size 0, PerfScore 4.75, instruction count 8, allocated bytes for code 19 (MethodHash=d08ab637) for method TestNeg.Program:NegsBinOpSingleLine(int,int):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
-7 (-29.17%) : 199894.dasm - TestNeg.Program:NegsLSR(uint):int (FullOpts)
@@ -16,20 +16,17 @@
 G_M6300_IG01:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
 						;; size=0 bbWeight=0.50 PerfScore 0.00
 G_M6300_IG02:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+       mov      eax, -1
+       mov      ecx, 1
        shr      edi, 3
-       mov      eax, edi
-       mov      ecx, -1
-       mov      edx, 1
-       neg      rax
-       mov      eax, edx
-       cmove    eax, ecx
-						;; size=23 bbWeight=0.50 PerfScore 1.00
+       cmovne   eax, ecx
+						;; size=16 bbWeight=0.50 PerfScore 0.62
 G_M6300_IG03:        ; bbWeight=0.50, epilog, nogc, extend
        ret      
 						;; size=1 bbWeight=0.50 PerfScore 0.50
 ; END METHOD TestNeg.Program:NegsLSR(uint):int
 
-; Total bytes of code 24, prolog size 0, PerfScore 1.50, instruction count 8, allocated bytes for code 24 (MethodHash=2a8ee763) for method TestNeg.Program:NegsLSR(uint):int (FullOpts)
+; Total bytes of code 17, prolog size 0, PerfScore 1.12, instruction count 5, allocated bytes for code 17 (MethodHash=2a8ee763) for method TestNeg.Program:NegsLSR(uint):int (FullOpts)
 ; ============================================================
 
 Unwind Info:
-7 (-29.17%) : 199896.dasm - TestNeg.Program:NegsLargeShift(uint):int (FullOpts)
@@ -16,20 +16,17 @@
 G_M11276_IG01:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
 						;; size=0 bbWeight=0.50 PerfScore 0.00
 G_M11276_IG02:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+       mov      eax, -1
+       mov      ecx, 1
        shl      edi, 4
-       mov      eax, edi
-       mov      ecx, -1
-       mov      edx, 1
-       neg      rax
-       mov      eax, edx
-       cmove    eax, ecx
-						;; size=23 bbWeight=0.50 PerfScore 1.00
+       cmovne   eax, ecx
+						;; size=16 bbWeight=0.50 PerfScore 0.62
 G_M11276_IG03:        ; bbWeight=0.50, epilog, nogc, extend
        ret      
 						;; size=1 bbWeight=0.50 PerfScore 0.50
 ; END METHOD TestNeg.Program:NegsLargeShift(uint):int
 
-; Total bytes of code 24, prolog size 0, PerfScore 1.50, instruction count 8, allocated bytes for code 24 (MethodHash=43eed3f3) for method TestNeg.Program:NegsLargeShift(uint):int (FullOpts)
+; Total bytes of code 17, prolog size 0, PerfScore 1.12, instruction count 5, allocated bytes for code 17 (MethodHash=43eed3f3) for method TestNeg.Program:NegsLargeShift(uint):int (FullOpts)
 ; ============================================================
 
 Unwind Info:
-5 (-1.71%) : 531325.dasm - ILGEN_CLASS:ILGEN_METHOD(bool,char,short,int):char (Tier0)
@@ -74,16 +74,14 @@ G_M28265_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
        mov      qword ptr [rbp-0x40], rdx
        mov      rax, qword ptr [rbp-0x40]
        mov      qword ptr [rbp-0x48], rax
-       mov      eax, dword ptr [rbp-0x28]
-       neg      rax
-       test     rax, rax
+       cmp      dword ptr [rbp-0x28], 0
        jne      SHORT G_M28265_IG03
        mov      eax, dword ptr [rbp-0x18]
        cmp      eax, 255
        ja       SHORT G_M28265_IG06
        mov      eax, eax
        mov      byte  ptr [rbp-0x04], al
-						;; size=182 bbWeight=1 PerfScore 117.08
+						;; size=177 bbWeight=1 PerfScore 117.58
 G_M28265_IG03:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
        mov      eax, dword ptr [rbp-0x10]
        cmp      rax, qword ptr [rbp-0x48]
@@ -116,7 +114,7 @@ RWD16  	dq	8000000000000000h	;           -0
 RWD24  	dd	4F0BD98Fh		; 2.34629e+09
 
 
-; Total bytes of code 293, prolog size 31, PerfScore 147.42, instruction count 75, allocated bytes for code 293 (MethodHash=d26f9196) for method ILGEN_CLASS:ILGEN_METHOD(bool,char,short,int):char (Tier0)
+; Total bytes of code 288, prolog size 31, PerfScore 147.92, instruction count 73, allocated bytes for code 288 (MethodHash=d26f9196) for method ILGEN_CLASS:ILGEN_METHOD(bool,char,short,int):char (Tier0)
 ; ============================================================
 
 Unwind Info:
-2 (-4.17%) : 181410.dasm - ldc_neg_i4._neg:i4_3(int,int):int (MinOpts)
@@ -30,18 +30,17 @@ G_M1458_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
 						;; size=5 bbWeight=0.50 PerfScore 0.50
 G_M1458_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
        xor      eax, eax
-       neg      eax
        test     eax, eax
        sete     al
        movzx    rax, al
-						;; size=12 bbWeight=1 PerfScore 2.00
+						;; size=10 bbWeight=1 PerfScore 1.75
 G_M1458_IG05:        ; bbWeight=1, epilog, nogc, extend
        add      rsp, 16
        pop      rbp
        ret      
 						;; size=6 bbWeight=1 PerfScore 1.75
 
-; Total bytes of code 48, prolog size 16, PerfScore 12.00, instruction count 16, allocated bytes for code 48 (MethodHash=0125fa4d) for method ldc_neg_i4._neg:i4_3(int,int):int (MinOpts)
+; Total bytes of code 46, prolog size 16, PerfScore 11.75, instruction count 15, allocated bytes for code 46 (MethodHash=0125fa4d) for method ldc_neg_i4._neg:i4_3(int,int):int (MinOpts)
 ; ============================================================
 
 Unwind Info:
-3 (-5.77%) : 181421.dasm - ldc_neg_i8._neg:i8_3(long,long):int (MinOpts)
@@ -30,18 +30,17 @@ G_M18290_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
 						;; size=5 bbWeight=0.50 PerfScore 0.50
 G_M18290_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
        xor      eax, eax
-       neg      rax
        test     rax, rax
        sete     al
        movzx    rax, al
-						;; size=14 bbWeight=1 PerfScore 2.00
+						;; size=11 bbWeight=1 PerfScore 1.75
 G_M18290_IG05:        ; bbWeight=1, epilog, nogc, extend
        add      rsp, 16
        pop      rbp
        ret      
 						;; size=6 bbWeight=1 PerfScore 1.75
 
-; Total bytes of code 52, prolog size 18, PerfScore 12.00, instruction count 16, allocated bytes for code 52 (MethodHash=ff46b88d) for method ldc_neg_i8._neg:i8_3(long,long):int (MinOpts)
+; Total bytes of code 49, prolog size 18, PerfScore 11.75, instruction count 15, allocated bytes for code 49 (MethodHash=ff46b88d) for method ldc_neg_i8._neg:i8_3(long,long):int (MinOpts)
 ; ============================================================
 
 Unwind Info:
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch
-2 (-0.01%) : 124444.dasm - System.Data.Tests.DataTableTest2:Select_ByFilter():this (FullOpts)
@@ -3246,7 +3246,6 @@ G_M43941_IG102:        ; bbWeight=1, gcVars=000000000000000000000000000000000000
 G_M43941_IG103:        ; bbWeight=4, gcrefRegs=F009 {rax rbx r12 r13 r14 r15}, byrefRegs=0000 {}, byref, isz
        mov      esi, dword ptr [rbp-0x30]
        sub      esi, dword ptr [rax+0x08]
-       neg      esi
        je       G_M43941_IG96
        inc      dword ptr [r13+0x14]
        mov      rdi, gword ptr [r13+0x08]
@@ -3254,7 +3253,7 @@ G_M43941_IG103:        ; bbWeight=4, gcrefRegs=F009 {rax rbx r12 r13 r14 r15}, b
        mov      esi, dword ptr [r13+0x10]
        cmp      dword ptr [rdi+0x08], esi
        jbe      SHORT G_M43941_IG106
-						;; size=31 bbWeight=4 PerfScore 65.00
+						;; size=29 bbWeight=4 PerfScore 64.00
 G_M43941_IG104:        ; bbWeight=3.05, gcVars=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 {V06}, gcrefRegs=F088 {rbx rdi r12 r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref
        ; gcrRegs -[rax]
        ; GC ptr vars -{V75}
@@ -6658,7 +6657,7 @@ RWD40  	dq	4034000000000000h	;           20
 RWD48  	dq	4039000000000000h	;           25
 
 
-; Total bytes of code 14316, prolog size 28, PerfScore 7866.28, instruction count 3034, allocated bytes for code 14316 (MethodHash=c958545a) for method System.Data.Tests.DataTableTest2:Select_ByFilter():this (FullOpts)
+; Total bytes of code 14314, prolog size 28, PerfScore 7865.28, instruction count 3033, allocated bytes for code 14314 (MethodHash=c958545a) for method System.Data.Tests.DataTableTest2:Select_ByFilter():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
libraries_tests.run.linux.x64.Release.mch
-4 (-0.03%) : 314396.dasm - System.Data.Tests.DataTableTest2:Select_ByFilter():this (Instrumented Tier0)
@@ -2199,13 +2199,11 @@ G_M43941_IG57:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
        ; gcr arg pop 0
        mov      ecx, dword ptr [rbp-0x240]
        sub      ecx, dword ptr [rax]
-       mov      eax, ecx
-       ; byrRegs -[rax]
-       neg      eax
-       test     eax, eax
+       test     ecx, ecx
        je       G_M43941_IG56
        mov      rdi, 0xD1FFAB1E
        call     CORINFO_HELP_COUNTPROFILE32
+       ; byrRegs -[rax]
        ; gcr arg pop 0
        mov      rdi, gword ptr [rbp-0x50]
        ; gcrRegs +[rdi]
@@ -2215,7 +2213,7 @@ G_M43941_IG57:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
        call     [<unknown method>]
        ; gcrRegs -[rsi rdi]
        ; gcr arg pop 0
-						;; size=309 bbWeight=1 PerfScore 58.00
+						;; size=305 bbWeight=1 PerfScore 57.50
 G_M43941_IG58:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
        mov      eax, dword ptr [rbp-0x5E0]
        dec      eax
@@ -5412,7 +5410,7 @@ RWD08  	dq	4034000000000000h	;           20
 RWD16  	dq	4039000000000000h	;           25
 
 
-; Total bytes of code 15982, prolog size 67, PerfScore 3425.70, instruction count 2755, allocated bytes for code 15982 (MethodHash=c958545a) for method System.Data.Tests.DataTableTest2:Select_ByFilter():this (Instrumented Tier0)
+; Total bytes of code 15978, prolog size 67, PerfScore 3425.20, instruction count 2753, allocated bytes for code 15978 (MethodHash=c958545a) for method System.Data.Tests.DataTableTest2:Select_ByFilter():this (Instrumented Tier0)
 ; ============================================================
 
 Unwind Info:
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.x64.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo.linux.x64.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo_optrepeat.linux.x64.checked.mch 0 0 0 0 -0 +0
coreclr_tests.run.linux.x64.checked.mch 23 23 0 0 -110 +0
libraries.crossgen2.linux.x64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.x64.checked.mch 0 0 0 0 -0 +0
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 1 1 0 0 -2 +0
libraries_tests.run.linux.x64.Release.mch 1 1 0 0 -4 +0
realworld.run.linux.x64.checked.mch 0 0 0 0 -0 +0
smoke_tests.nativeaot.linux.x64.checked.mch 0 0 0 0 -0 +0
25 25 0 0 -116 +0

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
benchmarks.run.linux.x64.checked.mch 0 0 0 0 0.00% 0.00% 0.0000%
benchmarks.run_pgo.linux.x64.checked.mch 0 0 0 0 0.00% 0.00% 0.0000%
benchmarks.run_pgo_optrepeat.linux.x64.checked.mch 0 0 0 0 0.00% 0.00% 0.0000%
coreclr_tests.run.linux.x64.checked.mch 23 22 1 0 -15.50% +0.34% -0.0017%
libraries.crossgen2.linux.x64.checked.mch 0 0 0 0 0.00% 0.00% 0.0000%
libraries.pmi.linux.x64.checked.mch 0 0 0 0 0.00% 0.00% 0.0000%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 1 1 0 0 -0.01% 0.00% -0.0000%
libraries_tests.run.linux.x64.Release.mch 1 1 0 0 -0.01% 0.00% 0.0000%
realworld.run.linux.x64.checked.mch 0 0 0 0 0.00% 0.00% 0.0000%
smoke_tests.nativeaot.linux.x64.checked.mch 0 0 0 0 0.00% 0.00% 0.0000%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.x64.checked.mch 75,913 2,972 72,941 0 (0.00%) 0 (0.00%)
benchmarks.run_pgo.linux.x64.checked.mch 122,785 86,206 36,579 0 (0.00%) 0 (0.00%)
benchmarks.run_pgo_optrepeat.linux.x64.checked.mch 76,998 2,939 74,059 0 (0.00%) 0 (0.00%)
coreclr_tests.run.linux.x64.checked.mch 577,098 358,595 218,503 0 (0.00%) 0 (0.00%)
libraries.crossgen2.linux.x64.checked.mch 269,385 20 269,365 0 (0.00%) 0 (0.00%)
libraries.pmi.linux.x64.checked.mch 354,706 8 354,698 0 (0.00%) 0 (0.00%)
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 387,764 23,607 364,157 0 (0.00%) 0 (0.00%)
libraries_tests.run.linux.x64.Release.mch 862,114 603,896 258,218 0 (0.00%) 0 (0.00%)
realworld.run.linux.x64.checked.mch 29,264 21 29,243 0 (0.00%) 0 (0.00%)
smoke_tests.nativeaot.linux.x64.checked.mch 31,522 13 31,509 0 (0.00%) 0 (0.00%)
2,787,549 1,078,277 1,709,272 0 (0.00%) 0 (0.00%)

jit-analyze output

i.e. Fold: (-(x)) == 0  ->  x == 0
@github-actions github-actions bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 12, 2026
@jonathandavies-arm
Copy link
Contributor Author

@dotnet/arm64-contrib

@dotnet-policy-service dotnet-policy-service bot added the community-contribution Indicates that the PR has been added by a community member label Feb 12, 2026
@dotnet-policy-service
Copy link
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

@JulieLeeMSFT
Copy link
Member

@jonathandavies-arm, please check the test failures.
cc @dhartglassMSFT @a74nh.

</Compile>
<CLRTestEnvironmentVariable Include="DOTNET_TieredCompilation" Value="0" />
<CLRTestEnvironmentVariable Include="DOTNET_JITMinOpts" Value="0" />
<CLRTestEnvironmentVariable Include="DOTNET_JitStressProcedureSplitting" Value="0" />
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this needed? I think the default is 0

@dhartglassMSFT
Copy link
Contributor

Hi Jonathan, the change LGTM aside from the nits.

- Moved comment on what tree we are matching on
- Removed setting DOTNET_JitStressProcedureSplitting=0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI community-contribution Indicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants