title: Hint to compiler that it can use aligned memcpy
body: <p>I have a struct consisting of seven __m256 values, which is stored 32-byte aligned in memory.</p>
  
  <pre><code>typedef struct
  {
          __m256 xl,xh;
          __m256 yl,yh;
          __m256 zl,zh;
          __m256i co;
  } bloxset8_t;
  </code></pre>
  
  <p>I achieve the 32-byte alignment by using the <code>posix_memalign()</code> function for dynamically allocated data, or using the <code>(aligned(32))</code> attribute for statically allocated data.</p>
  
  <p>The alignment is fine, but when I use two pointers to such a struct, and pass them as destination and source for memcpy() then the compiler decides to use <code>__memcpy_avx_unaligned()</code> to copy.</p>
  
  <p>How can I force clang to use the aligned avx memcpy function instead, which I assume is the faster variant?</p>
  
  <p>OS: Ubuntu 16.04.3 LTS, Clang: 3.8.0-2ubuntu4.</p>
  
  <p><strong>UPDATE</strong><br>
  The __memcpy_avx_unaligned() is invoked only when copying two or more structs. When copying just one, clang emits 14 vmovup instructions.</p>