From 03f43d3d3c6909ead8325e86a947f66ba8b83141 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Wed, 3 Nov 2010 09:38:42 +0100
Subject: [PATCH] re PR debug/46252 (-fcompare-debug failure (length) with -O
 -frerun-cse-after-loop -fno-tree-loop-optimize -funroll-loops)

	PR debug/46252
	* reload1.c (delete_dead_insn): Use prev_active_insn instead of
	prev_real_insn.
	* gcse.c (insert_insn_end_basic_block): Likewise.

	* gcc.dg/pr46252.c: New test.

From-SVN: r166232
---
 gcc/ChangeLog                  |  5 +++++
 gcc/gcse.c                     |  2 +-
 gcc/reload1.c                  |  2 +-
 gcc/testsuite/ChangeLog        |  3 +++
 gcc/testsuite/gcc.dg/pr46252.c | 15 +++++++++++++++
 5 files changed, 25 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/pr46252.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2ccafe183386..275d476343f2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
 2010-11-03  Jakub Jelinek  <jakub@redhat.com>
 
+	PR debug/46252
+	* reload1.c (delete_dead_insn): Use prev_active_insn instead of
+	prev_real_insn.
+	* gcse.c (insert_insn_end_basic_block): Likewise.
+
 	PR rtl-optimization/46034
 	PR rtl-optimization/46212
 	PR rtl-optimization/46248
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 39a5d223338e..70f0fac0ed4a 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -3574,7 +3574,7 @@ insert_insn_end_basic_block (struct expr *expr, basic_block bb)
 	 the new instruction just before the tablejump.  */
       if (GET_CODE (PATTERN (insn)) == ADDR_VEC
 	  || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
-	insn = prev_real_insn (insn);
+	insn = prev_active_insn (insn);
 
 #ifdef HAVE_cc0
       /* FIXME: 'twould be nice to call prev_cc0_setter here but it aborts
diff --git a/gcc/reload1.c b/gcc/reload1.c
index c8fd33a62a89..7fd88c1f43a6 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -2112,7 +2112,7 @@ spill_failure (rtx insn, enum reg_class rclass)
 static void
 delete_dead_insn (rtx insn)
 {
-  rtx prev = prev_real_insn (insn);
+  rtx prev = prev_active_insn (insn);
   rtx prev_dest;
 
   /* If the previous insn sets a register that dies in our insn, delete it
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 439dd5ccc51c..bb14d86f3969 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
 2010-11-03  Jakub Jelinek  <jakub@redhat.com>
 
+	PR debug/46252
+	* gcc.dg/pr46252.c: New test.
+
 	PR rtl-optimization/46034
 	PR rtl-optimization/46212
 	PR rtl-optimization/46248
diff --git a/gcc/testsuite/gcc.dg/pr46252.c b/gcc/testsuite/gcc.dg/pr46252.c
new file mode 100644
index 000000000000..70bf21d6c079
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr46252.c
@@ -0,0 +1,15 @@
+/* PR debug/46252 */
+/* { dg-do compile } */
+/* { dg-options "-O -frerun-cse-after-loop -fno-tree-loop-optimize -funroll-loops -fcompare-debug" } */
+
+void
+foo (float *f)
+{
+  int i;
+  for (i = 0; i < 4; i++)
+    f[i] = i;
+  bar ();
+  for (i = 0; i < 4; i++)
+    if (f[i] != i)
+      __builtin_abort ();
+}
-- 
GitLab