Skip to content

Instantly share code, notes, and snippets.

@alexey-milovidov
Created October 24, 2020 08:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexey-milovidov/84ca8bac1b15971ce5ec6012067eec88 to your computer and use it in GitHub Desktop.
Save alexey-milovidov/84ca8bac1b15971ce5ec6012067eec88 to your computer and use it in GitHub Desktop.
Clang failed to vectorize the following code:
milovidov@milovidov-desktop:~/work/ClickHouse$ cat xors.cpp
#include <cstddef>
#include <vector>
__attribute__((__noinline__))
void xor10arrays(
const char8_t * arr0,
const char8_t * arr1,
const char8_t * arr2,
const char8_t * arr3,
const char8_t * arr4,
const char8_t * arr5,
const char8_t * arr6,
const char8_t * arr7,
const char8_t * arr8,
const char8_t * arr9,
char8_t * res,
size_t size)
{
for (size_t i = 0; i < size; ++i)
{
res[i] = (((((((((
arr0[i]
!= arr1[i])
!= arr2[i])
!= arr3[i])
!= arr4[i])
!= arr5[i])
!= arr6[i])
!= arr7[i])
!= arr8[i])
!= arr9[i]);
}
}
int main(int, char **)
{
size_t size = 65536;
std::vector<char8_t> data(size * 11);
size_t res = 0;
for (size_t i = 0; i < 10000; ++i)
{
xor10arrays(
&data[0],
&data[size],
&data[size * 2],
&data[size * 3],
&data[size * 4],
&data[size * 5],
&data[size * 6],
&data[size * 7],
&data[size * 8],
&data[size * 9],
&data[size * 10],
size);
res += data[size * 10];
}
return res;
}
milovidov@milovidov-desktop:~/work/ClickHouse$ g++-9 -std=c++2a -O3 -g -msse4.2 xors.cpp && time ./a.out
real 0m0,591s
user 0m0,586s
sys 0m0,004s
milovidov@milovidov-desktop:~/work/ClickHouse$ clang++-10 -std=c++2a -O3 -g -msse4.2 xors.cpp && time ./a.out
real 0m2,403s
user 0m2,402s
sys 0m0,000s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment