summaryrefslogtreecommitdiff
path: root/gcc/regrename.c
diff options
context:
space:
mode:
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2015-11-17 21:20:20 +0000
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2015-11-17 21:20:20 +0000
commit3c28a3eb1de65dfec722f0064f1c9cdba9f65dbf (patch)
tree61d46e5bda78dd754da2636648d6443514972bea /gcc/regrename.c
parent79ff98c55e1b0b16aea12edd183f9c9eb8f73220 (diff)
downloadgcc-3c28a3eb1de65dfec722f0064f1c9cdba9f65dbf.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230499 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/regrename.c')
-rw-r--r--gcc/regrename.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/regrename.c b/gcc/regrename.c
index d41410a9348..e126fcc7403 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;