https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82730
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Severity|normal |enhancement Ever confirmed|0 |1 Last reconfirmed| |2021-08-15 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note the gimple level looks good: _20 = BIT_FIELD_REF <in_18(D), 8, 120>; _1 = (int) _20; _21 = BIT_FIELD_REF <in_18(D), 8, 112>; _2 = (int) _21; _22 = BIT_FIELD_REF <in_18(D), 8, 104>; _3 = (int) _22; _23 = BIT_FIELD_REF <in_18(D), 8, 96>; _4 = (int) _23; _24 = BIT_FIELD_REF <in_18(D), 8, 88>; _5 = (int) _24; _25 = BIT_FIELD_REF <in_18(D), 8, 80>; _6 = (int) _25; _26 = BIT_FIELD_REF <in_18(D), 8, 72>; _7 = (int) _26; _27 = BIT_FIELD_REF <in_18(D), 8, 64>; _8 = (int) _27; _28 = BIT_FIELD_REF <in_18(D), 8, 56>; _9 = (int) _28; _29 = BIT_FIELD_REF <in_18(D), 8, 48>; _10 = (int) _29; _30 = BIT_FIELD_REF <in_18(D), 8, 40>; _11 = (int) _30; _31 = BIT_FIELD_REF <in_18(D), 8, 32>; _12 = (int) _31; _32 = BIT_FIELD_REF <in_18(D), 8, 24>; _13 = (int) _32; _33 = BIT_FIELD_REF <in_18(D), 8, 16>; _14 = (int) _33; _34 = BIT_FIELD_REF <in_18(D), 8, 8>; _15 = (int) _34; _35 = BIT_FIELD_REF <in_18(D), 8, 0>; _16 = (int) _35; ----- CUT ---- It is the way extractions are done for bytes is not good. Note MSVC is the only one which does extractions in a register only and not do a store to the stack.