[Bug tree-optimization/65310] New: vectorizer uses wrong alignment

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Mar 4 11:28:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65310

            Bug ID: 65310
           Summary: vectorizer uses wrong alignment
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rguenth at gcc dot gnu.org

Noticed by Jan Hubicka in PR65270:

Hi,
while looking for a testcase that would trigger with tree-tail-merge (because
gimple-fold seems to also miss MEM_REF merging) I noticed following oddity:

struct a 
{
  int a[100000];
};
typedef struct a b __attribute__ ((aligned (32)));
typedef struct a c __attribute__ ((aligned (8)));
typedef struct a d __attribute__ ((aligned (32)));

__attribute__ ((used))
t(b *a, int aligned, b *d)
{
  int i,v;
        c *ptr = a;
  for (i=0;i<100000;i++)
    {
        ptr->a[i]++;
    }
}
main()
{
}

here the loop gets vectorized with assumed alignmen 32.
Changing declaretion to:
t(c *a, int aligned, b *d)
produces correct 8 byte alignment loop.
Alignment of the type of variable A shall not be used.



More information about the Gcc-bugs mailing list