https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118505
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |WAITING --- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Looking into the initialization code of TSVC code: real_t any=0.; int frac = SET1D_RECIP_IDX; if (!strcmp(name, "s258")) { set_1d_array(a, LEN_1D, any,frac); set_1d_array(b, LEN_1D,zero,unit); set_1d_array(c, LEN_1D, any,frac); set_1d_array(d, LEN_1D, any,frac); set_1d_array(e, LEN_1D,zero,unit); set_2d_array(aa, any,frac); } if (stride == SET1D_RECIP_IDX) { for (int i = 0; i < length; i++) { arr[i] = 1. / (real_t) (i+1); } This is definitely a bad benchmarking. because ` if (a[i] > 0.)` is always true so spliting the path here is cheats and was an accident it was happening in the first place I am going to try one more thing of changing the benchmark to use both positive and negative numbers. But I am suspecting this is just a bad benchmark. That is change: for (int i = 0; i < length; i++) { arr[i] = 1. / (real_t) (i+1); } to be something like: for (int i = 0; i < length; i++) { arr[i] = 1. / (real_t) (i+1) * -(i&1); }