1 /* { dg-options "-O3 --param vect-partial-vector-usage=1" } */
2 
3 void __attribute__((noipa))
add_loop(unsigned int * x,int n,unsigned int * res)4 add_loop (unsigned int *x, int n, unsigned int *res)
5 {
6   unsigned int res0 = res[0];
7   unsigned int res1 = res[1];
8   for (int i = 0; i < n; ++i)
9     {
10       res0 += x[i * 2];
11       res1 += x[i * 2 + 1];
12     }
13   res[0] = res0;
14   res[1] = res1;
15 }
16 
17 void __attribute__((noipa))
min_loop(unsigned int * x,int n,unsigned int * res)18 min_loop (unsigned int *x, int n, unsigned int *res)
19 {
20   unsigned int res0 = res[0];
21   unsigned int res1 = res[1];
22   for (int i = 0; i < n; ++i)
23     {
24       res0 = res0 < x[i * 2] ? res0 : x[i * 2];
25       res1 = res1 < x[i * 2 + 1] ? res1 : x[i * 2 + 1];
26     }
27   res[0] = res0;
28   res[1] = res1;
29 }
30 
31 void __attribute__((noipa))
max_loop(unsigned int * x,int n,unsigned int * res)32 max_loop (unsigned int *x, int n, unsigned int *res)
33 {
34   unsigned int res0 = res[0];
35   unsigned int res1 = res[1];
36   for (int i = 0; i < n; ++i)
37     {
38       res0 = res0 > x[i * 2] ? res0 : x[i * 2];
39       res1 = res1 > x[i * 2 + 1] ? res1 : x[i * 2 + 1];
40     }
41   res[0] = res0;
42   res[1] = res1;
43 }
44 
45 void __attribute__((noipa))
and_loop(unsigned int * x,int n,unsigned int * res)46 and_loop (unsigned int *x, int n, unsigned int *res)
47 {
48   unsigned int res0 = res[0];
49   unsigned int res1 = res[1];
50   for (int i = 0; i < n; ++i)
51     {
52       res0 &= x[i * 2];
53       res1 &= x[i * 2 + 1];
54     }
55   res[0] = res0;
56   res[1] = res1;
57 }
58 
59 void __attribute__((noipa))
or_loop(unsigned int * x,int n,unsigned int * res)60 or_loop (unsigned int *x, int n, unsigned int *res)
61 {
62   unsigned int res0 = res[0];
63   unsigned int res1 = res[1];
64   for (int i = 0; i < n; ++i)
65     {
66       res0 |= x[i * 2];
67       res1 |= x[i * 2 + 1];
68     }
69   res[0] = res0;
70   res[1] = res1;
71 }
72 
73 void __attribute__((noipa))
eor_loop(unsigned int * x,int n,unsigned int * res)74 eor_loop (unsigned int *x, int n, unsigned int *res)
75 {
76   unsigned int res0 = res[0];
77   unsigned int res1 = res[1];
78   for (int i = 0; i < n; ++i)
79     {
80       res0 ^= x[i * 2];
81       res1 ^= x[i * 2 + 1];
82     }
83   res[0] = res0;
84   res[1] = res1;
85 }
86 
87 /* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
88 /* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
89 /* { dg-final { scan-assembler-times {\tuaddv\t} 2 } } */
90 
91 /* { dg-final { scan-assembler-times {\tumin\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
92 /* { dg-final { scan-assembler-times {\tuminv\t} 2 } } */
93 
94 /* { dg-final { scan-assembler-times {\tumax\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
95 /* { dg-final { scan-assembler-times {\tumaxv\t} 2 } } */
96 
97 /* { dg-final { scan-assembler-times {\tand\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
98 /* { dg-final { scan-assembler-times {\tand\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
99 /* { dg-final { scan-assembler-times {\tandv\t} 2 } } */
100 
101 /* { dg-final { scan-assembler-times {\torr\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
102 /* { dg-final { scan-assembler-times {\torr\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
103 /* { dg-final { scan-assembler-times {\torv\t} 2 } } */
104 
105 /* { dg-final { scan-assembler-times {\teor\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
106 /* { dg-final { scan-assembler-times {\teor\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
107 /* { dg-final { scan-assembler-times {\teorv\t} 2 } } */
108