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.
This commit is contained in:
Siddhesh Poyarekar 2013-05-17 19:10:33 +05:30
parent 13d3b41a36
commit 48a18de1e1
4 changed files with 10 additions and 3 deletions

View File

@ -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

2
NEWS
View File

@ -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).

View File

@ -21,7 +21,7 @@ extern double modf (double, double *);
struct args
{
double arg0;
volatile double arg0;
} in[] =
{
{ 42.42 },

View File

@ -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;