Imported Upstream version 4.7.3
[platform/upstream/gcc48.git] / gcc / testsuite / gcc.dg / vect / vect-reduc-pattern-2b-big-array.c
1 /* { dg-require-effective-target vect_int } */
2
3 #include <stdarg.h>
4 #include "tree-vect.h"
5
6 #define N 128
7 signed char data_ch[N];
8
9 volatile int y = 0;
10
11 __attribute__ ((noinline)) int
12 foo ()
13 {
14   int i;
15   signed int intsum = 0;
16   signed int check_intsum = 0;
17
18   for (i = 0; i < N; i++)
19     {
20       data_ch[i] = i*2;
21       check_intsum += data_ch[i];
22       /* Avoid vectorization.  */
23       if (y)
24         abort ();
25     }
26
27   /* widenning sum: sum chars into int.  */
28   for (i = 0; i < N; i++)
29     {
30       intsum += data_ch[i];
31     }
32
33   /* check results:  */
34   if (intsum != check_intsum)
35     abort ();
36
37   return 0;
38 }
39
40 int
41 main (void)
42 {
43   check_vect ();
44   return foo ();
45 }
46
47 /* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" } } */
48 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_widen_sum_qi_to_si && vect_unpack } } } } */
49 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { { ! vect_widen_sum_qi_to_si } && { ! vect_unpack } } } } } */
50 /* { dg-final { cleanup-tree-dump "vect" } } */