]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Move DoNotOptimize in benchmark loop to prevent it being optimized away
authorNathan Moinvaziri <nathan@nathanm.com>
Thu, 22 Jan 2026 01:10:14 +0000 (17:10 -0800)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Sat, 24 Jan 2026 15:07:20 +0000 (16:07 +0100)
In some cases I've noticed incorrect 0 benchmark results from compiler
optimizing away len during hash benchmarks.

test/benchmarks/benchmark_adler32.cc
test/benchmarks/benchmark_adler32_copy.cc
test/benchmarks/benchmark_compare256.cc
test/benchmarks/benchmark_compare256_rle.cc
test/benchmarks/benchmark_compress.cc
test/benchmarks/benchmark_crc32.cc
test/benchmarks/benchmark_crc32_copy.cc

index 8fb21300414bca1a964736ce8d09db3db5c2673b..5ee9102e2339c38537d70b7e3d0f31d27c230674 100644 (file)
@@ -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&) {
index 9d2994f4ad62154c72fa7a44f1f9f3fe45606d25..6d913b1d19431c5d8d20fa9fcaa55317a8a0a19f 100644 (file)
@@ -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&) {
index 4b616f5a52f1c4fdd5e8349a7bfa2ffc13a63aba..eb103af0d133360dc658da74a4b3b4bcdeae857e 100644 (file)
@@ -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&) {
index 7e6551dbd756b7b14dc2b5d89acb14b8b7f3fb71..96489cf59a53c6c3b1932fda188b6256890e845c 100644 (file)
@@ -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&) {
index b1a082da83f06532c5033298a080bef878cb8406..ebaf76cc40f1f35bda94b0aeb0f09728fec024d2 100644 (file)
@@ -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&) {
index df7eaec3e667e0c4e049c715fbafd01cc7d4c44c..b30b1855faf4f0bb7823d4a4ee879495296037f6 100644 (file)
@@ -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&) {
index aa5c3f9e2cd570fce1bf44108df3cc101a322147..2d054dba496705fdf83a4296fc54f1221e74d9ed 100644 (file)
@@ -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&) {