aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaz Kojima <kkojima@gcc.gnu.org>2009-03-25 22:23:27 +0000
committerKaz Kojima <kkojima@gcc.gnu.org>2009-03-25 22:23:27 +0000
commit9fdcdc749b18a96983ba060f35421147a7454bd5 (patch)
tree22e61eb660b189c7d00176ed720f0b02fa90e9f4
parent46994828ef5e85aab972e70cb955998c6bc8d0eb (diff)
downloadgcc-9fdcdc749b18a96983ba060f35421147a7454bd5.zip
gcc-9fdcdc749b18a96983ba060f35421147a7454bd5.tar.gz
gcc-9fdcdc749b18a96983ba060f35421147a7454bd5.tar.bz2
re PR target/39523 (SH: global registers are wrongly saved)
PR target/39523 * config/sh/sh.c (calc_live_regs): Fix condition for global registers except PIC_OFFSET_TABLE_REGNUM. From-SVN: r145077
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/sh/sh.c4
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b7d902..7d9fe81 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-25 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ PR target/39523
+ * config/sh/sh.c (calc_live_regs): Fix condition for global
+ registers except PIC_OFFSET_TABLE_REGNUM.
+
2009-03-25 Kai Tietz <kai.tietz@onevision.com>
PR/39518
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 3c57730..c8f4c85 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -5966,7 +5966,9 @@ calc_live_regs (HARD_REG_SET *live_regs_mask)
&& crtl->args.info.call_cookie
&& reg == PIC_OFFSET_TABLE_REGNUM)
|| (df_regs_ever_live_p (reg)
- && (!call_really_used_regs[reg]
+ && ((!call_really_used_regs[reg]
+ && !(reg != PIC_OFFSET_TABLE_REGNUM
+ && fixed_regs[reg] && call_used_regs[reg]))
|| (trapa_handler && reg == FPSCR_REG && TARGET_FPU_ANY)))
|| (crtl->calls_eh_return
&& (reg == EH_RETURN_DATA_REGNO (0)