https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78186

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-11-02
     Ever confirmed|0                           |1

--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Hi Bin,

Could you try this patch please?

===
diff --git a/gcc/combine.c b/gcc/combine.c
index 7c21fe4..7ed0a62 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -11224,6 +11224,9 @@ change_zero_ext (rtx pat)
       rtx x = gen_rtx_AND (mode, reg, immed_wide_int_const (mask, mode));
       rtx y = simplify_gen_binary (ASHIFT, mode, SET_SRC (pat),
                                   GEN_INT (offset));
+      wide_int mask2 = wi::shifted_mask (offset, width, false, reg_width);
+      y = simplify_gen_binary (AND, mode, y,
+                              immed_wide_int_const (mask2, mode));
       rtx z = simplify_gen_binary (IOR, mode, x, y);
       SUBST (SET_DEST (pat), reg);
       SUBST (SET_SRC (pat), z);
===

Reply via email to