aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-08-14 09:43:09 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2012-08-14 09:43:09 +0200
commitdbabddf32d99e53e3dd0953267b87939ecb014f9 (patch)
treea87c4f8fcc9426a38fd7339d86bb53c8fcb39056 /gcc
parent2ad74f71d118d54173823e46394facb3e6087818 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/ira.c6
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr53411.c33
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr53495.c41
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
diff --git a/gcc/ira.c b/gcc/ira.c
index a209894..5000d43 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -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;
+}