summary refs log tree commit diff
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@redhat.com>2013-05-17 19:10:33 +0530
committerSiddhesh Poyarekar <siddhesh@redhat.com>2013-05-17 19:10:33 +0530
commit48a18de1e1e7dfeab6d034765caaf732b53cfcb7 (patch)
tree1710f87c334a2d5cc79c30f9262212697eb814ef
parent13d3b41a36c4f28d171a144f8a9baad3a8835981 (diff)
downloadglibc-48a18de1e1e7dfeab6d034765caaf732b53cfcb7.tar.gz
glibc-48a18de1e1e7dfeab6d034765caaf732b53cfcb7.tar.xz
glibc-48a18de1e1e7dfeab6d034765caaf732b53cfcb7.zip
Prevent optimizing out of benchmark function call
Resolves: #15424

The compiler would optimize the benchmark function call out of the
loop and call it only once, resulting in blazingly fast times for some
benchmarks (notably atan, sin and cos).  Mark the inputs as volatile
so that the code is forced to read again from the input for each
iteration.
-rw-r--r--ChangeLog7
-rw-r--r--NEWS2
-rw-r--r--benchtests/bench-modf.c2
-rwxr-xr-xscripts/bench.pl2
4 files changed, 10 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 78d4804885..58b87d4bc3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-05-17  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+	[BZ #15424]
+	* benchtests/bench-modf.c (struct args): Mark arg0 as
+	volatile.
+	* scripts/bench.pl: Mark members of struct args as volatile.
+
 2013-05-17  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
 	* sysdeps/powerpc/fpu/e_hypot.c (GET_TWO_FLOAT_WORD): Fix test for
diff --git a/NEWS b/NEWS
index 86c287ff29..57c7ee0a8f 100644
--- a/NEWS
+++ b/NEWS
@@ -17,7 +17,7 @@ Version 2.18
   15086, 15160, 15214, 15221, 15232, 15234, 15283, 15285, 15287, 15304,
   15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337, 15342, 15346,
   15359, 15361, 15366, 15380, 15394, 15395, 15405, 15406, 15409, 15416,
-  15418, 15419, 15423, 15426, 15429, 15442, 15448.
+  15418, 15419, 15423, 15424, 15426, 15429, 15442, 15448.
 
 * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
   #15078).
diff --git a/benchtests/bench-modf.c b/benchtests/bench-modf.c
index 7fae7dc6ac..2b50665b7e 100644
--- a/benchtests/bench-modf.c
+++ b/benchtests/bench-modf.c
@@ -21,7 +21,7 @@ extern double modf (double, double *);
 
 struct args
 {
-  double arg0;
+  volatile double arg0;
 } in[] =
 {
   {  42.42 },
diff --git a/scripts/bench.pl b/scripts/bench.pl
index dcc5ead727..dcf1355282 100755
--- a/scripts/bench.pl
+++ b/scripts/bench.pl
@@ -71,7 +71,7 @@ else {
       $decl = "$decl,";
     }
 
-    $arg_struct = "$arg_struct $arg arg$num;";
+    $arg_struct = "$arg_struct volatile $arg arg$num;";
     $bench_func = "$bench_func variants[v].in[i].arg$num";
     $decl = "$decl $arg";
     $num = $num + 1;