diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2016-11-03 17:04:22 +0100 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2016-11-03 17:04:22 +0100 |
commit | 122e3608b6d4d31ebd68f12d55b44319d54486f9 (patch) | |
tree | 14a4a730fd2320211bae5b06c7ac7c09e0de26af | |
parent | 35ea947ffabd427908f9fa0b5df56c6fe58176ff (diff) | |
download | gcc-122e3608b6d4d31ebd68f12d55b44319d54486f9.zip gcc-122e3608b6d4d31ebd68f12d55b44319d54486f9.tar.gz gcc-122e3608b6d4d31ebd68f12d55b44319d54486f9.tar.bz2 |
combine lhs zero_extract fix (PR78186)
PR rtl-optimization/78186
* combine.c (change_zero_ext): Mask the RHS of a zero_extract as
well, when converting to IOR.
From-SVN: r241824
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/combine.c | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 920d870..680b549 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-03 Segher Boessenkool <segher@kernel.crashing.org> + + PR rtl-optimization/78186 + * combine.c (change_zero_ext): Mask the RHS of a zero_extract as + well, when converting to IOR. + 2016-11-03 Eric Botcazou <ebotcazou@adacore.com> * config/sparc/sparc.md (vec_interleave_lowv8qi): Delete. diff --git a/gcc/combine.c b/gcc/combine.c index 6cbb8cf..c605b1a 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -11190,6 +11190,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); |