[llvm-commits] [compiler-rt] r169379 - /compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc

Dmitry Vyukov dvyukov at google.com
Wed Dec 5 05:14:55 PST 2012


Author: dvyukov
Date: Wed Dec  5 07:14:55 2012
New Revision: 169379

URL: http://llvm.org/viewvc/llvm-project?rev=169379&view=rev
Log:
tsan: fix memory barriers in atomics

Modified:
    compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc?rev=169379&r1=169378&r2=169379&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc Wed Dec  5 07:14:55 2012
@@ -115,7 +115,10 @@
 }
 
 template<typename T> T func_xchg(volatile T *v, T op) {
-  return __sync_lock_test_and_set(v, op);
+  T res = __sync_lock_test_and_set(v, op);
+  // __sync_lock_test_and_set does not contain full barrier.
+  __sync_synchronize();
+  return res;
 }
 
 template<typename T> T func_add(volatile T *v, T op) {
@@ -255,6 +258,9 @@
   thr->clock.ReleaseStore(&s->clock);
   *a = v;
   s->mtx.Unlock();
+  // Trainling memory barrier to provide sequential consistency
+  // for Dekker-like store-load synchronization.
+  __sync_synchronize();
 }
 
 template<typename T, T (*F)(volatile T *v, T op)>





More information about the llvm-commits mailing list