1/* { dg-require-effective-target vect_int } */
2
3#include <stdarg.h>
4#include "tree-vect.h"
5
6#define N 256
7volatile int y = 0;
8
9__attribute__ ((noinline))
10void main1 (signed char x, signed char max_result, signed char min_result)
11{
12  int i;
13  signed char b[N];
14  signed char c[N];
15  signed char check_diff = 2;
16  signed char diff = 2;
17  signed char max = x;
18  signed char min = x;
19
20  check_diff = 2;
21  for (i = 0; i < N; i++) {
22    b[i] = i;
23    c[i] = i;
24    if (i%16 == 0)
25      {
26	c[i] = i + 1;
27	check_diff += 1;
28      }
29    if (c[i] > max_result)
30      max_result = c[i];
31    if (c[i] < min_result)
32      min_result = c[i];
33    /* Avoid vectorization.  */
34    if (y)
35      abort ();
36  }
37
38  for (i = 0; i < N; i++) {
39    diff += (signed char) (c[i] - b[i]);
40  }
41
42  for (i = 0; i < N; i++) {
43    max = max < c[i] ? c[i] : max;
44  }
45
46  for (i = 0; i < N; i++) {
47    min = min > c[i] ? c[i] : min;
48  }
49
50  /* check results:  */
51  if (diff != check_diff)
52    abort ();
53  if (max != max_result)
54    abort ();
55  if (min != min_result)
56    abort ();
57}
58
59int main (void)
60{
61  check_vect ();
62
63  main1 (100, 100, 1);
64  main1 (0, 15, 0);
65  return 0;
66}
67
68/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail *-*-* } } } */
69/* { dg-final { cleanup-tree-dump "vect" } } */
70