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