diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/reg-stack.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr52132.c | 18 |
4 files changed, 31 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f0056d8..bad4a05 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-02-11 Jakub Jelinek <jakub@redhat.com> + + PR debug/52132 + * reg-stack.c (subst_stack_regs_in_debug_insn): Don't use + get_true_reg. + 2012-02-11 Uros Bizjak <ubizjak@gmail.com> * compare-elim.c (find_comparisons_in_bb): Eliminate only compares diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index da7fe72..ce29fdc 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -1,6 +1,6 @@ /* Register to Stack convert for GNU compiler. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012 Free Software Foundation, Inc. This file is part of GCC. @@ -1323,14 +1323,10 @@ compare_for_stack_reg (rtx insn, stack regstack, rtx pat_src) static int subst_stack_regs_in_debug_insn (rtx *loc, void *data) { - rtx *tloc = get_true_reg (loc); stack regstack = (stack)data; int hard_regno; - if (!STACK_REG_P (*tloc)) - return 0; - - if (tloc != loc) + if (!STACK_REG_P (*loc)) return 0; hard_regno = get_hard_regnum (regstack, *loc); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bd91d58..0cd6876 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-02-11 Jakub Jelinek <jakub@redhat.com> + + PR debug/52132 + * gcc.dg/pr52132.c: New test. + 2012-02-10 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/specs/aggr4.ads: New test. diff --git a/gcc/testsuite/gcc.dg/pr52132.c b/gcc/testsuite/gcc.dg/pr52132.c new file mode 100644 index 0000000..8374994 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr52132.c @@ -0,0 +1,18 @@ +/* PR debug/52132 */ +/* { dg-do compile } */ +/* { dg-options "-std=c99 -O2 -g" } */ + +int l; +void bar (void); + +void +foo (int *x, float y) +{ + float b; + union { float f; int i; } u = { .f = y }; + u.i += 127 << 23; + u.f = ((-1.0f / 3) * u.f + 2) * u.f - 2.0f / 3; + b = 0.5 * (u.f + l); + if (b >= *x) + bar (); +} |