diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-03-20 16:25:55 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-03-20 16:25:55 +0100 |
commit | 65e0a0f3c8867097b20f63a735ff6b5b3e9061f6 (patch) | |
tree | 7f8f0663d0a430e6aed8d6a485697e04cfe1e0a6 /gcc | |
parent | b6a75dda1d4f961d86c6239326f95ad3a82ca68a (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/df-core.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr48156.c | 45 |
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; +} |