reload segfault

Jeffrey A Law law@hurl.cygnus.com
Fri Jan 29 08:02:00 GMT 1999


  In message < 36B176BE.40047244@taniwha.tssc.co.nz >you write:
  > Sorry, I grabbed the wrong insn dump in my previous message.
  > 
  > (insn 4723 4720 2962 (set (reg:DF 54 f22)
  >         (reg:DF 839)) 74 {movstrsi+2} (nil)
  >     (nil))
  > 
  > (gdb) p *reg_n_info.data.reg[839]
  > $3 = {first_uid = 4049, last_uid = 2962, last_note_uid = 2962, sets = 1, 
  >   refs = 5, deaths = 0, live_length = 236, calls_crossed = 6, 
  >   basic_block = -2, changes_size = 0 '\000'}
  > (gdb) p reg_renumber[839]
  > $4 = -1
  > (gdb) p reg_equiv_mem[839]
  > $5 = (rtx_def *) 0x0
  > (gdb) 
A bad sign.  You should also probably check reg_equiv_constant[839]

Basically 839 didn't get a hard reg or a stack slot.  There's not many ways
that can/should happen. 

You might want to put a breakpoints in this code from reload1.c and try to
sort out what's going on (then work forwards or backwards in reload1.c
depending on what you find)

      /* For each pseudo register that has an equivalent location defined,
         try to eliminate any eliminable registers (such as the frame pointer)
         assuming initial offsets for the replacement register, which
         is the normal case.

         If the resulting location is directly addressable, substitute
         the MEM we just got directly for the old REG.
[ ... ]

      for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
        if (reg_renumber[i] < 0 && reg_equiv_memory_loc[i])




jeff




More information about the Gcc mailing list