On some AArch64 bootstrapped builds, we were getting a flaky test because the floating point operations in `get_time` were being fused with the floating point operations in `timevar_accumulate`.
This meant that the rounding behaviour of our multiplication with `ticks_to_msec` was different when used in `timer::start` and when performed in `timer::stop`. These extra inaccuracies led to the testcase `g++.dg/ext/timevar1.C` being flaky on some hardware. This change ensures those operations are not fused and hence stops the test being flaky on that particular machine. There is no expected change in the generated code. Bootstrap & regtest on AArch64 passes with no regressions. gcc/ChangeLog: * timevar.cc (get_time): Make this noinline to avoid fusing behaviour and associated test flakyness. N.b. I didn't know who to include as reviewer -- guessed Richard Biener as the global reviewer that had the most contributions to this file and Richard Sandiford since I've asked him for reviews a lot in the past. ############### Attachment also inlined for ease of reply ############### diff --git a/gcc/timevar.cc b/gcc/timevar.cc index d695297aae7f6b2a6de01a37fe86c2a232338df0..5ea4ec259e114f31f611e7105cd102f4c9552d18 100644 --- a/gcc/timevar.cc +++ b/gcc/timevar.cc @@ -212,6 +212,7 @@ timer::named_items::print (FILE *fp, const timevar_time_def *total) HAVE_WALL_TIME macros. */ static void +__attribute__((noinline)) get_time (struct timevar_time_def *now) { now->user = 0;
diff --git a/gcc/timevar.cc b/gcc/timevar.cc index d695297aae7f6b2a6de01a37fe86c2a232338df0..5ea4ec259e114f31f611e7105cd102f4c9552d18 100644 --- a/gcc/timevar.cc +++ b/gcc/timevar.cc @@ -212,6 +212,7 @@ timer::named_items::print (FILE *fp, const timevar_time_def *total) HAVE_WALL_TIME macros. */ static void +__attribute__((noinline)) get_time (struct timevar_time_def *now) { now->user = 0;