diff options
author | Jeff Law <law@gcc.gnu.org> | 1997-02-19 11:18:06 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-02-19 11:18:06 -0700 |
commit | 101c1a3d93648d82511f33d826f1c64d33371463 (patch) | |
tree | 4cefa5378d05a9ea979585cebd40edbc30313e15 /gcc | |
parent | 930aeef3f3963cd1660a217e8f43ce04efd5d678 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/combine.c | 8 |
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; |