fix for 930621-1.c failure

John Wehle john@feith.com
Mon Oct 23 21:33:00 GMT 2000


I see what's happening, basically we have something like this:

  BB 1
    insn 5
      goto BB 3

  BB 2

    insn 27
      mem (reg 104) = ...

    ...

  BB 3
    insn 54
      reg 105 = high (symbol_ref ...)
    
    ...

    insn 57
      reg 104 = lo_sum (reg 105) (symbol_ref ...)

    insn 58
      goto BB 2

Working backwards update_equiv_regs encounters insn 57 so it emits
a copy of insn 54 and deletes insn 54.  Later update_equiv_regs
encounters insn 27 so it emits a copy of insn 57 and deletes insn 57.
It then encounters the copy of insn 57 so it attempts to emit the
equivalence for reg 105 however the old equivalence was deleted and
the new equivalence wasn't recorded so things get ugly.

Thanks for fixing this.  I'm somewhat embarassed that it slipped
through my testing. :-(

-- John
-------------------------------------------------------------------------
|   Feith Systems  |   Voice: 1-215-646-8000  |  Email: john@feith.com  |
|    John Wehle    |     Fax: 1-215-540-5495  |                         |
-------------------------------------------------------------------------



More information about the Gcc-patches mailing list