Skip to content

[trimmer] per-RID linked corlib assembly contains foreign platform intrinsics classes #93399

@grendello

Description

@grendello

This happens on xamarin-android/main (.NET8), but I suppose it will apply to other platforms as well.

I noticed that System.Private.CoreLib.dll output by the linker for arm64 RID contains X86 and WASM intrinsics types:

549: System.Runtime.Intrinsics.Wasm.PackedSimd (flist=2253, mlist=6116, flags=0x100081, extends=0xa0)
554: System.Runtime.Intrinsics.X86.X86Base (flist=2253, mlist=6151, flags=0x100081, extends=0xa0)
555: System.Runtime.Intrinsics.X86.Sse (flist=2253, mlist=6151, flags=0x100081, extends=0x8a8)
556: System.Runtime.Intrinsics.X86.Sse2 (flist=2253, mlist=6151, flags=0x100081, extends=0x8ac)
557: System.Runtime.Intrinsics.X86.Sse3 (flist=2253, mlist=6154, flags=0x100081, extends=0x8b0)
558: System.Runtime.Intrinsics.X86.Sse41 (flist=2253, mlist=6154, flags=0x100081, extends=0x8bc)
559: System.Runtime.Intrinsics.X86.Ssse3 (flist=2253, mlist=6155, flags=0x100081, extends=0x8b4)

It appears some of the x86 classes are removed, but not all. For comparison, this is a list of types from the same assembly but linked for x84:

558: System.Runtime.Intrinsics.X86.X86Base (flist=2255, mlist=6330, flags=0x100081, extends=0xa0)
559: System.Runtime.Intrinsics.X86.X86Base/X64 (flist=2255, mlist=6333, flags=0x100082, extends=0xa0)
560: System.Runtime.Intrinsics.X86.Avx (flist=2255, mlist=6336, flags=0x100081, extends=0x90c)
561: System.Runtime.Intrinsics.X86.Avx2 (flist=2255, mlist=6338, flags=0x100081, extends=0x8c0)
562: System.Runtime.Intrinsics.X86.Avx512BW (flist=2255, mlist=6344, flags=0x100081, extends=0x8cc)
563: System.Runtime.Intrinsics.X86.Avx512F (flist=2255, mlist=6346, flags=0x100081, extends=0x8c4)
564: System.Runtime.Intrinsics.X86.Bmi1 (flist=2255, mlist=6347, flags=0x100081, extends=0x8b8)
565: System.Runtime.Intrinsics.X86.Bmi1/X64 (flist=2255, mlist=6349, flags=0x100082, extends=0x8bc)
566: System.Runtime.Intrinsics.X86.Bmi2 (flist=2255, mlist=6352, flags=0x100081, extends=0x8b8)
567: System.Runtime.Intrinsics.X86.Bmi2/X64 (flist=2255, mlist=6352, flags=0x100082, extends=0x8bc)
568: System.Runtime.Intrinsics.X86.Lzcnt (flist=2255, mlist=6354, flags=0x100081, extends=0x8b8)
569: System.Runtime.Intrinsics.X86.Lzcnt/X64 (flist=2255, mlist=6356, flags=0x100082, extends=0x8bc)
570: System.Runtime.Intrinsics.X86.Popcnt (flist=2255, mlist=6358, flags=0x100081, extends=0x90c)
571: System.Runtime.Intrinsics.X86.Sse (flist=2255, mlist=6360, flags=0x100081, extends=0x8b8)
572: System.Runtime.Intrinsics.X86.Sse/X64 (flist=2255, mlist=6360, flags=0x100082, extends=0x8bc)
573: System.Runtime.Intrinsics.X86.Sse2 (flist=2255, mlist=6360, flags=0x100081, extends=0x8ec)
574: System.Runtime.Intrinsics.X86.Sse2/X64 (flist=2255, mlist=6373, flags=0x100082, extends=0x8f0)
575: System.Runtime.Intrinsics.X86.Sse3 (flist=2255, mlist=6376, flags=0x100081, extends=0x8f4)
576: System.Runtime.Intrinsics.X86.Sse3/X64 (flist=2255, mlist=6376, flags=0x100082, extends=0x8f8)
577: System.Runtime.Intrinsics.X86.Sse41 (flist=2255, mlist=6376, flags=0x100081, extends=0x910)
578: System.Runtime.Intrinsics.X86.Sse41/X64 (flist=2255, mlist=6379, flags=0x100082, extends=0x914)
579: System.Runtime.Intrinsics.X86.Sse42 (flist=2255, mlist=6380, flags=0x100081, extends=0x904)
580: System.Runtime.Intrinsics.X86.Ssse3 (flist=2255, mlist=6380, flags=0x100081, extends=0x8fc)
581: System.Runtime.Intrinsics.X86.Ssse3/X64 (flist=2255, mlist=6382, flags=0x100082, extends=0x900)

The x64 version also contains some ARM intrinsics, but not all:

553: System.Runtime.Intrinsics.Wasm.PackedSimd (flist=2255, mlist=6322, flags=0x100081, extends=0xa0)
554: System.Runtime.Intrinsics.Arm.AdvSimd (flist=2255, mlist=6325, flags=0x100081, extends=0x8b0)
555: System.Runtime.Intrinsics.Arm.AdvSimd/Arm64 (flist=2255, mlist=6326, flags=0x100082, extends=0x8b4)
556: System.Runtime.Intrinsics.Arm.ArmBase (flist=2255, mlist=6330, flags=0x100081, extends=0xa0)
557: System.Runtime.Intrinsics.Arm.ArmBase/Arm64 (flist=2255, mlist=6330, flags=0x100082, extends=0xa0)

Would it be possible to remove all of them? They are essentially dead weight for the target RID.

Attached is a zip with both assemblies mentioned above. The app being built was the dotnet new android template for NET8
corlib.zip

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions