// Compile with -O3 -march=native to see autovectorization // assumes input is aligned on 64-byte boundary and that // length is a multiple of 64. int testFunction(int* input, int length) { // Alignment hints supported on GCC 4.7+ and any compiler // supporting the appropriate builtin (clang 3.6+). #ifndef __has_builtin #define __has_builtin(x) 0 #endif #if __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \ || __has_builtin(__builtin_assume_aligned) input = static_cast(__builtin_assume_aligned(input, 64)); #endif #if _MSC_VER __assume((length & 63) == 0); #else if (length & 63) __builtin_unreachable(); #endif int sum = 0; for (int i = 0; i < length; ++i) { sum += input[i]; } return sum; }