Skip to content

Commit 94b164c

Browse files
authored
[X86][AVX10] Remove EVEX512 and AVX10-256 implementations (#157034)
The 256-bit maximum vector register size control was removed from AVX10 whitepaper, ref: https://cdrdv2.intel.com/v1/dl/getContent/784343 We have warned these options in LLVM21 through #132542. This patch removes underlying implementations in LLVM22.
1 parent a1de9ac commit 94b164c

File tree

157 files changed

+1154
-1748
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

157 files changed

+1154
-1748
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,10 @@ X86 Support
379379
- NOTE: Please avoid use of the __builtin_ia32_* intrinsics - these are not
380380
guaranteed to exist in future releases, or match behaviour with previous
381381
releases of clang or other compilers.
382+
- Remove `m[no-]avx10.x-[256,512]` and `m[no-]evex512` options from Clang
383+
driver.
384+
- Remove `[no-]evex512` feature request from intrinsics and builtins.
385+
- Change features `avx10.x-[256,512]` to `avx10.x`.
382386

383387
Arm and AArch64 Support
384388
^^^^^^^^^^^^^^^^^^^^^^^

clang/docs/UsersManual.rst

Lines changed: 6 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -4581,59 +4581,14 @@ implicitly included in later levels.
45814581
- ``-march=x86-64-v3``: (close to Haswell) AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE
45824582
- ``-march=x86-64-v4``: AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL
45834583

4584-
`Intel AVX10 ISA <https://cdrdv2.intel.com/v1/dl/getContent/784267>`_ is
4584+
`Intel AVX10 ISA <https://cdrdv2.intel.com/v1/dl/getContent/784343>`_ is
45854585
a major new vector ISA incorporating the modern vectorization aspects of
45864586
Intel AVX-512. This ISA will be supported on all future Intel processors.
4587-
Users are supposed to use the new options ``-mavx10.N`` and ``-mavx10.N-512``
4588-
on these processors and should not use traditional AVX512 options anymore.
4589-
4590-
The ``N`` in ``-mavx10.N`` represents a continuous integer number starting
4591-
from ``1``. ``-mavx10.N`` is an alias of ``-mavx10.N-256``, which means to
4592-
enable all instructions within AVX10 version N at a maximum vector length of
4593-
256 bits. ``-mavx10.N-512`` enables all instructions at a maximum vector
4594-
length of 512 bits, which is a superset of instructions ``-mavx10.N`` enabled.
4595-
4596-
Current binaries built with AVX512 features can run on Intel AVX10/512 capable
4597-
processors without re-compile, but cannot run on AVX10/256 capable processors.
4598-
Users need to re-compile their code with ``-mavx10.N``, and maybe update some
4599-
code that calling to 512-bit X86 specific intrinsics and passing or returning
4600-
512-bit vector types in function call, if they want to run on AVX10/256 capable
4601-
processors. Binaries built with ``-mavx10.N`` can run on both AVX10/256 and
4602-
AVX10/512 capable processors.
4603-
4604-
Users can add a ``-mno-evex512`` in the command line with AVX512 options if
4605-
they want to run the binary on both legacy AVX512 and new AVX10/256 capable
4606-
processors. The option has the same constraints as ``-mavx10.N``, i.e.,
4607-
cannot call to 512-bit X86 specific intrinsics and pass or return 512-bit vector
4608-
types in function call.
4609-
4610-
Users should avoid using AVX512 features in function target attributes when
4611-
developing code for AVX10. If they have to do so, they need to add an explicit
4612-
``evex512`` or ``no-evex512`` together with AVX512 features for 512-bit or
4613-
non-512-bit functions respectively to avoid unexpected code generation. Both
4614-
command line option and target attribute of EVEX512 feature can only be used
4615-
with AVX512. They don't affect vector size of AVX10.
4616-
4617-
User should not mix the use AVX10 and AVX512 options together at any time,
4618-
because the option combinations are conflicting sometimes. For example, a
4619-
combination of ``-mavx512f -mavx10.1-256`` doesn't show a clear intention to
4620-
compiler, since instructions in AVX512F and AVX10.1/256 intersect but do not
4621-
overlap. In this case, compiler will emit warning for it, but the behavior
4622-
is determined. It will generate the same code as option ``-mavx10.1-512``.
4623-
A similar case is ``-mavx512f -mavx10.2-256``, which equals to
4624-
``-mavx10.1-512 -mavx10.2-256``, because ``avx10.2-256`` implies ``avx10.1-256``
4625-
and ``-mavx512f -mavx10.1-256`` equals to ``-mavx10.1-512``.
4626-
4627-
There are some new macros introduced with AVX10 support. ``-mavx10.1-256`` will
4628-
enable ``__AVX10_1__`` and ``__EVEX256__``, while ``-mavx10.1-512`` enables
4629-
``__AVX10_1__``, ``__EVEX256__``, ``__EVEX512__`` and ``__AVX10_1_512__``.
4630-
Besides, both ``-mavx10.1-256`` and ``-mavx10.1-512`` will enable all AVX512
4631-
feature specific macros. A AVX512 feature will enable both ``__EVEX256__``,
4632-
``__EVEX512__`` and its own macro. So ``__EVEX512__`` can be used to guard code
4633-
that can run on both legacy AVX512 and AVX10/512 capable processors but cannot
4634-
run on AVX10/256, while a AVX512 macro like ``__AVX512F__`` cannot tell the
4635-
difference among the three options. Users need to check additional macros
4636-
``__AVX10_1__`` and ``__EVEX512__`` if they want to make distinction.
4587+
Users are supposed to use the new options ``-mavx10.N`` on these processors
4588+
and should not use traditional AVX512 options anymore. The ``N`` in
4589+
``-mavx10.N`` represents a continuous integer number starting
4590+
from ``1``. Current binaries built with AVX512 features can run on Intel AVX10
4591+
capable processors without re-compile.
46374592

46384593
ARM
46394594
^^^

0 commit comments

Comments
 (0)