Hi,according to the doc (https://releases.llvm.org/7.0.0/docs/Vectorizers.html) floor, sin, cos should be vectorized.
I can confirm (using the great https://gcc.godbolt.org/ tool) that using the flags "-Ofast -mavx2 -fopenmp -ffast-math" the right avx2 opcode (vroundps) is emited for floor (in foo), but unfortunately not for sin, cos or exp (e.g. see sin in bar below).
GCC 8.1+ and the Intel Compiler icc 13+ insert call to vectorized implementations (_ZGVbN4v_sinf or __svml_sinf4 ), but clang seems to have nothing like this.
Here is my small testcode: #include<cmath> voidfoo(float* __restrict__attribute((aligned(32))) x , float* __restrict__attribute((aligned(32))) y) { for(inti = 0; i < 4; ++i) y[i] = floor(x[i]); } voidbar(float* __restrict__attribute((aligned(32))) x , float* __restrict__attribute((aligned(32))) y) { for(inti = 0; i < 4; ++i) y[i] = sin(x[i]); }I have reproduced this behavior on different machines. Maybe I am doing s.th. wrong here, but it seems like there is no vectorized implementation for sin, cos etc. I am using h2lib for now (http://h2lib.org/doc/d1/d89/simd__avx_8h_source.html) as a workaround, but I expect clang to do this job.
Can anybody comment on this please? Cheers Klaus
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users