summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2003-12-03 11:09:55 +0000
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2003-12-03 11:09:55 +0000
commit3c512ee77f31f8ede427bec820fdb36ba29cebaa (patch)
treed81a6525397ab505d39610eaf941b61b75e1676a /gcc
parent9e4a9ceb1f5906291c90701c1d203dbfd13ad8a1 (diff)
downloadgcc-3c512ee77f31f8ede427bec820fdb36ba29cebaa.tar.gz
PR target/11229
* cse.c (cse_insn): Set classp using src_const_elt if src_eqv_elt is NULL. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74225 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cse.c10
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1a51101435b..6c03f952283 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-12-03 Alan Modra <amodra@bigpond.net.au>
+
+ PR target/11229
+ * cse.c (cse_insn): Set classp using src_const_elt if
+ src_eqv_elt is NULL.
+
2003-12-03 Richard Earnshaw <rearnsha@arm.com>
* gcse.c (reg_clear_last_set): New function.
diff --git a/gcc/cse.c b/gcc/cse.c
index faaf187b32c..4b0f1eced4c 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5827,6 +5827,16 @@ cse_insn (rtx insn, rtx libcall_insn)
enum machine_mode mode
= GET_MODE (src) == VOIDmode ? GET_MODE (dest) : GET_MODE (src);
+ /* It's possible that we have a source value known to be
+ constant but don't have a REG_EQUAL note on the insn.
+ Lack of a note will mean src_eqv_elt will be NULL. This
+ can happen where we've generated a SUBREG to access a
+ CONST_INT that is already in a register in a wider mode.
+ Ensure that the source expression is put in the proper
+ constant class. */
+ if (!classp)
+ classp = sets[i].src_const_elt;
+
if (sets[i].src_elt == 0)
{
/* Don't put a hard register source into the table if this is