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); ===