Skip to content

Compile failure in simdjson using GCC 14 or clang 18.1 (Node 20.12.1 - 22.1.0) #52876

Closed
@FireBurn

Description

Version

20.12.1 - 22.1.0

Platform

Gentoo with GCC 14 or clang 18.1.

Subsystem

simdjson

What steps will reproduce the bug?

This didn't happen with node 20.12.1 which used the older simd (Comments indicate that the build issue is present with earlier versions of Node)

FAILED: obj/deps/simdutf/simdutf.simdutf.o 
clang++ -MMD -MF obj/deps/simdutf/simdutf.simdutf.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/simdutf -pthread -Wall -Wextra -Wno-unused-parameter -m64 -fno-omit-frame-pointer -O3 -pipe -march=native -fno-rtti -fno-exceptions -std=gnu++17  -c ../../deps/simdutf/simdutf.cpp -o obj/deps/simdutf/simdutf.simdutf.o
../../deps/simdutf/simdutf.cpp:23203:26: error: always_inline function '_mm512_setzero_si512' requires target feature 'evex512', but would be inlined into function 'detect_encodings' that is compiled without support for 'evex512'
 23203 |     __m512i currentmax = _mm512_setzero_si512();
       |                          ^
../../deps/simdutf/simdutf.cpp:23203:26: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdutf/simdutf.cpp:23205:20: error: always_inline function '_mm512_loadu_si512' requires target feature 'evex512', but would be inlined into function 'detect_encodings' that is compiled without support for 'evex512'
 23205 |       __m512i in = _mm512_loadu_si512((__m512i *)buf);
       |                    ^
../../deps/simdutf/simdutf.cpp:23205:20: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdutf/simdutf.cpp:23206:43: error: always_inline function '_mm512_set1_epi16' requires target feature 'evex512', but would be inlined into function 'detect_encodings' that is compiled without support for 'evex512'
 23206 |       __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800)));
       |                                           ^
../../deps/simdutf/simdutf.cpp:23206:43: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdutf/simdutf.cpp:23206:22: error: always_inline function '_mm512_sub_epi16' requires target feature 'evex512', but would be inlined into function 'detect_encodings' that is compiled without support for 'evex512'
 23206 |       __m512i diff = _mm512_sub_epi16(in, _mm512_set1_epi16(uint16_t(0xD800)));
       |                      ^
../../deps/simdutf/simdutf.cpp:23206:22: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdutf/simdutf.cpp:23208:11: error: '__builtin_ia32_ucmpw512_mask' needs target feature avx512bw,evex512
 23208 |           _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800)));
       |           ^
/usr/lib/llvm/18/bin/../../../../lib/clang/18/include/avx512bwintrin.h:357:5: note: expanded from macro '_mm512_cmplt_epu16_mask'
  357 |     _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_LT)
      |     ^
/usr/lib/llvm/18/bin/../../../../lib/clang/18/include/avx512bwintrin.h:256:15: note: expanded from macro '_mm512_cmp_epu16_mask'
  256 |   ((__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \
      |               ^
../../deps/simdutf/simdutf.cpp:23208:41: error: always_inline function '_mm512_set1_epi16' requires target feature 'evex512', but would be inlined into function 'detect_encodings' that is compiled without support for 'evex512'
 23208 |           _mm512_cmplt_epu16_mask(diff, _mm512_set1_epi16(uint16_t(0x0800)));
       |                                         ^
../../deps/simdutf/simdutf.cpp:23208:41: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdutf/simdutf.cpp:23222:38: error: '__builtin_ia32_ucmpw512_mask' needs target feature avx512bw,evex512
 23222 |           __mmask32 highsurrogates = _mm512_cmplt_epu16_mask(
       |                                      ^
/usr/lib/llvm/18/bin/../../../../lib/clang/18/include/avx512bwintrin.h:357:5: note: expanded from macro '_mm512_cmplt_epu16_mask'
  357 |     _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_LT)
      |     ^
/usr/lib/llvm/18/bin/../../../../lib/clang/18/include/avx512bwintrin.h:256:15: note: expanded from macro '_mm512_cmp_epu16_mask'
  256 |   ((__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \
      |               ^
../../deps/simdutf/simdutf.cpp:23223:21: error: always_inline function '_mm512_set1_epi16' requires target feature 'evex512', but would be inlined into function 'detect_encodings' that is compiled without support for 'evex512'
 23223 |               diff, _mm512_set1_epi16(uint16_t(0x0400)));
       |                     ^
../../deps/simdutf/simdutf.cpp:23223:21: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdutf/simdutf.cpp:23265:20: error: always_inline function '_mm512_max_epu32' requires target feature 'evex512', but would be inlined into function 'detect_encodings' that is compiled without support for 'evex512'
 23265 |       currentmax = _mm512_max_epu32(in, currentmax);
       |                    ^
../../deps/simdutf/simdutf.cpp:23265:20: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdutf/simdutf.cpp:23268:15: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 23268 |       checker.check_next_input(in);
       |               ^
../../deps/simdutf/simdutf.cpp:23278:30: error: always_inline function '_mm512_maskz_loadu_epi8' requires target feature 'evex512', but would be inlined into function 'detect_encodings' that is compiled without support for 'evex512'
 23278 |         const __m512i utf8 = _mm512_maskz_loadu_epi8(
       |                              ^
../../deps/simdutf/simdutf.cpp:23278:30: error: AVX vector return 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.
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-unused-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:20344: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'
 20344 |       return _mm512_loadu_si512(reinterpret_cast<const __m512i *>(values));
       |              ^
../../deps/simdjson/simdjson.cpp:20344:14: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20344: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:20470:51: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 20470 |     simdjson_inline simd8(const __m512i _value) : base8_numeric<uint8_t>(_value) {}
       |                                                   ^
../../deps/simdjson/simdjson.cpp:20364:59: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 20364 |     simdjson_inline base8_numeric(const __m512i _value) : base8<T>(_value) {}
       |                                                           ^
../../deps/simdjson/simdjson.cpp:20310:51: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 20310 |     simdjson_inline base8(const __m512i _value) : base<simd8<T>>(_value) {}
       |                                                   ^
../../deps/simdjson/simdjson.cpp:20535: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'
 20535 |     simdjson_inline bool is_ascii() const { return _mm512_movepi8_mask(*this) == 0; }
       |                                                    ^
../../deps/simdjson/simdjson.cpp:20535:52: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20291: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'
 20291 |     simdjson_inline Child operator|(const Child other) const { return _mm512_or_si512(*this, other); }
       |                                                                       ^
../../deps/simdjson/simdjson.cpp:20291:71: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20291: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:20322:14: error: '__builtin_ia32_palignr512' needs target feature avx512bw,evex512
 20322 |       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:20322: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'
 20322 |       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:20322:78: error: AVX vector return of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20322: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'
 20322 |       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:20322:40: error: AVX vector argument of type '__m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
../../deps/simdjson/simdjson.cpp:20322:14: error: AVX vector argument of type 'const __m512i' (vector of 8 'long long' values) without 'evex512' enabled changes the ABI
 20322 |       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:20543: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'
 20543 |     simdjson_inline simd8<uint8_t> shr() const { return simd8<uint8_t>(_mm512_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); }
       |                                                                        ^
../../deps/simdjson/simdjson.cpp:20543: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.

How often does it reproduce? Is there a required condition?

No response

What is the expected behavior? Why is that the expected behavior?

No response

What do you see instead?

Compile failure

Additional information

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    buildIssues and PRs related to build files or the CI.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions