https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69039
--- Comment #5 from vries at gcc dot gnu.org --- We have reduction stmt _6 with loop phi prephitmp_11: ... fn1 (unsigned int d) { _Bool b_lsm.5; unsigned int b_lsm.4; int i; unsigned int pretmp_1; unsigned int ivtmp_4; unsigned int _6; unsigned int _9; unsigned int prephitmp_11; unsigned int ivtmp_12; <bb 2>: pretmp_1 = b; <bb 3>: # i_13 = PHI <i_8(4), 0(2)> # prephitmp_11 = PHI <_6(4), pretmp_1(2)> # ivtmp_4 = PHI <ivtmp_12(4), 1000(2)> _6 = d_5(D) | prephitmp_11; i_8 = i_13 + 1; ivtmp_12 = ivtmp_4 - 1; if (ivtmp_12 != 0) goto <bb 4>; else goto <bb 5>; <bb 4>: goto <bb 3>; <bb 5>: # _9 = PHI <_6(3)> # b_lsm.4_17 = PHI <_6(3)> b = b_lsm.4_17; return _9; } ... There are however two corresponding loop exit phis: _9 and b_lsm.4_17. We only track one in the keep_res field of struct reduction_info.