summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1996-04-16 20:02:20 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1996-04-16 20:02:20 +0000
commit1159eaa10def7227c77f2aceee0f538387d8722f (patch)
treead6e0de473c00f31d87f147cbece0d92e62a126e /gcc/combine.c
parent9e761c1111ecef6d315b7c09479641d214b4bdbd (diff)
downloadgcc-1159eaa10def7227c77f2aceee0f538387d8722f.tar.gz
(make_field_assignment): Allow XOR in final case.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@11820 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index cf5ba4a1ff8..05031d2a824 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -6602,7 +6602,7 @@ make_field_assignment (x)
return x;
}
- /* If SRC is (ior (ashift (const_int 1) POS DEST)), this is a set of a
+ /* If SRC is (ior (ashift (const_int 1) POS) DEST), this is a set of a
one-bit field. */
else if (GET_CODE (src) == IOR && GET_CODE (XEXP (src, 0)) == ASHIFT
&& XEXP (XEXP (src, 0), 0) == const1_rtx
@@ -6616,14 +6616,14 @@ make_field_assignment (x)
}
/* The other case we handle is assignments into a constant-position
- field. They look like (ior (and DEST C1) OTHER). If C1 represents
+ field. They look like (ior/xor (and DEST C1) OTHER). If C1 represents
a mask that has all one bits except for a group of zero bits and
OTHER is known to have zeros where C1 has ones, this is such an
assignment. Compute the position and length from C1. Shift OTHER
to the appropriate position, force it to the required mode, and
make the extraction. Check for the AND in both operands. */
- if (GET_CODE (src) != IOR)
+ if (GET_CODE (src) != IOR && GET_CODE (src) != XOR)
return x;
rhs = expand_compound_operation (XEXP (src, 0));