This is the mail archive of the gcc-patches@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: PATCH: Loop to builtin call pass (builtinizer)


Hi Zdenek,

> > +	  NEXT_PASS (pass_builtinize);
> > +	  NEXT_PASS (pass_may_alias);
> 
> The pass_may_alias is not necessary.

At least in current implemetation i need may_alias pass. I have small
example that without may_alias pass fails. The example is:

int main (void)
{
  int i;
  float a[N] __attribute__ ((__aligned__(16)));
  float b[N] __attribute__ ((__aligned__(16)));

  for (i=0; i<N; i++) b[i] = 2; /* (a) */
  
  for (i = 1; i <= 256; i++) a[i] = b[i-1]; /* (b) */

  /* check results:  */
  for (i = 1; i <= 256; i++)
    {
      if (a[i] != i-1)
        abort1 (3);
    }
  
  return 0;
}

When i compile this example with "-ftree-vectorize
-ftree-loop-builtinize ..." than the check fails because dce_loop pass
remove all vecorized stmts in (a) that make vectorizer. Problem is
that after builinization of (b) a new stmt with __builtin_memcpy (a +
4, b, 256) has not VDEFs. May be you could help me and you can say
me what i am doing wrong that the new stmt has not VDEFs.

 Greetings

 Tomas


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