aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-06-26 07:20:30 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2005-06-26 07:20:30 +0200
commit03fd9aa2c7184aa67dbbbd9f1d546f395e0c67be (patch)
treed6a8888b030865f9765f3c891a74c2ae292e474b
parentf62c8a5c7996b97c736e3242de0d5527ec299a34 (diff)
downloadgcc-03fd9aa2c7184aa67dbbbd9f1d546f395e0c67be.zip
gcc-03fd9aa2c7184aa67dbbbd9f1d546f395e0c67be.tar.gz
gcc-03fd9aa2c7184aa67dbbbd9f1d546f395e0c67be.tar.bz2
regrename.c (copy_value): Don't replace fixed or global regs with older regs.
* regrename.c (copy_value): Don't replace fixed or global regs with older regs. From-SVN: r101330
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/regrename.c4
2 files changed, 7 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index db5ef09..aaccb6e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
2005-06-26 Jakub Jelinek <jakub@redhat.com>
+ * regrename.c (copy_value): Don't replace fixed or global
+ regs with older regs.
+
* defaults.h (FRAME_GROWS_DOWNWARD): Define to 0 if not defined.
* function.c (get_func_frame_size): Use if (FRAME_GROWS_DOWNWARD)
instead of preprocessor conditionals.
diff --git a/gcc/regrename.c b/gcc/regrename.c
index 0cfe552..91e9d71 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -1225,6 +1225,10 @@ copy_value (rtx dest, rtx src, struct value_data *vd)
if (frame_pointer_needed && dr == HARD_FRAME_POINTER_REGNUM)
return;
+ /* Likewise for fixed or global registers. */
+ if (fixed_regs[dr] || global_regs[dr])
+ return;
+
/* If SRC and DEST overlap, don't record anything. */
dn = hard_regno_nregs[dr][GET_MODE (dest)];
sn = hard_regno_nregs[sr][GET_MODE (dest)];