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 for (int i = 0; i < bench_niter; i++) 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __atomic_load_n(&x, __ATOMIC_ACQUIRE); 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid bench() { 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __atomic_store_n(&x, 0, __ATOMIC_RELEASE); 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines start_thread_group(bench_nthread, thread); 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: DONE 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 20