From e190027feb2cfd1e1f9120d8f461db1e1e35512a Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 19 Dec 2007 10:05:47 +0000 Subject: [PATCH] 200x-xx-xx Kaz Kylheku gcc/ 200x-xx-xx Kaz Kylheku PR rtl-optimization/34456 * resource.c (mark_set_resources): Use regs_invalidated_by_call rather than call_used_regs and global_regs. gcc/testsuite/ PR rtl-optimization/34456 * gcc.c-torture/execute/pr34456.c: New test. From-SVN: r131058 --- gcc/ChangeLog | 6 ++++ gcc/resource.c | 5 ++-- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.c-torture/execute/pr34456.c | 30 +++++++++++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr34456.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 004fe65d8053..5032716fefc2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-12-19 Kaz Kylheku + + PR rtl-optimization/34456 + * resource.c (mark_set_resources): Use regs_invalidated_by_call + rather than call_used_regs and global_regs. + 2007-11-29 Matthias Klose Backport from mainline: diff --git a/gcc/resource.c b/gcc/resource.c index 95f1628a006d..4eefab6c90b9 100644 --- a/gcc/resource.c +++ b/gcc/resource.c @@ -664,9 +664,8 @@ mark_set_resources (rtx x, struct resources *res, int in_dest, rtx link; res->cc = res->memory = 1; - for (r = 0; r < FIRST_PSEUDO_REGISTER; r++) - if (call_used_regs[r] || global_regs[r]) - SET_HARD_REG_BIT (res->regs, r); + + IOR_HARD_REG_SET (res->regs, regs_invalidated_by_call); for (link = CALL_INSN_FUNCTION_USAGE (x); link; link = XEXP (link, 1)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7b78678753e6..ba211dfe0fc7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-12-19 Richard Sandiford + + PR rtl-optimization/34456 + * gcc.c-torture/execute/pr34456.c: New test. + 2007-11-29 Matthias Klose Backport from mainline: diff --git a/gcc/testsuite/gcc.c-torture/execute/pr34456.c b/gcc/testsuite/gcc.c-torture/execute/pr34456.c new file mode 100644 index 000000000000..526c954e55ad --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr34456.c @@ -0,0 +1,30 @@ +#include + +int __attribute__ ((noinline)) debug (void) { return 1; } +int errors; + +struct s { int elt; int (*compare) (int); }; + +static int +compare (const void *x, const void *y) +{ + const struct s *s1 = x, *s2 = y; + int (*compare1) (int); + int elt2; + + compare1 = s1->compare; + elt2 = s2->elt; + if (elt2 != 0 && debug () && compare1 (s1->elt) != 0) + errors++; + return compare1 (elt2); +} + +int bad_compare (int x) { return -x; } +struct s array[2] = { { 1, bad_compare }, { -1, bad_compare } }; + +int +main (void) +{ + qsort (array, 2, sizeof (struct s), compare); + return errors == 0; +} -- 2.47.2