1 /* { dg-require-effective-target vect_int } */ 2 3 #include <stdarg.h> 4 #include "tree-vect.h" 5 6 #define N 64 7 8 #define DOT1 43680 9 #define DOT2 -20832 10 11 signed char X[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); 12 signed char Y[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); 13 unsigned char CX[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); 14 15 __attribute__ ((noinline)) void foo1(int len)16foo1(int len) { 17 int i; 18 int result1 = 0; 19 20 for (i=0; i<len; i++) { 21 result1 += (X[i] * Y[i]); 22 CX[i] = 5; 23 } 24 25 if (result1 != DOT1) 26 abort (); 27 } 28 29 main(void)30int main (void) 31 { 32 int i, dot1, dot2; 33 34 check_vect (); 35 36 for (i=0; i<N; i++) { 37 X[i] = i; 38 Y[i] = 64-i; 39 CX[i] = i; 40 __asm__ volatile (""); 41 } 42 43 foo1 (N); 44 45 return 0; 46 } 47 48 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_sdot_hi || vect_unpack } } } } */ 49 50