https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101530
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2021-07-21 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- I don't think we need V_C_E <BIT_FIELD_REF <>> on the LHS, V_C_E is not size-changing so you can do BIT_FIELD_REF <> = V_C_E <> instead, thus move the V_C_E to the RHS. We're restricting BIT_FIELD_REFs to produce is_gimple_reg_type so for the case in question we're expecting D.1234 = BIT_FIELD_REF <_1, 32, 0>; _2 = VIEW_CONVERT_EXPR<int> (D.1234); of course we could have folded the BIT_FIELD_REF which produces a V1SI to produce a SI, consuming the VIEW_CONVERT_EXPR. I guess we need similar handling for compound_lval components as we have for toplevel VIEW_CONVERT_EXPR: case VIEW_CONVERT_EXPR: if ((fallback & fb_rvalue) && is_gimple_reg_type (TREE_TYPE (*expr_p)) && is_gimple_reg_type (TREE_TYPE (TREE_OPERAND (*expr_p, 0)))) { ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, is_gimple_val, fb_rvalue); recalculate_side_effects (*expr_p); break; }