<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 6, 2013 at 6:31 PM, Dmitry Vyukov <span dir="ltr"><<a href="mailto:dvyukov@google.com" target="_blank">dvyukov@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dvyukov<br>
Date: Thu Jun  6 09:31:15 2013<br>
New Revision: 183418<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=183418&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=183418&view=rev</a><br>
Log:<br>
tsan: use memory access size for Go after all<br>
helps to make range access functions correct and fast<br></blockquote><div><br></div><div>Wow! Really? </div><div>I like the change very much, but I am very curious why it makes things faster.</div><div><br></div><div>--kcc </div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Modified:<br>
    compiler-rt/trunk/lib/tsan/go/tsan_go.cc<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_update_shadow_word_inl.h<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/go/tsan_go.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/go/tsan_go.cc?rev=183418&r1=183417&r2=183418&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/go/tsan_go.cc?rev=183418&r1=183417&r2=183418&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/go/tsan_go.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/go/tsan_go.cc Thu Jun  6 09:31:15 2013<br>
@@ -116,12 +116,14 @@ void __tsan_write(ThreadState *thr, void<br>
<br>
 void __tsan_read_range(ThreadState *thr, void *addr, uptr size, uptr step,<br>
                        void *pc) {<br>
-  MemoryAccessRangeStep(thr, (uptr)pc, (uptr)addr, size, step, false);<br>
+  (void)step;<br>
+  MemoryAccessRange(thr, (uptr)pc, (uptr)addr, size, false);<br>
 }<br>
<br>
 void __tsan_write_range(ThreadState *thr, void *addr, uptr size, uptr step,<br>
                         void *pc) {<br>
-  MemoryAccessRangeStep(thr, (uptr)pc, (uptr)addr, size, step, true);<br>
+  (void)step;<br>
+  MemoryAccessRange(thr, (uptr)pc, (uptr)addr, size, true);<br>
 }<br>
<br>
 void __tsan_func_enter(ThreadState *thr, void *pc) {<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc?rev=183418&r1=183417&r2=183418&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc?rev=183418&r1=183417&r2=183418&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc Thu Jun  6 09:31:15 2013<br>
@@ -374,25 +374,4 @@ void MemoryAccessRange(ThreadState *thr,<br>
   }<br>
 }<br>
<br>
-void MemoryAccessRangeStep(ThreadState *thr, uptr pc, uptr addr,<br>
-    uptr size, uptr step, bool is_write) {<br>
-  if (size == 0)<br>
-    return;<br>
-  FastState fast_state = thr->fast_state;<br>
-  if (fast_state.GetIgnoreBit())<br>
-    return;<br>
-  StatInc(thr, StatMopRange);<br>
-  fast_state.IncrementEpoch();<br>
-  thr->fast_state = fast_state;<br>
-  TraceAddEvent(thr, fast_state, EventTypeMop, pc);<br>
-<br>
-  for (uptr addr_end = addr + size; addr < addr_end; addr += step) {<br>
-    u64 *shadow_mem = (u64*)MemToShadow(addr);<br>
-    Shadow cur(fast_state);<br>
-    cur.SetWrite(is_write);<br>
-    cur.SetAddr0AndSizeLog(addr & (kShadowCell - 1), kSizeLog1);<br>
-    MemoryAccessImpl(thr, addr, kSizeLog1, is_write, false,<br>
-        shadow_mem, cur);<br>
-  }<br>
-}<br>
 }  // namespace __tsan<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_update_shadow_word_inl.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_update_shadow_word_inl.h?rev=183418&r1=183417&r2=183418&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_update_shadow_word_inl.h?rev=183418&r1=183417&r2=183418&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_update_shadow_word_inl.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_update_shadow_word_inl.h Thu Jun  6 09:31:15 2013<br>
@@ -57,8 +57,7 @@ do {<br>
     goto RACE;<br>
   }<br>
   // Do the memory access intersect?<br>
-  // In Go all memory accesses are 1 byte, so there can be no intersections.<br>
-  if (kCppMode && Shadow::TwoRangesIntersect(old, cur, kAccessSize)) {<br>
+  if (Shadow::TwoRangesIntersect(old, cur, kAccessSize)) {<br>
     StatInc(thr, StatShadowIntersect);<br>
     if (Shadow::TidsAreEqual(old, cur)) {<br>
       StatInc(thr, StatShadowSameThread);<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>