http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48377
--- Comment #30 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-04-07 13:29:15 UTC --- This is certainly a valid testcase: struct S { long long x; int a; double b[10000]; int c; } s; double *p = &s.b[0]; int foo (double *q) { int i, j = 0; for (i = 0; i < 10000; i++) j += *q++; return j; } int main (void) { return foo (p); } and without the target hook, vectorizer would think it can peel the loop and get it naturally aligned (assuming it isn't inlined at least etc. to see that q points to &s.b[0] initially). I think the bug is in the ABIs that do that kind of thing, but it is too late to fix the ABIs up.