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

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
So we end up with

t.c:10:22: note:   ==> examining statement: _24 = MEM[(const long long unsigned
int &)_5]; 
t.c:10:22: note:   irrelevant.

in the SLP tree as it is part of the DR group but it's really a dead stmt
with no uses.  Unfortunately we pick it as representative but that makes
the whole SLP node irrelevant (we should weed out those checks).

The dead stmt is left behind by loop if-conversion which already performs
some DCE but not enough:


Removing dead stmt prephitmp_50 = 0;
Delete dead stmt in bb#3
_38 = (char) _37;
Delete dead stmt in bb#3
_37 = _24 > 69;
Delete dead stmt in bb#3
_31 = (char) _51;
Delete dead stmt in bb#3
_51 = _24 <= 69;
Delete dead stmt in bb#3
_49 = (char) _47;
Delete dead stmt in bb#3
_47 = _24 == 0;

for some reason the ifcvt local DCE considers stores live...

I have a mitigation in the vectorizer for this particular case.

Reply via email to