http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56608
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Known to work| |4.6.4
Keywords| |wrong-code
Last reconfirmed| |2013-03-13
AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org
|gnu.org |
Ever Confirmed|0 |1
Summary|SLP seems to produce |[4.7/4.8 Regression] SLP
|incorrect value with |seems to produce incorrect
|-ffast-math |value with -ffast-math
Target Milestone|--- |4.7.3
Known to fail| |4.7.3, 4.8.0
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> 2013-03-13
09:08:04 UTC ---
Confirmed. Note we also generate non-optimal code in that we keep both
the vectorized and non-vectorized paths:
_81 = (int) _80;
uf_15(D)->autoCropHeight = _81;
...
_84 = (double) _81;
_85 = _83 / _84;
if (aspectRatio_20 < _85)
goto <bb 9>;
else
goto <bb 10>;
<bb 9>:
_86 = _84 * aspectRatio_20;
_87 = _86 + 5.0e-1;
_88 = __builtin_ifloor (_87);
and vectorized:
vect_p.26_224 = &uf_15(D)->rotatedHeight;
MEM[(struct ufraw_data *)vect_p.26_224] = vect_var_.22_217;
instead of re-loading the scalars from the vector. That is, when
looking for scalar stores we start the SLP instance from we fail to
verify that no uses of the scalars in the instance remain after
vectorization. Or if they remain, we fail to replace them with
vector extracts.
Not sure yet what's the wrong code issue (nothing obvious yet, still
investigating).