aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@superh.com>2002-06-13 21:31:58 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2002-06-13 22:31:58 +0100
commit9d7ed8065dfc4e1d9c73872dc5af076bbb932ea1 (patch)
tree25a2eb6c231af3625be5d5fed4dd5fc41144cdf0 /gcc
parentb66377c173ecd444f4fb4f9737ee10a97084ad9a (diff)
downloadgcc-9d7ed8065dfc4e1d9c73872dc5af076bbb932ea1.zip
gcc-9d7ed8065dfc4e1d9c73872dc5af076bbb932ea1.tar.gz
gcc-9d7ed8065dfc4e1d9c73872dc5af076bbb932ea1.tar.bz2
sh.c (calc_live_regs): Don't use initial_value optimization for PR_MEDIA_REG.
* config/sh/sh.c (calc_live_regs): Don't use initial_value optimization for PR_MEDIA_REG. From-SVN: r54600
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/sh/sh.c19
2 files changed, 17 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d5270c8..05b3a05 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Jun 13 22:29:40 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * config/sh/sh.c (calc_live_regs): Don't use initial_value
+ optimization for PR_MEDIA_REG.
+
2002-06-13 Neil Booth <neil@daikokuya.demon.co.uk>
* cpphash.h (_cpp_lex_identifier_trad): Remove.
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index edd4c49..a9c2e82 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -4362,7 +4362,6 @@ calc_live_regs (count_ptr, live_regs_mask)
int reg;
int count;
int interrupt_handler;
- rtx pr_initial;
int pr_live;
if ((lookup_attribute
@@ -4385,12 +4384,18 @@ calc_live_regs (count_ptr, live_regs_mask)
target_flags &= ~FPU_SINGLE_BIT;
break;
}
- pr_initial = has_hard_reg_initial_val (Pmode,
- TARGET_SHMEDIA
- ? PR_MEDIA_REG : PR_REG);
- pr_live = (pr_initial
- ? REGNO (pr_initial) != (TARGET_SHMEDIA ? PR_MEDIA_REG : PR_REG)
- : regs_ever_live[TARGET_SHMEDIA ? PR_MEDIA_REG : PR_REG]);
+ /* PR_MEDIA_REG is a general purpose register, thus global_alloc already
+ knows how to use it. That means the pseudo originally allocated for
+ the initial value can become the PR_MEDIA_REG hard register, as seen for
+ execute/20010122-1.c:test9. */
+ if (TARGET_SHMEDIA)
+ pr_live = regs_ever_live[PR_MEDIA_REG];
+ else
+ {
+ rtx pr_initial = has_hard_reg_initial_val (Pmode, PR_REG);
+ pr_live = (pr_initial
+ ? REGNO (pr_initial) != (PR_REG) : regs_ever_live[PR_REG]);
+ }
/* Force PR to be live if the prologue has to call the SHmedia
argument decoder or register saver. */
if (TARGET_SHCOMPACT