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

            Bug ID: 66194
           Summary: emit vectorization instruction for not aligned
                    data(amd64), -fno-strict-aliasing not help
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dushistov at mail dot ru
  Target Milestone: ---

Created attachment 35562
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35562&action=edit
code example

If such code compiled
1)with optinos -fno-strict-aliasing -O3 -std=c99
2)as separate module
3)amd64

then it crashes if "key" misaligned:

void 
dummyhash (const void *key, int len, uint32_t seed, void *out)
{
  uint32_t h = seed, *pk = (uint32_t *)key;

  for (; len > 3; len -= 4, pk++)
    h ^= (*pk + len);

  const unsigned char *s = (unsigned char *)pk;
  switch (len) {
  case 3:
    h ^= ((*s++ + 3) << 24);
  case 2:
    h ^= ((*s++ + 2) << 16);
  case 1:
    h ^= (*s + 1);
  }

  *(uint32_t*)out = h;
}

With -O2 works fine, I attach full example and makefile to bug.
With clang 3.6.0 and icc (ICC) 13.1.3 20130607 all works fine.

Reply via email to