1 // { dg-do compile }
2 // { dg-options "-O -fdump-tree-phiopt1" }
3 
4 #define cond_swap5(a,b);\
5     t = *(a);\
6     *(a) = (t<*(b))?t:*(b);\
7     *(b) = (t<*(b))?*(b):t;
8 
9 template<int n>
static_sort1(int * a)10 void static_sort1(int *a){
11     return;
12 }
13 
14 template<>
15 void static_sort1<32>(int* first){
16         int t;
17     static_sort1<16>(first);
18     static_sort1<16>(first+16);
19 
20     cond_swap5(first + 0u, first + 16u);
21     cond_swap5(first + 8u, first + 24u);
22     cond_swap5(first + 8u, first + 16u);
23     cond_swap5(first + 4u, first + 20u);
24     cond_swap5(first + 12u, first + 28u);
25     cond_swap5(first + 12u, first + 20u);
26     cond_swap5(first + 4u, first + 8u);
27     cond_swap5(first + 12u, first + 16u);
28     cond_swap5(first + 20u, first + 24u);
29     cond_swap5(first + 2u, first + 18u);
30     cond_swap5(first + 10u, first + 26u);
31     cond_swap5(first + 10u, first + 18u);
32     cond_swap5(first + 6u, first + 22u);
33     cond_swap5(first + 14u, first + 30u);
34     cond_swap5(first + 14u, first + 22u);
35     cond_swap5(first + 6u, first + 10u);
36     cond_swap5(first + 14u, first + 18u);
37     cond_swap5(first + 22u, first + 26u);
38     cond_swap5(first + 2u, first + 4u);
39     cond_swap5(first + 6u, first + 8u);
40     cond_swap5(first + 10u, first + 12u);
41     cond_swap5(first + 14u, first + 16u);
42     cond_swap5(first + 18u, first + 20u);
43     cond_swap5(first + 22u, first + 24u);
44     cond_swap5(first + 26u, first + 28u);
45     cond_swap5(first + 1u, first + 17u);
46     cond_swap5(first + 9u, first + 25u);
47     cond_swap5(first + 9u, first + 17u);
48     cond_swap5(first + 5u, first + 21u);
49     cond_swap5(first + 13u, first + 29u);
50     cond_swap5(first + 13u, first + 21u);
51     cond_swap5(first + 5u, first + 9u);
52     cond_swap5(first + 13u, first + 17u);
53     cond_swap5(first + 21u, first + 25u);
54     cond_swap5(first + 3u, first + 19u);
55     cond_swap5(first + 11u, first + 27u);
56     cond_swap5(first + 11u, first + 19u);
57     cond_swap5(first + 7u, first + 23u);
58     cond_swap5(first + 15u, first + 31u);
59     cond_swap5(first + 15u, first + 23u);
60     cond_swap5(first + 7u, first + 11u);
61     cond_swap5(first + 15u, first + 19u);
62     cond_swap5(first + 23u, first + 27u);
63     cond_swap5(first + 3u, first + 5u);
64     cond_swap5(first + 7u, first + 9u);
65     cond_swap5(first + 11u, first + 13u);
66     cond_swap5(first + 15u, first + 17u);
67     cond_swap5(first + 19u, first + 21u);
68     cond_swap5(first + 23u, first + 25u);
69     cond_swap5(first + 27u, first + 29u);
70     cond_swap5(first + 1u, first + 2u);
71     cond_swap5(first + 3u, first + 4u);
72     cond_swap5(first + 5u, first + 6u);
73     cond_swap5(first + 7u, first + 8u);
74     cond_swap5(first + 9u, first + 10u);
75     cond_swap5(first + 11u, first + 12u);
76     cond_swap5(first + 13u, first + 14u);
77     cond_swap5(first + 15u, first + 16u);
78     cond_swap5(first + 17u, first + 18u);
79     cond_swap5(first + 19u, first + 20u);
80     cond_swap5(first + 21u, first + 22u);
81     cond_swap5(first + 23u, first + 24u);
82     cond_swap5(first + 25u, first + 26u);
83     cond_swap5(first + 27u, first + 28u);
84     cond_swap5(first + 29u, first + 30u);
85 };
86 
foo(int * a)87 void foo(int *a)
88 {
89   static_sort1<32>(a);
90 }
91 
92 // { dg-final { scan-tree-dump-not "if " "phiopt1" } }
93 // { dg-final { scan-tree-dump-times "MIN" 65 "phiopt1" } }
94 // { dg-final { scan-tree-dump-times "MAX" 65 "phiopt1" } }
95