[Bug tree-optimization/63168] New: not vectorized: latch block not empty
glisse at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Sep 4 13:48:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63168
Bug ID: 63168
Summary: not vectorized: latch block not empty
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: glisse at gcc dot gnu.org
Consider the 2 codes below.
int mymax1(int *it, int *end)
{
int max = *it++;
for (; it != end; it++)
if (*it > max)
max = *it;
return max;
}
int mymax2(int *it, int *end)
{
int max = *it;
while (++it != end)
if (*it > max)
max = *it;
return max;
}
Compiled with g++ -Ofast, the first one is vectorized but not the second one.
It gives up immediately because of "latch block not empty". That seems rather
fragile :-(
<bb 3>:
max_8 = *it_6;
max_10 = MAX_EXPR <max_2, max_8>;
<bb 4>:
# it_1 = PHI <it_6(3), it_4(D)(2)>
# max_2 = PHI <max_10(3), max_5(2)>
it_6 = it_1 + 4;
if (it_6 != end_7(D))
goto <bb 3>;
else
goto <bb 5>;
There are several related bugs (like PR 33447), feel free to mark as a dup if
you can identify one for sure.
(code taken from http://stackoverflow.com/q/25622109/1918193 apparently there
may be other issues with what gcc produces)
More information about the Gcc-bugs
mailing list