ronlieb wrote:

> @ronlieb Do you have a reproducer for this problem? I just checked the 
> definition of both intrinsics have `no-evex512` already, so shouldn't have 
> such problem. You can use -mno-evex512 as workaround for the problem anyway.

here is a small reproducer   , compile with 
clang++ -c fd_log_scalar.cpp  -mtune=skylake-avx512 -march=skylake-avx512 
-D_CPU=avx512

produces error : 
lib/clang/18/include/avx512fintrin.h:5493:41: error: always_inline function 
'_mm_setzero_pd' requires target feature 'evex512', but would be inlined into 
function '_mm_getexp_sd' that is compiled without support for 'evex512'
 5493 |                  (__v2df) __B, (__v2df) _mm_setzero_pd(), (__mmask8) 
-1, _MM_FROUND_CUR_DIRECTION);
      |                                         ^
1 error generated.


#include <immintrin.h>

#if !(defined _CPU)
#error: please define _CPU - specific suffix to a function name
#endif

extern "C" double log_d_scalar(double);

double __attribute__ ((noinline)) log_d_scalar(double a_input)
{
    __m128d va, vm, ve, vb;
    double a, m, e, b, t;
    long long  mu, eu;


#ifdef __AVX512F__
    va = _mm_set_sd(a_input);
    vm = _mm_getmant_sd(va, va, _MM_MANT_NORM_p75_1p5, _MM_MANT_SIGN_nan);
    ve = _mm_getexp_sd(va, va);
    vb = _mm_getexp_sd(vm, vm);
    ve = _mm_sub_sd(ve, vb);
    m = _mm_cvtsd_f64(vm);
    e = _mm_cvtsd_f64(ve);
#endif
    return m + e;
}



https://github.com/llvm/llvm-project/pull/71318
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to