1 /* PR tree-optimization/92834 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -fdump-tree-optimized" } */
4 /* { dg-final { scan-tree-dump-times "MIN_EXPR <" 8 "optimized" } } */
5 /* { dg-final { scan-tree-dump-times "MAX_EXPR <" 8 "optimized" } } */
6 
7 static inline unsigned
umax1(unsigned a,unsigned b)8 umax1 (unsigned a, unsigned b)
9 {
10   return a - ((a - b) & -(a < b));
11 }
12 
13 static inline unsigned
umin1(unsigned a,unsigned b)14 umin1 (unsigned a, unsigned b)
15 {
16   return a - ((a - b) & -(a > b));
17 }
18 
19 static inline int
smax1(int a,int b)20 smax1 (int a, int b)
21 {
22   return a - ((a - b) & -(a < b));
23 }
24 
25 static inline int
smin1(int a,int b)26 smin1 (int a, int b)
27 {
28   return a - ((a - b) & -(a > b));
29 }
30 
31 static inline unsigned long long
umax2(unsigned long long a,unsigned long long b)32 umax2 (unsigned long long a, unsigned long long b)
33 {
34   return a - ((a - b) & -(a <= b));
35 }
36 
37 static inline unsigned long long
umin2(unsigned long long a,unsigned long long b)38 umin2 (unsigned long long a, unsigned long long b)
39 {
40   return a - ((a - b) & -(a >= b));
41 }
42 
43 static inline long long
smax2(long long a,long long b)44 smax2 (long long a, long long b)
45 {
46   return a - ((a - b) & -(a <= b));
47 }
48 
49 static inline long long
smin2(long long a,long long b)50 smin2 (long long a, long long b)
51 {
52   return a - ((a - b) & -(a >= b));
53 }
54 
55 static inline unsigned
umax3(unsigned a,unsigned b)56 umax3 (unsigned a, unsigned b)
57 {
58   return a + ((b - a) & -(a < b));
59 }
60 
61 static inline unsigned
umin3(unsigned a,unsigned b)62 umin3 (unsigned a, unsigned b)
63 {
64   return a + ((b - a) & -(a > b));
65 }
66 
67 static inline int
smax3(int a,int b)68 smax3 (int a, int b)
69 {
70   return a + ((b - a) & -(a < b));
71 }
72 
73 static inline int
smin3(int a,int b)74 smin3 (int a, int b)
75 {
76   return a + ((b - a) & -(a > b));
77 }
78 
79 static inline unsigned long long
umax4(unsigned long long a,unsigned long long b)80 umax4 (unsigned long long a, unsigned long long b)
81 {
82   return a + ((b - a) & -(a <= b));
83 }
84 
85 static inline unsigned long long
umin4(unsigned long long a,unsigned long long b)86 umin4 (unsigned long long a, unsigned long long b)
87 {
88   return a + ((b - a) & -(a >= b));
89 }
90 
91 static inline long long
smax4(long long a,long long b)92 smax4 (long long a, long long b)
93 {
94   return a + ((b - a) & -(a <= b));
95 }
96 
97 static inline long long
smin4(long long a,long long b)98 smin4 (long long a, long long b)
99 {
100   return a + ((b - a) & -(a >= b));
101 }
102 
103 void
test(unsigned * x,int * y,unsigned long long * z,long long * w)104 test (unsigned *x, int *y, unsigned long long *z, long long *w)
105 {
106   x[2] = umax1 (x[0], x[1]);
107   x[5] = umin1 (x[2], x[3]);
108   y[2] = smax1 (y[0], y[1]);
109   y[5] = smin1 (y[2], y[3]);
110   z[2] = umax2 (z[0], z[1]);
111   z[5] = umin2 (z[2], z[3]);
112   w[2] = smax2 (w[0], w[1]);
113   w[5] = smin2 (w[2], w[3]);
114   x[8] = umax3 (x[6], x[7]);
115   x[11] = umin3 (x[9], x[10]);
116   y[8] = smax3 (y[6], y[7]);
117   y[11] = smin3 (y[9], y[10]);
118   z[8] = umax4 (z[6], z[7]);
119   z[11] = umin4 (z[9], z[10]);
120   w[8] = smax4 (w[6], w[7]);
121   w[11] = smin4 (w[9], w[10]);
122 }
123