[Bug target/83240] x86_64 vectorized sqrt of denormal yields -inf when DAZ=0

glisse at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Dec 1 21:17:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83240

--- Comment #4 from Marc Glisse <glisse at gcc dot gnu.org> ---
(this PR is vaguely related to PR 57974)

Unrelated, but I am surprised we don't end up computing at compile-time in this
example. We vectorize sqrt before unrolling the first loop and getting the
constants. And by the time we see

  a[0] = 1.00000003593912982384429052190829644815948084413615813091e-36;
  a[1] = 9.99999991097578965450144252348949782882164643167775990862e-38;
  a[2] = 9.99999935045640392457461415399766451285519391957298315801e-39;
  a[3] = 1.0000002153053332574208756001456831092687456480096866911e-39;
  vect__5.2_42 = MEM[(float *)&a];
  vect__6.3_39 = SQRT (vect__5.2_42);

it is too late for SLP to create a constant vector. Store merging merges the
stores by pairs, not good enough, and anyway this is the end of the pipeline,
we wouldn't have any passes left to optimize the result.


More information about the Gcc-bugs mailing list