aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-10-13 04:03:24 +0000
committerRichard Stallman <rms@gnu.org>1993-10-13 04:03:24 +0000
commiteb5ad42ab31f67d1434271023648a2401380ff01 (patch)
tree75069734e14011aa5b613b0c7c1fb058e9dec004 /gcc
parentc9646177c95d6d64a52d1d393d741e0f127574ee (diff)
downloadgcc-eb5ad42ab31f67d1434271023648a2401380ff01.zip
gcc-eb5ad42ab31f67d1434271023648a2401380ff01.tar.gz
gcc-eb5ad42ab31f67d1434271023648a2401380ff01.tar.bz2
(record_jump_cond): At end, make missing equivalences
first, and then merge them. From-SVN: r5769
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cse.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 4f939fd..2f37876 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5670,42 +5670,37 @@ record_jump_cond (code, mode, op0, op1, reversed_nonequality)
return;
}
- /* If both are equivalent, merge the two classes. Save this class for
- `cse_set_around_loop'. */
- if (op0_elt && op1_elt)
- {
- merge_equiv_classes (op0_elt, op1_elt);
- last_jump_equiv_class = op0_elt;
- }
+ /* If either side is still missing an equivalence, make it now,
+ then merge the equivalences. */
- /* For whichever side doesn't have an equivalence, make one. */
if (op0_elt == 0)
{
- if (insert_regs (op0, op1_elt, 0))
+ if (insert_regs (op0, NULL_PTR, 0))
{
rehash_using_reg (op0);
op0_hash_code = HASH (op0, mode);
}
- op0_elt = insert (op0, op1_elt, op0_hash_code, mode);
+ op0_elt = insert (op0, NULL_PTR, op0_hash_code, mode);
op0_elt->in_memory = op0_in_memory;
op0_elt->in_struct = op0_in_struct;
- last_jump_equiv_class = op0_elt;
}
if (op1_elt == 0)
{
- if (insert_regs (op1, op0_elt, 0))
+ if (insert_regs (op1, NULL_PTR, 0))
{
rehash_using_reg (op1);
op1_hash_code = HASH (op1, mode);
}
- op1_elt = insert (op1, op0_elt, op1_hash_code, mode);
+ op1_elt = insert (op1, NULL_PTR, op1_hash_code, mode);
op1_elt->in_memory = op1_in_memory;
op1_elt->in_struct = op1_in_struct;
- last_jump_equiv_class = op1_elt;
}
+
+ merge_equiv_classes (op0_elt, op1_elt);
+ last_jump_equiv_class = op0_elt;
}
/* CSE processing for one instruction.