On Fri, 21 Jul 2023, Matthew Malcomson wrote: > 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.
I think this is undesriable. With fused you mean we use FMA? I think you could use -ffp-contract=off for the TU instead. Note you can't use __attribute__((noinline)) literally since the host compiler might not support this. Richard. > 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; > > > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman; HRB 36809 (AG Nuernberg)