diff options
author | Bernd Schmidt <bernds@redhat.com> | 2015-11-17 21:20:20 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2015-11-17 21:20:20 +0000 |
commit | d534bf561ec589dc0b55e382bd75dcc7fed178bd (patch) | |
tree | 61d46e5bda78dd754da2636648d6443514972bea /gcc/regrename.c | |
parent | 9f50f67c0bcb8b0a1723c6ce132e9f3b93a9134e (diff) | |
download | gcc-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
Diffstat (limited to 'gcc/regrename.c')
-rw-r--r-- | gcc/regrename.c | 7 |
1 files changed, 6 insertions, 1 deletions
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; |