1/* { dg-require-effective-target vect_int } */
2
3#include <stdarg.h>
4#include "tree-vect.h"
5
6#define N 16
7
8unsigned int out[N];
9unsigned int in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
10
11__attribute__ ((noinline)) int
12main1 (unsigned int x, unsigned int y)
13{
14  int i;
15  unsigned int a0, a1, a2, a3;
16
17  if (x > y)
18    x = x + y;
19  else
20    y = x;
21
22  a0 = in[0] + 23;
23  a1 = in[1] + 142;
24  a2 = in[2] + 2;
25  a3 = in[3] + 31;
26
27  out[0] = a0 * x;
28  out[1] = a1 * y;
29  out[2] = a2 * x;
30  out[3] = a3 * y;
31
32  if (x)
33    __asm__ volatile ("" : : : "memory");
34
35  /* Check results.  */
36  if (out[0] != (in[0] + 23) * x
37      || out[1] != (in[1] + 142) * y
38      || out[2] != (in[2] + 2) * x
39      || out[3] != (in[3] + 31) * y)
40    abort();
41
42  return 0;
43}
44
45int main (void)
46{
47  check_vect ();
48
49  main1 (2, 3);
50
51  return 0;
52}
53
54/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
55/* { dg-final { cleanup-tree-dump "slp2" } } */
56
57