Skip to content

Conversation

@EgorBo
Copy link
Member

@EgorBo EgorBo commented Jul 15, 2021

Just a small change to optimize TimeSpan.FromX apis for constant input 🙂. I was just randomly inspecting various APIs when constant args are passed to find missing opportunities.

TimeSpan Test() => TimeSpan.FromSeconds(5);

Was:

; Method Program:Test():System.TimeSpan:this
       4883EC28             sub      rsp, 40
       C5F877               vzeroupper 
       C5FB100511000000     vmovsd   xmm0, qword ptr [reloc @RWD00]
       E8A499FDFF           call     System.TimeSpan:IntervalFromDoubleTicks(double):System.TimeSpan
       90                   nop      
       4883C428             add      rsp, 40
       C3                   ret      
; Total bytes of code: 26

Now:

; Method Program:Test():System.TimeSpan:this
       B880F0FA02           mov      eax, 0x2FAF080
       C3                   ret      
; Total bytes of code: 6

The JIT change caused some positive diffs in asm.libraries_tests.pmi.windows.x64.checked (because it triggered inlining in places where e.g. "cns op cns" expressions were not recognized as constant args):

coreclr_tests.pmi.windows.x64.checked.mch:


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2105
Total bytes of diff: 2027
Total bytes of delta: -78 (-3.71% of base)
Total relative delta: -1.43
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file improvements (bytes):
         -44 : 85250.dasm (-57.89% of base)
         -34 : 84968.dasm (-85.00% of base)

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

Top method improvements (bytes):
         -44 (-57.89% of base) : 85250.dasm - TestCase.Test:Main():int
         -34 (-85.00% of base) : 84968.dasm - _starg:main(System.String[]):int

Top method improvements (percentages):
         -34 (-85.00% of base) : 84968.dasm - _starg:main(System.String[]):int
         -44 (-57.89% of base) : 85250.dasm - TestCase.Test:Main():int

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


libraries.pmi.windows.x64.checked.mch:


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 4852
Total bytes of diff: 4851
Total bytes of delta: -1 (-0.02% of base)
Total relative delta: -0.00
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file improvements (bytes):
          -1 : 151658.dasm (-0.12% of base)

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

Top method improvements (bytes):
          -1 (-0.12% of base) : 151658.dasm - System.Reflection.PortableExecutable.PEReader:DecodeEmbeddedPortablePdbDebugDirectoryData(System.Reflection.Internal.AbstractMemoryBlock):System.Collections.Immutable.ImmutableArray`1[Byte]

Top method improvements (percentages):
          -1 (-0.12% of base) : 151658.dasm - System.Reflection.PortableExecutable.PEReader:DecodeEmbeddedPortablePdbDebugDirectoryData(System.Reflection.Internal.AbstractMemoryBlock):System.Collections.Immutable.ImmutableArray`1[Byte]

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


libraries_tests.pmi.windows.x64.checked.mch:


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 112189
Total bytes of diff: 115256
Total bytes of delta: 3067 (2.73% of base)
Total relative delta: -2.93
    diff is a regression.
    relative diff is an improvement.
Detail diffs


Top file regressions (bytes):
        2049 : 118168.dasm (16.00% of base)
         153 : 198443.dasm (4.88% of base)
         145 : 198634.dasm (3.11% of base)
         140 : 198310.dasm (5.15% of base)
         140 : 198323.dasm (4.73% of base)
          98 : 198341.dasm (3.90% of base)
          72 : 198435.dasm (2.68% of base)
          71 : 198434.dasm (2.01% of base)
          70 : 176170.dasm (2.41% of base)
          70 : 176125.dasm (1.73% of base)
          70 : 198588.dasm (2.62% of base)
          70 : 176128.dasm (2.11% of base)
          70 : 176127.dasm (1.73% of base)
          70 : 176119.dasm (2.20% of base)
          70 : 176124.dasm (1.72% of base)
          70 : 176129.dasm (2.08% of base)
          70 : 176123.dasm (2.07% of base)
          70 : 176126.dasm (1.72% of base)
          58 : 228114.dasm (0.58% of base)
          32 : 118110.dasm (1.70% of base)

Top file improvements (bytes):
        -434 : 198586.dasm (-7.36% of base)
         -18 : 8416.dasm (-2.94% of base)
         -17 : 18594.dasm (-3.46% of base)
         -17 : 18597.dasm (-3.42% of base)
         -15 : 198468.dasm (-4.46% of base)
          -9 : 180436.dasm (-2.14% of base)
          -7 : 198321.dasm (-1.08% of base)
          -7 : 198311.dasm (-1.08% of base)
          -7 : 45999.dasm (-41.18% of base)
          -7 : 198383.dasm (-0.56% of base)
          -7 : 47682.dasm (-41.18% of base)
          -7 : 198315.dasm (-1.08% of base)
          -7 : 45998.dasm (-41.18% of base)
          -7 : 47679.dasm (-41.18% of base)
          -7 : 45994.dasm (-41.18% of base)
          -7 : 45995.dasm (-41.18% of base)
          -7 : 47678.dasm (-41.18% of base)
          -7 : 47683.dasm (-41.18% of base)
          -5 : 180173.dasm (-1.80% of base)
          -5 : 180174.dasm (-1.68% of base)

46 total files with Code Size differences (21 improved, 25 regressed), 5 unchanged.

Top method regressions (bytes):
        2049 (16.00% of base) : 118168.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.SuppressFormattingRule:AddSpecificNodesSuppressOperations(System.Collections.Generic.List`1[[Microsoft.CodeAnalysis.Formatting.Rules.SuppressOperation, Microsoft.CodeAnalysis.Workspaces, Version=3.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]],Microsoft.CodeAnalysis.SyntaxNode)
         153 ( 4.88% of base) : 198443.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataTokensTests:SpecificHandleFactories():this
         145 ( 3.11% of base) : 198634.dasm - System.Reflection.Metadata.Tests.MetadataReaderTests:OtherAccessors():this
         140 ( 5.15% of base) : 198310.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasCustomAttribute():this
         140 ( 4.73% of base) : 198323.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasCustomDebugInformation():this
          98 ( 3.90% of base) : 198341.dasm - System.Reflection.Metadata.Ecma335.Tests.InstructionEncoderTests:TokenInstructions():this
          72 ( 2.68% of base) : 198435.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataAggregatorTests:HeapSizes():this
          71 ( 2.01% of base) : 198434.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataAggregatorTests:RowCounts():this
          70 ( 2.41% of base) : 176170.dasm - System.Linq.Tests.TakeTests:Count():this
          70 ( 1.73% of base) : 176125.dasm - System.Linq.Tests.TakeTests:ToArrayNotList():this
          70 ( 2.62% of base) : 198588.dasm - System.Reflection.Metadata.Tests.HandleTests:StringKinds():this
          70 ( 2.11% of base) : 176128.dasm - System.Linq.Tests.TakeTests:TakeCanOnlyBeOneList():this
          70 ( 1.73% of base) : 176127.dasm - System.Linq.Tests.TakeTests:ToListNotList():this
          70 ( 2.20% of base) : 176119.dasm - System.Linq.Tests.TakeTests:FirstOrDefaultNotIList():this
          70 ( 1.72% of base) : 176124.dasm - System.Linq.Tests.TakeTests:ToArray():this
          70 ( 2.08% of base) : 176129.dasm - System.Linq.Tests.TakeTests:TakeCanOnlyBeOneNotList():this
          70 ( 2.07% of base) : 176123.dasm - System.Linq.Tests.TakeTests:LastOrDefaultNotIList():this
          70 ( 1.72% of base) : 176126.dasm - System.Linq.Tests.TakeTests:ToList():this
          58 ( 0.58% of base) : 228114.dasm - System.Threading.Tasks.Tests.TaskRtTests_Core:RunRefactoringTests()
          32 ( 1.70% of base) : 118110.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.ElasticTriviaFormattingRule:AddInitializerSuppressOperations(System.Collections.Generic.List`1[[Microsoft.CodeAnalysis.Formatting.Rules.SuppressOperation, Microsoft.CodeAnalysis.Workspaces, Version=3.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]],Microsoft.CodeAnalysis.SyntaxNode)

Top method improvements (bytes):
        -434 (-7.36% of base) : 198586.dasm - System.Reflection.Metadata.Tests.HandleTests:IsNil():this
         -18 (-2.94% of base) : 8416.dasm - Roslyn.Utilities.TaskQueue:ScheduleTaskInProgress(System.Func`1[[System.Threading.Tasks.Task`1[[System.Byte, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]],System.Threading.CancellationToken):System.Threading.Tasks.Task`1[Byte]:this
         -17 (-3.46% of base) : 18594.dasm - <>c__DisplayClass22_0`1[Byte][System.Byte]:<ContinueWithAfterDelayFromAsync>b__0(System.Threading.Tasks.Task):System.Threading.Tasks.Task`1[Byte]:this
         -17 (-3.42% of base) : 18597.dasm - <>c__DisplayClass23_0`1[Byte][System.Byte]:<ContinueWithAfterDelayFromAsync>b__0(System.Threading.Tasks.Task):System.Threading.Tasks.Task`1[Byte]:this
         -15 (-4.46% of base) : 198468.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataBuilderTests:ValidateMethodImplTable():this
          -9 (-2.14% of base) : 180436.dasm - System.SpanTests.SpanTests:TestAllignmentMatchLastIndexOf_Byte()
          -7 (-1.08% of base) : 198321.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:TypeDefOrRefOrSpec():this
          -7 (-1.08% of base) : 198311.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasConstant():this
          -7 (-41.18% of base) : 45999.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_3():System.Object:this
          -7 (-0.56% of base) : 198383.dasm - System.Reflection.Metadata.Ecma335.Tests.BlobEncodersTests:SignatureTypeEncoder_GenericInstantiation():this
          -7 (-41.18% of base) : 47682.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_2():System.Object:this
          -7 (-1.08% of base) : 198315.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:Implementation():this
          -7 (-41.18% of base) : 45998.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_2():System.Object:this
          -7 (-41.18% of base) : 47679.dasm - <>c:<GetNextTextElement_Invalid>b__13_3():System.Object:this
          -7 (-41.18% of base) : 45994.dasm - <>c:<GetNextTextElement_Invalid>b__13_2():System.Object:this
          -7 (-41.18% of base) : 45995.dasm - <>c:<GetNextTextElement_Invalid>b__13_3():System.Object:this
          -7 (-41.18% of base) : 47678.dasm - <>c:<GetNextTextElement_Invalid>b__13_2():System.Object:this
          -7 (-41.18% of base) : 47683.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_3():System.Object:this
          -5 (-1.80% of base) : 180173.dasm - System.SpanTests.ReadOnlySpanTests:TestAlignmentNotContains_Byte()
          -5 (-1.68% of base) : 180174.dasm - System.SpanTests.ReadOnlySpanTests:TestAlignmentContains_Byte()

Top method regressions (percentages):
        2049 (16.00% of base) : 118168.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.SuppressFormattingRule:AddSpecificNodesSuppressOperations(System.Collections.Generic.List`1[[Microsoft.CodeAnalysis.Formatting.Rules.SuppressOperation, Microsoft.CodeAnalysis.Workspaces, Version=3.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]],Microsoft.CodeAnalysis.SyntaxNode)
         140 ( 5.15% of base) : 198310.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasCustomAttribute():this
         153 ( 4.88% of base) : 198443.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataTokensTests:SpecificHandleFactories():this
         140 ( 4.73% of base) : 198323.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasCustomDebugInformation():this
          98 ( 3.90% of base) : 198341.dasm - System.Reflection.Metadata.Ecma335.Tests.InstructionEncoderTests:TokenInstructions():this
         145 ( 3.11% of base) : 198634.dasm - System.Reflection.Metadata.Tests.MetadataReaderTests:OtherAccessors():this
          72 ( 2.68% of base) : 198435.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataAggregatorTests:HeapSizes():this
          70 ( 2.62% of base) : 198588.dasm - System.Reflection.Metadata.Tests.HandleTests:StringKinds():this
          70 ( 2.41% of base) : 176170.dasm - System.Linq.Tests.TakeTests:Count():this
          70 ( 2.20% of base) : 176119.dasm - System.Linq.Tests.TakeTests:FirstOrDefaultNotIList():this
          70 ( 2.11% of base) : 176128.dasm - System.Linq.Tests.TakeTests:TakeCanOnlyBeOneList():this
          70 ( 2.08% of base) : 176129.dasm - System.Linq.Tests.TakeTests:TakeCanOnlyBeOneNotList():this
          70 ( 2.07% of base) : 176123.dasm - System.Linq.Tests.TakeTests:LastOrDefaultNotIList():this
          71 ( 2.01% of base) : 198434.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataAggregatorTests:RowCounts():this
          70 ( 1.73% of base) : 176125.dasm - System.Linq.Tests.TakeTests:ToArrayNotList():this
          70 ( 1.73% of base) : 176127.dasm - System.Linq.Tests.TakeTests:ToListNotList():this
          70 ( 1.72% of base) : 176124.dasm - System.Linq.Tests.TakeTests:ToArray():this
          70 ( 1.72% of base) : 176126.dasm - System.Linq.Tests.TakeTests:ToList():this
          32 ( 1.70% of base) : 118110.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.ElasticTriviaFormattingRule:AddInitializerSuppressOperations(System.Collections.Generic.List`1[[Microsoft.CodeAnalysis.Formatting.Rules.SuppressOperation, Microsoft.CodeAnalysis.Workspaces, Version=3.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]],Microsoft.CodeAnalysis.SyntaxNode)
           4 ( 1.04% of base) : 179839.dasm - System.SpanTests.ReadOnlySpanTests:TestAllignmentNoMatchLastIndexOf_Byte()

Top method improvements (percentages):
          -7 (-41.18% of base) : 45999.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_3():System.Object:this
          -7 (-41.18% of base) : 47682.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_2():System.Object:this
          -7 (-41.18% of base) : 45998.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_2():System.Object:this
          -7 (-41.18% of base) : 47679.dasm - <>c:<GetNextTextElement_Invalid>b__13_3():System.Object:this
          -7 (-41.18% of base) : 45994.dasm - <>c:<GetNextTextElement_Invalid>b__13_2():System.Object:this
          -7 (-41.18% of base) : 45995.dasm - <>c:<GetNextTextElement_Invalid>b__13_3():System.Object:this
          -7 (-41.18% of base) : 47678.dasm - <>c:<GetNextTextElement_Invalid>b__13_2():System.Object:this
          -7 (-41.18% of base) : 47683.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_3():System.Object:this
        -434 (-7.36% of base) : 198586.dasm - System.Reflection.Metadata.Tests.HandleTests:IsNil():this
         -15 (-4.46% of base) : 198468.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataBuilderTests:ValidateMethodImplTable():this
         -17 (-3.46% of base) : 18594.dasm - <>c__DisplayClass22_0`1[Byte][System.Byte]:<ContinueWithAfterDelayFromAsync>b__0(System.Threading.Tasks.Task):System.Threading.Tasks.Task`1[Byte]:this
         -17 (-3.42% of base) : 18597.dasm - <>c__DisplayClass23_0`1[Byte][System.Byte]:<ContinueWithAfterDelayFromAsync>b__0(System.Threading.Tasks.Task):System.Threading.Tasks.Task`1[Byte]:this
         -18 (-2.94% of base) : 8416.dasm - Roslyn.Utilities.TaskQueue:ScheduleTaskInProgress(System.Func`1[[System.Threading.Tasks.Task`1[[System.Byte, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]],System.Threading.CancellationToken):System.Threading.Tasks.Task`1[Byte]:this
          -9 (-2.14% of base) : 180436.dasm - System.SpanTests.SpanTests:TestAllignmentMatchLastIndexOf_Byte()
          -5 (-1.80% of base) : 180173.dasm - System.SpanTests.ReadOnlySpanTests:TestAlignmentNotContains_Byte()
          -5 (-1.68% of base) : 180174.dasm - System.SpanTests.ReadOnlySpanTests:TestAlignmentContains_Byte()
          -7 (-1.08% of base) : 198321.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:TypeDefOrRefOrSpec():this
          -7 (-1.08% of base) : 198311.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasConstant():this
          -7 (-1.08% of base) : 198315.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:Implementation():this
          -3 (-0.72% of base) : 179840.dasm - System.SpanTests.ReadOnlySpanTests:TestAllignmentMatchLastIndexOf_Byte()

46 total methods with Code Size differences (21 improved, 25 regressed), 5 unchanged.


@ghost
Copy link

ghost commented Jul 15, 2021

I couldn't figure out the best area label to add to this PR. If you have write-permissions please help me learn by adding exactly one area label.

@EgorBo
Copy link
Member Author

EgorBo commented Jul 16, 2021

@dotnet/jit-contrib PTAL at the change in importer.cpp

actualArg = gtFoldExprConst(actualArg);
}
}

Copy link
Member

Choose a reason for hiding this comment

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

Any reason we can't just call gtFoldExpr(actualArg) and catch some of the other cases where we can fold?

If you still want to case it out like this, I don't think any of these != nullptr checks are needed.

Copy link
Member Author

@EgorBo EgorBo Jul 17, 2021

Choose a reason for hiding this comment

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

there was some assert that checked actualArg's type against sigType. E.g. it failed for int -> ubyte (after gtFoldExpr)

    *  ADD       int
    +--*  CNS_INT   int    0
    \--*  FIELD     ubyte  hackishFieldName
        \--*  LCL_VAR   ref    V00 this

after gtFoldExpr:

    *  FIELD     ubyte  hackishFieldName
    \--*  LCL_VAR   ref    V00 this

I removed the assert and it seems work fine.

If you still want to case it out like this, I don't think any of these != nullptr checks are needed.

E.g. GT_HWINTRINSIC (Vector_get_Zero) is a binary node with both children nullptr (IsBinary returns true)

@AndyAyersMS
Copy link
Member

Also the System.Net.NTAuthentication:GetOutgoingBlob diff looks like the diff from my recent PR, is your baseline jit up to date?

@EgorBo
Copy link
Member Author

EgorBo commented Jul 17, 2021

Also the System.Net.NTAuthentication:GetOutgoingBlob diff looks like the diff from my recent PR, is your baseline jit up to date?

Ah, right, I've just updated the diffs, these use correct baseline.

@EgorBo
Copy link
Member Author

EgorBo commented Jul 20, 2021

@dotnet/jit-contrib @AndyAyersMS PTAL

@danmoseley
Copy link
Member

@dotnet/jit-contrib just going through old PR's that were already signed off and noticed this might possibly only need one review to merge.

@marek-safar marek-safar added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Aug 30, 2021
@ghost
Copy link

ghost commented Aug 30, 2021

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

Issue Details

Just a small change to optimize TimeSpan.FromX apis for constant input 🙂. I was just randomly inspecting various APIs when constant args are passed to find missing opportunities.

TimeSpan Test() => TimeSpan.FromSeconds(5);

Was:

; Method Program:Test():System.TimeSpan:this
       4883EC28             sub      rsp, 40
       C5F877               vzeroupper 
       C5FB100511000000     vmovsd   xmm0, qword ptr [reloc @RWD00]
       E8A499FDFF           call     System.TimeSpan:IntervalFromDoubleTicks(double):System.TimeSpan
       90                   nop      
       4883C428             add      rsp, 40
       C3                   ret      
; Total bytes of code: 26

Now:

; Method Program:Test():System.TimeSpan:this
       B880F0FA02           mov      eax, 0x2FAF080
       C3                   ret      
; Total bytes of code: 6

The JIT change caused some positive diffs in asm.libraries_tests.pmi.windows.x64.checked (because it triggered inlining in places where e.g. "cns op cns" expressions were not recognized as constant args):

coreclr_tests.pmi.windows.x64.checked.mch:


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2105
Total bytes of diff: 2027
Total bytes of delta: -78 (-3.71% of base)
Total relative delta: -1.43
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file improvements (bytes):
         -44 : 85250.dasm (-57.89% of base)
         -34 : 84968.dasm (-85.00% of base)

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

Top method improvements (bytes):
         -44 (-57.89% of base) : 85250.dasm - TestCase.Test:Main():int
         -34 (-85.00% of base) : 84968.dasm - _starg:main(System.String[]):int

Top method improvements (percentages):
         -34 (-85.00% of base) : 84968.dasm - _starg:main(System.String[]):int
         -44 (-57.89% of base) : 85250.dasm - TestCase.Test:Main():int

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


libraries.pmi.windows.x64.checked.mch:


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 4852
Total bytes of diff: 4851
Total bytes of delta: -1 (-0.02% of base)
Total relative delta: -0.00
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file improvements (bytes):
          -1 : 151658.dasm (-0.12% of base)

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

Top method improvements (bytes):
          -1 (-0.12% of base) : 151658.dasm - System.Reflection.PortableExecutable.PEReader:DecodeEmbeddedPortablePdbDebugDirectoryData(System.Reflection.Internal.AbstractMemoryBlock):System.Collections.Immutable.ImmutableArray`1[Byte]

Top method improvements (percentages):
          -1 (-0.12% of base) : 151658.dasm - System.Reflection.PortableExecutable.PEReader:DecodeEmbeddedPortablePdbDebugDirectoryData(System.Reflection.Internal.AbstractMemoryBlock):System.Collections.Immutable.ImmutableArray`1[Byte]

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


libraries_tests.pmi.windows.x64.checked.mch:


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 112189
Total bytes of diff: 115256
Total bytes of delta: 3067 (2.73% of base)
Total relative delta: -2.93
    diff is a regression.
    relative diff is an improvement.
Detail diffs


Top file regressions (bytes):
        2049 : 118168.dasm (16.00% of base)
         153 : 198443.dasm (4.88% of base)
         145 : 198634.dasm (3.11% of base)
         140 : 198310.dasm (5.15% of base)
         140 : 198323.dasm (4.73% of base)
          98 : 198341.dasm (3.90% of base)
          72 : 198435.dasm (2.68% of base)
          71 : 198434.dasm (2.01% of base)
          70 : 176170.dasm (2.41% of base)
          70 : 176125.dasm (1.73% of base)
          70 : 198588.dasm (2.62% of base)
          70 : 176128.dasm (2.11% of base)
          70 : 176127.dasm (1.73% of base)
          70 : 176119.dasm (2.20% of base)
          70 : 176124.dasm (1.72% of base)
          70 : 176129.dasm (2.08% of base)
          70 : 176123.dasm (2.07% of base)
          70 : 176126.dasm (1.72% of base)
          58 : 228114.dasm (0.58% of base)
          32 : 118110.dasm (1.70% of base)

Top file improvements (bytes):
        -434 : 198586.dasm (-7.36% of base)
         -18 : 8416.dasm (-2.94% of base)
         -17 : 18594.dasm (-3.46% of base)
         -17 : 18597.dasm (-3.42% of base)
         -15 : 198468.dasm (-4.46% of base)
          -9 : 180436.dasm (-2.14% of base)
          -7 : 198321.dasm (-1.08% of base)
          -7 : 198311.dasm (-1.08% of base)
          -7 : 45999.dasm (-41.18% of base)
          -7 : 198383.dasm (-0.56% of base)
          -7 : 47682.dasm (-41.18% of base)
          -7 : 198315.dasm (-1.08% of base)
          -7 : 45998.dasm (-41.18% of base)
          -7 : 47679.dasm (-41.18% of base)
          -7 : 45994.dasm (-41.18% of base)
          -7 : 45995.dasm (-41.18% of base)
          -7 : 47678.dasm (-41.18% of base)
          -7 : 47683.dasm (-41.18% of base)
          -5 : 180173.dasm (-1.80% of base)
          -5 : 180174.dasm (-1.68% of base)

46 total files with Code Size differences (21 improved, 25 regressed), 5 unchanged.

Top method regressions (bytes):
        2049 (16.00% of base) : 118168.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.SuppressFormattingRule:AddSpecificNodesSuppressOperations(System.Collections.Generic.List`1[[Microsoft.CodeAnalysis.Formatting.Rules.SuppressOperation, Microsoft.CodeAnalysis.Workspaces, Version=3.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]],Microsoft.CodeAnalysis.SyntaxNode)
         153 ( 4.88% of base) : 198443.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataTokensTests:SpecificHandleFactories():this
         145 ( 3.11% of base) : 198634.dasm - System.Reflection.Metadata.Tests.MetadataReaderTests:OtherAccessors():this
         140 ( 5.15% of base) : 198310.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasCustomAttribute():this
         140 ( 4.73% of base) : 198323.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasCustomDebugInformation():this
          98 ( 3.90% of base) : 198341.dasm - System.Reflection.Metadata.Ecma335.Tests.InstructionEncoderTests:TokenInstructions():this
          72 ( 2.68% of base) : 198435.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataAggregatorTests:HeapSizes():this
          71 ( 2.01% of base) : 198434.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataAggregatorTests:RowCounts():this
          70 ( 2.41% of base) : 176170.dasm - System.Linq.Tests.TakeTests:Count():this
          70 ( 1.73% of base) : 176125.dasm - System.Linq.Tests.TakeTests:ToArrayNotList():this
          70 ( 2.62% of base) : 198588.dasm - System.Reflection.Metadata.Tests.HandleTests:StringKinds():this
          70 ( 2.11% of base) : 176128.dasm - System.Linq.Tests.TakeTests:TakeCanOnlyBeOneList():this
          70 ( 1.73% of base) : 176127.dasm - System.Linq.Tests.TakeTests:ToListNotList():this
          70 ( 2.20% of base) : 176119.dasm - System.Linq.Tests.TakeTests:FirstOrDefaultNotIList():this
          70 ( 1.72% of base) : 176124.dasm - System.Linq.Tests.TakeTests:ToArray():this
          70 ( 2.08% of base) : 176129.dasm - System.Linq.Tests.TakeTests:TakeCanOnlyBeOneNotList():this
          70 ( 2.07% of base) : 176123.dasm - System.Linq.Tests.TakeTests:LastOrDefaultNotIList():this
          70 ( 1.72% of base) : 176126.dasm - System.Linq.Tests.TakeTests:ToList():this
          58 ( 0.58% of base) : 228114.dasm - System.Threading.Tasks.Tests.TaskRtTests_Core:RunRefactoringTests()
          32 ( 1.70% of base) : 118110.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.ElasticTriviaFormattingRule:AddInitializerSuppressOperations(System.Collections.Generic.List`1[[Microsoft.CodeAnalysis.Formatting.Rules.SuppressOperation, Microsoft.CodeAnalysis.Workspaces, Version=3.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]],Microsoft.CodeAnalysis.SyntaxNode)

Top method improvements (bytes):
        -434 (-7.36% of base) : 198586.dasm - System.Reflection.Metadata.Tests.HandleTests:IsNil():this
         -18 (-2.94% of base) : 8416.dasm - Roslyn.Utilities.TaskQueue:ScheduleTaskInProgress(System.Func`1[[System.Threading.Tasks.Task`1[[System.Byte, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]],System.Threading.CancellationToken):System.Threading.Tasks.Task`1[Byte]:this
         -17 (-3.46% of base) : 18594.dasm - <>c__DisplayClass22_0`1[Byte][System.Byte]:<ContinueWithAfterDelayFromAsync>b__0(System.Threading.Tasks.Task):System.Threading.Tasks.Task`1[Byte]:this
         -17 (-3.42% of base) : 18597.dasm - <>c__DisplayClass23_0`1[Byte][System.Byte]:<ContinueWithAfterDelayFromAsync>b__0(System.Threading.Tasks.Task):System.Threading.Tasks.Task`1[Byte]:this
         -15 (-4.46% of base) : 198468.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataBuilderTests:ValidateMethodImplTable():this
          -9 (-2.14% of base) : 180436.dasm - System.SpanTests.SpanTests:TestAllignmentMatchLastIndexOf_Byte()
          -7 (-1.08% of base) : 198321.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:TypeDefOrRefOrSpec():this
          -7 (-1.08% of base) : 198311.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasConstant():this
          -7 (-41.18% of base) : 45999.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_3():System.Object:this
          -7 (-0.56% of base) : 198383.dasm - System.Reflection.Metadata.Ecma335.Tests.BlobEncodersTests:SignatureTypeEncoder_GenericInstantiation():this
          -7 (-41.18% of base) : 47682.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_2():System.Object:this
          -7 (-1.08% of base) : 198315.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:Implementation():this
          -7 (-41.18% of base) : 45998.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_2():System.Object:this
          -7 (-41.18% of base) : 47679.dasm - <>c:<GetNextTextElement_Invalid>b__13_3():System.Object:this
          -7 (-41.18% of base) : 45994.dasm - <>c:<GetNextTextElement_Invalid>b__13_2():System.Object:this
          -7 (-41.18% of base) : 45995.dasm - <>c:<GetNextTextElement_Invalid>b__13_3():System.Object:this
          -7 (-41.18% of base) : 47678.dasm - <>c:<GetNextTextElement_Invalid>b__13_2():System.Object:this
          -7 (-41.18% of base) : 47683.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_3():System.Object:this
          -5 (-1.80% of base) : 180173.dasm - System.SpanTests.ReadOnlySpanTests:TestAlignmentNotContains_Byte()
          -5 (-1.68% of base) : 180174.dasm - System.SpanTests.ReadOnlySpanTests:TestAlignmentContains_Byte()

Top method regressions (percentages):
        2049 (16.00% of base) : 118168.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.SuppressFormattingRule:AddSpecificNodesSuppressOperations(System.Collections.Generic.List`1[[Microsoft.CodeAnalysis.Formatting.Rules.SuppressOperation, Microsoft.CodeAnalysis.Workspaces, Version=3.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]],Microsoft.CodeAnalysis.SyntaxNode)
         140 ( 5.15% of base) : 198310.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasCustomAttribute():this
         153 ( 4.88% of base) : 198443.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataTokensTests:SpecificHandleFactories():this
         140 ( 4.73% of base) : 198323.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasCustomDebugInformation():this
          98 ( 3.90% of base) : 198341.dasm - System.Reflection.Metadata.Ecma335.Tests.InstructionEncoderTests:TokenInstructions():this
         145 ( 3.11% of base) : 198634.dasm - System.Reflection.Metadata.Tests.MetadataReaderTests:OtherAccessors():this
          72 ( 2.68% of base) : 198435.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataAggregatorTests:HeapSizes():this
          70 ( 2.62% of base) : 198588.dasm - System.Reflection.Metadata.Tests.HandleTests:StringKinds():this
          70 ( 2.41% of base) : 176170.dasm - System.Linq.Tests.TakeTests:Count():this
          70 ( 2.20% of base) : 176119.dasm - System.Linq.Tests.TakeTests:FirstOrDefaultNotIList():this
          70 ( 2.11% of base) : 176128.dasm - System.Linq.Tests.TakeTests:TakeCanOnlyBeOneList():this
          70 ( 2.08% of base) : 176129.dasm - System.Linq.Tests.TakeTests:TakeCanOnlyBeOneNotList():this
          70 ( 2.07% of base) : 176123.dasm - System.Linq.Tests.TakeTests:LastOrDefaultNotIList():this
          71 ( 2.01% of base) : 198434.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataAggregatorTests:RowCounts():this
          70 ( 1.73% of base) : 176125.dasm - System.Linq.Tests.TakeTests:ToArrayNotList():this
          70 ( 1.73% of base) : 176127.dasm - System.Linq.Tests.TakeTests:ToListNotList():this
          70 ( 1.72% of base) : 176124.dasm - System.Linq.Tests.TakeTests:ToArray():this
          70 ( 1.72% of base) : 176126.dasm - System.Linq.Tests.TakeTests:ToList():this
          32 ( 1.70% of base) : 118110.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.ElasticTriviaFormattingRule:AddInitializerSuppressOperations(System.Collections.Generic.List`1[[Microsoft.CodeAnalysis.Formatting.Rules.SuppressOperation, Microsoft.CodeAnalysis.Workspaces, Version=3.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]],Microsoft.CodeAnalysis.SyntaxNode)
           4 ( 1.04% of base) : 179839.dasm - System.SpanTests.ReadOnlySpanTests:TestAllignmentNoMatchLastIndexOf_Byte()

Top method improvements (percentages):
          -7 (-41.18% of base) : 45999.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_3():System.Object:this
          -7 (-41.18% of base) : 47682.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_2():System.Object:this
          -7 (-41.18% of base) : 45998.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_2():System.Object:this
          -7 (-41.18% of base) : 47679.dasm - <>c:<GetNextTextElement_Invalid>b__13_3():System.Object:this
          -7 (-41.18% of base) : 45994.dasm - <>c:<GetNextTextElement_Invalid>b__13_2():System.Object:this
          -7 (-41.18% of base) : 45995.dasm - <>c:<GetNextTextElement_Invalid>b__13_3():System.Object:this
          -7 (-41.18% of base) : 47678.dasm - <>c:<GetNextTextElement_Invalid>b__13_2():System.Object:this
          -7 (-41.18% of base) : 47683.dasm - <>c:<GetNextTextElementLength_Invalid>b__15_3():System.Object:this
        -434 (-7.36% of base) : 198586.dasm - System.Reflection.Metadata.Tests.HandleTests:IsNil():this
         -15 (-4.46% of base) : 198468.dasm - System.Reflection.Metadata.Ecma335.Tests.MetadataBuilderTests:ValidateMethodImplTable():this
         -17 (-3.46% of base) : 18594.dasm - <>c__DisplayClass22_0`1[Byte][System.Byte]:<ContinueWithAfterDelayFromAsync>b__0(System.Threading.Tasks.Task):System.Threading.Tasks.Task`1[Byte]:this
         -17 (-3.42% of base) : 18597.dasm - <>c__DisplayClass23_0`1[Byte][System.Byte]:<ContinueWithAfterDelayFromAsync>b__0(System.Threading.Tasks.Task):System.Threading.Tasks.Task`1[Byte]:this
         -18 (-2.94% of base) : 8416.dasm - Roslyn.Utilities.TaskQueue:ScheduleTaskInProgress(System.Func`1[[System.Threading.Tasks.Task`1[[System.Byte, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]],System.Threading.CancellationToken):System.Threading.Tasks.Task`1[Byte]:this
          -9 (-2.14% of base) : 180436.dasm - System.SpanTests.SpanTests:TestAllignmentMatchLastIndexOf_Byte()
          -5 (-1.80% of base) : 180173.dasm - System.SpanTests.ReadOnlySpanTests:TestAlignmentNotContains_Byte()
          -5 (-1.68% of base) : 180174.dasm - System.SpanTests.ReadOnlySpanTests:TestAlignmentContains_Byte()
          -7 (-1.08% of base) : 198321.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:TypeDefOrRefOrSpec():this
          -7 (-1.08% of base) : 198311.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:HasConstant():this
          -7 (-1.08% of base) : 198315.dasm - System.Reflection.Metadata.Ecma335.Tests.CodedIndexTests:Implementation():this
          -3 (-0.72% of base) : 179840.dasm - System.SpanTests.ReadOnlySpanTests:TestAllignmentMatchLastIndexOf_Byte()

46 total methods with Code Size differences (21 improved, 25 regressed), 5 unchanged.


Author: EgorBo
Assignees: -
Labels:

area-CodeGen-coreclr

Milestone: -

@EgorBo EgorBo merged commit b106e50 into dotnet:main Aug 31, 2021
@ghost ghost locked as resolved and limited conversation to collaborators Sep 30, 2021
@EgorBo
Copy link
Member Author

EgorBo commented Mar 18, 2022

This PR optimized System.Tests.Perf_TimeSpan.FromSeconds but auto-filer didn't catch it, cc @DrewScoggins

image

@EgorBo EgorBo deleted the opt-timespan-from branch March 18, 2022 18:24
@DrewScoggins
Copy link
Member

By default we exclude tests is they have an average less than .2ns. I cannot seem to find the discussion that we had about this, but maybe @tannergooding and @adamsitnik know where that is. Although after looking at the source code I did discover a bug, as we should file issues if we go from a value above .2ns to some value below it. I have fixed this issue.

@adamsitnik adamsitnik added the tenet-performance Performance related issue label Jun 23, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI tenet-performance Performance related issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants