1 /* { dg-do run } */
2 /* { dg-additional-options "-O -save-temps" } */
3 /* { dg-final { check-function-bodies "**" "" "" { target { le } } } } */
4
5 extern void abort ();
6
7 /*
8 **zoo1:
9 ** cmp w0, w1
10 ** csel w0, w2, w3, lt
11 ** and w0, w0, 1
12 ** ret
13 */
14 __attribute((noipa, noinline))
15 int zoo1 (int a, int b, int c, int d)
16 {
17 return ((a < b) & c) | ((a >= b) & d);
18 }
19
20 /*
21 **zoo2:
22 ** cmp w0, w1
23 ** csel w0, w2, w3, lt
24 ** ret
25 */
26 __attribute((noipa, noinline))
27 int zoo2 (int a, int b, int c, int d)
28 {
29 return (-(a < b) & c) | (-(a >= b) & d);
30 }
31
32 int main ()
33 {
34 if (zoo1 (-3, 3, 5, 8) != 1)
35 abort ();
36
37 if (zoo1 (3, -3, 5, 8) != 0)
38 abort ();
39
40 if (zoo2 (-3, 3, 5, 8) != 5)
41 abort ();
42
43 if (zoo2 (3, -3, 5, 8) != 8)
44 abort ();
45
46 return 0;
47 }