aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/tree-ssa/pr94786.c
blob: beb88daa65195591acb2f9da2e48bbf811ef7d33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* PR tree-optimization/94786 */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
/* { dg-final { scan-tree-dump-times "MIN_EXPR <" 4 "optimized" } } */
/* { dg-final { scan-tree-dump-times "MAX_EXPR <" 4 "optimized" } } */

static inline unsigned
umax1 (unsigned a, unsigned b)
{
  return a ^ ((a ^ b) & -(a < b));
}

static inline unsigned
umin1 (unsigned a, unsigned b)
{
  return a ^ ((a ^ b) & -(a > b));
}

static inline int
smax1 (int a, int b)
{
  return a ^ ((a ^ b) & -(a < b));
}

static inline int
smin1 (int a, int b)
{
  return a ^ ((a ^ b) & -(a > b));
}

static inline unsigned long long
umax2 (unsigned long long a, unsigned long long b)
{
  return a ^ ((a ^ b) & -(a <= b));
}

static inline unsigned long long
umin2 (unsigned long long a, unsigned long long b)
{
  return a ^ ((a ^ b) & -(a >= b));
}

static inline long long
smax2 (long long a, long long b)
{
  return a ^ ((a ^ b) & -(a <= b));
}

static inline long long
smin2 (long long a, long long b)
{
  return a ^ ((a ^ b) & -(a >= b));
}

void
test (unsigned *x, int *y, unsigned long long *z, long long *w)
{
  x[2] = umax1 (x[0], x[1]);
  x[5] = umin1 (x[2], x[3]);
  y[2] = smax1 (y[0], y[1]);
  y[5] = smin1 (y[2], y[3]);
  z[2] = umax2 (z[0], z[1]);
  z[5] = umin2 (z[2], z[3]);
  w[2] = smax2 (w[0], w[1]);
  w[5] = smin2 (w[2], w[3]);
}