From: Nathan Moinvaziri Date: Thu, 22 Jan 2026 01:10:14 +0000 (-0800) Subject: Move DoNotOptimize in benchmark loop to prevent it being optimized away X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=49dbc2f56e380d4fb670efc858919445d13071ab;p=thirdparty%2Fzlib-ng.git Move DoNotOptimize in benchmark loop to prevent it being optimized away In some cases I've noticed incorrect 0 benchmark results from compiler optimizing away len during hash benchmarks. --- diff --git a/test/benchmarks/benchmark_adler32.cc b/test/benchmarks/benchmark_adler32.cc index 8fb213004..5ee9102e2 100644 --- a/test/benchmarks/benchmark_adler32.cc +++ b/test/benchmarks/benchmark_adler32.cc @@ -41,10 +41,10 @@ public: misalign = 0; else misalign += (DO_ALIGNED) ? 16 : 1; - } - // Prevent the result from being optimized away - benchmark::DoNotOptimize(hash); + // Prevent the result from being optimized away + benchmark::DoNotOptimize(hash); + } } void TearDown(const ::benchmark::State&) { diff --git a/test/benchmarks/benchmark_adler32_copy.cc b/test/benchmarks/benchmark_adler32_copy.cc index 9d2994f4a..6d913b1d1 100644 --- a/test/benchmarks/benchmark_adler32_copy.cc +++ b/test/benchmarks/benchmark_adler32_copy.cc @@ -45,10 +45,10 @@ public: misalign = 0; else misalign += (DO_ALIGNED) ? 16 : 1; - } - // Prevent the result from being optimized away - benchmark::DoNotOptimize(hash); + // Prevent the result from being optimized away + benchmark::DoNotOptimize(hash); + } } void TearDown(const ::benchmark::State&) { diff --git a/test/benchmarks/benchmark_compare256.cc b/test/benchmarks/benchmark_compare256.cc index 4b616f5a5..eb103af0d 100644 --- a/test/benchmarks/benchmark_compare256.cc +++ b/test/benchmarks/benchmark_compare256.cc @@ -49,10 +49,10 @@ public: misalign = 0; else misalign++; - } - // Prevent the result from being optimized away - benchmark::DoNotOptimize(len); + // Prevent the result from being optimized away + benchmark::DoNotOptimize(len); + } } void TearDown(const ::benchmark::State&) { diff --git a/test/benchmarks/benchmark_compare256_rle.cc b/test/benchmarks/benchmark_compare256_rle.cc index 7e6551dbd..96489cf59 100644 --- a/test/benchmarks/benchmark_compare256_rle.cc +++ b/test/benchmarks/benchmark_compare256_rle.cc @@ -47,10 +47,10 @@ public: misalign = 0; else misalign++; - } - // Prevent the result from being optimized away - benchmark::DoNotOptimize(len); + // Prevent the result from being optimized away + benchmark::DoNotOptimize(len); + } } void TearDown(const ::benchmark::State&) { diff --git a/test/benchmarks/benchmark_compress.cc b/test/benchmarks/benchmark_compress.cc index b1a082da8..ebaf76cc4 100644 --- a/test/benchmarks/benchmark_compress.cc +++ b/test/benchmarks/benchmark_compress.cc @@ -54,9 +54,10 @@ public: fprintf(stderr, "compress() failed with error %d\n", err); abort(); } - } - benchmark::DoNotOptimize(err); + // Prevent the result from being optimized away + benchmark::DoNotOptimize(err); + } } void TearDown(const ::benchmark::State&) { diff --git a/test/benchmarks/benchmark_crc32.cc b/test/benchmarks/benchmark_crc32.cc index df7eaec3e..b30b1855f 100644 --- a/test/benchmarks/benchmark_crc32.cc +++ b/test/benchmarks/benchmark_crc32.cc @@ -41,10 +41,10 @@ public: misalign = 0; else misalign += (DO_ALIGNED) ? 16 : 1; - } - // Prevent the result from being optimized away - benchmark::DoNotOptimize(hash); + // Prevent the result from being optimized away + benchmark::DoNotOptimize(hash); + } } void TearDown(const ::benchmark::State&) { diff --git a/test/benchmarks/benchmark_crc32_copy.cc b/test/benchmarks/benchmark_crc32_copy.cc index aa5c3f9e2..2d054dba4 100644 --- a/test/benchmarks/benchmark_crc32_copy.cc +++ b/test/benchmarks/benchmark_crc32_copy.cc @@ -45,10 +45,10 @@ public: misalign = 0; else misalign += (DO_ALIGNED) ? 16 : 1; - } - // Prevent the result from being optimized away - benchmark::DoNotOptimize(hash); + // Prevent the result from being optimized away + benchmark::DoNotOptimize(hash); + } } void TearDown(const ::benchmark::State&) {