Skip to content

Clang 18.1.5 errors on AVX vector return of type 'F' (aka 'Vec<16, float>') without 'evex512' enabled changes the ABI #91719

Closed
@FireBurn

Description

@FireBurn

This has affected compiling libreoffice and nodejs so far. Clang 18.1.3 built these packages fine, so I think the change was added in 18.1.4 or 18.1.5 - which seems strange as I'd expect only bug fixes

LibreOffice

[CUS] writerfilter/source
S=/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2 && I=$S/instdir && W=$S/workdir &&  mkdir -p $W/GenCxxObject/UnpackedTarball/skia/modules/skcms/ $W/Dep/GenCxxObject/UnpackedTarball/skia/modules/skcms/ && cd /var/tmp/portage
/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2 && CCACHE_CPP2=1       x86_64-pc-linux-gnu-clang++ -DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED -DCPPU_ENV=gcc3 -DLINUX -DNDEBUG -DOSL_DEBUG_LEVEL=0 -DUNIX -DUNX -DX86_64 -D_PTHR
EADS -D_REENTRANT  -DSKIA_IMPLEMENTATION=1 -DSKIA_DLL -DSK_USER_CONFIG_HEADER="<$S/config_host/config_skia.h>"  -DSK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE2 -DSK_ENABLE_SKSL_IN_RASTER_PIPELINE  -DSYSTEM_EXPAT  -DSYSTEM_ZLIB -DZLIB_CONST   -fvisibility=hidd
en         -Wall -Wno-missing-braces -Wendif-labels -Wextra -Wundef -Wunreachable-code -Wshadow -Wunused-macros -Wembedded-directive -finput-charset=UTF-8 -fmessage-length=0 -fno-common -pipe -fstack-protector-strong -Wdeprecated-copy-dtor -Wimplicit-f
allthrough -Wunused-exception-parameter -Wrange-loop-analysis -fvisibility-inlines-hidden -fPIC -Wshadow -Woverloaded-virtual -std=c++20 -pthread -O3 -pipe -march=native -O2 -fexceptions -O2 -w -DLIBO_INTERNAL_ONLY  -c $W/UnpackedTarball/skia/modules/s
kcms/skcms.cpp -o $W/GenCxxObject/UnpackedTarball/skia/modules/skcms/skcms.o  -I$S/include -I/opt/openjdk-bin-21.0.3_p9/include -I/opt/openjdk-bin-21.0.3_p9/include/linux -I$S/config_host     -isystem /usr/include/freetype2     -isystem /usr/include/fr
eetype2          -isystem /usr/include/libpng16  -I$W/UnpackedTarball/skia -I$W/UnpackedTarball/skia/modules/skcms/ -I$W/UnpackedTarball/skia/third_party/vulkanmemoryallocator/ -I$W/UnpackedTarball/skia/include/third_party/vulkan/ -I$S/external/skia/in
c/    
In file included from /var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/skcms.cpp:2470:
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:764:21: error: AVX vector return of type 'F' (aka 'Vec<16, float>') without 'evex512' enabled changes the ABI
  764 |                 a = F_from_U8(load<U8>(src + 1*i));
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:768:29: error: AVX vector return of type 'F' (aka 'Vec<16, float>') without 'evex512' enabled changes the ABI
  768 |                 r = g = b = F_from_U8(load<U8>(src + 1*i));
      |                             ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:774:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values
) without 'evex512' enabled changes the ABI
  774 |                 r = cast<F>((abgr >> 12) & 0xf) * (1/15.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:775:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values
) without 'evex512' enabled changes the ABI
  775 |                 g = cast<F>((abgr >>  8) & 0xf) * (1/15.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:776:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values
) without 'evex512' enabled changes the ABI
  776 |                 b = cast<F>((abgr >>  4) & 0xf) * (1/15.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:777:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values
) without 'evex512' enabled changes the ABI
  777 |                 a = cast<F>((abgr >>  0) & 0xf) * (1/15.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:783:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values
) without 'evex512' enabled changes the ABI
  783 |                 r = cast<F>(rgb & (uint16_t)(31<< 0)) * (1.0f / (31<< 0));
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:784:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values
) without 'evex512' enabled changes the ABI
  784 |                 g = cast<F>(rgb & (uint16_t)(63<< 5)) * (1.0f / (63<< 5));
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:785:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values
) without 'evex512' enabled changes the ABI
  785 |                 b = cast<F>(rgb & (uint16_t)(31<<11)) * (1.0f / (31<<11));
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:807:29: error: AVX vector return of type 'unsigned int __attribute__((ext_vector_type(16)))' (vector of 16 'unsign
ed int' values) without 'evex512' enabled changes the ABI
  807 |                 r = cast<F>(load_3<U32>(rgb+0) ) * (1/255.0f);
      |                             ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:807:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values
) without 'evex512' enabled changes the ABI
  807 |                 r = cast<F>(load_3<U32>(rgb+0) ) * (1/255.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:808:29: error: AVX vector return of type 'unsigned int __attribute__((ext_vector_type(16)))' (vector of 16 'unsign
ed int' values) without 'evex512' enabled changes the ABI
  808 |                 g = cast<F>(load_3<U32>(rgb+1) ) * (1/255.0f);
      |                             ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:808:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values) without 'evex512' enabled changes the ABI
  808 |                 g = cast<F>(load_3<U32>(rgb+1) ) * (1/255.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:809:29: error: AVX vector return of type 'unsigned int __attribute__((ext_vector_type(16)))' (vector of 16 'unsigned int' values) without 'evex512' enabled changes the ABI
  809 |                 b = cast<F>(load_3<U32>(rgb+2) ) * (1/255.0f);
      |                             ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:809:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values) without 'evex512' enabled changes the ABI
  809 |                 b = cast<F>(load_3<U32>(rgb+2) ) * (1/255.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:814:28: error: AVX vector return of type 'unsigned int __attribute__((ext_vector_type(16)))' (vector of 16 'unsigned int' values) without 'evex512' enabled changes the ABI
  814 |                 U32 rgba = load<U32>(src + 4*i);
      |                            ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:816:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values) without 'evex512' enabled changes the ABI
  816 |                 r = cast<F>((rgba >>  0) & 0xff) * (1/255.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:817:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values) without 'evex512' enabled changes the ABI
  817 |                 g = cast<F>((rgba >>  8) & 0xff) * (1/255.0f);
      |                     ^
/var/tmp/portage/app-office/libreoffice-24.2.3.2/work/libreoffice-24.2.3.2/workdir/UnpackedTarball/skia/modules/skcms/src/Transform_inl.h:818:21: error: AVX vector return of type 'float __attribute__((ext_vector_type(16)))' (vector of 16 'float' values) without 'evex512' enabled changes the ABI
  818 |                 b = cast<F>((rgba >> 16) & 0xff) * (1/255.0f);
      |                     ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]

Nodejs

FAILED: obj/deps/simdjson/simdjson.simdjson.o 
clang++ -MMD -MF obj/deps/simdjson/simdjson.simdjson.o.d -D_GLIBCXX_USE_CXX11_ABI=1 -DNODE_OPENSSL_CONF_NAME=nodejs_conf -DNODE_OPENSSL_CERT_STORE -DICU_NO_USER_DATA_OVERRIDE -D__STDC_FORMAT_MACROS -I../../deps/simdjson -pthread -Wall -Wextra -Wno-unus
ed-parameter -m64 -fno-omit-frame-pointer -O3 -pipe -march=native -fno-rtti -fno-exceptions -std=gnu++17  -c ../../deps/simdjson/simdjson.cpp -o obj/deps/simdjson/simdjson.simdjson.o
../../deps/simdjson/simdjson.cpp:20526:14: error: always_inline function '_mm512_loadu_si512' requires target feature 'evex512', but would be inlined into function 'load' that is compiled without support for 'evex512'
 20526 |       return _mm512_loadu_si512(reinterpret_cast<const __m512i *>(values));
       |              ^
../../deps/simdjson/simdjson.cpp:20526:14: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20526:14: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20652:51: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 20652 |     simdjson_inline simd8(const __m512i _value) : base8_numeric<uint8_t>(_value) {}
       |                                                   ^
../../deps/simdjson/simdjson.cpp:20546:59: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 20546 |     simdjson_inline base8_numeric(const __m512i _value) : base8<T>(_value) {}
       |                                                           ^
../../deps/simdjson/simdjson.cpp:20492:51: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 20492 |     simdjson_inline base8(const __m512i _value) : base<simd8<T>>(_value) {}
       |                                                   ^
../../deps/simdjson/simdjson.cpp:20717:52: error: always_inline function '_mm512_movepi8_mask' requires target feature 'evex512', but would be inlined into function 'is_ascii' that is compiled without support for 'evex512'
 20717 |     simdjson_inline bool is_ascii() const { return _mm512_movepi8_mask(*this) == 0; }
       |                                                    ^
../../deps/simdjson/simdjson.cpp:20717:52: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20473:71: error: always_inline function '_mm512_or_si512' requires target feature 'evex512', but would be inlined into function 'operator|' that is compiled without support for 'evex512'
 20473 |     simdjson_inline Child operator|(const Child other) const { return _mm512_or_si512(*this, other); }
       |                                                                       ^
../../deps/simdjson/simdjson.cpp:20473:71: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20473:71: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20504:14: error: '__builtin_ia32_palignr512' needs target feature avx512bw,evex512
 20504 |       return _mm512_alignr_epi8(*this, _mm512_permutex2var_epi64(prev_chunk, _mm512_set_epi64(13, 12, 11, 10, 9, 8, 7, 6), *this), shift);
       |              ^
/usr/lib/llvm/18/bin/../../../../lib/clang/18/include/avx512bwintrin.h:1977:13: note: expanded from macro '_mm512_alignr_epi8'
 1977 |   ((__m512i)__builtin_ia32_palignr512((__v64qi)(__m512i)(A), \
      |             ^
../../deps/simdjson/simdjson.cpp:20504:78: error: always_inline function '_mm512_set_epi64' requires target feature 'evex512', but would be inlined into function 'prev' that is compiled without support for 'evex512'
 20504 |       return _mm512_alignr_epi8(*this, _mm512_permutex2var_epi64(prev_chunk, _mm512_set_epi64(13, 12, 11, 10, 9, 8, 7, 6), *this), shift);
       |                                                                              ^
../../deps/simdjson/simdjson.cpp:20504:78: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20504:40: error: always_inline function '_mm512_permutex2var_epi64' requires target feature 'evex512', but would be inlined into function 'prev' that is compiled without support for 'evex512'
 20504 |       return _mm512_alignr_epi8(*this, _mm512_permutex2var_epi64(prev_chunk, _mm512_set_epi64(13, 12, 11, 10, 9, 8, 7, 6), *this), shift);
       |                                        ^
../../deps/simdjson/simdjson.cpp:20504:40: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20504:14: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 20504 |       return _mm512_alignr_epi8(*this, _mm512_permutex2var_epi64(prev_chunk, _mm512_set_epi64(13, 12, 11, 10, 9, 8, 7, 6), *this), shift);
       |              ^
/usr/lib/llvm/18/bin/../../../../lib/clang/18/include/avx512bwintrin.h:1977:3: note: expanded from macro '_mm512_alignr_epi8'
 1977 |   ((__m512i)__builtin_ia32_palignr512((__v64qi)(__m512i)(A), \
      |   ^
../../deps/simdjson/simdjson.cpp:20725:72: error: always_inline function '_mm512_srli_epi16' requires target feature 'evex512', but would be inlined into function 'shr' that is compiled without support for 'evex512'
 20725 |     simdjson_inline simd8<uint8_t> shr() const { return simd8<uint8_t>(_mm512_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); }
       |                                                                        ^
../../deps/simdjson/simdjson.cpp:20725:72: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
[229/1894] clang -MMD -MF obj/deps/llhttp/src/llhttp.llhttp.o.d -D_GLIBCXX_USE_CXX11_ABI=1 -DNODE_OPENSSL_CONF_NAME=nodejs_conf -DNODE_OPENSSL_CERT_STORE -DICU_NO_USER_DATA_OVERRIDE -D__STDC_FORMAT_MACROS -I../../deps/llhttp -I../../deps/llhttp/include -pthread -Wall -Wextra -Wno-unused-parameter -m64 -fno-omit-frame-pointer -O3 -pipe -march=native  -c ../../deps/llhttp/src/llhttp.c -o obj/deps/llhttp/src/llhttp.llhttp.o
../../deps/llhttp/src/llhttp.c:2635:13: warning: unused variable 'avail' [-Wunused-variable]
 2635 |         int avail;
      |             ^~~~~
../../deps/llhttp/src/llhttp.c:2865:13: warning: unused variable 'avail' [-Wunused-variable]
 2865 |         int avail;
      |             ^~~~~
2 warnings generated.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions