xref: /freebsd/contrib/llvm-project/compiler-rt/lib/tsan/benchmarks/func_entry_exit.cpp (revision dd41de95a84d979615a2ef11df6850622bf6184e)
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