diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9140a298da0..51ac12203e0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2002-05-17 David S. Miller + + PR c/6689, PR optimization/6615 + * local-alloc.c (struct equivalence): Rename 'src' to 'src_p' + and make it a pointer to rtx. Update comments. + (update_equiv_regs): When scanning for equivalences, record + address of SET_SRC (set) in reg_equiv[].src_p. Dereference + it while making the equiv replacements. + 2002-05-17 Rainer Orth * config/sparc/sparc.c (sparc_aout_select_section): Fixed typo. diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c index cd216f96d0f..d4aa8bbdb65 100644 --- a/gcc/local-alloc.c +++ b/gcc/local-alloc.c @@ -245,7 +245,7 @@ static rtx this_insn; struct equivalence { /* Set when an attempt should be made to replace a register - with the associated src entry. */ + with the associated src_p entry. */ char replace; @@ -255,7 +255,7 @@ struct equivalence rtx replacement; - rtx src; + rtx *src_p; /* Loop depth is used to recognize equivalences which appear to be present within the same loop (or in an inner loop). */ @@ -1005,7 +1005,7 @@ update_equiv_regs () recorded_label_ref = 1; reg_equiv[regno].replacement = XEXP (note, 0); - reg_equiv[regno].src = src; + reg_equiv[regno].src_p = &SET_SRC (set); reg_equiv[regno].loop_depth = loop_depth; /* Don't mess with things live during setjmp. */ @@ -1087,7 +1087,7 @@ update_equiv_regs () if (asm_noperands (PATTERN (equiv_insn)) < 0 && validate_replace_rtx (regno_reg_rtx[regno], - reg_equiv[regno].src, insn)) + *(reg_equiv[regno].src_p), insn)) { rtx equiv_link; rtx last_link;