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.