aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/reg-stack.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr52132.c18
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 ();
+}