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