diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-08-14 09:43:09 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-08-14 09:43:09 +0200 |
commit | dbabddf32d99e53e3dd0953267b87939ecb014f9 (patch) | |
tree | a87c4f8fcc9426a38fd7339d86bb53c8fcb39056 /gcc | |
parent | 2ad74f71d118d54173823e46394facb3e6087818 (diff) | |
download | gcc-dbabddf32d99e53e3dd0953267b87939ecb014f9.zip gcc-dbabddf32d99e53e3dd0953267b87939ecb014f9.tar.gz gcc-dbabddf32d99e53e3dd0953267b87939ecb014f9.tar.bz2 |
re PR middle-end/53411 (ICE in move_unallocated_pseudos)
PR middle-end/53411
PR rtl-optimization/53495
* ira.c (ira): Move delete_trivially_dead_insns call before
find_moveable_pseudos call.
* gcc.c-torture/compile/pr53411.c: New test.
* gcc.c-torture/compile/pr53495.c: New test.
From-SVN: r190376
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ira.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr53411.c | 33 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr53495.c | 41 |
5 files changed, 91 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dde7c78f..f24b84a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-08-14 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/53411 + PR rtl-optimization/53495 + * ira.c (ira): Move delete_trivially_dead_insns call before + find_moveable_pseudos call. + 2012-08-13 Steven Bosscher <steven@gcc.gnu.org> * tree-ssa-pre.c (do_regular_insertion): Add FIXME markers at points @@ -4206,6 +4206,9 @@ ira (FILE *f) allocated_reg_info_size = max_reg_num (); + if (delete_trivially_dead_insns (get_insns (), max_reg_num ())) + df_analyze (); + /* It is not worth to do such improvement when we use a simple allocation because of -O0 usage or because the function is too big. */ @@ -4288,9 +4291,6 @@ ira (FILE *f) check_allocation (); #endif - if (delete_trivially_dead_insns (get_insns (), max_reg_num ())) - df_analyze (); - if (max_regno != max_regno_before_ira) { regstat_free_n_sets_and_refs (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1117d9a..e1e1283 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2012-08-14 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/53411 + PR rtl-optimization/53495 + * gcc.c-torture/compile/pr53411.c: New test. + * gcc.c-torture/compile/pr53495.c: New test. + 2012-08-13 Richard Guenther <rguenther@suse.de> * gcc.dg/tree-prof/update-loopch.c: Adjust. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53411.c b/gcc/testsuite/gcc.c-torture/compile/pr53411.c new file mode 100644 index 0000000..e88ecbc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr53411.c @@ -0,0 +1,33 @@ +/* PR middle-end/53411 */ + +int a, b, c, d, e, f, g, h; +void fn1 (void); +int fn2 (void); + +int +fn3 (x) + int x; +{ + return a ? 0 : x; +} + +void +fn4 (char x) +{ + int i, j, k; + for (; e; e++) + if (fn2 ()) + { + f = 1; + k = 0; + for (; k <= 1; k++) + { + j = ~x; + i = f * j; + h = (fn3 (i | 0 <= c ^ 9L) != b | d) & 8; + g = x | 1; + fn1 (); + } + } + c = x; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53495.c b/gcc/testsuite/gcc.c-torture/compile/pr53495.c new file mode 100644 index 0000000..9570131 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr53495.c @@ -0,0 +1,41 @@ +/* PR rtl-optimization/53495 */ + +int a, b, c, d, e, g; +static char +fn1 (char p1, int p2) +{ + return p1 || p2 < 0 || p2 >= 1 || 1 >> p2 ? p1 : 0; +} + +static long long fn2 (int *, int); +static int fn3 (); +void +fn4 () +{ + fn3 (); + fn2 (&a, d); +} + +long long +fn2 (int *p1, int p2) +{ + int f = -1L; + for (; c <= 1; c++) + { + *p1 = 0; + *p1 = fn1 (c, p2 ^ f); + } + a = 0; + e = p2; + return 0; +} + +int +fn3 () +{ + b = 3; + for (; b; b--) + c++; + g = 0 >= c; + return 0; +} |