1/* { dg-require-effective-target vect_int } */ 2 3#include <stdarg.h> 4#include "tree-vect.h" 5 6#define N 64 7 8typedef struct { 9 unsigned char a; 10 unsigned char b; 11 unsigned char c; 12 unsigned char d; 13} s; 14 15unsigned char ub[N*2]; 16unsigned char uc[N]; 17 18volatile int y = 0; 19unsigned char check_diff = 2; 20 21void 22main1 (unsigned char x, unsigned char max_result, unsigned char min_result, s *arr) 23{ 24 int i; 25 unsigned char udiff = 2; 26 unsigned char umax = x; 27 unsigned char umin = x; 28 unsigned char ua1[N*2]; 29 s *pIn = arr; 30 s out[N]; 31 32 for (i = 0; i < N; i++) { 33 udiff += (unsigned char) (ub[i] - uc[i]); 34 35 ua1[2*i+1] = ub[2*i+1]; 36 ua1[2*i] = ub[2*i]; 37 38 out[i].d = pIn->d - 1; 39 out[i].b = pIn->b - 4; 40 out[i].c = pIn->c - 8; 41 out[i].a = pIn->a - 3; 42 43 pIn++; 44 } 45 46 for (i = 0; i < N; i++) { 47 if (ua1[2*i] != ub[2*i] 48 || ua1[2*i+1] != ub[2*i+1] 49 || out[i].a != arr[i].a - 3 50 || out[i].b != arr[i].b - 4 51 || out[i].c != arr[i].c - 8 52 || out[i].d != arr[i].d - 1) 53 abort (); 54 } 55 56 /* check results: */ 57 if (udiff != check_diff) 58 abort (); 59} 60 61int main (void) 62{ 63 int i; 64 s arr[N]; 65 66 check_diff = 2; 67 ub[0] = uc[0] = 1; 68 for (i = 1; i < N; i++) { 69 ub[i] = (i%5 == 0)?i*3:i; 70 uc[i] = i; 71 check_diff += (unsigned char) (ub[i] - uc[i]); 72 if (y) /* Avoid vectorization. */ 73 abort (); 74 } 75 for (; i < 2*N; i++) { 76 ub[i] = 0; 77 if (y) /* Avoid vectorization. */ 78 abort (); 79 } 80 81 for (i = 0; i < N; i++) 82 { 83 arr[i].a = i + 9; 84 arr[i].b = i * 2 + 10; 85 arr[i].c = 17; 86 arr[i].d = i+34; 87 if (y) /* Avoid vectorization. */ 88 abort (); 89 } 90 check_vect (); 91 92 main1 (100, 100, 1, arr); 93 main1 (0, 15, 0, arr); 94 return 0; 95} 96 97/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && ilp32 } } } } */ 98/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { xfail { vect_no_align && ilp32 } } } } */ 99/* { dg-final { cleanup-tree-dump "vect" } } */ 100