GREG Expansion Problem
Jim Wilson
wilson@specifixinc.com
Tue Jun 29 03:08:00 GMT 2004
Philip Brown wrote:
> ;; Register dispositions:
> 32 in 2 33 in 17 34 in 2 35 in 17 37 in 17 38 in 17
> 39 in 2
Greg (global register allocator in global.c) allocated pseudo-reg 32 to
hard reg 2.
> Spilling for insn 4.
> Using reg 2 for reload 0
> Reloads for insn # 4
> Reload 0: reload_out (SI) = (reg/v/f:SI 30)
> DATA_REGS, RELOAD_FOR_OUTPUT (opnum = 0)
> reload_out_reg: (reg/v/f:SI 30)
> reload_reg_rtx: (reg:SI 2 r2)
reload needed a spill reg, and choose to use r2. When r2 was made a
spill reg, all pseudo-regs allocated to r2 had to be spilled to the stack.
It is obviously bad for reload to choose as its first spill reg a
register which has already been used by greg. You should investigate
why this happened.
The spill reg choice is made in find_reg() in reload1.c. The regs are
ordered in order_regs_for_reload which should be looked at also.
The spills actually happen in finish_spills, which tries to rerun global
alloc to find another free register before putting the pseudo on the
stack. You might want to look at why this isn't working for you either.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com
More information about the Gcc
mailing list