12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_tsan %s -o %t
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t 2>&1 | FileCheck %s
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "bench.h"
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint x;
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid thread(int tid) {
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  if (tid == 0) {
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    for (int i = 0; i < bench_niter; i++)
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      __atomic_store_n(&x, 0, __ATOMIC_RELEASE);
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  } else {
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    for (int i = 0; i < bench_niter; i++)
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      __atomic_load_n(&x, __ATOMIC_ACQUIRE);
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  }
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid bench() {
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  start_thread_group(bench_nthread, thread);
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: DONE
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
24