This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Unable to generate reloads
- To: Joern Rennecke <amylaar at onetel dot net dot uk>
- Subject: Re: Unable to generate reloads
- From: Lars Brinkhoff <lars dot spam at nocrew dot org>
- Date: 24 Sep 2001 11:40:54 +0200
- Cc: gcc at gcc dot gnu dot org
- Organization: nocrew
- References: <200109220414.FAA29152@meolyon.local>
Joern Rennecke <amylaar@onetel.net.uk> writes:
> > testsuite/gcc.c-torture/compile/920625-1.c:279: Unable to generate reloads for:
> > (jump_insn 45 4975 5103 (parallel[
> > (set (pc)
> > (if_then_else (ge (reg:SI 1217)
> > (const_int 0 [0x0]))
> > (label_ref 48)
> > (pc)))
> > (set (reg/v:SI 30)
> > (reg:SI 1217))
> > ] ) 68 {*move_and_skipsi} (nil)
> > (expr_list:REG_DEAD (reg:SI 1217)
> > (expr_list:REG_BR_PROB (const_int 8900 [0x22c4])
> > (nil))))
> > How do I avoid this error?
> It depends. How many GENERAL_REGS spill registers are available?
There are 16 GENERAL_REGS, and at the point of error, n_spills = 0.
> What are the allocations / equivalences for pseudos 30 and 1217,
reg_renumber[30] = -1
reg_renumber[1217] = -1
reg_equiv_mem[30] = (mem:SI (plus:SI (reg/f:SI 15) (const_int -312)))
reg_equiv_mem[1217] = (mem:SI (plus:SI (reg/f:SI 15) (const_int -16)))
(reg/f:SI 15) is the stack pointer.
> and what addressing modes are available to address them?
reg:SI, (plus:SI reg:SI const_int), and (mem:SI (plus:SI reg:SI const_int))
are all valid addresses when the const_int offset is small enough.
> Dou you need secondary reload registers and / or secondary memory?
No, all registers can be moved directly to/from memory and other
register.
> What are the values of the pertaining register elimination offsets
> at this point, if there are any?
reg_eliminate[0] =
{ from = 13, to = 15, initial_offset = -2216, can_eliminate = 1,
can_eliminate_previous = 1, offset = -2216, previous_offset = -2216,
ref_outside_mem = 0, from_frx = 0x3002a018, to_rtx = 0x3001a000 }
> P.S.: if you have a HAVE_cc0 port, don't use that pattern. It can't be
> made to work.
No, it's not a HAVE_cc0 port.