aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@redhat.com>2002-11-18 12:35:15 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2002-11-18 12:35:15 +0000
commit180bde4f78fdc3c07ed45f8219a130f94a214171 (patch)
treeb2c6499d86283af51031fc33d53928642c892e4b /gcc
parente300c78c25b7afa6ebf258572c015cccb4897e38 (diff)
downloadgcc-180bde4f78fdc3c07ed45f8219a130f94a214171.zip
gcc-180bde4f78fdc3c07ed45f8219a130f94a214171.tar.gz
gcc-180bde4f78fdc3c07ed45f8219a130f94a214171.tar.bz2
sh.c (calc_live_regs): Update check for PIC liveness in compact code.
* config/sh/sh.c (calc_live_regs): Update check for PIC liveness in compact code. From-SVN: r59212
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/sh/sh.c6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20021118-1.c15
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7e810c5..7ab6bca 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2002-11-18 Richard Sandiford <rsandifo@redhat.com>
+ * config/sh/sh.c (calc_live_regs): Update check for PIC liveness
+ in compact code.
+
+2002-11-18 Richard Sandiford <rsandifo@redhat.com>
+
* config/sh/sh.md (initialize_trampoline): Do not force the
trampoline address into R0_REGS here.
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 0ce5e06..1b3f92d 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -4456,7 +4456,11 @@ calc_live_regs (count_ptr, live_regs_mask)
&& reg != RETURN_ADDRESS_POINTER_REGNUM
&& reg != T_REG && reg != GBR_REG)
: (/* Only push those regs which are used and need to be saved. */
- regs_ever_live[reg] && ! call_used_regs[reg]))
+ (TARGET_SHCOMPACT
+ && flag_pic
+ && current_function_args_info.call_cookie
+ && reg == PIC_OFFSET_TABLE_REGNUM)
+ || (regs_ever_live[reg] && ! call_used_regs[reg])))
{
live_regs_mask[reg / 32] |= 1 << (reg % 32);
count += GET_MODE_SIZE (REGISTER_NATURAL_MODE (reg));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ca431f1..899f448 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-11-18 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.c-torture/execute/20021118-1.c: New test.
+
2002-11-16 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/20021116-1.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20021118-1.c b/gcc/testsuite/gcc.c-torture/execute/20021118-1.c
new file mode 100644
index 0000000..0c1f800
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20021118-1.c
@@ -0,0 +1,15 @@
+struct s { int f[4]; };
+
+int foo (struct s s, int x1, int x2, int x3, int x4, int x5, int x6, int x7)
+{
+ return s.f[3] + x7;
+}
+
+int main ()
+{
+ struct s s = { 1, 2, 3, 4 };
+
+ if (foo (s, 100, 200, 300, 400, 500, 600, 700) != 704)
+ abort ();
+ exit (0);
+}