aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-03-20 16:25:55 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2011-03-20 16:25:55 +0100
commit65e0a0f3c8867097b20f63a735ff6b5b3e9061f6 (patch)
tree7f8f0663d0a430e6aed8d6a485697e04cfe1e0a6 /gcc
parentb6a75dda1d4f961d86c6239326f95ad3a82ca68a (diff)
downloadgcc-65e0a0f3c8867097b20f63a735ff6b5b3e9061f6.zip
gcc-65e0a0f3c8867097b20f63a735ff6b5b3e9061f6.tar.gz
gcc-65e0a0f3c8867097b20f63a735ff6b5b3e9061f6.tar.bz2
re PR rtl-optimization/48156 (wrong code with -fcrossjumping)
PR rtl-optimization/48156 * df-core.c (df_get_bb_dirty): Use df_lr if df_live is NULL, assume df and df_lr are not NULL. * gcc.dg/pr48156.c: New test. From-SVN: r171195
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/df-core.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr48156.c45
4 files changed, 60 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 53820c1..5549bc1b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-03-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/48156
+ * df-core.c (df_get_bb_dirty): Use df_lr if df_live is NULL,
+ assume df and df_lr are not NULL.
+
2011-03-20 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
PR debug/48023
diff --git a/gcc/df-core.c b/gcc/df-core.c
index 36270bf..98c2088 100644
--- a/gcc/df-core.c
+++ b/gcc/df-core.c
@@ -1,6 +1,6 @@
/* Allocation for dataflow support routines.
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010 Free Software Foundation, Inc.
+ 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
Originally contributed by Michael P. Hayes
(m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
Major rewrite contributed by Danny Berlin (dberlin@dberlin.org)
@@ -1400,10 +1400,9 @@ df_mark_solutions_dirty (void)
bool
df_get_bb_dirty (basic_block bb)
{
- if (df && df_live)
- return bitmap_bit_p (df_live->out_of_date_transfer_functions, bb->index);
- else
- return false;
+ return bitmap_bit_p ((df_live
+ ? df_live : df_lr)->out_of_date_transfer_functions,
+ bb->index);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index eb1256a..cf81f1a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/48156
+ * gcc.dg/pr48156.c: New test.
+
2011-03-19 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR libfortran/47439
diff --git a/gcc/testsuite/gcc.dg/pr48156.c b/gcc/testsuite/gcc.dg/pr48156.c
new file mode 100644
index 0000000..7b4d529
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48156.c
@@ -0,0 +1,45 @@
+/* PR rtl-optimization/48156 */
+/* { dg-do run } */
+/* { dg-options "-O -fcrossjumping --param min-crossjump-insns=1" } */
+
+extern void abort (void);
+
+static int __attribute__ ((noinline, noclone))
+equals (int s1, int s2)
+{
+ return s1 == s2;
+}
+
+static int __attribute__ ((noinline, noclone))
+bar (void)
+{
+ return 1;
+}
+
+static void __attribute__ ((noinline, noclone))
+baz (int f, int j)
+{
+ if (f != 4 || j != 2)
+ abort ();
+}
+
+void
+foo (int x)
+{
+ int i = 0, j = bar ();
+
+ if (x == 1)
+ i = 2;
+
+ if (j && equals (i, j))
+ baz (8, i);
+ else
+ baz (4, i);
+}
+
+int
+main ()
+{
+ foo (1);
+ return 0;
+}