diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-03-30 22:16:52 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-03-30 22:16:52 +0200 |
commit | 03a5f060b9bdcf4520645cb4e6c15297e3eea060 (patch) | |
tree | 62931f856516f4b4de948b98b3788cef3bad0e7d /gcc | |
parent | 8533c9d8ac498572eec1978b30860b487e47ade3 (diff) | |
download | gcc-03a5f060b9bdcf4520645cb4e6c15297e3eea060.zip gcc-03a5f060b9bdcf4520645cb4e6c15297e3eea060.tar.gz gcc-03a5f060b9bdcf4520645cb4e6c15297e3eea060.tar.bz2 |
re PR debug/43593 (Var-tracking unnecessarily flushes all call used registers on calls instead of regs invalidated by call)
PR debug/43593
* var-tracking.c (dataflow_set_clear_at_call): Invalidate
just regs_invalidated_by_call instead all call_used_reg_set
registers.
* gcc.dg/guality/pr43593.c: New test.
From-SVN: r157834
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/guality/pr43593.c | 24 | ||||
-rw-r--r-- | gcc/var-tracking.c | 2 |
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a533a7f..cddbce7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-03-30 Jakub Jelinek <jakub@redhat.com> + + PR debug/43593 + * var-tracking.c (dataflow_set_clear_at_call): Invalidate + just regs_invalidated_by_call instead all call_used_reg_set + registers. + 2010-03-30 Sebastian Pop <sebastian.pop@amd.com> PR middle-end/43430 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c9ede61..a7af1c6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-03-30 Jakub Jelinek <jakub@redhat.com> + + PR debug/43593 + * gcc.dg/guality/pr43593.c: New test. + 2010-03-30 Sebastian Pop <sebastian.pop@amd.com> PR middle-end/43430 diff --git a/gcc/testsuite/gcc.dg/guality/pr43593.c b/gcc/testsuite/gcc.dg/guality/pr43593.c new file mode 100644 index 0000000..d8cc413 --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr43593.c @@ -0,0 +1,24 @@ +/* PR debug/43593 */ +/* { dg-do run } */ +/* { dg-options "-g" } */ + +void __attribute__((noinline)) +bar (int *p) +{ + asm volatile ("" : : "r" (p) : "memory"); +} + +int __attribute__((noinline)) +foo (void) +{ + int i, *j = &i; + bar (j); + return 6 + i; /* { dg-final { gdb-test 16 "j" "&i" } } */ +} + +int +main (void) +{ + foo (); + return 0; +} diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index bff7d11..e0f7229 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -4170,7 +4170,7 @@ dataflow_set_clear_at_call (dataflow_set *set) int r; for (r = 0; r < FIRST_PSEUDO_REGISTER; r++) - if (TEST_HARD_REG_BIT (call_used_reg_set, r)) + if (TEST_HARD_REG_BIT (regs_invalidated_by_call, r)) var_regno_delete (set, r); if (MAY_HAVE_DEBUG_INSNS) |