From 9a80bd201621eaaf18a9901630aad644cebd04fa Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Sun, 11 Jan 2026 17:40:30 -0800 Subject: [PATCH] cross-compile do_not_optimize Signed-off-by: Nikolaj Bjorner --- src/test/optional_benchmark.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/test/optional_benchmark.cpp b/src/test/optional_benchmark.cpp index 99bf2a0c0..89fb41e1a 100644 --- a/src/test/optional_benchmark.cpp +++ b/src/test/optional_benchmark.cpp @@ -46,10 +46,22 @@ double measure_time_ms(Func f, int iterations = 1000000) { } // Prevent compiler optimization +// Prevent compiler optimization (portable for GCC/Clang and MSVC) +#if defined(_MSC_VER) +#include template -void do_not_optimize(T const& value) { +inline void do_not_optimize(T const& value) { + // Trick MSVC into thinking value is used + volatile const T* volatile ptr = &value; + (void)ptr; + _ReadWriteBarrier(); +} +#else +template +inline void do_not_optimize(T const& value) { asm volatile("" : : "m"(value) : "memory"); } +#endif void benchmark_construction() { const int iterations = 1000000;