[X86] Target feature implication mismatch with GCC · Issue #136209 · llvm/llvm-project (original) (raw)

There is a mismatch between which other features avx512f and avx512fp16 imply.

For avx512f, GCC implies only avx2, where LLVM also implies fma and f16c(see here).
Also for avx512fp16, GCC implies only avx512bw, where LLVM also implies avx512dq and avx512vl (see here).

gcc -mavx512f -Q --help=target | grep enabled

  -m128bit-long-double                  [enabled]
  -m64                                  [enabled]
  -m80387                               [enabled]
  -malign-stringops                     [enabled]
  -mavx                                 [enabled]
  -mavx2                                [enabled]
  -mavx512f                             [enabled]
  -mcrc32                               [enabled]
  -mdirect-extern-access                [enabled]
  -mevex512                             [enabled]
  -mfancy-math-387                      [enabled]
  -mfp-ret-in-387                       [enabled]
  -mfxsr                                [enabled]
  -mglibc                               [enabled]
  -mhard-float                          [enabled]
  -mieee-fp                             [enabled]
  -mlong-double-80                      [enabled]
  -mmmx                                 [enabled]
  -mmwait                               [enabled]
  -mpartial-vector-fp-math              [enabled]
  -mpopcnt                              [enabled]
  -mpush-args                           [enabled]
  -mred-zone                            [enabled]
  -msse                                 [enabled]
  -msse2                                [enabled]
  -msse3                                [enabled]
  -msse4                                [enabled]
  -msse4.1                              [enabled]
  -msse4.2                              [enabled]
  -mssse3                               [enabled]
  -mstv                                 [enabled]
  -mtls-direct-seg-refs                 [enabled]
  -mxsave                               [enabled]

gcc -mavx512fp16 -Q --help=target | grep enabled

  -m128bit-long-double                  [enabled]
  -m64                                  [enabled]
  -m80387                               [enabled]
  -malign-stringops                     [enabled]
  -mavx                                 [enabled]
  -mavx2                                [enabled]
  -mavx512bw                            [enabled]
  -mavx512f                             [enabled]
  -mavx512fp16                          [enabled]
  -mcrc32                               [enabled]
  -mdirect-extern-access                [enabled]
  -mevex512                             [enabled]
  -mfancy-math-387                      [enabled]
  -mfp-ret-in-387                       [enabled]
  -mfxsr                                [enabled]
  -mglibc                               [enabled]
  -mhard-float                          [enabled]
  -mieee-fp                             [enabled]
  -mlong-double-80                      [enabled]
  -mmmx                                 [enabled]
  -mmwait                               [enabled]
  -mpartial-vector-fp-math              [enabled]
  -mpopcnt                              [enabled]
  -mpush-args                           [enabled]
  -mred-zone                            [enabled]
  -msse                                 [enabled]
  -msse2                                [enabled]
  -msse3                                [enabled]
  -msse4                                [enabled]
  -msse4.1                              [enabled]
  -msse4.2                              [enabled]
  -mssse3                               [enabled]
  -mstv                                 [enabled]
  -mtls-direct-seg-refs                 [enabled]
  -mxsave                               [enabled]

gcc --version

gcc (GCC) 14.2.1 20250207
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

I do not know what Intel specifies about implies features, but I believe this mismatch needs to be corrected.

related: rust-lang/rust#138940
related: rust-lang/rust#111137