https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118140
--- Comment #8 from Robin Dapp <rdapp at gcc dot gnu.org> ---
The optimized tree looks good apart from 'd' and the return value :)
<bb 2> [local count: 76665171]:
e_lsm.8_12 = e;
_55 = .MASK_LEN_LOAD (&MEM <_Bool[17]> [(void *)&f + 4B], 8B, { -1, ... },
_54(D), 13, 0);
vect__10.16_59 = .VCOND_MASK_LEN ({ -1, ... }, _55, { 0, ... }, 13, 0);
_61 = .REDUC_PLUS (vect__10.16_59);
_62 = e_lsm.8_12 + _61;
d = 1;
e = _62;
return 1;
Already during/after vectorization we have:
...
# prephitmp_41 = PHI <1(3)>
# vect__10.16_60 = PHI <vect__10.16_59(3)>
_61 = .REDUC_PLUS (vect__10.16_60);
_62 = _61 + e_lsm.8_12;
# .MEM_29 = VDEF <.MEM_46>
dD.2785 = prephitmp_41;
# .MEM_30 = VDEF <.MEM_29>
eD.2786 = _62;
# RANGE [irange] int [0, 1] MASK 0x1 VALUE 0x0
_13 = (intD.1) prephitmp_41;
# VUSE <.MEM_30>
return _13;
where prephitmp_41 seems just wrong.