diff --git a/simde/simde-common.h b/simde/simde-common.h index db991aa43..31889b492 100644 --- a/simde/simde-common.h +++ b/simde/simde-common.h @@ -1159,6 +1159,9 @@ HEDLEY_DIAGNOSTIC_POP # if HEDLEY_HAS_WARNING("-Wvector-conversion") && SIMDE_DETECT_CLANG_VERSION_NOT(11,0,0) # define SIMDE_BUG_CLANG_44589 # endif +# if SIMDE_DETECT_CLANG_VERSION_CHECK(21,1,1) +# define SIMDE_BUG_CLANG_179057 +# endif # define SIMDE_BUG_CLANG_48673 // https://github.com/llvm/llvm-project/issues/48017 # endif # define SIMDE_BUG_CLANG_45959 // https://github.com/llvm/llvm-project/issues/45304 diff --git a/simde/simde-detect-clang.h b/simde/simde-detect-clang.h index f00c93358..dfbb61ff4 100644 --- a/simde/simde-detect-clang.h +++ b/simde/simde-detect-clang.h @@ -65,7 +65,11 @@ # elif __has_builtin(__builtin_elementwise_fshl) # define SIMDE_DETECT_CLANG_VERSION 220000 # elif __has_builtin(__builtin_structured_binding_size) -# define SIMDE_DETECT_CLANG_VERSION 210000 +# if __clang_major__ == 21 && __clang_minor__ >= 1 && __clang_patchlevel__ >= 1 +# define SIMDE_DETECT_CLANG_VERSION 210101 // for SIMDE_BUG_CLANG_179057 +# else +# define SIMDE_DETECT_CLANG_VERSION 210000 +# endif # elif __has_warning("-Warray-compare-cxx26") # define SIMDE_DETECT_CLANG_VERSION 200000 # elif __has_warning("-Wmissing-designated-field-initializers") @@ -129,8 +133,8 @@ * such as pragmas to disable a specific warning. */ #if defined(SIMDE_DETECT_CLANG_VERSION) -# define SIMDE_DETECT_CLANG_VERSION_CHECK(major, minor, revision) (SIMDE_DETECT_CLANG_VERSION >= ((major * 10000) + (minor * 1000) + (revision))) -# define SIMDE_DETECT_CLANG_VERSION_NOT(major, minor, revision) (SIMDE_DETECT_CLANG_VERSION < ((major * 10000) + (minor * 1000) + (revision))) +# define SIMDE_DETECT_CLANG_VERSION_CHECK(major, minor, revision) (SIMDE_DETECT_CLANG_VERSION >= ((major * 10000) + (minor * 100) + (revision))) +# define SIMDE_DETECT_CLANG_VERSION_NOT(major, minor, revision) (SIMDE_DETECT_CLANG_VERSION < ((major * 10000) + (minor * 100) + (revision))) #else # define SIMDE_DETECT_CLANG_VERSION_CHECK(major, minor, revision) (0) # define SIMDE_DETECT_CLANG_VERSION_NOT(major, minor, revision) (0) diff --git a/simde/x86/avx512/fixupimm.h b/simde/x86/avx512/fixupimm.h index 2ea234bd9..df439fc1e 100644 --- a/simde/x86/avx512/fixupimm.h +++ b/simde/x86/avx512/fixupimm.h @@ -430,7 +430,7 @@ simde_mm_fixupimm_ss (simde__m128 a, simde__m128 b, simde__m128i c, int imm8) #define _mm_fixupimm_ss(a, b, c, imm8) simde_mm_fixupimm_ss(a, b, c, imm8) #endif -#if defined(SIMDE_X86_AVX512F_NATIVE) +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_BUG_CLANG_179057) #define simde_mm_mask_fixupimm_ss(a, k, b, c, imm8) _mm_mask_fixupimm_ss(a, k, b, c, imm8) #else #define simde_mm_mask_fixupimm_ss(a, k, b, c, imm8) simde_mm_mask_mov_ps(a, ((k) | 14), simde_mm_fixupimm_ss(a, b, c, imm8)) @@ -440,7 +440,7 @@ simde_mm_fixupimm_ss (simde__m128 a, simde__m128 b, simde__m128i c, int imm8) #define _mm_mask_fixupimm_ss(a, k, b, c, imm8) simde_mm_mask_fixupimm_ss(a, k, b, c, imm8) #endif -#if defined(SIMDE_X86_AVX512F_NATIVE) +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_BUG_CLANG_179057) #define simde_mm_maskz_fixupimm_ss(k, a, b, c, imm8) _mm_maskz_fixupimm_ss(k, a, b, c, imm8) #else #define simde_mm_maskz_fixupimm_ss(k, a, b, c, imm8) simde_mm_maskz_mov_ps(((k) | 14), simde_mm_fixupimm_ss(a, b, c, imm8)) @@ -874,7 +874,7 @@ simde_mm_fixupimm_sd (simde__m128d a, simde__m128d b, simde__m128i c, int imm8) #define _mm_fixupimm_sd(a, b, c, imm8) simde_mm_fixupimm_sd(a, b, c, imm8) #endif -#if defined(SIMDE_X86_AVX512F_NATIVE) +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_BUG_CLANG_179057) #define simde_mm_mask_fixupimm_sd(a, k, b, c, imm8) _mm_mask_fixupimm_sd(a, k, b, c, imm8) #else #define simde_mm_mask_fixupimm_sd(a, k, b, c, imm8) simde_mm_mask_mov_pd(a, ((k) | 2), simde_mm_fixupimm_sd(a, b, c, imm8)) @@ -884,7 +884,7 @@ simde_mm_fixupimm_sd (simde__m128d a, simde__m128d b, simde__m128i c, int imm8) #define _mm_mask_fixupimm_sd(a, k, b, c, imm8) simde_mm_mask_fixupimm_sd(a, k, b, c, imm8) #endif -#if defined(SIMDE_X86_AVX512F_NATIVE) +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_BUG_CLANG_179057) #define simde_mm_maskz_fixupimm_sd(k, a, b, c, imm8) _mm_maskz_fixupimm_sd(k, a, b, c, imm8) #else #define simde_mm_maskz_fixupimm_sd(k, a, b, c, imm8) simde_mm_maskz_mov_pd(((k) | 2), simde_mm_fixupimm_sd(a, b, c, imm8)) diff --git a/simde/x86/avx512/fixupimm_round.h b/simde/x86/avx512/fixupimm_round.h index 636b82a84..905bc768a 100644 --- a/simde/x86/avx512/fixupimm_round.h +++ b/simde/x86/avx512/fixupimm_round.h @@ -401,7 +401,7 @@ SIMDE_BEGIN_DECLS_ #define _mm_fixupimm_round_ss(a, b, c, imm8, sae) simde_mm_fixupimm_round_ss(a, b, c, imm8, sae) #endif -#if defined(SIMDE_X86_AVX512F_NATIVE) +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_BUG_CLANG_179057) #define simde_mm_mask_fixupimm_round_ss(a, k, b, c, imm8, sae) _mm_mask_fixupimm_round_ss(a, k, b, c, imm8, sae) #elif defined(SIMDE_FAST_EXCEPTIONS) #define simde_mm_mask_fixupimm_round_ss(a, k, b, c, imm8, sae) simde_mm_mask_fixupimm_ss(a, k, b, c, imm8) @@ -457,7 +457,7 @@ SIMDE_BEGIN_DECLS_ #define _mm_mask_fixupimm_round_ss(a, k, b, c, imm8, sae) simde_mm_mask_fixupimm_round_ss(a, k, b, c, imm8, sae) #endif -#if defined(SIMDE_X86_AVX512F_NATIVE) +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_BUG_CLANG_179057) #define simde_mm_maskz_fixupimm_round_ss(k, a, b, c, imm8, sae) _mm_maskz_fixupimm_round_ss(k, a, b, c, imm8, sae) #elif defined(SIMDE_FAST_EXCEPTIONS) #define simde_mm_maskz_fixupimm_round_ss(k, a, b, c, imm8, sae) simde_mm_maskz_fixupimm_ss(k, a, b, c, imm8) @@ -569,7 +569,7 @@ SIMDE_BEGIN_DECLS_ #define _mm_fixupimm_round_sd(a, b, c, imm8, sae) simde_mm_fixupimm_round_sd(a, b, c, imm8, sae) #endif -#if defined(SIMDE_X86_AVX512F_NATIVE) +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_BUG_CLANG_179057) #define simde_mm_mask_fixupimm_round_sd(a, k, b, c, imm8, sae) _mm_mask_fixupimm_round_sd(a, k, b, c, imm8, sae) #elif defined(SIMDE_FAST_EXCEPTIONS) #define simde_mm_mask_fixupimm_round_sd(a, k, b, c, imm8, sae) simde_mm_mask_fixupimm_sd(a, k, b, c, imm8) @@ -625,7 +625,7 @@ SIMDE_BEGIN_DECLS_ #define _mm_mask_fixupimm_round_sd(a, k, b, c, imm8, sae) simde_mm_mask_fixupimm_round_sd(a, k, b, c, imm8, sae) #endif -#if defined(SIMDE_X86_AVX512F_NATIVE) +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_BUG_CLANG_179057) #define simde_mm_maskz_fixupimm_round_sd(k, a, b, c, imm8, sae) _mm_maskz_fixupimm_round_sd(k, a, b, c, imm8, sae) #elif defined(SIMDE_FAST_EXCEPTIONS) #define simde_mm_maskz_fixupimm_round_sd(k, a, b, c, imm8, sae) simde_mm_maskz_fixupimm_sd(k, a, b, c, imm8)