aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1997-02-19 11:18:06 -0700
committerJeff Law <law@gcc.gnu.org>1997-02-19 11:18:06 -0700
commit101c1a3d93648d82511f33d826f1c64d33371463 (patch)
tree4cefa5378d05a9ea979585cebd40edbc30313e15
parent930aeef3f3963cd1660a217e8f43ce04efd5d678 (diff)
downloadgcc-101c1a3d93648d82511f33d826f1c64d33371463.zip
gcc-101c1a3d93648d82511f33d826f1c64d33371463.tar.gz
gcc-101c1a3d93648d82511f33d826f1c64d33371463.tar.bz2
combine.c (find_split_point): Don't turn a SIGN_EXTEND into a series of shifts if...
* combine.c (find_split_point): Don't turn a SIGN_EXTEND into a series of shifts if either mode is a partial integer mode. From-SVN: r13665
-rw-r--r--gcc/combine.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 2265eb3..6a6ebb4 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -2699,6 +2699,14 @@ find_split_point (loc, insn)
case SIGN_EXTEND:
inner = XEXP (SET_SRC (x), 0);
+
+ /* We can't optimize if either mode is a partial integer
+ mode as we don't know how many bits are significant
+ in those modes. */
+ if (GET_MODE_CLASS (GET_MODE (inner)) == MODE_PARTIAL_INT
+ || GET_MODE_CLASS (GET_MODE (SET_SRC (x))) == MODE_PARTIAL_INT)
+ break;
+
pos = 0;
len = GET_MODE_BITSIZE (GET_MODE (inner));
unsignedp = 0;