aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2015-11-17 21:20:20 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2015-11-17 21:20:20 +0000
commitd534bf561ec589dc0b55e382bd75dcc7fed178bd (patch)
tree61d46e5bda78dd754da2636648d6443514972bea
parent9f50f67c0bcb8b0a1723c6ce132e9f3b93a9134e (diff)
downloadgcc-d534bf561ec589dc0b55e382bd75dcc7fed178bd.zip
gcc-d534bf561ec589dc0b55e382bd75dcc7fed178bd.tar.gz
gcc-d534bf561ec589dc0b55e382bd75dcc7fed178bd.tar.bz2
re PR target/66785 (internal compiler error in record_operand_use)
PR target/66785 * regrename.c (record_operand_use): Keep track of failed operands and stop appending if we see any. * regrename.h (struct operand_rr_info): Add a failed field and shrink n_chains to short. From-SVN: r230499
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/regrename.c7
-rw-r--r--gcc/regrename.h3
3 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 70e7f20..cdd7036 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2015-11-17 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR target/66785
+ * regrename.c (record_operand_use): Keep track of failed operands
+ and stop appending if we see any.
+ * regrename.h (struct operand_rr_info): Add a failed field and shrink
+ n_chains to short.
+
2015-11-17 Sandra Loosemore <sandra@codesourcery.com>
PR 48568
diff --git a/gcc/regrename.c b/gcc/regrename.c
index d41410a..e126fcc 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -203,8 +203,13 @@ mark_conflict (struct du_head *chains, unsigned id)
static void
record_operand_use (struct du_head *head, struct du_chain *this_du)
{
- if (cur_operand == NULL)
+ if (cur_operand == NULL || cur_operand->failed)
return;
+ if (head->cannot_rename)
+ {
+ cur_operand->failed = true;
+ return;
+ }
gcc_assert (cur_operand->n_chains < MAX_REGS_PER_ADDRESS);
cur_operand->heads[cur_operand->n_chains] = head;
cur_operand->chains[cur_operand->n_chains++] = this_du;
diff --git a/gcc/regrename.h b/gcc/regrename.h
index 77cc2fe..801e0d2 100644
--- a/gcc/regrename.h
+++ b/gcc/regrename.h
@@ -72,7 +72,8 @@ struct du_chain
struct operand_rr_info
{
/* The number of chains recorded for this operand. */
- int n_chains;
+ short n_chains;
+ bool failed;
/* Holds either the chain for the operand itself, or for the registers in
a memory operand. */
struct du_chain *chains[MAX_REGS_PER_ADDRESS];