diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2013-05-17 19:10:33 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2013-05-17 19:10:33 +0530 |
commit | 48a18de1e1e7dfeab6d034765caaf732b53cfcb7 (patch) | |
tree | 1710f87c334a2d5cc79c30f9262212697eb814ef | |
parent | 13d3b41a36c4f28d171a144f8a9baad3a8835981 (diff) | |
download | glibc-48a18de1e1e7dfeab6d034765caaf732b53cfcb7.zip glibc-48a18de1e1e7dfeab6d034765caaf732b53cfcb7.tar.gz glibc-48a18de1e1e7dfeab6d034765caaf732b53cfcb7.tar.bz2 |
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-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | benchtests/bench-modf.c | 2 | ||||
-rwxr-xr-x | scripts/bench.pl | 2 |
4 files changed, 10 insertions, 3 deletions
@@ -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 @@ -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 7fae7dc..2b50665 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 dcc5ead..dcf1355 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; |