https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91520

            Bug ID: 91520
           Summary: AVX512 target assembler fails for x86_64 Darwin
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: iains at gcc dot gnu.org
  Target Milestone: ---

The following tests have failed since their introduction on Darwin targets that
have vector instruction support.

-m32
FAIL: gcc.target/i386/avx512vl-vcvtpd2dq-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vcvtpd2ps-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vcvtpd2udq-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vcvtqq2ps-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vcvttpd2dq-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vcvttpd2udq-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vcvtuqq2ps-2.c (test for excess errors)

-m64
FAIL: gcc.target/i386/avx512vl-vcvtpd2dq-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vcvtpd2udq-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vfpclasspd-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512vl-vfpclassps-2.c (test for excess errors)

The reason is that the assembler (where it supports AVX) is based on the LLVM
backend, which did not support the use of the 'x', 'y' and 'z' markers on
instructions when the inns do not require them letters to disambiguate.

[ when the instruction includes a memory access, then it *is* necessary to use
the letter to disambiguate ].

GAS allows the markers on all the insn variants and GCC emits them.

As of LLVM 9.x the LLVM backend has been changed to match what GAS does - but
clearly (a) that will take some time to appear in Xcode (which most Darwin
folks are using as their 'binutils').  It will also never be made
retrospectively available to existing earlier Darwin versions.

There are two potential solutions:

1) Arrange that GCC doesn't emit this variant;
(either unilaterally, or under some configure-determined flag that determines
the required support).  I have a prototype patch that can do the change, at
least.

2) require that folks on Darwin use patched "binutils" (such as the 'xtools' I
maintain).

Reply via email to