This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: m68k bootstrap problem
- From: Kenneth Zadeck <zadeck at naturalbridge dot com>
- To: Roman Zippel <zippel at linux-m68k dot org>
- Cc: gcc at gcc dot gnu dot org
- Date: Tue, 19 Jun 2007 09:41:12 -0400
- Subject: Re: m68k bootstrap problem
- References: <Pine.LNX.4.64.0706191316120.1817@scrub.home>
Roman Zippel wrote:
> Hi,
>
> m68k currently doesn't bootstrap, which I think is dataflow related, the
> whole precompiled file is at http://www.xs4all.nl/~zippel/expmed.i.gz, but
> the small test below should be enough to demonstrate the problem
> (although it doesn't crash):
>
> int fi1(int);
> int fi2(int);
> void *fp1(int, void *);
> void *fp2(int, int);
>
> void *f(int x, int a, int b)
> {
> if (x) {
> int y = fi1(1);
> void *p;
> y += fi2(3);
> p = fp1(2, 0);
> return fp1(y, p);
> } else {
> int z = fi2(2);
> z += fi1(z);
> return fp2(z, 3);
> }
> }
>
> The function is exited here via a sibcall, one important thing is that
> current_function_return_rtx is set to:
>
> (parallel/i:SI [
> (expr_list:REG_DEP_TRUE (reg:SI 8 %a0 [ <result> ])
> (const_int 0 [0x0]))
> (expr_list:REG_DEP_TRUE (reg:SI 0 %d0 [ <result> ])
> (const_int 0 [0x0]))
> ])
>
> This means the return value is returned in both %d0/%a0.
>
> The problem is now that this seems to produce incorrect REG_DEAD notes for
> %d0, they are missing at the last use before the sibcall. This now seems
> to confuse reload in the full test case, where it calls
> save_call_clobbered_regs(), which can't quite decide whether to save %d0
> across a function call or not.
> setup_save_areas() doesn't create a stack slot for %d0 because it's not
> associated with a pseudo which lives across a function call, but later in
> save_call_clobbered_regs() %d0 is still live at a function call and it
> attempts to save the register, which fails due to the missing stack slot.
>
> AFAICT this behaviour is correct, the question is now how do I get
> correct REG_DEAD notes? It seems to be related to the unusual return
> expression above, but at this point I need some help to fix this.
>
> bye, Roman
>
roman do i need any patches to apply before trying this. also what are
the config options i need?
kenny