brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 04ec938 Raw
70 lines · plain
1#include <cstdint>2 3#include "benchmark/benchmark.h"4 5namespace {6#if defined(__GNUC__)7std::int64_t double_up(const std::int64_t x) __attribute__((const));8#endif9std::int64_t double_up(const std::int64_t x) { return x * 2; }10}  // namespace11 12// Using DoNotOptimize on types like BitRef seem to cause a lot of problems13// with the inline assembly on both GCC and Clang.14struct BitRef {15  int index;16  unsigned char& byte;17 18 public:19  static BitRef Make() {20    static unsigned char arr[2] = {};21    BitRef b(1, arr[0]);22    return b;23  }24 25 private:26  BitRef(int i, unsigned char& b) : index(i), byte(b) {}27};28 29int main(int, char*[]) {30  // this test verifies compilation of DoNotOptimize() for some types31 32  char buffer1[1] = "";33  benchmark::DoNotOptimize(buffer1);34 35  char buffer2[2] = "";36  benchmark::DoNotOptimize(buffer2);37 38  char buffer3[3] = "";39  benchmark::DoNotOptimize(buffer3);40 41  char buffer8[8] = "";42  benchmark::DoNotOptimize(buffer8);43 44  char buffer20[20] = "";45  benchmark::DoNotOptimize(buffer20);46 47  char buffer1024[1024] = "";48  benchmark::DoNotOptimize(buffer1024);49  char* bptr = &buffer1024[0];50  benchmark::DoNotOptimize(bptr);51 52  int x = 123;53  benchmark::DoNotOptimize(x);54  int* xp = &x;55  benchmark::DoNotOptimize(xp);56  benchmark::DoNotOptimize(x += 42);57 58  std::int64_t y = double_up(x);59  benchmark::DoNotOptimize(y);60 61  // These tests are to e62  BitRef lval = BitRef::Make();63  benchmark::DoNotOptimize(lval);64 65#ifdef BENCHMARK_HAS_CXX1166  // Check that accept rvalue.67  benchmark::DoNotOptimize(BitRef::Make());68#endif69}70