diff options
author | Michal Strehovský <MichalStrehovsky@users.noreply.github.com> | 2017-11-16 13:22:33 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-16 13:22:33 +0300 |
commit | 39f8c0743655ebec09a0bdd043ae4031825c7042 (patch) | |
tree | 561c758dc7808278abbec60349c05f6ac3e27dda /src/System.Private.Jit | |
parent | 3db234ddbb11315d8d44747bb837ac65db475fed (diff) |
Implement efficient/correct Comparer.get_Default and EqualityComparer.get_Default (#4935)
This work has several parts that largely hook up into the existing infrastructure in the class library we built for Project N.
1. Generate specialized method bodies for Comparer.Create and EqualityComparer.Create that create the right comparer specialized for the given T (if T implement the interface, doesn't implement the interface, is nullable, or is an enum)
2. If specialization is not possible at compile time, fall back to using template type loader to load the right type.
3. Add code that ensures appropriate templates get generated. This is a bit of a divergence from what Project N does because there we don't track precisely what we need and rely on universal shared code to fill in the blanks.
4. Enable RyuJIT optimization around EqualityComparer.get_Default that lets us devirtualize subsequent calls on the result of the intrinsic.
Diffstat (limited to 'src/System.Private.Jit')
-rw-r--r-- | src/System.Private.Jit/src/System.Private.Jit.csproj | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/System.Private.Jit/src/System.Private.Jit.csproj b/src/System.Private.Jit/src/System.Private.Jit.csproj index db1d659f2..5df579bb4 100644 --- a/src/System.Private.Jit/src/System.Private.Jit.csproj +++ b/src/System.Private.Jit/src/System.Private.Jit.csproj @@ -66,6 +66,7 @@ <Compile Include="$(TypeSystemBasePath)\IL\Stubs\AddrOfIntrinsic.cs" /> <Compile Include="$(TypeSystemBasePath)\IL\Stubs\ArrayMethodILEmitter.cs" /> <Compile Include="$(TypeSystemBasePath)\IL\Stubs\CalliIntrinsic.cs" /> + <Compile Include="$(TypeSystemBasePath)\IL\Stubs\ComparerIntrinsics.cs" /> <Compile Include="$(TypeSystemBasePath)\IL\Stubs\DelegateMarshallingMethodThunk.cs" /> <Compile Include="$(TypeSystemBasePath)\IL\Stubs\ForwardDelegateCreationThunk.cs" /> <Compile Include="$(TypeSystemBasePath)\IL\Stubs\EETypePtrOfIntrinsic.cs" /> |