This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: m68k bootstrap problem


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]