aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2016-11-03 17:04:22 +0100
committerSegher Boessenkool <segher@gcc.gnu.org>2016-11-03 17:04:22 +0100
commit122e3608b6d4d31ebd68f12d55b44319d54486f9 (patch)
tree14a4a730fd2320211bae5b06c7ac7c09e0de26af /gcc/combine.c
parent35ea947ffabd427908f9fa0b5df56c6fe58176ff (diff)
downloadgcc-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
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c3
1 files changed, 3 insertions, 0 deletions
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);