https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115508
--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- _19 = BIT_FIELD_REF <vec_var.1_14, 64, 0>; _12 = BIT_FIELD_REF <vec_var.1_14, 64, 64>; _15 = _12 | _19; vs _13 = BIT_FIELD_REF <vec_var.1_12, 64, 0>; _14 = BIT_FIELD_REF <vec_var.1_12, 64, 64>; _15 = _13 | _14; So basically it is just by accident the order happens that way which is why the reducing it further removing the stuff afterwards does not make any difference ...