On 10/16/07, David Miller <[EMAIL PROTECTED]> wrote:
> From: David Miller <[EMAIL PROTECTED]>
> Date: Tue, 16 Oct 2007 03:12:23 -0700 (PDT)
>
> > I have a bug I'm trying to investigate where, starting in gcc-4.2.x,
> > the loop invariant pass considers a computation involving a global
> > register variable as invariant across a call.  The basic structure
> > of the code is:
>
> Here is the most simplified test case I could come up with,
> compile it with "-m64 -Os" on sparc.  expression(regval) is
> moved to before the loop by loop-invariant
>
> register unsigned long regval asm("g5");
>
> extern void cond_resched(void);
>
> unsigned int var;
>
> void *expression(unsigned long regval)
> {
>   void *ret;
>
>   __asm__("" : "=r" (ret) : "0" (&var));
>   return ret + regval;
> }
>
> void func(void **pp)
> {
>   int i;
>
>   for (i = 0; i < 56; i++) {
>     cond_resched();
>     *pp = expression(regval);
>   }
> }

loop-invariant.cc uses ud-chain.
So if there's something wrong with the chain,
it could go nuts.
Can you send me the rtl dump of loop2_invariant pass ?
-- 
#pragma ident "Seongbae Park, compiler, http://seongbae.blogspot.com";

Reply via email to