See the official documentation at https://learn.microsoft.com/dotnet/core/deploying/native-aot/optimizing.
The rest of the document talks about options that exist, but their names and purpose are subject to change without a breaking change notice.
<IlcInstructionSet>: By default, the compiler targets the minimum instruction set supported by the target OS and architecture. This option allows targeting newer instruction sets for better performance. The native binary will require the instruction sets to be supported by the hardware in order to run. For example,<IlcInstructionSet>avx2,bmi2,fma,pclmul,popcnt,aes</IlcInstructionSet>will produce binary that takes advantage of instruction sets that are typically present on current Intel and AMD processors.<IlcInstructionSet>native</IlcInstructionSet>will produce a binary that uses instructions that currently running CPU supports (no cross-compilation support). Runilc --helpfor the full list of available instruction sets.ilccan be executed from the NativeAOT package in your local nuget cache e.g.%USERPROFILE%\.nuget\packages\runtime.win-x64.microsoft.dotnet.ilcompiler\8.0.0-...\tools\ilc.exeon Windows or~/.nuget/packages/runtime.linux-arm64.microsoft.dotnet.ilcompiler/8.0.0-.../tools/ilcon Linux.<IlcMaxVectorTBitWidth>: By default, the compiler targets aVector<T>size of16or32bytes, depending on the underlying instruction sets supported. This option allows specifying a different maximum bit width. For example, by default on x64 hardwareVector<T>will be 16-bytes, however, ifAVX2is targeted thenVector<T>will automatically grow to be 32-bytes instead. Setting<IlcMaxVectorTBitWidth>128</IlcMaxVectorTBitWidth>would keep the size as 16-bytes. Alternatively, even ifAVX512Fis targeted then by defaultVector<T>will not grow larger than 32-bytes, setting<IlcMaxVectorTBitWidth>512</IlcMaxVectorTBitWidth>would allow it to grow to 64-bytes.