xref: /freebsd-src/contrib/llvm-project/compiler-rt/lib/tsan/benchmarks/func_entry_exit.cpp (revision 84943d6f38e936ac3b7a3947ca26eeb27a39f938)
1 // Synthetic benchmark for __tsan_func_entry/exit (spends ~75% there).
2 
3 void foo(bool x);
4 
5 int main() {
6   volatile int kRepeat1 = 1 << 30;
7   const int kRepeat = kRepeat1;
8   for (int i = 0; i < kRepeat; i++)
9     foo(false);
10 }
11 
12 __attribute__((noinline)) void bar(volatile bool x) {
13   if (x)
14     foo(x);
15 }
16 
17 __attribute__((noinline)) void foo(bool x) {
18   if (__builtin_expect(x, false))
19     bar(x);
20 }
21