On Thu, Feb 27, 2025 at 05:52:17PM -0800, Andre Muezerie wrote:
> This patchset allows users to specify the CPU for which the generated
> code should be optimized for by passing the CPU name.
> 
> MSVC does not provide this functionality natively, so logic was
> added. This additional logic relies on a table which stores instruction
> set availability (like AXV512F) for different CPUs.
> To make it easier to update this table a new devtool is introduced
> with this patch. The new tool generates the table entries for all CPUs
> listed in an input file using a recent version of the compiler, which
> has all the information needed. This reduces enormously the amount
> of work needed to update the table in msvc/meson.build and makes the
> process much less error prone.
> 
> Signed-off-by: Andre Muezerie <andre...@linux.microsoft.com>
> ---
>  devtools/dump-cpu-flags/README.md          |  25 +++++
>  devtools/dump-cpu-flags/cpu-names.txt      | 120 +++++++++++++++++++++
>  devtools/dump-cpu-flags/dump-cpu-flags.cpp | 119 ++++++++++++++++++++
>  devtools/dump-cpu-flags/dump-cpu-flags.py  |  41 +++++++
>  4 files changed, 305 insertions(+)
>  create mode 100644 devtools/dump-cpu-flags/README.md
>  create mode 100644 devtools/dump-cpu-flags/cpu-names.txt
>  create mode 100644 devtools/dump-cpu-flags/dump-cpu-flags.cpp
>  create mode 100644 devtools/dump-cpu-flags/dump-cpu-flags.py
> 
> diff --git a/devtools/dump-cpu-flags/README.md 
> b/devtools/dump-cpu-flags/README.md
> new file mode 100644
> index 0000000000..3db69f9f8f
> --- /dev/null
> +++ b/devtools/dump-cpu-flags/README.md
> @@ -0,0 +1,25 @@
> +# Generating updated CPU flags
> +
> +File `config\x86\msvc\meson.build` has a table with flags indicating 
> instruction set support for a variety of CPU types.
> +
> +Script `dump-cpu-flags.py` can be used to generate updated entries for this 
> table.
> +
> +The CPU names are stored in file `cpu-names.txt`, which is consumed by 
> `dump-cpu-flags.py`. The formatting used in that file is described at the top 
> of the file itself.
> +
> +The script relies on the information embedded in the g++ compiler. This 
> means that an updated table can automatically be generated by switching to a 
> newer version of the compiler. This avoids the need to manually edit the 
> entries, which is error prone. With the script the table entries can just 
> copied and pasted into `meson.build`. The only thing that might need to be 
> done is adding new CPU names to cpu-names.txt, when new CPUs are released.
> +
> +**NOTE**: CPUs not known to the compiler will result in errors, which can be 
> ignored (`dump-cpu-flags.py` will ignore these errors and continue). For best 
> results use the latest g++ compiler available.
> +
> +Below is a sample output, where an error was logged because the compiler did 
> not know about a CPU named ‘raptorlake’.
> +
> +```sh
> +$ ./dump-cpu-flags.py
> +       'x86-64-v2': [],
> +       'x86-64-v3': ['AVX', 'AVX2'],
> +       'x86-64-v4': ['AVX', 'AVX2', 'AVX512F', 'AVX512VL', 'AVX512BW', 
> 'AVX512DQ', 'AVX512CD'],
> +       'alderlake': ['AVX', 'PCLMUL', 'RDRND', 'AVX2', 'RDSEED', 'AES', 
> 'VPCLMULQDQ', 'GFNI'],
> +cc1plus: error: bad value (‘raptorlake’) for ‘-march=’ switch
> +cc1plus: note: valid arguments to ‘-march=’ switch are: nocona core2 nehalem 
> corei7 westmere sandybridge...
> +      'silvermont': ['PCLMUL', 'RDRND'],
> +             'slm': ['PCLMUL', 'RDRND'],
> +```
> \ No newline at end of file

How about having the tool output a valid meson.build file, that can then be
used directly without copy-paste. While I know such a thing would end up
with us having deep subdir structures, it could be just loaded from e.g.
config/x86/msvc/cpu-flags/meson.build, for example.

/Bruce

Reply via email to