On Thu, Oct 19, 2006 at 07:10:27PM +0200, Frank Riese wrote:
>
> when I -fdump-rtl-all-details, I get:
>
> function8.c.104r.expand function8.c.108r.initvals function8.c.111r.jump
> function8.c.106r.locators function8.c.105r.sibling
> function8.c.109r.unshare function8.c.110r.vregs
Something goes wrong during the vregs pass. This pass is the first one to
refer to your ARG_POINTER_REGNUM, if you have one, or else to your
FRAME_POINTER_REGNUM. Are you passing arguments in registers or on the
stack? From the dump files, I'd say in registers.
Also, looking at the insns added during the vregs pass, notice that some
of them use HImode registers. Have you forgotten to change something from
HImode to QImode? Maybe your Pmode? For example, this sequence is clearly
bogus, since the upper half of (reg:HI 17) is not initialized before use:
(insn 25 24 26 3 (clobber (reg:HI 17)) -1 (nil)
(nil))
(insn 26 25 27 3 (set (subreg:QI (reg:HI 17) 0)
(reg/f:QI 6 R[6])) -1 (nil)
(nil))
(insn 27 26 7 3 (set (reg:HI 18)
(plus:HI (reg:HI 17)
(const_int -2 [0xfffffffe]))) -1 (nil)
(nil))
In hindsight, I should have told you to set a breakpoint in the debugger
to see what outputs these two insns:
(insn 28 20 29 (set (reg/f:QI 20)
(subreg:QI (reg:HI 18) 0)) 3 {movqi} (nil)
(nil))
(insn 29 28 0 (set (reg:QI 19)
(mem/c/i:QI (reg/f:QI 20) [0 i+0 S1 A16])) 3 {movqi} (nil)
(nil))
Try
break make_insn_raw if cur_insn_uid >= 28
and get a backtrace from there. Go back a few frames, looking for a function
which uses macros or target hooks from your target.[ch], such as those in
<URL:http://gcc.gnu.org/onlinedocs/gccint/Stack-and-Calling.html>. And when
you hit the breakpoint, also
call debug_rtx (stack_pointer_rtx)
And btw, which GCC version?
--
Rask Ingemann Lambertsen