On Mon, Mar 17, 2008 at 06:33:23PM +0100, Benoît Jacob wrote: > I have looked more closely at the messages generated by the gcc 4.3 > vectorizer > and it seems that they fall into two categories: > > 1) complaining about aligmnent. > > For example: > > Unknown alignment for access: D.33485 > Unknown alignment for access: m > > I don't understand, as all my data is statically allocated doubles (no > dynamic > memory allocation) and I am using -malign-double. What more can I do?
However, SSE instructions need 128-bit alignment, not 64-bit alignment that -malign-double would give. You can align the arrays yourself with the __attribute__((__aligned__(16))) declaration, or use a union that has an element with 16-byte alignment (vector element, such as __m128, __m128d, __m128i or long double and -m128bit-long-double). Note, if the arrays are auto rather than static, you probably need to use the -mstackrealign and -mpreferred-stack-boundary=16 as well. It might be nice to think about an option that automatically aligns large arrays without having to do the declaration (or even have the vectorizer override the alignment for statics/auto). -- Michael Meissner, AMD 90 Central Street, MS 83-29, Boxborough, MA, 01719, USA [EMAIL PROTECTED]