https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104002
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Somewhat related to the recently fixed issue. At -O0 we have invalid _1 = VEC_PERM_EXPR <v_2(D), v_2(D), { 2, 3, 2, 3 }>; _3 = BIT_FIELD_REF <_1, 64, 0>; _5 = VIEW_CONVERT_EXPR<int[2]>(_3)[i_4(D)]; while with -O update_address_taken is run and sets DECL_NOT_GIMPLE_REG_P (var), leading to _1 = VEC_PERM_EXPR <v_2(D), v_2(D), { 2, 3, 2, 3 }>; D.1983 = BIT_FIELD_REF <_1, 64, 0>; _6 = VIEW_CONVERT_EXPR<int[2]>(D.1983)[i_5(D)]; note the non-register requirement is because of the variable index ARRAY_REF. The decl should have been marked addressable but c_common_mark_addressable_vec doesn't handle the TARGET_EXPR we build around the shufflevector result which is the issue we have here.