|  | // 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<int*>(__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; | 
|  | } |