[compiler-rt] debac0e - tsan: add a benchmark for vector memory accesses

Dmitry Vyukov via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 25 08:07:50 PST 2021


Author: Dmitry Vyukov
Date: 2021-11-25T17:07:46+01:00
New Revision: debac0ef37d865d3a61d9abacdd096a676f1819d

URL: https://github.com/llvm/llvm-project/commit/debac0ef37d865d3a61d9abacdd096a676f1819d
DIFF: https://github.com/llvm/llvm-project/commit/debac0ef37d865d3a61d9abacdd096a676f1819d.diff

LOG: tsan: add a benchmark for vector memory accesses

Depends on D114592.

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D114593

Added: 
    

Modified: 
    compiler-rt/test/tsan/bench_memory_access.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/test/tsan/bench_memory_access.cpp b/compiler-rt/test/tsan/bench_memory_access.cpp
index 78bb053f130e..899ce9255cf9 100644
--- a/compiler-rt/test/tsan/bench_memory_access.cpp
+++ b/compiler-rt/test/tsan/bench_memory_access.cpp
@@ -79,6 +79,24 @@ void thread(int tid) {
     }
     break;
   }
+#if TSAN_VECTORIZE
+  case 12: {
+    // The compiler wants to optimize all this away.
+    // Use volatile to prevent optimization, but then use kBlock
+    // to avoid the additional non-vector load in the inner loop.
+    // Also use only even indexes to prevent compiler from
+    // inserting memset.
+    const int kBlock = 128;
+    __m128i data[kBlock * 2];
+    __m128i *volatile vptr = data;
+    for (int i = 0; i < bench_niter / kBlock; i++) {
+      __m128i *ptr = vptr;
+      for (int j = 0; j < kBlock; j++)
+        _mm_store_si128(&ptr[j * 2], _mm_setzero_si128());
+    }
+    break;
+  }
+#endif
   }
 }
 


        


More information about the llvm-commits mailing list