1/* { dg-require-effective-target vect_float } */ 2 3#include <stdarg.h> 4#include "tree-vect.h" 5 6#define N 40 7#define M 128 8float in[N+M]; 9float coeff[M]; 10float out[N]; 11 12/* Outer-loop vectorization. */ 13 14__attribute__ ((noinline)) void 15foo (){ 16 int i,j; 17 float diff; 18 19 for (i = 0; i < N; i++) { 20 diff = 0; 21 for (j = 0; j < M; j+=4) { 22 diff += in[j+i]*coeff[j]; 23 } 24 out[i]=diff; 25 } 26} 27 28int main (void) 29{ 30 check_vect (); 31 int i, j; 32 float diff; 33 34 for (i = 0; i < M; i++) 35 coeff[i] = i; 36 for (i = 0; i < N+M; i++) 37 in[i] = i; 38 39 foo (); 40 41 for (i = 0; i < N; i++) { 42 diff = 0; 43 for (j = 0; j < M; j+=4) { 44 diff += in[j+i]*coeff[j]; 45 } 46 if (out[i] != diff) 47 abort (); 48 } 49 50 return 0; 51} 52 53/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" } } */ 54/* { dg-final { scan-tree-dump-times "zero step in outer loop." 1 "vect" } } */ 55/* { dg-final { cleanup-tree-dump "vect" } } */ 56