OSDN Git Service

PR debug/44178
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 May 2010 16:34:43 +0000 (16:34 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 May 2010 16:34:43 +0000 (16:34 +0000)
* haifa-sched.c (initiate_bb_reg_pressure_info): Do not call
setup_ref_regs for DEBUG_INSNs.

* g++.dg/debug/pr44178.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159632 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/haifa-sched.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/debug/pr44178.C [new file with mode: 0644]

index 5f96aa7..769697c 100644 (file)
@@ -1,3 +1,9 @@
+2010-05-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/44178
+       * haifa-sched.c (initiate_bb_reg_pressure_info): Do not call
+       setup_ref_regs for DEBUG_INSNs.
+
 2010-05-20  Jan Hubicka  <jh@suse.cz>
 
        PR middle-end/44197
index 8bea5e3..f7c087f 100644 (file)
@@ -718,7 +718,7 @@ initiate_bb_reg_pressure_info (basic_block bb)
 
   if (current_nr_blocks > 1)
     FOR_BB_INSNS (bb, insn)
-      if (INSN_P (insn))
+      if (NONDEBUG_INSN_P (insn))
        setup_ref_regs (PATTERN (insn));
   initiate_reg_pressure_info (df_get_live_in (bb));
 #ifdef EH_RETURN_DATA_REGNO
index ddeef01..d50e8ba 100644 (file)
@@ -1,3 +1,8 @@
+2010-05-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/44178
+       * g++.dg/debug/pr44178.C: New test.
+
 2010-05-20  Changpeng Fang  <changpeng.fang@amd.com>
 
        PR middle-end/44185
diff --git a/gcc/testsuite/g++.dg/debug/pr44178.C b/gcc/testsuite/g++.dg/debug/pr44178.C
new file mode 100644 (file)
index 0000000..2df5669
--- /dev/null
@@ -0,0 +1,39 @@
+// PR debug/44178
+// { dg-do compile }
+// { dg-options "-funroll-loops -fcompare-debug" { target i?86-*-* x86_64-*-* } }
+// { dg-options "-fsched-pressure -funroll-loops -fschedule-insns -fcompare-debug" { target i?86-*-* x86_64-*-* } }
+
+struct A
+{
+  A ();
+  A (const A &) {}
+  A &operator = (const A &);
+};
+
+struct B
+{
+  int u1;
+  A u2;
+  int u3;
+  int i;
+};
+
+B f1 (int *);
+B f2 (int, int, int, int);
+B f3 (B *, B *);
+
+B
+f4 (int x, int y, int z)
+{
+  B b1, b2;
+  for (int i = x; i > 0; i--)
+    for (int j = y; j > 0; j--)
+      {
+       int k;
+       f1 (&k);
+       b2 = f2 (i, 0, 0, z);
+       if (b2.i) return b2;
+       f3 (&b1, &b2);
+      }
+  return b1;
+}