aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2002-01-05 01:36:26 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2002-01-05 00:36:26 +0000
commit9f16e871d3cde2e2b027c9b8e3a6f5045e8fb349 (patch)
tree074f5987c3c005954ed0b46a1711c9014750dac9 /gcc
parent302d2f14391b84764e1338d9c4aa51b7a1e4637a (diff)
downloadgcc-9f16e871d3cde2e2b027c9b8e3a6f5045e8fb349.zip
gcc-9f16e871d3cde2e2b027c9b8e3a6f5045e8fb349.tar.gz
gcc-9f16e871d3cde2e2b027c9b8e3a6f5045e8fb349.tar.bz2
cfgcleanup.c: Include tm_p.h
* cfgcleanup.c: Include tm_p.h (mark_effect): Fix handling of hard register; fix handling of SET From-SVN: r48553
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/Makefile.in2
-rw-r--r--gcc/cfgcleanup.c31
3 files changed, 33 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bee90a4..5d0a8f9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Sat Jan 5 01:35:29 CET 2002 Jan Hubicka <jh@suse.cz>
+
+ * cfgcleanup.c: Include tm_p.h
+ (mark_effect): Fix handling of hard register; fix handling of SET
+
2002-01-04 Kazu Hirata <kazu@hxi.com>
* config/h8300/h8300.md (anonymous patterns): Check that
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 2fa38d7..ce5307d 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1477,7 +1477,7 @@ cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \
function.h except.h $(GGC_H)
cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TIMEVAR_H)\
$(BASIC_BLOCK_H) hard-reg-set.h output.h flags.h $(RECOG_H) toplev.h \
- $(GGC_H) insn-config.h cselib.h
+ $(GGC_H) insn-config.h cselib.h $(TM_P_H)
cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
$(BASIC_BLOCK_H) hard-reg-set.h
dominance.o : dominance.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) hard-reg-set.h \
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index 9803032..0a111a5 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -43,6 +43,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "recog.h"
#include "toplev.h"
#include "cselib.h"
+#include "tm_p.h"
#include "obstack.h"
@@ -192,21 +193,43 @@ mark_effect (exp, nonequal)
rtx exp;
regset nonequal;
{
+ int regno;
+ rtx dest;
switch (GET_CODE (exp))
{
/* In case we do clobber the register, mark it as equal, as we know the
value is dead so it don't have to match. */
case CLOBBER:
if (REG_P (XEXP (exp, 0)))
- CLEAR_REGNO_REG_SET (nonequal, REGNO (XEXP (exp, 0)));
+ {
+ dest = XEXP (exp, 0);
+ regno = REGNO (dest);
+ CLEAR_REGNO_REG_SET (nonequal, regno);
+ if (regno < FIRST_PSEUDO_REGISTER)
+ {
+ int n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
+ while (--n > 0)
+ CLEAR_REGNO_REG_SET (nonequal, regno + n);
+ }
+ }
return false;
case SET:
if (rtx_equal_for_cselib_p (SET_DEST (exp), SET_SRC (exp)))
return false;
- if (GET_CODE (SET_SRC (exp)) != REG)
+ dest = SET_DEST (exp);
+ if (dest == pc_rtx)
+ return false;
+ if (!REG_P (dest))
return true;
- SET_REGNO_REG_SET (nonequal, REGNO (SET_SRC (exp)));
+ regno = REGNO (dest);
+ SET_REGNO_REG_SET (nonequal, regno);
+ if (regno < FIRST_PSEUDO_REGISTER)
+ {
+ int n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
+ while (--n > 0)
+ SET_REGNO_REG_SET (nonequal, regno + n);
+ }
return false;
default:
@@ -292,7 +315,7 @@ thread_jump (mode, e, b)
processing as if it were same basic block.
Our goal is to prove that whole block is an NOOP. */
- for (insn = NEXT_INSN (b->head); insn != b->end && !failed;
+ for (insn = NEXT_INSN (b->head); insn != NEXT_INSN (b->end) && !failed;
insn = NEXT_INSN (insn))
{
if (INSN_P (insn))