Я могу воспроизвести его с помощью clang6.0 (mainline, а не версии Apple) на Godbolt (https://godbolt.org/z/d-mnAy),, но не clang7.0.
Возможно, это ошибка, но Intel перечисляет _mm512_maskz_set1_epi64
в качестве встроенного для vpbroadcastq zmm {k}, r64
, который, очевидно, доступен только в 64-битном режиме.
Конечно, это глупо, и vpbroadcastq
с источником памяти или xmm по-прежнемудоступны в 32-битном режиме. Последние версии clang, которые поддерживают его в 32-битном режиме, компилируют этот код в не широковещательную загрузку векторной константы, даже в 64-битном режиме:
#include <immintrin.h>
__m512i foo() {
return _mm512_maskz_set1_epi64(0xf0, 123);
}
Но clang5.0 и старше компилирует это так в 64-битном режиме, хотя:
foo: # @foo
mov al, -16
kmovd k1, eax
mov eax, 123
vpbroadcastq zmm0 {k1} {z}, rax
ret
И clang 5.0 -m32 выдает внутреннюю ошибку компилятора.
Я неу вас есть Mac, чтобы попробовать настоящий Xcode, но совершенно очевидно, что некоторые версии clang / LLVM рассматривают _mm512_maskz_set1_epi64
и _mm512_set1_epi64
только как 64-битный режим. Вы можете определить свой собственный для 32-битного режима, используяте же встроенные модули, что и заголовки.