aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-04-16 16:02:20 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1996-04-16 16:02:20 -0400
commit9dd11dcb09121142942a663d687ad46dfd85d54c (patch)
treead6e0de473c00f31d87f147cbece0d92e62a126e
parent7f9ca37e6a1c64e9b05430825df2c9d90cbe3430 (diff)
downloadgcc-9dd11dcb09121142942a663d687ad46dfd85d54c.zip
gcc-9dd11dcb09121142942a663d687ad46dfd85d54c.tar.gz
gcc-9dd11dcb09121142942a663d687ad46dfd85d54c.tar.bz2
(make_field_assignment): Allow XOR in final case.
From-SVN: r11820
-rw-r--r--gcc/combine.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index cf5ba4a..05031d2 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));