1// REQUIRES: continuous-mode
2
3// RUN: rm -rf %t.dir
4// RUN: %clangxx_pgogen=%t.dir -fprofile-continuous -lpthread %s -o %t.exe -mllvm -disable-vp -fprofile-update=atomic
5// RUN: %run %t.exe
6// RUN: llvm-profdata show --counts --function=accum %t.dir/default_*.profraw | FileCheck %s
7// CHECK: Block counts: [100000, 4]
8
9#include <thread>
10
11int x = 0;
12void accum(int n) {
13 for (int i = 0; i < n; i++)
14 x += i; // don't care about accuracy, no need for atomic.
15}
16
17int main() {
18 int init_value = 10000;
19 auto t1 = std::thread(accum, 1*init_value);
20 auto t2 = std::thread(accum, 2*init_value);
21 auto t3 = std::thread(accum, 3*init_value);
22 auto t4 = std::thread(accum, 4*init_value);
23
24 t1.join();
25 t2.join();
26 t3.join();
27 t4.join();
28 return !x;
29}
30

source code of compiler-rt/test/profile/ContinuousSyncMode/multi-threaded.cpp