diff options
author | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-03 11:09:55 +0000 |
---|---|---|
committer | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-03 11:09:55 +0000 |
commit | 3c512ee77f31f8ede427bec820fdb36ba29cebaa (patch) | |
tree | d81a6525397ab505d39610eaf941b61b75e1676a /gcc | |
parent | 9e4a9ceb1f5906291c90701c1d203dbfd13ad8a1 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cse.c | 10 |
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 |