From debac0ef37d865d3a61d9abacdd096a676f1819d Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 25 Nov 2021 15:42:56 +0100 Subject: [PATCH] tsan: add a benchmark for vector memory accesses Depends on D114592. Reviewed By: melver Differential Revision: https://reviews.llvm.org/D114593 --- compiler-rt/test/tsan/bench_memory_access.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 } }