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