"Fossies" - the Fresh Open Source Software Archive

Member "ponyc-0.33.0/lib/gbenchmark/test/donotoptimize_test.cc" (1 Nov 2019, 1233 Bytes) of package /linux/misc/ponyc-0.33.0.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 #include "benchmark/benchmark.h"
    2 
    3 #include <cstdint>
    4 
    5 namespace {
    6 #if defined(__GNUC__)
    7 std::uint64_t double_up(const std::uint64_t x) __attribute__((const));
    8 #endif
    9 std::uint64_t double_up(const std::uint64_t x) { return x * 2; }
   10 }
   11 
   12 // Using DoNotOptimize on types like BitRef seem to cause a lot of problems
   13 // with the inline assembly on both GCC and Clang.
   14 struct 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 private:
   25   BitRef(int i, unsigned char& b) : index(i), byte(b) {}
   26 };
   27 
   28 int main(int, char*[]) {
   29   // this test verifies compilation of DoNotOptimize() for some types
   30 
   31   char buffer8[8] = "";
   32   benchmark::DoNotOptimize(buffer8);
   33 
   34   char buffer20[20] = "";
   35   benchmark::DoNotOptimize(buffer20);
   36 
   37   char buffer1024[1024] = "";
   38   benchmark::DoNotOptimize(buffer1024);
   39   benchmark::DoNotOptimize(&buffer1024[0]);
   40 
   41   int x = 123;
   42   benchmark::DoNotOptimize(x);
   43   benchmark::DoNotOptimize(&x);
   44   benchmark::DoNotOptimize(x += 42);
   45 
   46   benchmark::DoNotOptimize(double_up(x));
   47 
   48   // These tests are to e
   49   benchmark::DoNotOptimize(BitRef::Make());
   50   BitRef lval = BitRef::Make();
   51   benchmark::DoNotOptimize(lval);
   52 }