aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-10-28 18:55:05 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-10-28 18:55:05 -0400
commit1a8e9a8e0574f6f2923c4f7ce8ddefe412ecda2c (patch)
treed5c98cca0a6f86e9c31eaa4a535dd2df3a7bcc61 /gcc/cse.c
parent99d13c40244720f821c7a342748e314cac4c729b (diff)
downloadgcc-1a8e9a8e0574f6f2923c4f7ce8ddefe412ecda2c.zip
gcc-1a8e9a8e0574f6f2923c4f7ce8ddefe412ecda2c.tar.gz
gcc-1a8e9a8e0574f6f2923c4f7ce8ddefe412ecda2c.tar.bz2
(cse_insn): Don't record a DEST a paradoxical SUBREG and SRC is a
SIGN_EXTEND or ZERO_EXTEND. From-SVN: r8354
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index d030c1d..067db83 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -7188,7 +7188,17 @@ cse_insn (insn, in_libcall_block)
|| in_libcall_block
/* If we didn't put a REG_EQUAL value or a source into the hash
table, there is no point is recording DEST. */
- || sets[i].src_elt == 0)
+ || sets[i].src_elt == 0
+ /* If DEST is a paradoxical SUBREG and SRC is a ZERO_EXTEND
+ or SIGN_EXTEND, don't record DEST since it can cause
+ some tracking to be wrong.
+
+ ??? Think about this more later. */
+ || (GET_CODE (dest) == SUBREG
+ && (GET_MODE_SIZE (GET_MODE (dest))
+ > GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest))))
+ && (GET_CODE (sets[i].src) == SIGN_EXTEND
+ || GET_CODE (sets[i].src) == ZERO_EXTEND)))
continue;
/* STRICT_LOW_PART isn't part of the value BEING set,