Shuffle some `MethodTable` flags (#85634)
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>
Wed, 3 May 2023 07:05:50 +0000 (16:05 +0900)
committerGitHub <noreply@github.com>
Wed, 3 May 2023 07:05:50 +0000 (16:05 +0900)
commit7afd85d1fd0b9edf0e2b58108caf74509930c6e5
tree0a85c0557f4a18fb766829a02539eef8936b2832
parent32a16d039dca69cae153a8e6905f697b8035c39d
Shuffle some `MethodTable` flags (#85634)

* `IDynamicInterfaceCastableFlag` cannot be set on types that have a component size, so move it from the valuable location in `Flags` to `FlagsEx`.
* Move `HasSealedVTableEntriesFlag` from rare flags to flags. This flag is not so rare. All async state machine types set it, for example.
* Delete `IsAbstractClassFlag`. This was introduce in .NET Native for `GetUninitializedObject` since accessing `Type.IsAbstract` could trigger a `MissingMetadataException` there. We got rid of that concept in NativeAOT because it cannot be reconciled with ILLink trimming. Rewrite the code to use `Type.IsAbstract`.

Saves 15 kB on BasicMinimalApis, which is nice. Also makes things faster since we avoid reading optional fields and rare flags.
src/coreclr/nativeaot/Common/src/Internal/Runtime/MethodTable.cs
src/coreclr/nativeaot/System.Private.CoreLib/src/System/Runtime/CompilerServices/RuntimeHelpers.NativeAot.cs
src/coreclr/nativeaot/System.Private.TypeLoader/src/Internal/Runtime/TypeLoader/EETypeCreator.cs
src/coreclr/tools/Common/Internal/Runtime/EETypeBuilderHelpers.cs
src/coreclr/tools/Common/Internal/Runtime/MethodTable.Constants.cs
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/EETypeNode.cs