#define WORD_ALIGNED(x) _nassert(((int)(x) & 0x3) == 0) #define DWORD_ALIGNED(x) _nassert(((int)(x) & 0x7) == 0) #define SZ 1000 int a[SZ]; int b[SZ]; int loop(int *restrict a, int *restrict b) { int i; int tmp = 0; DWORD_ALIGNED(a); DWORD_ALIGNED(b); #pragma MUST_ITERATE(SZ, SZ, ) for (i = 0; i < SZ; i++) { tmp += a[i] * b[i]; } return tmp; }