From 180bde4f78fdc3c07ed45f8219a130f94a214171 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 18 Nov 2002 12:35:15 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/config/sh/sh.c | 6 +++++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.c-torture/execute/20021118-1.c | 15 +++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/20021118-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7e810c52af8..7ab6bca3324 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-11-18 Richard Sandiford + + * config/sh/sh.c (calc_live_regs): Update check for PIC liveness + in compact code. + 2002-11-18 Richard Sandiford * config/sh/sh.md (initialize_trampoline): Do not force the diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 0ce5e06ce86..1b3f92d8a8b 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 ca431f1aa96..899f448e323 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-11-18 Richard Sandiford + + * gcc.c-torture/execute/20021118-1.c: New test. + 2002-11-16 Jakub Jelinek * 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 00000000000..0c1f800de76 --- /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); +} -- 2.30.2