200x-xx-xx Kaz Kylheku <kaz@zeugmasystems.com>

gcc/
200x-xx-xx  Kaz Kylheku  <kaz@zeugmasystems.com>

	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: r131033
This commit is contained in:
Richard Sandiford 2007-12-18 07:40:17 +00:00
parent b6541c1068
commit eef75f5ec0
4 changed files with 43 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2007-12-18 Kaz Kylheku <kaz@zeugmasystems.com>
PR rtl-optimization/34456
* resource.c (mark_set_resources): Use regs_invalidated_by_call
rather than call_used_regs and global_regs.
2007-12-18 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/34490

View File

@ -663,9 +663,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))

View File

@ -1,3 +1,8 @@
2007-12-18 Richard Sandiford <rsandifo@nildram.co.uk>
PR rtl-optimization/34456
* gcc.c-torture/execute/pr34456.c: New test.
2007-12-18 Jakub Jelinek <jakub@redhat.com>
PR c++/34488

View File

@ -0,0 +1,30 @@
#include <stdlib.h>
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;
}