MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] [hez2010] JIT: Allow stack allocate objects in loops #560

Open MihuBot opened 3 weeks ago

MihuBot commented 3 weeks ago

Job completed in 14 minutes. https://github.com/dotnet/runtime/pull/106526

Diffs

Found 269 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39673256
Total bytes of diff: 39670064
Total bytes of delta: -3192 (-0.01 % of base)
Total relative delta: -13.62
    diff is an improvement.
    relative diff is an improvement.

Top file regressions (bytes):
          66 : System.Security.Cryptography.Pkcs.dasm (0.02 % of base)
          23 : System.Formats.Nrbf.dasm (0.05 % of base)

Top file improvements (bytes):
       -1475 : System.Private.CoreLib.dasm (-0.02 % of base)
        -677 : System.ComponentModel.Composition.dasm (-0.16 % of base)
        -628 : System.Reflection.Context.dasm (-1.08 % of base)
        -313 : System.Linq.Expressions.dasm (-0.03 % of base)
        -113 : System.Reflection.MetadataLoadContext.dasm (-0.05 % of base)
         -43 : System.ComponentModel.TypeConverter.dasm (-0.01 % of base)
         -32 : ILCompiler.Reflection.ReadyToRun.dasm (-0.02 % of base)

9 total files with Code Size differences (7 improved, 2 regressed), 250 unchanged.

Top method regressions (bytes):
          29 (3.86 % of base) : System.Security.Cryptography.Pkcs.dasm - System.Security.Cryptography.CryptographicAttributeObjectCollection:Add(System.Security.Cryptography.CryptographicAttributeObject):int:this (FullOpts)
          23 (9.20 % of base) : System.Formats.Nrbf.dasm - System.Formats.Nrbf.ArraySinglePrimitiveRecord`1[System.Numerics.Vector`1[float]]:DecodeFromNonSeekableStream(System.IO.BinaryReader,int):System.Collections.Generic.List`1[System.Numerics.Vector`1[float]] (FullOpts)
          19 (1.64 % of base) : System.Security.Cryptography.Pkcs.dasm - System.Security.Cryptography.Pkcs.Rfc3161TimestampToken:CheckCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.Pkcs.SignerInfo,byref,byref,System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo):ubyte (FullOpts)
          18 (1.43 % of base) : System.Security.Cryptography.Pkcs.dasm - System.Security.Cryptography.Pkcs.Rfc3161TimestampToken:TryGetCertIds(System.Security.Cryptography.Pkcs.SignerInfo,byref,byref):ubyte (FullOpts)
          16 (4.52 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.LightCompiler:DefineBlockLabels(System.Linq.Expressions.Expression):this (FullOpts)
          11 (1.77 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts)

Top method improvements (bytes):
        -177 (-51.01 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[double]:LastIndexOf(double[],double,int,int):int:this (FullOpts)
        -168 (-49.12 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[double]:IndexOf(double[],double,int,int):int:this (FullOpts)
        -156 (-44.19 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts)
        -155 (-43.30 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:LastIndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts)
        -117 (-5.08 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.Custom.CustomType:GetMethodImpl(System.String,int,System.Reflection.Binder,int,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodInfo:this (FullOpts)
        -113 (-4.80 % of base) : System.Reflection.MetadataLoadContext.dasm - System.Reflection.TypeLoading.Ecma.EcmaDefaultValueProcessing:TryFindRawDefaultValueFromCustomAttributes(System.Reflection.Metadata.CustomAttributeHandleCollection,System.Reflection.TypeLoading.Ecma.EcmaModule,byref):ubyte (FullOpts)
        -109 (-55.05 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[int]:LastIndexOf(int[],int,int,int):int:this (FullOpts)
        -109 (-54.50 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[long]:LastIndexOf(long[],long,int,int):int:this (FullOpts)
        -103 (-53.37 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[int]:IndexOf(int[],int,int,int):int:this (FullOpts)
        -103 (-52.82 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[long]:IndexOf(long[],long,int,int):int:this (FullOpts)
        -101 (-50.25 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[ubyte]:LastIndexOf(ubyte[],ubyte,int,int):int:this (FullOpts)
        -100 (-49.02 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[short]:LastIndexOf(short[],short,int,int):int:this (FullOpts)
         -97 (-48.74 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[short]:IndexOf(short[],short,int,int):int:this (FullOpts)
         -97 (-49.49 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[ubyte]:IndexOf(ubyte[],ubyte,int,int):int:this (FullOpts)
         -90 (-48.91 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[double](double[],double[]):ubyte (FullOpts)
         -90 (-48.91 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[double](double[],double[]):ubyte (FullOpts)
         -88 (-45.13 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float][]):ubyte (FullOpts)
         -88 (-45.13 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float][]):ubyte (FullOpts)
         -70 (-13.49 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts)
         -69 (-51.11 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[long](long[],long[]):ubyte (FullOpts)
         -69 (-50.36 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[short](short[],short[]):ubyte (FullOpts)
         -69 (-51.11 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[ubyte](ubyte[],ubyte[]):ubyte (FullOpts)
         -69 (-13.48 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts)
         -69 (-51.11 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[long](long[],long[]):ubyte (FullOpts)
         -69 (-50.36 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[short](short[],short[]):ubyte (FullOpts)
         -69 (-51.11 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[ubyte](ubyte[],ubyte[]):ubyte (FullOpts)
         -68 (-51.13 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[int](int[],int[]):ubyte (FullOpts)
         -68 (-51.13 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[int](int[],int[]):ubyte (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts)
         -67 (-13.06 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts)
         -58 (-7.14 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.Custom.CustomType:GetMethods(int):System.Reflection.MethodInfo[]:this (FullOpts)
         -47 (-17.03 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[double](System.Collections.Generic.IList`1[double],System.Collections.Generic.IList`1[double]):ubyte (FullOpts)
         -45 (-20.18 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[short](System.Collections.Generic.IList`1[short],System.Collections.Generic.IList`1[short]):ubyte (FullOpts)
         -44 (-19.91 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[int](System.Collections.Generic.IList`1[int],System.Collections.Generic.IList`1[int]):ubyte (FullOpts)
         -44 (-19.91 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[long](System.Collections.Generic.IList`1[long],System.Collections.Generic.IList`1[long]):ubyte (FullOpts)
         -44 (-19.91 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[ubyte](System.Collections.Generic.IList`1[ubyte],System.Collections.Generic.IList`1[ubyte]):ubyte (FullOpts)
         -43 (-2.76 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.Design.RuntimeLicenseContext:GetSavedLicenseKey(System.Type,System.Reflection.Assembly):System.String:this (FullOpts)
         -32 (-5.14 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.ReadyToRunReader:ParseComponentAssemblies():this (FullOpts)

Top method regressions (percentages):
          23 (9.20 % of base) : System.Formats.Nrbf.dasm - System.Formats.Nrbf.ArraySinglePrimitiveRecord`1[System.Numerics.Vector`1[float]]:DecodeFromNonSeekableStream(System.IO.BinaryReader,int):System.Collections.Generic.List`1[System.Numerics.Vector`1[float]] (FullOpts)
          16 (4.52 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.LightCompiler:DefineBlockLabels(System.Linq.Expressions.Expression):this (FullOpts)
          29 (3.86 % of base) : System.Security.Cryptography.Pkcs.dasm - System.Security.Cryptography.CryptographicAttributeObjectCollection:Add(System.Security.Cryptography.CryptographicAttributeObject):int:this (FullOpts)
          11 (1.77 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts)
          19 (1.64 % of base) : System.Security.Cryptography.Pkcs.dasm - System.Security.Cryptography.Pkcs.Rfc3161TimestampToken:CheckCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.Pkcs.SignerInfo,byref,byref,System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo):ubyte (FullOpts)
          18 (1.43 % of base) : System.Security.Cryptography.Pkcs.dasm - System.Security.Cryptography.Pkcs.Rfc3161TimestampToken:TryGetCertIds(System.Security.Cryptography.Pkcs.SignerInfo,byref,byref):ubyte (FullOpts)

Top method improvements (percentages):
        -109 (-55.05 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[int]:LastIndexOf(int[],int,int,int):int:this (FullOpts)
        -109 (-54.50 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[long]:LastIndexOf(long[],long,int,int):int:this (FullOpts)
        -103 (-53.37 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[int]:IndexOf(int[],int,int,int):int:this (FullOpts)
        -103 (-52.82 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[long]:IndexOf(long[],long,int,int):int:this (FullOpts)
         -68 (-51.13 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[int](int[],int[]):ubyte (FullOpts)
         -68 (-51.13 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[int](int[],int[]):ubyte (FullOpts)
         -69 (-51.11 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[long](long[],long[]):ubyte (FullOpts)
         -69 (-51.11 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[ubyte](ubyte[],ubyte[]):ubyte (FullOpts)
         -69 (-51.11 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[long](long[],long[]):ubyte (FullOpts)
         -69 (-51.11 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[ubyte](ubyte[],ubyte[]):ubyte (FullOpts)
        -177 (-51.01 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[double]:LastIndexOf(double[],double,int,int):int:this (FullOpts)
         -69 (-50.36 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[short](short[],short[]):ubyte (FullOpts)
         -69 (-50.36 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[short](short[],short[]):ubyte (FullOpts)
        -101 (-50.25 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[ubyte]:LastIndexOf(ubyte[],ubyte,int,int):int:this (FullOpts)
         -97 (-49.49 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[ubyte]:IndexOf(ubyte[],ubyte,int,int):int:this (FullOpts)
        -168 (-49.12 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[double]:IndexOf(double[],double,int,int):int:this (FullOpts)
        -100 (-49.02 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[short]:LastIndexOf(short[],short,int,int):int:this (FullOpts)
         -90 (-48.91 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[double](double[],double[]):ubyte (FullOpts)
         -90 (-48.91 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[double](double[],double[]):ubyte (FullOpts)
         -97 (-48.74 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[short]:IndexOf(short[],short,int,int):int:this (FullOpts)
         -88 (-45.13 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float][]):ubyte (FullOpts)
         -88 (-45.13 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float][]):ubyte (FullOpts)
        -156 (-44.19 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts)
        -155 (-43.30 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:LastIndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts)
         -45 (-20.18 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[short](System.Collections.Generic.IList`1[short],System.Collections.Generic.IList`1[short]):ubyte (FullOpts)
         -44 (-19.91 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[int](System.Collections.Generic.IList`1[int],System.Collections.Generic.IList`1[int]):ubyte (FullOpts)
         -44 (-19.91 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[long](System.Collections.Generic.IList`1[long],System.Collections.Generic.IList`1[long]):ubyte (FullOpts)
         -44 (-19.91 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[ubyte](System.Collections.Generic.IList`1[ubyte],System.Collections.Generic.IList`1[ubyte]):ubyte (FullOpts)
         -47 (-17.03 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[double](System.Collections.Generic.IList`1[double],System.Collections.Generic.IList`1[double]):ubyte (FullOpts)
         -70 (-13.49 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts)
         -69 (-13.48 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts)
         -67 (-13.06 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts)
         -58 (-7.14 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.Custom.CustomType:GetMethods(int):System.Reflection.MethodInfo[]:this (FullOpts)
         -32 (-5.14 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.ReadyToRunReader:ParseComponentAssemblies():this (FullOpts)
        -117 (-5.08 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.Custom.CustomType:GetMethodImpl(System.String,int,System.Reflection.Binder,int,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodInfo:this (FullOpts)
        -113 (-4.80 % of base) : System.Reflection.MetadataLoadContext.dasm - System.Reflection.TypeLoading.Ecma.EcmaDefaultValueProcessing:TryFindRawDefaultValueFromCustomAttributes(System.Reflection.Metadata.CustomAttributeHandleCollection,System.Reflection.TypeLoading.Ecma.EcmaModule,byref):ubyte (FullOpts)
         -43 (-2.76 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.Design.RuntimeLicenseContext:GetSavedLicenseKey(System.Type,System.Reflection.Assembly):System.String:this (FullOpts)

45 total methods with Code Size differences (39 improved, 6 regressed), 231946 unchanged.

--------------------------------------------------------------------------------

Artifacts:

MihuBot commented 3 weeks ago

Top method regressions

29 (3.86 % of base) - System.Security.Cryptography.CryptographicAttributeObjectCollection:Add(System.Security.Cryptography.CryptographicAttributeObject):int:this ```diff ; Assembly listing for method System.Security.Cryptography.CryptographicAttributeObjectCollection:Add(System.Security.Cryptography.CryptographicAttributeObject):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data ; 0 inlinees with PGO data; 19 single block inlinees; 6 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T07] ( 6, 11.50) ref -> rbx this class-hnd single-def -; V01 arg1 [V01,T17] ( 8, 9.50) ref -> r15 class-hnd single-def -; V02 loc0 [V02,T21] ( 6, 6.75) ref -> r14 class-hnd exact single-def -; V03 loc1 [V03,T29] ( 2, 1 ) int -> rbx -; V04 loc2 [V04,T06] ( 4, 14 ) ref -> r12 class-hnd exact +; V00 this [V00,T09] ( 6, 11.50) ref -> rbx this class-hnd single-def +; V01 arg1 [V01,T13] ( 8, 9.50) ref -> r15 class-hnd single-def +; V02 loc0 [V02,T16] ( 6, 6.75) ref -> r14 class-hnd exact single-def +; V03 loc1 [V03,T23] ( 2, 1 ) int -> rbx +; V04 loc2 [V04,T08] ( 4, 14 ) ref -> r12 class-hnd exact ;* V05 loc3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact -; V06 loc4 [V06,T08] ( 4, 12.50) ref -> r14 class-hnd exact -; V07 loc5 [V07,T18] ( 4, 8 ) ref -> rdx class-hnd +;* V06 loc4 [V06,T30] ( 0, 0 ) long -> zero-ref class-hnd exact +; V07 loc5 [V07,T14] ( 4, 8 ) ref -> rdx class-hnd ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" ;* V10 tmp2 [V10 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" -; V11 tmp3 [V11,T30] ( 2, 2 ) int -> rdi "spilling unroll qmark" -; V12 tmp4 [V12,T37] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" -; V13 tmp5 [V13,T38] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" -; V14 tmp6 [V14,T31] ( 2, 2 ) int -> r13 "impAppendStmt" -; V15 tmp7 [V15,T39] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V11 tmp3 [V11,T24] ( 2, 2 ) int -> rdi "spilling unroll qmark" +; V12 tmp4 [V12,T32] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" +; V13 tmp5 [V13,T33] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" +; V14 tmp6 [V14,T25] ( 2, 2 ) int -> r13 "impAppendStmt" +; V15 tmp7 [V15,T34] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ;* V16 tmp8 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" ; V17 tmp9 [V17,T03] ( 3, 24 ) ref -> rdi class-hnd "Inlining Arg" ;* V18 tmp10 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" -; V19 tmp11 [V19,T27] ( 3, 3 ) ref -> r15 class-hnd exact "Inlining Arg" -; V20 tmp12 [V20,T25] ( 4, 4 ) ref -> r14 class-hnd exact "NewObj constructor temp" -;* V21 tmp13 [V21,T20] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" -; V22 tmp14 [V22,T02] ( 4, 24 ) int -> rdi "Inlining Arg" -; V23 tmp15 [V23,T16] ( 2, 12 ) ref -> rsi class-hnd "Inlining Arg" -; V24 tmp16 [V24,T09] ( 3, 12 ) ref -> rdi class-hnd exact "Inlining Arg" +; V19 tmp11 [V19,T21] ( 3, 3 ) ref -> rdi class-hnd exact "Inlining Arg" +;* V20 tmp12 [V20 ] ( 0, 0 ) long -> zero-ref class-hnd exact "NewObj constructor temp" +; V21 tmp13 [V21,T06] ( 2, 16 ) ref -> rdi class-hnd exact "Inlining Arg" +; V22 tmp14 [V22,T02] ( 4, 24 ) int -> rsi "Inlining Arg" +; V23 tmp15 [V23,T05] ( 3, 20 ) ref -> rdi class-hnd "Inlining Arg" +; V24 tmp16 [V24,T10] ( 3, 12 ) ref -> rdi class-hnd exact "Inlining Arg" ;* V25 tmp17 [V25 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V26 tmp18 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V27 tmp19 [V27,T01] ( 6, 24 ) ref -> rdi class-hnd "Inlining Arg" -; V28 tmp20 [V28,T23] ( 3, 6 ) ref -> rcx class-hnd "Inline stloc first use temp" -; V29 tmp21 [V29,T19] ( 4, 8 ) int -> rax "Inline stloc first use temp" +; V28 tmp20 [V28,T18] ( 3, 6 ) ref -> rcx class-hnd "Inline stloc first use temp" +; V29 tmp21 [V29,T15] ( 4, 8 ) int -> rax "Inline stloc first use temp" ;* V30 tmp22 [V30 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V31 tmp23 [V31 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V32 tmp24 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" ;* V33 tmp25 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ;* V34 tmp26 [V34 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ;* V35 tmp27 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" -; V36 tmp28 [V36,T22] ( 6, 6 ) ref -> rdi class-hnd single-def "Inlining Arg" -; V37 tmp29 [V37,T32] ( 3, 1.50) ref -> r14 class-hnd single-def "Inline stloc first use temp" -; V38 tmp30 [V38,T28] ( 4, 2 ) int -> rax single-def "Inline stloc first use temp" -; V39 tmp31 [V39,T04] ( 3, 24 ) ref -> rdi "arr expr" -; V40 tmp32 [V40,T05] ( 2, 16 ) ref -> rsi "argument with side effect" -; V41 tmp33 [V41,T40] ( 2, 0 ) ref -> rsi "argument with side effect" -; V42 tmp34 [V42,T41] ( 2, 0 ) ref -> rsi "argument with side effect" -; V43 tmp35 [V43,T10] ( 3, 12 ) ref -> rsi "arr expr" -; V44 tmp36 [V44,T42] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V45 cse0 [V45,T13] ( 3, 12 ) int -> rax "CSE #10: moderate" -; V46 cse1 [V46,T11] ( 3, 12 ) ref -> rsi "CSE #09: moderate" -; V47 cse2 [V47,T26] ( 2, 4 ) int -> rax "CSE #05: moderate" -; V48 cse3 [V48,T34] ( 3, 1.50) int -> rax "CSE #02: moderate" -; V49 cse4 [V49,T14] ( 3, 12 ) int -> rdi "CSE #08: moderate" -; V50 cse5 [V50,T35] ( 2, 1 ) int -> rsi "CSE #03: moderate" -; V51 cse6 [V51,T15] ( 3, 12 ) int -> rdi "CSE #06: moderate" -; V52 cse7 [V52,T12] ( 2, 8 ) ref -> rsi "CSE #07: moderate" -; V53 cse8 [V53,T24] ( 3, 6 ) ref -> rdi "CSE #04: moderate" -; V54 cse9 [V54,T33] ( 3, 1.50) ref -> rdi "CSE #01: moderate" -; V55 rat0 [V55,T00] ( 8, 25.50) long -> r13 "Widened IV V03" -; V56 rat1 [V56,T36] ( 3, 3 ) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable" +; V36 tmp28 [V36,T17] ( 6, 6 ) ref -> rdi class-hnd single-def "Inlining Arg" +; V37 tmp29 [V37,T26] ( 3, 1.50) ref -> r14 class-hnd single-def "Inline stloc first use temp" +; V38 tmp30 [V38,T22] ( 4, 2 ) int -> rax single-def "Inline stloc first use temp" +; V39 tmp31 [V39 ] ( 9, 22 ) struct (24) [rbp-0x40] do-not-enreg[XSF] must-init addr-exposed "stack allocated ref class temp" +; V40 tmp32 [V40,T04] ( 3, 24 ) ref -> rdi "arr expr" +; V41 tmp33 [V41,T07] ( 2, 16 ) ref -> rsi "argument with side effect" +; V42 tmp34 [V42,T35] ( 2, 0 ) ref -> rsi "argument with side effect" +; V43 tmp35 [V43,T36] ( 2, 0 ) ref -> rsi "argument with side effect" +; V44 tmp36 [V44,T11] ( 3, 12 ) ref -> rdi "arr expr" +; V45 tmp37 [V45,T37] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V46 cse0 [V46,T20] ( 2, 4 ) int -> rax "CSE #05: moderate" +; V47 cse1 [V47,T28] ( 3, 1.50) int -> rax "CSE #02: moderate" +; V48 cse2 [V48,T29] ( 2, 1 ) int -> rsi "CSE #03: moderate" +; V49 cse3 [V49,T12] ( 3, 12 ) int -> rdi "CSE #06: moderate" +; V50 cse4 [V50,T19] ( 3, 6 ) ref -> rdi "CSE #04: moderate" +; V51 cse5 [V51,T27] ( 3, 1.50) ref -> rdi "CSE #01: moderate" +; V52 rat0 [V52,T00] ( 8, 25.50) long -> r13 "Widened IV V03" +; V53 rat1 [V53,T31] ( 3, 3 ) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable" ; -; Lcl frame size = 8 +; Lcl frame size = 24 G_M1123_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - push rax - lea rbp, [rsp+0x30] + sub rsp, 24 + lea rbp, [rsp+0x40] + vxorps xmm8, xmm8, xmm8 + vmovdqa xmmword ptr [rbp-0x40], xmm8 + xor eax, eax + mov qword ptr [rbp-0x30], rax mov rbx, rdi mov r15, rsi - ;; size=22 bbWeight=1 PerfScore 8.00 + ;; size=41 bbWeight=1 PerfScore 10.83 G_M1123_IG02: test r15, r15 je G_M1123_IG21 mov rdi, gword ptr [r15+0x10] mov rax, 0xD1FFAB1E ; code for Internal.Cryptography.PkcsHelpers:CopyOid(System.Security.Cryptography.Oid):System.Security.Cryptography.Oid call [rax]Internal.Cryptography.PkcsHelpers:CopyOid(System.Security.Cryptography.Oid):System.Security.Cryptography.Oid mov r14, gword ptr [rax+0x08] xor r13d, r13d mov rdi, gword ptr [rbx+0x08] cmp dword ptr [rdi+0x10], 0 jle SHORT G_M1123_IG04 ;; size=42 bbWeight=1 PerfScore 14.75 G_M1123_IG03: mov rdi, gword ptr [rbx+0x08] cmp r13d, dword ptr [rdi+0x10] jae G_M1123_IG20 mov rdi, gword ptr [rdi+0x08] cmp r13d, dword ptr [rdi+0x08] jae G_M1123_IG22 mov r12, gword ptr [rdi+8*r13+0x10] mov rdi, gword ptr [r12+0x08] cmp rdi, gword ptr [r15+0x08] je G_M1123_IG19 mov rdi, gword ptr [r12+0x10] mov rax, 0xD1FFAB1E ; code for Internal.Cryptography.PkcsHelpers:CopyOid(System.Security.Cryptography.Oid):System.Security.Cryptography.Oid call [rax]Internal.Cryptography.PkcsHelpers:CopyOid(System.Security.Cryptography.Oid):System.Security.Cryptography.Oid mov rsi, gword ptr [rax+0x08] mov rdi, r14 mov edx, 5 mov rax, 0xD1FFAB1E ; code for System.String:Equals(System.String,System.String,int):ubyte call [rax]System.String:Equals(System.String,System.String,int):ubyte test eax, eax jne SHORT G_M1123_IG08 inc r13d mov rdi, gword ptr [rbx+0x08] cmp r13d, dword ptr [rdi+0x10] jl SHORT G_M1123_IG03 ;; size=106 bbWeight=4 PerfScore 154.00 G_M1123_IG04: mov rdi, gword ptr [rbx+0x08] mov eax, dword ptr [rdi+0x10] mov r13d, eax inc dword ptr [rdi+0x14] mov r14, gword ptr [rdi+0x08] mov esi, dword ptr [r14+0x08] cmp esi, eax ja SHORT G_M1123_IG05 mov rsi, r15 mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this call [rax]System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this jmp SHORT G_M1123_IG06 ;; size=42 bbWeight=0.50 PerfScore 9.00 G_M1123_IG05: lea esi, [rax+0x01] mov dword ptr [rdi+0x10], esi mov edi, eax lea rdi, bword ptr [r14+8*rdi+0x10] mov rsi, r15 call CORINFO_HELP_ASSIGN_REF ;; size=21 bbWeight=0.50 PerfScore 2.00 G_M1123_IG06: mov eax, r13d ;; size=3 bbWeight=0.50 PerfScore 0.12 G_M1123_IG07: vzeroupper - add rsp, 8 + add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=18 bbWeight=0.50 PerfScore 2.62 G_M1123_IG08: mov ebx, r13d test r14, r14 je SHORT G_M1123_IG11 ;; size=8 bbWeight=0.50 PerfScore 0.75 G_M1123_IG09: cmp dword ptr [r14+0x08], 20 jne SHORT G_M1123_IG11 ;; size=7 bbWeight=0.25 PerfScore 1.00 G_M1123_IG10: vmovups ymm0, ymmword ptr [r14+0x0C] vmovups ymm1, ymmword ptr [r14+0x14] vpxor ymm1, ymm1, ymmword ptr [reloc @RWD00] vpternlogq ymm0, ymm1, ymmword ptr [reloc @RWD32], -34 vptest ymm0, ymm0 sete dil movzx rdi, dil test edi, edi jne G_M1123_IG18 ;; size=52 bbWeight=0.50 PerfScore 10.75 G_M1123_IG11: - mov r15, gword ptr [r15+0x08] - cmp byte ptr [r15], r15b - mov rdi, 0xD1FFAB1E ; System.Security.Cryptography.AsnEncodedDataEnumerator - call CORINFO_HELP_NEWSFAST - mov r14, rax - lea rdi, bword ptr [r14+0x08] - mov rsi, r15 - call CORINFO_HELP_ASSIGN_REF - mov dword ptr [r14+0x10], -1 + mov rdi, gword ptr [r15+0x08] + cmp byte ptr [rdi], dil + vxorps xmm0, xmm0, xmm0 + vmovdqu xmmword ptr [rbp-0x40], xmm0 + vmovdqu xmmword ptr [rbp-0x3C], xmm0 + mov rsi, 0xD1FFAB1E ; System.Security.Cryptography.AsnEncodedDataEnumerator + mov qword ptr [rbp-0x40], rsi + mov gword ptr [rbp-0x38], rdi + mov dword ptr [rbp-0x30], -1 jmp SHORT G_M1123_IG13 - ;; size=47 bbWeight=0.50 PerfScore 5.62 + ;; size=48 bbWeight=0.50 PerfScore 6.29 G_M1123_IG12: mov rsi, rdx mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this call [rax]System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this ;; size=15 bbWeight=2 PerfScore 7.00 G_M1123_IG13: - mov edi, dword ptr [r14+0x10] - mov rsi, gword ptr [r14+0x08] + mov edi, dword ptr [rbp-0x30] + mov rsi, gword ptr [rbp-0x38] mov rsi, gword ptr [rsi+0x08] - mov eax, dword ptr [rsi+0x10] - lea ecx, [rax-0x01] - cmp edi, ecx + mov esi, dword ptr [rsi+0x10] + dec esi + cmp edi, esi jge SHORT G_M1123_IG15 inc edi - mov dword ptr [r14+0x10], edi - cmp edi, eax + mov dword ptr [rbp-0x30], edi + mov rdi, gword ptr [rbp-0x38] + mov esi, dword ptr [rbp-0x30] + mov rdi, gword ptr [rdi+0x08] + cmp esi, dword ptr [rdi+0x10] jae G_M1123_IG20 - ;; size=36 bbWeight=4 PerfScore 49.00 + ;; size=45 bbWeight=4 PerfScore 67.00 G_M1123_IG14: - mov rsi, gword ptr [rsi+0x08] - cmp edi, dword ptr [rsi+0x08] + mov rdi, gword ptr [rdi+0x08] + cmp esi, dword ptr [rdi+0x08] jae G_M1123_IG22 - mov edi, edi - mov rdx, gword ptr [rsi+8*rdi+0x10] + mov esi, esi + mov rdx, gword ptr [rdi+8*rsi+0x10] mov rdi, gword ptr [r12+0x08] cmp byte ptr [rdi], dil test rdx, rdx je SHORT G_M1123_IG17 mov rdi, gword ptr [rdi+0x08] mov eax, dword ptr [rdi+0x10] inc dword ptr [rdi+0x14] mov rcx, gword ptr [rdi+0x08] cmp dword ptr [rcx+0x08], eax jbe SHORT G_M1123_IG12 lea esi, [rax+0x01] mov dword ptr [rdi+0x10], esi movsxd rsi, eax mov rdi, rcx mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ARRADDR_ST call [rax]CORINFO_HELP_ARRADDR_ST jmp SHORT G_M1123_IG13 ;; size=78 bbWeight=2 PerfScore 69.50 G_M1123_IG15: mov eax, ebx ;; size=2 bbWeight=0.50 PerfScore 0.12 G_M1123_IG16: vzeroupper - add rsp, 8 + add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=18 bbWeight=0.50 PerfScore 2.62 G_M1123_IG17: mov edi, 0x430B mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 G_M1123_IG18: mov rdi, 0xD1FFAB1E ; System.Security.Cryptography.CryptographicException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Cryptography_Pkcs9_MultipleSigningTimeNotAllowed():System.String call [rax]System.SR:get_Cryptography_Pkcs9_MultipleSigningTimeNotAllowed():System.String mov rsi, rax mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.Security.Cryptography.CryptographicException:.ctor(System.String):this call [rax]System.Security.Cryptography.CryptographicException:.ctor(System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=57 bbWeight=0 PerfScore 0.00 G_M1123_IG19: mov rdi, 0xD1FFAB1E ; System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_InvalidOperation_DuplicateItemNotAllowed():System.String call [rax]System.SR:get_InvalidOperation_DuplicateItemNotAllowed():System.String mov rsi, rax mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.InvalidOperationException:.ctor(System.String):this call [rax]System.InvalidOperationException:.ctor(System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=57 bbWeight=0 PerfScore 0.00 G_M1123_IG20: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M1123_IG21: mov rdi, 0xD1FFAB1E ; System.ArgumentNullException call CORINFO_HELP_NEWSFAST mov rbx, rax mov edi, 0x1E5C mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rsi, rax mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:.ctor(System.String):this call [rax]System.ArgumentNullException:.ctor(System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=65 bbWeight=0 PerfScore 0.00 G_M1123_IG22: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 RWD00 dq 002E003000340038h, 0035003300310031h, 0031002E00390034h, 0035002E0039002Eh RWD32 dq 002E0032002E0031h, 002E003000340038h, 0035003300310031h, 0031002E00390034h -; Total bytes of code 751, prolog size 22, PerfScore 336.88, instruction count 191, allocated bytes for code 751 (MethodHash=599afb9c) for method System.Security.Cryptography.CryptographicAttributeObjectCollection:Add(System.Security.Cryptography.CryptographicAttributeObject):int:this (FullOpts) +; Total bytes of code 780, prolog size 41, PerfScore 358.38, instruction count 198, allocated bytes for code 780 (MethodHash=599afb9c) for method System.Security.Cryptography.CryptographicAttributeObjectCollection:Add(System.Security.Cryptography.CryptographicAttributeObject):int:this (FullOpts) ```
23 (9.20 % of base) - System.Formats.Nrbf.ArraySinglePrimitiveRecord`1[System.Numerics.Vector`1[float]]:DecodeFromNonSeekableStream(System.IO.BinaryReader,int):System.Collections.Generic.List`1[System.Numerics.Vector`1[float]] ```diff ; Assembly listing for method System.Formats.Nrbf.ArraySinglePrimitiveRecord`1[System.Numerics.Vector`1[float]]:DecodeFromNonSeekableStream(System.IO.BinaryReader,int):System.Collections.Generic.List`1[System.Numerics.Vector`1[float]] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; -; V00 arg0 [V00,T06] ( 4, 6.25) ref -> rbx class-hnd single-def -; V01 arg1 [V01,T09] ( 6, 5.25) int -> r15 single-def -; V02 loc0 [V02,T02] ( 8, 22 ) ref -> r13 class-hnd exact single-def -;* V03 loc1 [V03,T13] ( 0, 0 ) int -> zero-ref +; V00 arg0 [V00,T04] ( 4, 6.25) ref -> rbx class-hnd single-def +; V01 arg1 [V01,T07] ( 6, 5.25) int -> r15 single-def +; V02 loc0 [V02,T00] ( 8, 22 ) ref -> r13 class-hnd exact single-def +;* V03 loc1 [V03,T11] ( 0, 0 ) int -> zero-ref ; V04 OutArgs [V04 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V05 tmp1 [V05,T10] ( 3, 6 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" +; V05 tmp1 [V05,T08] ( 3, 6 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" ;* V06 tmp2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" -; V07 tmp3 [V07,T00] ( 3, 24 ) ref -> rax class-hnd exact "Single-def Box Helper" -; V08 tmp4 [V08,T01] ( 3, 24 ) ref -> r12 "inline UNBOX clone1" -; V09 tmp5 [V09,T12] ( 2, 2 ) int -> r14 "Inline return value spill temp" +;* V07 tmp3 [V07 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +;* V08 tmp4 [V08 ] ( 0, 0 ) byref -> zero-ref "inline UNBOX clone1" +; V09 tmp5 [V09,T10] ( 2, 2 ) int -> r14 "Inline return value spill temp" ;* V10 tmp6 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V11 tmp7 [V11,T05] ( 3, 10 ) ref -> r12 class-hnd exact "Inline stloc first use temp" -; V12 tmp8 [V12,T04] ( 4, 12 ) int -> rax "Inline stloc first use temp" -; V13 tmp9 [V13,T14] ( 3, 16 ) simd32 -> mm0 "Inlining Arg" -; V14 tmp10 [V14,T07] ( 2, 8 ) long -> r12 "field V06._ticks (fldOffset=0x0)" P-INDEP -; V15 cse0 [V15,T11] ( 2, 4.25) long -> r14 hoist "CSE #02: moderate" -; V16 cse1 [V16,T08] ( 2, 8 ) int -> rdi "CSE #03: aggressive" -; V17 rat0 [V17,T03] ( 4, 12.25) int -> r15 "Trip count IV" +; V11 tmp7 [V11,T03] ( 3, 10 ) ref -> r12 class-hnd exact "Inline stloc first use temp" +; V12 tmp8 [V12,T02] ( 4, 12 ) int -> rax "Inline stloc first use temp" +; V13 tmp9 [V13,T12] ( 3, 16 ) simd32 -> mm0 "Inlining Arg" +; V14 tmp10 [V14 ] ( 6, 21 ) struct (16) [rbp-0x38] do-not-enreg[XSF] must-init addr-exposed "stack allocated boxed value class temp" +; V15 tmp11 [V15,T05] ( 2, 8 ) long -> rax "field V06._ticks (fldOffset=0x0)" P-INDEP +; V16 cse0 [V16,T09] ( 2, 4.25) long -> r14 hoist "CSE #02: moderate" +; V17 cse1 [V17,T06] ( 2, 8 ) int -> rdi "CSE #05: aggressive" +; V18 rat0 [V18,T01] ( 4, 12.25) int -> r15 "Trip count IV" ; -; Lcl frame size = 40 +; Lcl frame size = 56 G_M51783_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 40 - lea rbp, [rsp+0x50] + sub rsp, 56 + lea rbp, [rsp+0x60] + xor eax, eax + mov qword ptr [rbp-0x38], rax + mov qword ptr [rbp-0x30], rax mov rbx, rdi mov r15d, esi - ;; size=25 bbWeight=1 PerfScore 7.25 + ;; size=35 bbWeight=1 PerfScore 9.50 G_M51783_IG02: mov edi, 4 cmp r15d, 4 mov r14d, edi cmovle r14d, r15d mov rdi, 0xD1FFAB1E ; System.Collections.Generic.List`1[System.Numerics.Vector`1[float]] call CORINFO_HELP_NEWSFAST mov r13, rax mov rdi, r13 mov esi, r14d mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.Numerics.Vector`1[float]]:.ctor(int):this call [rax]System.Collections.Generic.List`1[System.Numerics.Vector`1[float]]:.ctor(int):this test r15d, r15d - jle G_M51783_IG08 + jle G_M51783_IG10 ;; size=61 bbWeight=1 PerfScore 7.50 G_M51783_IG03: mov rdi, qword ptr [rbx] mov r14, qword ptr [rdi+0x50] ;; size=7 bbWeight=0.25 PerfScore 1.00 G_M51783_IG04: mov rdi, rbx call [r14+0x10]System.IO.BinaryReader:ReadInt64():long:this - mov r12, rax - mov rdi, 0xD1FFAB1E ; System.TimeSpan - call CORINFO_HELP_NEWSFAST - mov qword ptr [rax+0x08], r12 - mov r12, rax - mov rsi, r12 + vxorps xmm0, xmm0, xmm0 + vmovups xmmword ptr [rbp-0x38], xmm0 + mov rsi, 0xD1FFAB1E ; System.TimeSpan + mov qword ptr [rbp-0x38], rsi + mov qword ptr [rbp-0x30], rax + mov rsi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] + cmp qword ptr [rbp-0x38], rsi + je SHORT G_M51783_IG06 + ;; size=50 bbWeight=4 PerfScore 40.33 +G_M51783_IG05: + mov rsi, qword ptr [rbp-0x38] mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX - call [rax]CORINFO_HELP_UNBOX - vmovups ymm0, ymmword ptr [r12+0x08] + call CORINFO_HELP_UNBOX_TYPETEST + ;; size=19 bbWeight=1 PerfScore 2.25 +G_M51783_IG06: + lea rdi, bword ptr [rbp-0x30] + vmovups ymm0, ymmword ptr [rdi] inc dword ptr [r13+0x14] mov r12, gword ptr [r13+0x08] mov eax, dword ptr [r13+0x10] mov edi, dword ptr [r12+0x08] cmp edi, eax - ja SHORT G_M51783_IG06 - ;; size=85 bbWeight=4 PerfScore 100.00 -G_M51783_IG05: + ja SHORT G_M51783_IG08 + ;; size=29 bbWeight=4 PerfScore 63.00 +G_M51783_IG07: vmovups ymmword ptr [rsp], ymm0 mov rdi, r13 mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.Numerics.Vector`1[float]]:AddWithResize(System.Numerics.Vector`1[float]):this call [rax]System.Collections.Generic.List`1[System.Numerics.Vector`1[float]]:AddWithResize(System.Numerics.Vector`1[float]):this - jmp SHORT G_M51783_IG07 + jmp SHORT G_M51783_IG09 ;; size=22 bbWeight=2 PerfScore 13.00 -G_M51783_IG06: +G_M51783_IG08: lea ecx, [rax+0x01] mov dword ptr [r13+0x10], ecx mov eax, eax shl rax, 5 vmovups ymmword ptr [r12+rax+0x10], ymm0 ;; size=20 bbWeight=2 PerfScore 8.50 -G_M51783_IG07: +G_M51783_IG09: dec r15d jne G_M51783_IG04 ;; size=9 bbWeight=4 PerfScore 5.00 -G_M51783_IG08: +G_M51783_IG10: mov rax, r13 ;; size=3 bbWeight=1 PerfScore 0.25 -G_M51783_IG09: +G_M51783_IG11: vzeroupper - add rsp, 40 + add rsp, 56 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=18 bbWeight=1 PerfScore 5.25 -; Total bytes of code 250, prolog size 19, PerfScore 147.75, instruction count 65, allocated bytes for code 250 (MethodHash=ff9635b8) for method System.Formats.Nrbf.ArraySinglePrimitiveRecord`1[System.Numerics.Vector`1[float]]:DecodeFromNonSeekableStream(System.IO.BinaryReader,int):System.Collections.Generic.List`1[System.Numerics.Vector`1[float]] (FullOpts) +; Total bytes of code 273, prolog size 29, PerfScore 155.58, instruction count 71, allocated bytes for code 273 (MethodHash=ff9635b8) for method System.Formats.Nrbf.ArraySinglePrimitiveRecord`1[System.Numerics.Vector`1[float]]:DecodeFromNonSeekableStream(System.IO.BinaryReader,int):System.Collections.Generic.List`1[System.Numerics.Vector`1[float]] (FullOpts) ```

Larger list of diffs: https://gist.github.com/MihuBot/2d44f30c11cf7a178def2c8497de8e2a

MihuBot commented 3 weeks ago

Top method improvements

-177 (-51.01 % of base) - System.Collections.Generic.ObjectEqualityComparer`1[double]:LastIndexOf(double[],double,int,int):int:this ```diff ; Assembly listing for method System.Collections.Generic.ObjectEqualityComparer`1[double]:LastIndexOf(double[],double,int,int):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data ; 0 inlinees with PGO data; 2 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def -; V01 arg1 [V01,T02] ( 7, 4.52) ref -> rbx class-hnd single-def -; V02 arg2 [V02,T14] ( 4, 4 ) double -> [rbp-0x30] single-def +; V01 arg1 [V01,T02] ( 7, 6.54) ref -> rsi class-hnd single-def +; V02 arg2 [V02,T10] ( 8, 10 ) double -> mm0 single-def ; V03 arg3 [V03,T07] ( 4, 4 ) int -> rdx single-def -; V04 arg4 [V04,T09] ( 3, 3 ) int -> rcx single-def -; V05 loc0 [V05,T06] ( 5, 6.25) int -> r15 +; V04 arg4 [V04,T08] ( 3, 3 ) int -> rcx single-def +; V05 loc0 [V05,T06] ( 5, 6.25) int -> rdi ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref -; V07 loc2 [V07,T00] ( 14, 17.02) int -> r14 +; V07 loc2 [V07,T00] ( 14, 19.04) int -> rax ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) double -> zero-ref "spilling side-effects" -; V10 tmp2 [V10,T01] ( 6, 12 ) ref -> rax class-hnd exact "Single-def Box Helper" -; V11 tmp3 [V11,T03] ( 5, 8.04) byref -> r13 "impImportAndPushBox" -; V12 tmp4 [V12,T10] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" -; V13 tmp5 [V13,T05] ( 4, 8 ) ref -> rax class-hnd exact "Inlining Arg" -; V14 tmp6 [V14,T13] ( 8, 8 ) double -> mm1 "Inline stloc first use temp" -; V15 tmp7 [V15,T04] ( 8, 8 ) ubyte -> r12 "Inline return value spill temp" -; V16 tmp8 [V16,T12] ( 6, 12 ) double -> mm2 "Inlining Arg" -; V17 cse0 [V17,T11] ( 2, 0.04) byref -> r13 "CSE #06: conservative" -; V18 cse1 [V18,T15] ( 3, 5.94) double -> mm2 "CSE #02: moderate" -; V19 cse2 [V19,T08] ( 2, 3.96) long -> r13 "CSE #01: aggressive" +;* V10 tmp2 [V10 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +; V11 tmp3 [V11,T01] ( 5, 16.04) byref -> rcx "impImportAndPushBox" +; V12 tmp4 [V12,T05] ( 4, 8 ) ubyte -> rdx "Inline return value spill temp" +;* V13 tmp5 [V13 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Inlining Arg" +;* V14 tmp6 [V14 ] ( 0, 0 ) double -> zero-ref "Inline stloc first use temp" +; V15 tmp7 [V15,T04] ( 8, 10 ) ubyte -> rdx "Inline return value spill temp" +; V16 tmp8 [V16,T11] ( 6, 12 ) double -> mm1 "Inlining Arg" +;* V17 tmp9 [V17 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V18 tmp10 [V18 ] ( 0, 0 ) long -> zero-ref "V17.[000..008)" +;* V19 tmp11 [V19 ] ( 0, 0 ) double -> zero-ref "V17.[008..016)" +; V20 cse0 [V20,T09] ( 2, 0.08) byref -> rcx "CSE #05: conservative" +; V21 cse1 [V21,T12] ( 3, 9.90) double -> mm1 "CSE #02: aggressive" +; V22 cse2 [V22,T03] ( 2, 7.92) long -> rcx "CSE #01: aggressive" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M60214_IG01: push rbp - push r15 - push r14 - push r13 - push r12 - push rbx - push rax - lea rbp, [rsp+0x30] - vmovsd qword ptr [rbp-0x30], xmm0 - mov rbx, rsi - ;; size=24 bbWeight=1 PerfScore 8.75 + mov rbp, rsp + ;; size=4 bbWeight=1 PerfScore 1.25 G_M60214_IG02: - mov r15d, edx - sub r15d, ecx - inc r15d - mov r14d, edx - cmp r14d, r15d - jl G_M60214_IG10 - ;; size=21 bbWeight=1 PerfScore 2.25 + mov edi, edx + sub edi, ecx + inc edi + mov eax, edx + cmp eax, edi + jl SHORT G_M60214_IG09 + ;; size=12 bbWeight=1 PerfScore 2.25 G_M60214_IG03: - test rbx, rbx - je G_M60214_IG12 - mov edi, r14d - or edi, r15d - jl G_M60214_IG12 - cmp dword ptr [rbx+0x08], r14d - jle G_M60214_IG12 - ;; size=31 bbWeight=0.25 PerfScore 1.69 + test rsi, rsi + je SHORT G_M60214_IG11 + mov ecx, eax + or ecx, edi + jl SHORT G_M60214_IG11 + cmp dword ptr [rsi+0x08], eax + jle SHORT G_M60214_IG11 + align [0 bytes for IG04] + ;; size=16 bbWeight=0.25 PerfScore 1.69 G_M60214_IG04: - mov r13d, r14d - mov rdi, 0xD1FFAB1E ; System.Double - call CORINFO_HELP_NEWSFAST - lea r13, bword ptr [rbx+8*r13+0x10] - vmovsd xmm0, qword ptr [rbp-0x30] - vmovsd qword ptr [rax+0x08], xmm0 - vmovsd xmm1, qword ptr [rax+0x08] - vmovsd xmm2, qword ptr [r13] - vucomisd xmm1, xmm2 + mov ecx, eax + lea rcx, bword ptr [rsi+8*rcx+0x10] + vmovsd xmm1, qword ptr [rcx] + vucomisd xmm0, xmm1 jp SHORT G_M60214_IG05 je SHORT G_M60214_IG07 - ;; size=52 bbWeight=1.98 PerfScore 38.61 + ;; size=19 bbWeight=3.96 PerfScore 36.63 G_M60214_IG05: - vucomisd xmm1, xmm1 + vucomisd xmm0, xmm0 jp SHORT G_M60214_IG06 jne SHORT G_M60214_IG06 - xor r12d, r12d + xor edx, edx jmp SHORT G_M60214_IG08 - ;; size=13 bbWeight=1.98 PerfScore 12.38 + ;; size=12 bbWeight=1.98 PerfScore 12.38 G_M60214_IG06: - vucomisd xmm2, xmm2 - setp r12b - movzx r12, r12b + vucomisd xmm1, xmm1 + setp dl + movzx rdx, dl jmp SHORT G_M60214_IG08 - ;; size=14 bbWeight=1.98 PerfScore 10.39 + ;; size=12 bbWeight=1.98 PerfScore 10.39 G_M60214_IG07: - mov r12d, 1 - ;; size=6 bbWeight=1.98 PerfScore 0.49 + mov edx, 1 + ;; size=5 bbWeight=1.98 PerfScore 0.49 G_M60214_IG08: - test r12d, r12d - jne G_M60214_IG18 - ;; size=9 bbWeight=1.98 PerfScore 2.48 -G_M60214_IG09: - dec r14d - cmp r14d, r15d - vmovsd qword ptr [rbp-0x30], xmm0 + test edx, edx + jne SHORT G_M60214_IG16 + dec eax + cmp eax, edi jge SHORT G_M60214_IG04 - ;; size=13 bbWeight=3.96 PerfScore 9.90 -G_M60214_IG10: + ;; size=10 bbWeight=3.96 PerfScore 10.89 +G_M60214_IG09: mov eax, -1 ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M60214_IG11: - add rsp, 8 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 +G_M60214_IG10: pop rbp ret - ;; size=15 bbWeight=0.50 PerfScore 2.12 + ;; size=2 bbWeight=0.50 PerfScore 0.75 +G_M60214_IG11: + cmp eax, dword ptr [rsi+0x08] + jae SHORT G_M60214_IG17 + mov ecx, eax + lea rcx, bword ptr [rsi+8*rcx+0x10] + vucomisd xmm0, qword ptr [rcx] + jp SHORT G_M60214_IG12 + je SHORT G_M60214_IG14 + ;; size=20 bbWeight=0.04 PerfScore 0.49 G_M60214_IG12: - cmp r14d, dword ptr [rbx+0x08] - jae G_M60214_IG20 - mov edi, r14d - lea r13, bword ptr [rbx+8*rdi+0x10] - mov rdi, 0xD1FFAB1E ; System.Double - call CORINFO_HELP_NEWSFAST - vmovsd xmm0, qword ptr [rbp-0x30] - vmovsd qword ptr [rax+0x08], xmm0 - vmovsd xmm1, qword ptr [rax+0x08] - vucomisd xmm1, qword ptr [r13] + vucomisd xmm0, xmm0 jp SHORT G_M60214_IG13 - je SHORT G_M60214_IG15 - ;; size=58 bbWeight=0.02 PerfScore 0.45 + jne SHORT G_M60214_IG13 + xor edx, edx + jmp SHORT G_M60214_IG15 + ;; size=12 bbWeight=0.02 PerfScore 0.13 G_M60214_IG13: + vmovsd xmm1, qword ptr [rcx] vucomisd xmm1, xmm1 - jp SHORT G_M60214_IG14 - jne SHORT G_M60214_IG14 - xor r12d, r12d - jmp SHORT G_M60214_IG16 - ;; size=13 bbWeight=0.02 PerfScore 0.13 + setp dl + movzx rdx, dl + jmp SHORT G_M60214_IG15 + ;; size=16 bbWeight=0.02 PerfScore 0.19 G_M60214_IG14: - vmovsd xmm2, qword ptr [r13] - vucomisd xmm2, xmm2 - setp r12b - movzx r12, r12b - jmp SHORT G_M60214_IG16 - ;; size=20 bbWeight=0.02 PerfScore 0.19 + mov edx, 1 + ;; size=5 bbWeight=0.02 PerfScore 0.01 G_M60214_IG15: - mov r12d, 1 - ;; size=6 bbWeight=0.02 PerfScore 0.01 + test edx, edx + jne SHORT G_M60214_IG16 + dec eax + cmp eax, edi + jge SHORT G_M60214_IG11 + jmp SHORT G_M60214_IG09 + ;; size=12 bbWeight=0.04 PerfScore 0.19 G_M60214_IG16: - test r12d, r12d - jne SHORT G_M60214_IG18 - ;; size=5 bbWeight=0.02 PerfScore 0.03 -G_M60214_IG17: - dec r14d - cmp r14d, r15d - vmovsd qword ptr [rbp-0x30], xmm0 - jge SHORT G_M60214_IG12 - jmp G_M60214_IG10 - ;; size=18 bbWeight=0.04 PerfScore 0.18 -G_M60214_IG18: - mov eax, r14d - ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M60214_IG19: - add rsp, 8 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 pop rbp ret - ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M60214_IG20: + ;; size=2 bbWeight=0.50 PerfScore 0.75 +G_M60214_IG17: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 347, prolog size 24, PerfScore 92.41, instruction count 100, allocated bytes for code 347 (MethodHash=45c414c9) for method System.Collections.Generic.ObjectEqualityComparer`1[double]:LastIndexOf(double[],double,int,int):int:this (FullOpts) +; Total bytes of code 170, prolog size 4, PerfScore 78.59, instruction count 68, allocated bytes for code 170 (MethodHash=45c414c9) for method System.Collections.Generic.ObjectEqualityComparer`1[double]:LastIndexOf(double[],double,int,int):int:this (FullOpts) ```
-168 (-49.12 % of base) - System.Collections.Generic.ObjectEqualityComparer`1[double]:IndexOf(double[],double,int,int):int:this ```diff ; Assembly listing for method System.Collections.Generic.ObjectEqualityComparer`1[double]:IndexOf(double[],double,int,int):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data ; 0 inlinees with PGO data; 2 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def -; V01 arg1 [V01,T02] ( 7, 4.52) ref -> rbx class-hnd single-def -; V02 arg2 [V02,T14] ( 4, 4 ) double -> [rbp-0x30] single-def +; V01 arg1 [V01,T02] ( 7, 6.54) ref -> rsi class-hnd single-def +; V02 arg2 [V02,T10] ( 8, 10 ) double -> mm0 single-def ; V03 arg3 [V03,T07] ( 4, 4 ) int -> rdx single-def -; V04 arg4 [V04,T09] ( 3, 3 ) int -> rcx single-def -; V05 loc0 [V05,T06] ( 6, 6.50) int -> r15 +; V04 arg4 [V04,T08] ( 3, 3 ) int -> rcx single-def +; V05 loc0 [V05,T06] ( 6, 6.50) int -> rcx ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref -; V07 loc2 [V07,T00] ( 13, 16.77) int -> r14 +; V07 loc2 [V07,T00] ( 13, 18.79) int -> rax ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) double -> zero-ref "spilling side-effects" -; V10 tmp2 [V10,T01] ( 6, 12 ) ref -> rax class-hnd exact "Single-def Box Helper" -; V11 tmp3 [V11,T03] ( 5, 8.04) byref -> r13 "impImportAndPushBox" -; V12 tmp4 [V12,T10] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" -; V13 tmp5 [V13,T05] ( 4, 8 ) ref -> rax class-hnd exact "Inlining Arg" -; V14 tmp6 [V14,T13] ( 8, 8 ) double -> mm1 "Inline stloc first use temp" -; V15 tmp7 [V15,T04] ( 8, 8 ) ubyte -> r12 "Inline return value spill temp" -; V16 tmp8 [V16,T12] ( 6, 12 ) double -> mm2 "Inlining Arg" -; V17 cse0 [V17,T11] ( 2, 0.04) byref -> r13 "CSE #06: conservative" -; V18 cse1 [V18,T15] ( 3, 5.94) double -> mm2 "CSE #02: moderate" -; V19 cse2 [V19,T08] ( 2, 3.96) long -> r13 "CSE #01: aggressive" +;* V10 tmp2 [V10 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +; V11 tmp3 [V11,T01] ( 5, 16.04) byref -> rdx "impImportAndPushBox" +; V12 tmp4 [V12,T05] ( 4, 8 ) ubyte -> rdi "Inline return value spill temp" +;* V13 tmp5 [V13 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Inlining Arg" +;* V14 tmp6 [V14 ] ( 0, 0 ) double -> zero-ref "Inline stloc first use temp" +; V15 tmp7 [V15,T04] ( 8, 10 ) ubyte -> rdi "Inline return value spill temp" +; V16 tmp8 [V16,T11] ( 6, 12 ) double -> mm1 "Inlining Arg" +;* V17 tmp9 [V17 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V18 tmp10 [V18 ] ( 0, 0 ) long -> zero-ref "V17.[000..008)" +;* V19 tmp11 [V19 ] ( 0, 0 ) double -> zero-ref "V17.[008..016)" +; V20 cse0 [V20,T09] ( 2, 0.08) byref -> rdx "CSE #05: conservative" +; V21 cse1 [V21,T12] ( 3, 9.90) double -> mm1 "CSE #02: aggressive" +; V22 cse2 [V22,T03] ( 2, 7.92) long -> rdx "CSE #01: aggressive" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M61180_IG01: push rbp - push r15 - push r14 - push r13 - push r12 - push rbx - push rax - lea rbp, [rsp+0x30] - vmovsd qword ptr [rbp-0x30], xmm0 - mov rbx, rsi - ;; size=24 bbWeight=1 PerfScore 8.75 + mov rbp, rsp + ;; size=4 bbWeight=1 PerfScore 1.25 G_M61180_IG02: - lea r15d, [rdx+rcx] - mov r14d, edx - cmp r14d, r15d - jge G_M61180_IG10 - ;; size=16 bbWeight=1 PerfScore 2.00 + add ecx, edx + mov eax, edx + cmp eax, ecx + jge SHORT G_M61180_IG09 + ;; size=8 bbWeight=1 PerfScore 1.75 G_M61180_IG03: - test rbx, rbx - je G_M61180_IG12 - mov edi, r14d - or edi, r15d - jl G_M61180_IG12 - cmp dword ptr [rbx+0x08], r15d - jl G_M61180_IG12 - ;; size=31 bbWeight=0.25 PerfScore 1.69 + test rsi, rsi + je SHORT G_M61180_IG11 + mov edx, eax + or edx, ecx + jl SHORT G_M61180_IG11 + cmp dword ptr [rsi+0x08], ecx + jl SHORT G_M61180_IG11 + align [4 bytes for IG04] + ;; size=20 bbWeight=0.25 PerfScore 1.75 G_M61180_IG04: - mov r13d, r14d - mov rdi, 0xD1FFAB1E ; System.Double - call CORINFO_HELP_NEWSFAST - lea r13, bword ptr [rbx+8*r13+0x10] - vmovsd xmm0, qword ptr [rbp-0x30] - vmovsd qword ptr [rax+0x08], xmm0 - vmovsd xmm1, qword ptr [rax+0x08] - vmovsd xmm2, qword ptr [r13] - vucomisd xmm1, xmm2 + mov edx, eax + lea rdx, bword ptr [rsi+8*rdx+0x10] + vmovsd xmm1, qword ptr [rdx] + vucomisd xmm0, xmm1 jp SHORT G_M61180_IG05 je SHORT G_M61180_IG07 - ;; size=52 bbWeight=1.98 PerfScore 38.61 + ;; size=19 bbWeight=3.96 PerfScore 36.63 G_M61180_IG05: - vucomisd xmm1, xmm1 + vucomisd xmm0, xmm0 jp SHORT G_M61180_IG06 jne SHORT G_M61180_IG06 - xor r12d, r12d + xor edi, edi jmp SHORT G_M61180_IG08 - ;; size=13 bbWeight=1.98 PerfScore 12.38 + ;; size=12 bbWeight=1.98 PerfScore 12.38 G_M61180_IG06: - vucomisd xmm2, xmm2 - setp r12b - movzx r12, r12b + vucomisd xmm1, xmm1 + setp dil + movzx rdi, dil jmp SHORT G_M61180_IG08 ;; size=14 bbWeight=1.98 PerfScore 10.39 G_M61180_IG07: - mov r12d, 1 - ;; size=6 bbWeight=1.98 PerfScore 0.49 + mov edi, 1 + ;; size=5 bbWeight=1.98 PerfScore 0.49 G_M61180_IG08: - test r12d, r12d - jne G_M61180_IG18 - ;; size=9 bbWeight=1.98 PerfScore 2.48 -G_M61180_IG09: - inc r14d - cmp r14d, r15d - vmovsd qword ptr [rbp-0x30], xmm0 + test edi, edi + jne SHORT G_M61180_IG16 + inc eax + cmp eax, ecx jl SHORT G_M61180_IG04 - ;; size=13 bbWeight=3.96 PerfScore 9.90 -G_M61180_IG10: + ;; size=10 bbWeight=3.96 PerfScore 10.89 +G_M61180_IG09: mov eax, -1 ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M61180_IG11: - add rsp, 8 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 +G_M61180_IG10: pop rbp ret - ;; size=15 bbWeight=0.50 PerfScore 2.12 + ;; size=2 bbWeight=0.50 PerfScore 0.75 +G_M61180_IG11: + cmp eax, dword ptr [rsi+0x08] + jae SHORT G_M61180_IG17 + mov edx, eax + lea rdx, bword ptr [rsi+8*rdx+0x10] + vucomisd xmm0, qword ptr [rdx] + jp SHORT G_M61180_IG12 + je SHORT G_M61180_IG14 + ;; size=20 bbWeight=0.04 PerfScore 0.49 G_M61180_IG12: - cmp r14d, dword ptr [rbx+0x08] - jae G_M61180_IG20 - mov edi, r14d - lea r13, bword ptr [rbx+8*rdi+0x10] - mov rdi, 0xD1FFAB1E ; System.Double - call CORINFO_HELP_NEWSFAST - vmovsd xmm0, qword ptr [rbp-0x30] - vmovsd qword ptr [rax+0x08], xmm0 - vmovsd xmm1, qword ptr [rax+0x08] - vucomisd xmm1, qword ptr [r13] + vucomisd xmm0, xmm0 jp SHORT G_M61180_IG13 - je SHORT G_M61180_IG15 - ;; size=58 bbWeight=0.02 PerfScore 0.45 + jne SHORT G_M61180_IG13 + xor edi, edi + jmp SHORT G_M61180_IG15 + ;; size=12 bbWeight=0.02 PerfScore 0.13 G_M61180_IG13: + vmovsd xmm1, qword ptr [rdx] vucomisd xmm1, xmm1 - jp SHORT G_M61180_IG14 - jne SHORT G_M61180_IG14 - xor r12d, r12d - jmp SHORT G_M61180_IG16 - ;; size=13 bbWeight=0.02 PerfScore 0.13 + setp dil + movzx rdi, dil + jmp SHORT G_M61180_IG15 + ;; size=18 bbWeight=0.02 PerfScore 0.19 G_M61180_IG14: - vmovsd xmm2, qword ptr [r13] - vucomisd xmm2, xmm2 - setp r12b - movzx r12, r12b - jmp SHORT G_M61180_IG16 - ;; size=20 bbWeight=0.02 PerfScore 0.19 + mov edi, 1 + ;; size=5 bbWeight=0.02 PerfScore 0.01 G_M61180_IG15: - mov r12d, 1 - ;; size=6 bbWeight=0.02 PerfScore 0.01 + test edi, edi + jne SHORT G_M61180_IG16 + inc eax + cmp eax, ecx + jl SHORT G_M61180_IG11 + jmp SHORT G_M61180_IG09 + ;; size=12 bbWeight=0.04 PerfScore 0.19 G_M61180_IG16: - test r12d, r12d - jne SHORT G_M61180_IG18 - ;; size=5 bbWeight=0.02 PerfScore 0.03 -G_M61180_IG17: - inc r14d - cmp r14d, r15d - vmovsd qword ptr [rbp-0x30], xmm0 - jl SHORT G_M61180_IG12 - jmp G_M61180_IG10 - ;; size=18 bbWeight=0.04 PerfScore 0.18 -G_M61180_IG18: - mov eax, r14d - ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M61180_IG19: - add rsp, 8 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 pop rbp ret - ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M61180_IG20: + ;; size=2 bbWeight=0.50 PerfScore 0.75 +G_M61180_IG17: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 342, prolog size 24, PerfScore 92.16, instruction count 98, allocated bytes for code 342 (MethodHash=a36d1103) for method System.Collections.Generic.ObjectEqualityComparer`1[double]:IndexOf(double[],double,int,int):int:this (FullOpts) +; Total bytes of code 174, prolog size 4, PerfScore 78.16, instruction count 66, allocated bytes for code 174 (MethodHash=a36d1103) for method System.Collections.Generic.ObjectEqualityComparer`1[double]:IndexOf(double[],double,int,int):int:this (FullOpts) ```
-156 (-44.19 % of base) - System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this ```diff ; Assembly listing for method System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data ; 0 inlinees with PGO data; 0 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def -; V01 arg1 [V01,T02] ( 7, 4.52) ref -> rbx class-hnd single-def -; V02 arg2 [V02,T14] ( 2, 2 ) simd32 -> [rbp+0x10] single-def -; V03 arg3 [V03,T06] ( 4, 4 ) int -> rdx single-def +; V01 arg1 [V01,T02] ( 7, 6.54) ref -> rsi class-hnd single-def +; V02 arg2 [V02,T11] ( 6, 4.58) simd32 -> mm0 single-def +; V03 arg3 [V03,T07] ( 4, 4 ) int -> rdx single-def ; V04 arg4 [V04,T08] ( 3, 3 ) int -> rcx single-def -; V05 loc0 [V05,T05] ( 6, 6.50) int -> r15 +; V05 loc0 [V05,T06] ( 6, 6.50) int -> rcx ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref -; V07 loc2 [V07,T00] ( 13, 16.77) int -> r14 +; V07 loc2 [V07,T00] ( 13, 18.79) int -> rax ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) simd32 -> zero-ref "spilling side-effects" -; V10 tmp2 [V10,T01] ( 6, 12 ) ref -> rax class-hnd exact "Single-def Box Helper" -; V11 tmp3 [V11,T03] ( 4, 8 ) byref -> r13 "impImportAndPushBox" -; V12 tmp4 [V12,T09] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" -; V13 tmp5 [V13,T04] ( 4, 8 ) ref -> rax class-hnd exact "Inlining Arg" -; V14 tmp6 [V14,T12] ( 8, 8 ) simd32 -> mm1 "Inline stloc first use temp" -; V15 tmp7 [V15,T10] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" -; V16 cse0 [V16,T11] ( 2, 0.04) byref -> r13 "CSE #08: conservative" -; V17 cse1 [V17,T07] ( 2, 3.96) long -> r13 "CSE #02: aggressive" -; V18 cse2 [V18,T13] ( 4, 7.92) simd32 -> mm2 "CSE #03: aggressive" -; V19 cse3 [V19,T15] ( 4, 0.08) simd32 -> mm2 "CSE #09: conservative" +;* V10 tmp2 [V10 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +; V11 tmp3 [V11,T01] ( 4, 16 ) byref -> rdx "impImportAndPushBox" +; V12 tmp4 [V12,T04] ( 4, 8 ) ubyte -> rdi "Inline return value spill temp" +;* V13 tmp5 [V13 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Inlining Arg" +;* V14 tmp6 [V14 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" +; V15 tmp7 [V15,T05] ( 4, 8 ) ubyte -> rdi "Inline return value spill temp" +;* V16 tmp8 [V16 ] ( 0, 0 ) struct (40) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V17 tmp9 [V17 ] ( 0, 0 ) long -> zero-ref "V16.[000..008)" +;* V18 tmp10 [V18 ] ( 0, 0 ) simd32 -> zero-ref "V16.[008..040)" +; V19 cse0 [V19,T09] ( 2, 0.08) byref -> rdx "CSE #08: conservative" +; V20 cse1 [V20,T03] ( 2, 7.92) long -> rdx "CSE #02: aggressive" +; V21 cse2 [V21,T10] ( 4, 15.84) simd32 -> mm2 "CSE #03: aggressive" +; V22 cse3 [V22,T12] ( 4, 4.29) simd32 -> registers hoist multi-def "CSE #04: aggressive" +; V23 cse4 [V23,T13] ( 4, 0.16) simd32 -> mm1 "CSE #09: conservative" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M57674_IG01: push rbp - push r15 - push r14 - push r13 - push r12 - push rbx - push rax - lea rbp, [rsp+0x30] - mov rbx, rsi - ;; size=19 bbWeight=1 PerfScore 7.75 + mov rbp, rsp + vmovups ymm0, ymmword ptr [rbp+0x10] + ;; size=9 bbWeight=1 PerfScore 5.25 G_M57674_IG02: - lea r15d, [rdx+rcx] - mov r14d, edx - cmp r14d, r15d - jge G_M57674_IG06 - ;; size=16 bbWeight=1 PerfScore 2.00 + add ecx, edx + mov eax, edx + cmp eax, ecx + jge SHORT G_M57674_IG05 + ;; size=8 bbWeight=1 PerfScore 1.75 G_M57674_IG03: - test rbx, rbx - je G_M57674_IG08 - mov edi, r14d - or edi, r15d - jl G_M57674_IG08 - cmp dword ptr [rbx+0x08], r15d - jl G_M57674_IG08 - ;; size=31 bbWeight=0.25 PerfScore 1.69 + test rsi, rsi + je SHORT G_M57674_IG07 + mov edx, eax + or edx, ecx + jl SHORT G_M57674_IG07 + cmp dword ptr [rsi+0x08], ecx + jl SHORT G_M57674_IG07 + vcmpps ymm1, ymm0, ymm0, 0 + align [0 bytes for IG04] + ;; size=21 bbWeight=0.25 PerfScore 2.44 G_M57674_IG04: - mov r13d, r14d - shl r13, 5 - mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - call CORINFO_HELP_NEWSFAST - lea r13, bword ptr [rbx+r13+0x10] - vmovups ymm0, ymmword ptr [rbp+0x10] - vmovups ymmword ptr [rax+0x08], ymm0 - vmovups ymm1, ymmword ptr [rax+0x08] - vmovups ymm2, ymmword ptr [r13] - vcmpps ymm3, ymm1, ymm2, 0 + mov edx, eax + shl rdx, 5 + lea rdx, bword ptr [rsi+rdx+0x10] + vmovups ymm2, ymmword ptr [rdx] + vcmpps ymm3, ymm0, ymm2, 0 vcmpps ymm2, ymm2, ymm2, 0 - vcmpps ymm1, ymm1, ymm1, 0 - vpternlogd ymm1, ymm1, ymm2, 17 - vorps ymm1, ymm1, ymm3 - vpcmpeqd ymm2, ymm2, ymm2 - vptest ymm1, ymm2 - setb r12b - movzx r12, r12b - test r12d, r12d - jne G_M57674_IG10 - ;; size=100 bbWeight=1.98 PerfScore 72.93 -G_M57674_IG05: - inc r14d - cmp r14d, r15d - vmovups ymmword ptr [rbp+0x10], ymm0 + vpternlogd ymm2, ymm2, ymm1, 17 + vorps ymm2, ymm2, ymm3 + vpcmpeqd ymm3, ymm3, ymm3 + vptest ymm2, ymm3 + setb dil + movzx rdi, dil + test edi, edi + jne SHORT G_M57674_IG08 + inc eax + cmp eax, ecx jl SHORT G_M57674_IG04 - ;; size=13 bbWeight=3.96 PerfScore 9.90 -G_M57674_IG06: + ;; size=63 bbWeight=3.96 PerfScore 91.41 +G_M57674_IG05: mov eax, -1 ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M57674_IG07: +G_M57674_IG06: vzeroupper - add rsp, 8 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 pop rbp ret - ;; size=18 bbWeight=0.50 PerfScore 2.62 -G_M57674_IG08: - cmp r14d, dword ptr [rbx+0x08] - jae G_M57674_IG12 - mov edi, r14d - shl rdi, 5 - lea r13, bword ptr [rbx+rdi+0x10] - mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - call CORINFO_HELP_NEWSFAST - vmovups ymm0, ymmword ptr [rbp+0x10] - vmovups ymmword ptr [rax+0x08], ymm0 - vmovups ymm1, ymmword ptr [rax+0x08] - vmovups ymm2, ymmword ptr [r13] - vcmpps ymm3, ymm1, ymm2, 0 - vcmpps ymm2, ymm2, ymm2, 0 + ;; size=5 bbWeight=0.50 PerfScore 1.25 +G_M57674_IG07: + cmp eax, dword ptr [rsi+0x08] + jae SHORT G_M57674_IG09 + mov edx, eax + shl rdx, 5 + lea rdx, bword ptr [rsi+rdx+0x10] + vmovups ymm1, ymmword ptr [rdx] + vcmpps ymm2, ymm0, ymm1, 0 vcmpps ymm1, ymm1, ymm1, 0 - vpternlogd ymm1, ymm1, ymm2, 17 - vorps ymm1, ymm1, ymm3 + vcmpps ymm3, ymm0, ymm0, 0 + vpternlogd ymm1, ymm1, ymm3, 17 + vorps ymm1, ymm1, ymm2 vpcmpeqd ymm2, ymm2, ymm2 vptest ymm1, ymm2 - setb r12b - movzx r12, r12b - test r12d, r12d - jne SHORT G_M57674_IG10 - ;; size=106 bbWeight=0.02 PerfScore 0.82 -G_M57674_IG09: - inc r14d - cmp r14d, r15d - vmovups ymmword ptr [rbp+0x10], ymm0 - jl SHORT G_M57674_IG08 - jmp G_M57674_IG06 - ;; size=18 bbWeight=0.04 PerfScore 0.18 -G_M57674_IG10: - mov eax, r14d - ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M57674_IG11: + setb dil + movzx rdi, dil + test edi, edi + jne SHORT G_M57674_IG08 + inc eax + cmp eax, ecx + jl SHORT G_M57674_IG07 + jmp SHORT G_M57674_IG05 + ;; size=75 bbWeight=0.04 PerfScore 1.28 +G_M57674_IG08: vzeroupper - add rsp, 8 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 pop rbp ret - ;; size=18 bbWeight=0.50 PerfScore 2.62 -G_M57674_IG12: + ;; size=5 bbWeight=0.50 PerfScore 1.25 +G_M57674_IG09: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 353, prolog size 19, PerfScore 100.76, instruction count 93, allocated bytes for code 353 (MethodHash=5c651eb5) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts) +; Total bytes of code 197, prolog size 9, PerfScore 104.76, instruction count 63, allocated bytes for code 197 (MethodHash=5c651eb5) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts) ```
-155 (-43.30 % of base) - System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:LastIndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this ```diff ; Assembly listing for method System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:LastIndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data ; 0 inlinees with PGO data; 0 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def -; V01 arg1 [V01,T02] ( 7, 4.52) ref -> rbx class-hnd single-def -; V02 arg2 [V02,T14] ( 2, 2 ) simd32 -> [rbp+0x10] single-def -; V03 arg3 [V03,T06] ( 4, 4 ) int -> rdx single-def +; V01 arg1 [V01,T02] ( 7, 6.54) ref -> rsi class-hnd single-def +; V02 arg2 [V02,T11] ( 6, 4.58) simd32 -> mm0 single-def +; V03 arg3 [V03,T07] ( 4, 4 ) int -> rdx single-def ; V04 arg4 [V04,T08] ( 3, 3 ) int -> rcx single-def -; V05 loc0 [V05,T05] ( 5, 6.25) int -> r15 +; V05 loc0 [V05,T06] ( 5, 6.25) int -> rdi ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref -; V07 loc2 [V07,T00] ( 14, 17.02) int -> r14 +; V07 loc2 [V07,T00] ( 14, 19.04) int -> rax ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) simd32 -> zero-ref "spilling side-effects" -; V10 tmp2 [V10,T01] ( 6, 12 ) ref -> rax class-hnd exact "Single-def Box Helper" -; V11 tmp3 [V11,T03] ( 4, 8 ) byref -> r13 "impImportAndPushBox" -; V12 tmp4 [V12,T09] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" -; V13 tmp5 [V13,T04] ( 4, 8 ) ref -> rax class-hnd exact "Inlining Arg" -; V14 tmp6 [V14,T12] ( 8, 8 ) simd32 -> mm1 "Inline stloc first use temp" -; V15 tmp7 [V15,T10] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" -; V16 cse0 [V16,T11] ( 2, 0.04) byref -> r13 "CSE #08: conservative" -; V17 cse1 [V17,T07] ( 2, 3.96) long -> r13 "CSE #02: aggressive" -; V18 cse2 [V18,T13] ( 4, 7.92) simd32 -> mm2 "CSE #03: aggressive" -; V19 cse3 [V19,T15] ( 4, 0.08) simd32 -> mm2 "CSE #09: conservative" +;* V10 tmp2 [V10 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +; V11 tmp3 [V11,T01] ( 4, 16 ) byref -> rcx "impImportAndPushBox" +; V12 tmp4 [V12,T04] ( 4, 8 ) ubyte -> rdx "Inline return value spill temp" +;* V13 tmp5 [V13 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Inlining Arg" +;* V14 tmp6 [V14 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" +; V15 tmp7 [V15,T05] ( 4, 8 ) ubyte -> rdx "Inline return value spill temp" +;* V16 tmp8 [V16 ] ( 0, 0 ) struct (40) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V17 tmp9 [V17 ] ( 0, 0 ) long -> zero-ref "V16.[000..008)" +;* V18 tmp10 [V18 ] ( 0, 0 ) simd32 -> zero-ref "V16.[008..040)" +; V19 cse0 [V19,T09] ( 2, 0.08) byref -> rcx "CSE #08: conservative" +; V20 cse1 [V20,T03] ( 2, 7.92) long -> rcx "CSE #02: aggressive" +; V21 cse2 [V21,T10] ( 4, 15.84) simd32 -> mm2 "CSE #03: aggressive" +; V22 cse3 [V22,T12] ( 4, 4.29) simd32 -> registers hoist multi-def "CSE #04: aggressive" +; V23 cse4 [V23,T13] ( 4, 0.16) simd32 -> mm1 "CSE #09: conservative" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M34176_IG01: push rbp - push r15 - push r14 - push r13 - push r12 - push rbx - push rax - lea rbp, [rsp+0x30] - mov rbx, rsi - ;; size=19 bbWeight=1 PerfScore 7.75 + mov rbp, rsp + vmovups ymm0, ymmword ptr [rbp+0x10] + ;; size=9 bbWeight=1 PerfScore 5.25 G_M34176_IG02: - mov r15d, edx - sub r15d, ecx - inc r15d - mov r14d, edx - cmp r14d, r15d - jl G_M34176_IG06 - ;; size=21 bbWeight=1 PerfScore 2.25 + mov edi, edx + sub edi, ecx + inc edi + mov eax, edx + cmp eax, edi + jl SHORT G_M34176_IG05 + ;; size=12 bbWeight=1 PerfScore 2.25 G_M34176_IG03: - test rbx, rbx - je G_M34176_IG08 - mov edi, r14d - or edi, r15d - jl G_M34176_IG08 - cmp dword ptr [rbx+0x08], r14d - jle G_M34176_IG08 - ;; size=31 bbWeight=0.25 PerfScore 1.69 + test rsi, rsi + je SHORT G_M34176_IG07 + mov ecx, eax + or ecx, edi + jl SHORT G_M34176_IG07 + cmp dword ptr [rsi+0x08], eax + jle SHORT G_M34176_IG07 + vcmpps ymm1, ymm0, ymm0, 0 + align [6 bytes for IG04] + ;; size=27 bbWeight=0.25 PerfScore 2.50 G_M34176_IG04: - mov r13d, r14d - shl r13, 5 - mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - call CORINFO_HELP_NEWSFAST - lea r13, bword ptr [rbx+r13+0x10] - vmovups ymm0, ymmword ptr [rbp+0x10] - vmovups ymmword ptr [rax+0x08], ymm0 - vmovups ymm1, ymmword ptr [rax+0x08] - vmovups ymm2, ymmword ptr [r13] - vcmpps ymm3, ymm1, ymm2, 0 + mov ecx, eax + shl rcx, 5 + lea rcx, bword ptr [rsi+rcx+0x10] + vmovups ymm2, ymmword ptr [rcx] + vcmpps ymm3, ymm0, ymm2, 0 vcmpps ymm2, ymm2, ymm2, 0 - vcmpps ymm1, ymm1, ymm1, 0 - vpternlogd ymm1, ymm1, ymm2, 17 - vorps ymm1, ymm1, ymm3 - vpcmpeqd ymm2, ymm2, ymm2 - vptest ymm1, ymm2 - setb r12b - movzx r12, r12b - test r12d, r12d - jne G_M34176_IG10 - ;; size=100 bbWeight=1.98 PerfScore 72.93 -G_M34176_IG05: - dec r14d - cmp r14d, r15d - vmovups ymmword ptr [rbp+0x10], ymm0 + vpternlogd ymm2, ymm2, ymm1, 17 + vorps ymm2, ymm2, ymm3 + vpcmpeqd ymm3, ymm3, ymm3 + vptest ymm2, ymm3 + setb dl + movzx rdx, dl + test edx, edx + jne SHORT G_M34176_IG08 + dec eax + cmp eax, edi jge SHORT G_M34176_IG04 - ;; size=13 bbWeight=3.96 PerfScore 9.90 -G_M34176_IG06: + ;; size=61 bbWeight=3.96 PerfScore 91.41 +G_M34176_IG05: mov eax, -1 ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M34176_IG07: +G_M34176_IG06: vzeroupper - add rsp, 8 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 pop rbp ret - ;; size=18 bbWeight=0.50 PerfScore 2.62 -G_M34176_IG08: - cmp r14d, dword ptr [rbx+0x08] - jae G_M34176_IG12 - mov edi, r14d - shl rdi, 5 - lea r13, bword ptr [rbx+rdi+0x10] - mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - call CORINFO_HELP_NEWSFAST - vmovups ymm0, ymmword ptr [rbp+0x10] - vmovups ymmword ptr [rax+0x08], ymm0 - vmovups ymm1, ymmword ptr [rax+0x08] - vmovups ymm2, ymmword ptr [r13] - vcmpps ymm3, ymm1, ymm2, 0 - vcmpps ymm2, ymm2, ymm2, 0 + ;; size=5 bbWeight=0.50 PerfScore 1.25 +G_M34176_IG07: + cmp eax, dword ptr [rsi+0x08] + jae SHORT G_M34176_IG09 + mov ecx, eax + shl rcx, 5 + lea rcx, bword ptr [rsi+rcx+0x10] + vmovups ymm1, ymmword ptr [rcx] + vcmpps ymm2, ymm0, ymm1, 0 vcmpps ymm1, ymm1, ymm1, 0 - vpternlogd ymm1, ymm1, ymm2, 17 - vorps ymm1, ymm1, ymm3 + vcmpps ymm3, ymm0, ymm0, 0 + vpternlogd ymm1, ymm1, ymm3, 17 + vorps ymm1, ymm1, ymm2 vpcmpeqd ymm2, ymm2, ymm2 vptest ymm1, ymm2 - setb r12b - movzx r12, r12b - test r12d, r12d - jne SHORT G_M34176_IG10 - ;; size=106 bbWeight=0.02 PerfScore 0.82 -G_M34176_IG09: - dec r14d - cmp r14d, r15d - vmovups ymmword ptr [rbp+0x10], ymm0 - jge SHORT G_M34176_IG08 - jmp G_M34176_IG06 - ;; size=18 bbWeight=0.04 PerfScore 0.18 -G_M34176_IG10: - mov eax, r14d - ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M34176_IG11: + setb dl + movzx rdx, dl + test edx, edx + jne SHORT G_M34176_IG08 + dec eax + cmp eax, edi + jge SHORT G_M34176_IG07 + jmp SHORT G_M34176_IG05 + ;; size=73 bbWeight=0.04 PerfScore 1.28 +G_M34176_IG08: vzeroupper - add rsp, 8 - pop rbx - pop r12 - pop r13 - pop r14 - pop r15 pop rbp ret - ;; size=18 bbWeight=0.50 PerfScore 2.62 -G_M34176_IG12: + ;; size=5 bbWeight=0.50 PerfScore 1.25 +G_M34176_IG09: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 358, prolog size 19, PerfScore 101.01, instruction count 95, allocated bytes for code 358 (MethodHash=86f17a7f) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:LastIndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts) +; Total bytes of code 203, prolog size 9, PerfScore 105.32, instruction count 65, allocated bytes for code 203 (MethodHash=86f17a7f) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Numerics.Vector`1[float]]:LastIndexOf(System.Numerics.Vector`1[float][],System.Numerics.Vector`1[float],int,int):int:this (FullOpts) ```

Larger list of diffs: https://gist.github.com/MihuBot/0f096701b12609d54ed62e7f192e4731

MihuBot commented 3 weeks ago

@hez2010