xref: /llvm-project/llvm/benchmarks/xxhash.cpp (revision 90569e02e63ff5d0915446919f564e9b3638fe2a)
1*90569e02SDaniel Bertalan #include "llvm/Support/xxhash.h"
2*90569e02SDaniel Bertalan #include "benchmark/benchmark.h"
3*90569e02SDaniel Bertalan 
4*90569e02SDaniel Bertalan #include <memory>
5*90569e02SDaniel Bertalan 
6*90569e02SDaniel Bertalan static uint32_t xorshift(uint32_t State) {
7*90569e02SDaniel Bertalan   State ^= State << 13;
8*90569e02SDaniel Bertalan   State ^= State >> 17;
9*90569e02SDaniel Bertalan   State ^= State << 5;
10*90569e02SDaniel Bertalan   return State;
11*90569e02SDaniel Bertalan }
12*90569e02SDaniel Bertalan 
13*90569e02SDaniel Bertalan static void BM_xxh3_64bits(benchmark::State &State) {
14*90569e02SDaniel Bertalan   std::unique_ptr<uint32_t[]> Data(new uint32_t[State.range(0) / 4]);
15*90569e02SDaniel Bertalan 
16*90569e02SDaniel Bertalan   uint32_t Prev = 0xcafebabe;
17*90569e02SDaniel Bertalan   for (int64_t I = 0; I < State.range(0) / 4; I++)
18*90569e02SDaniel Bertalan     Data[I] = Prev = xorshift(Prev);
19*90569e02SDaniel Bertalan 
20*90569e02SDaniel Bertalan   llvm::ArrayRef DataRef =
21*90569e02SDaniel Bertalan       llvm::ArrayRef(reinterpret_cast<uint8_t *>(Data.get()), State.range(0));
22*90569e02SDaniel Bertalan 
23*90569e02SDaniel Bertalan   for (auto _ : State)
24*90569e02SDaniel Bertalan     llvm::xxh3_64bits(DataRef);
25*90569e02SDaniel Bertalan }
26*90569e02SDaniel Bertalan 
27*90569e02SDaniel Bertalan BENCHMARK(BM_xxh3_64bits)->Arg(32)->Arg(512)->Arg(64 * 1024)->Arg(1024 * 1024);
28*90569e02SDaniel Bertalan 
29*90569e02SDaniel Bertalan BENCHMARK_MAIN();
30