https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118140
--- Comment #9 from Robin Dapp <rdapp at gcc dot gnu.org> --- Already during ifcvt we do Setting value number of _46 to 1 (changed) Replaced _44 <= 1 with 1 in all uses of _46 = _44 <= 1; Value numbering stmt = _41 = _3; Setting value number of _41 to _3 (changed) Value numbering stmt = _ifc__33 = .COND_IOR (_41, d_lsm.7_11, _46, d_lsm.7_11); Applying pattern match.pd:1625, gimple-match-4.cc:12876 Match-and-simplified .COND_IOR (_41, d_lsm.7_11, _46, d_lsm.7_11) to 1 which seems fishy to me. COND_IOR (_3, d, 1, d) should not simplify to 1 (unless _3 is true). The underlying simplification d | 1 -> 1 is valid but it should not result in an unconditional constant here. We only introduce a vec_cond_expr for gimple value results in a vector context but here the type is scalar. To me it looks like we need to do else { new_op.set_op (COND_EXPR, res_op->type, res_op->cond.cond, res_op->ops[0], res_op->cond.else_value); *res_op = new_op; return gimple_resimplify3 (seq, res_op, valueize); } in gimple-match-exports.cc for non-vector types as well.