1/* { dg-require-effective-target vect_float } */ 2 3#include <stdarg.h> 4#include "tree-vect.h" 5 6#define N 256 7 8__attribute__ ((noinline)) 9void bar (float *pa, float *pb, float *pc) 10{ 11 int i; 12 13 /* check results: */ 14 for (i = 0; i < N; i++) 15 { 16 if (pa[i] != (pb[i] * pc[i])) 17 abort(); 18 } 19 20 return; 21} 22 23/* Aligned pointer accesses. 24 The loop bound is unknown. 25 No aliasing problems. 26 vect-40.c is similar to this one with one difference: 27 the loop bound is known. */ 28 29float b[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) 30 = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57}; 31float c[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) 32 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}; 33 34__attribute__ ((noinline)) int 35main1 (int n) 36{ 37 int i; 38 float a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); 39 float *pa = a; 40 float *pb = b; 41 float *pc = c; 42 43 for (i = 0; i < n; i++) 44 { 45 pa[i] = pb[i] * pc[i]; 46 } 47 48 bar (pa,pb,pc); 49 50 return 0; 51} 52 53int main (void) 54{ 55 int i; 56 int n=N; 57 check_vect (); 58 main1 (n); 59 return 0; 60} 61 62/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ 63/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */ 64/* { dg-final { cleanup-tree-dump "vect" } } */ 65