diff options
author | Bernd Schmidt <bernds@redhat.co.uk> | 2000-11-28 16:19:55 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2000-11-28 16:19:55 +0000 |
commit | 77ea49a4945586becd775f3051bdfa93e617204c (patch) | |
tree | 61257981c2e19cb4db6927691be50326872840a7 /gcc | |
parent | c5c0b3d96ce12e0d396b0d2181fbed578191de87 (diff) | |
download | gcc-77ea49a4945586becd775f3051bdfa93e617204c.zip gcc-77ea49a4945586becd775f3051bdfa93e617204c.tar.gz gcc-77ea49a4945586becd775f3051bdfa93e617204c.tar.bz2 |
Ignore SETs that are anything except REG or MEM, but look inside STRICT_LOW_PART.
From-SVN: r37819
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/simplify-rtx.c | 29 |
2 files changed, 26 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 506fae6..90531da 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-11-28 Bernd Schmidt <bernds@redhat.co.uk> + + * simplify-rtx.c (cselib_record_sets): Ignore sets whose destination + is anything but REG or MEM, but look inside STRICT_LOW_PART. + Tue Nov 28 09:53:50 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * system.h (IS_DIR_SEPARATOR): Use uppercase macro name. diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index d7b43d1..08ceaf7 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -3198,13 +3198,22 @@ cselib_record_sets (insn) locations that are written. */ for (i = 0; i < n_sets; i++) { - sets[i].src_elt = cselib_lookup (sets[i].src, GET_MODE (sets[i].dest), - 1); - if (GET_CODE (sets[i].dest) == MEM) - sets[i].dest_addr_elt = cselib_lookup (XEXP (sets[i].dest, 0), Pmode, - 1); - else - sets[i].dest_addr_elt = 0; + rtx dest = sets[i].dest; + + /* A STRICT_LOW_PART can be ignored; we'll record the equivalence for + the low part after invalidating any knowledge about larger modes. */ + if (GET_CODE (sets[i].dest) == STRICT_LOW_PART) + sets[i].dest = dest = XEXP (dest, 0); + + /* We don't know how to record anything but REG or MEM. */ + if (GET_CODE (dest) == REG || GET_CODE (dest) == MEM) + { + sets[i].src_elt = cselib_lookup (sets[i].src, GET_MODE (dest), 1); + if (GET_CODE (dest) == MEM) + sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0), Pmode, 1); + else + sets[i].dest_addr_elt = 0; + } } /* Invalidate all locations written by this insn. Note that the elts we @@ -3214,7 +3223,11 @@ cselib_record_sets (insn) /* Now enter the equivalences in our tables. */ for (i = 0; i < n_sets; i++) - cselib_record_set (sets[i].dest, sets[i].src_elt, sets[i].dest_addr_elt); + { + rtx dest = sets[i].dest; + if (GET_CODE (dest) == REG || GET_CODE (dest) == MEM) + cselib_record_set (dest, sets[i].src_elt, sets[i].dest_addr_elt); + } } /* Record the effects of INSN. */ |