https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115493
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- The cruical difference is: - _60 = BIT_FIELD_REF <vect_cstore_15.37_59, 32, 0>; - _61 = BIT_FIELD_REF <vect_cstore_15.37_59, 32, 32>; - _62 = MAX_EXPR <_61, _60>; - _63 = BIT_FIELD_REF <vect_cstore_15.37_59, 32, 64>; - _64 = MAX_EXPR <_63, _62>; - _65 = BIT_FIELD_REF <vect_cstore_15.37_59, 32, 96>; - _66 = MAX_EXPR <_65, _64>; - _67 = _66 == -1; - stmp_cstore_15.38_68 = _67 ? arr__I_lsm.26_4 : _66; + _58 = BIT_FIELD_REF <vect_cstore_15.37_57, 32, 0>; + _59 = BIT_FIELD_REF <vect_cstore_15.37_57, 32, 32>; + _60 = BIT_FIELD_REF <vect_cstore_15.37_57, 32, 64>; + _61 = BIT_FIELD_REF <vect_cstore_15.37_57, 32, 96>; + _62 = MAX_EXPR <_58, _59>; + _63 = MAX_EXPR <_62, _60>; + _64 = MAX_EXPR <_63, _61>; + _65 = _61 == -1; + stmp_cstore_15.38_66 = _65 ? arr__I_lsm.26_4 : _61; note how the compare against -1 uses the vector component rather the MAX reduced value.