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(x: 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 |