tsan: add a benchmark for vector memory accesses

Depends on D114592.

Reviewed By: melver

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

GitOrigin-RevId: debac0ef37d865d3a61d9abacdd096a676f1819d
diff --git a/test/tsan/bench_memory_access.cpp b/test/tsan/bench_memory_access.cpp
index 78bb053..899ce92 100644
--- a/test/tsan/bench_memory_access.cpp
+++ b/test/tsan/bench_memory_access.cpp
@@ -79,6 +79,24 @@
     }
     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
   }
 }