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)

Reply via email to