https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70429
Kirill Yukhin <kyukhin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kyukhin at gcc dot gnu.org --- Comment #4 from Kirill Yukhin <kyukhin at gcc dot gnu.org> --- Seems like combiner performs invalid reassociation. This trivial addition to Jakub's PR70222 fix makes test work: --- a/gcc/combine.c +++ b/gcc/combine.c @@ -10526,7 +10526,7 @@ simplify_shift_const_1 (enum rtx_code code, machine_mode result_mode, { /* For ((unsigned) (cstULL >> count)) >> cst2 we have to make sure the result will be masked. See PR70222. */ - if (code == LSHIFTRT + if ((code == LSHIFTRT || code == ASHIFTRT) && mode != result_mode && !merge_outer_ops (&outer_op, &outer_const, AND, GET_MODE_MASK (result_mode)