i386: support micro-levels in target{,_clone} attrs [PR101696]
authorMartin Liska <mliska@suse.cz>
Thu, 12 Aug 2021 13:20:43 +0000 (15:20 +0200)
committerMartin Liska <mliska@suse.cz>
Mon, 13 Sep 2021 15:24:48 +0000 (17:24 +0200)
commit8ea292591e42aa4d52b4b7a00b86335bfd2e2e85
treefb59f661f30741d2687da3d7196bea8d8673db90
parent03312cbd54f337dfb25be356a1d1abc9925c6c03
i386: support micro-levels in target{,_clone} attrs [PR101696]

As mentioned in the PR, we do miss supports target micro-architectures
in target and target_clone attribute. While the levels
x86-64 x86-64-v2 x86-64-v3 x86-64-v4 are supported values by -march
option, they are actually only aliases for k8 CPU. That said, they are more
closer to __builtin_cpu_supports function and we decided to implement
it there.

PR target/101696

gcc/ChangeLog:

* common/config/i386/cpuinfo.h (cpu_indicator_init): Add support
for x86-64 micro levels for __builtin_cpu_supports.
* common/config/i386/i386-cpuinfo.h (enum feature_priority):
Add priorities for the micro-arch levels.
(enum processor_features): Add new features.
* common/config/i386/i386-isas.h: Add micro-arch features.
* config/i386/i386-builtins.c (get_builtin_code_for_version):
Support the micro-arch levels by callsing
__builtin_cpu_supports.
* doc/extend.texi: Document that the levels are support by
  __builtin_cpu_supports.

gcc/testsuite/ChangeLog:

* g++.target/i386/mv30.C: New test.
* gcc.target/i386/mvc16.c: New test.
* gcc.target/i386/builtin_target.c (CHECK___builtin_cpu_supports):
New.

Co-Authored-By: H.J. Lu <hjl.tools@gmail.com>
gcc/common/config/i386/cpuinfo.h
gcc/common/config/i386/i386-cpuinfo.h
gcc/common/config/i386/i386-isas.h
gcc/config/i386/i386-builtins.c
gcc/doc/extend.texi
gcc/testsuite/g++.target/i386/mv30.C [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/builtin_target.c
gcc/testsuite/gcc.target/i386/mvc16.c [new file with mode: 0644]