1*b725ae77Skettenis /* Source for debugging optimimzed code test.
2*b725ae77Skettenis
3*b725ae77Skettenis cc -g -O -o optimize optimize.c
4*b725ae77Skettenis */
5*b725ae77Skettenis int callee();
6*b725ae77Skettenis int test_opt;
7*b725ae77Skettenis
main()8*b725ae77Skettenis int main()
9*b725ae77Skettenis {
10*b725ae77Skettenis int a,b,c,d,e,f,g,h;
11*b725ae77Skettenis
12*b725ae77Skettenis a = 10;;
13*b725ae77Skettenis
14*b725ae77Skettenis /* Value propagate
15*b725ae77Skettenis */
16*b725ae77Skettenis b = 2 * a + 1;
17*b725ae77Skettenis c = 3 * b + 2;
18*b725ae77Skettenis
19*b725ae77Skettenis /* Re-use expressions
20*b725ae77Skettenis */
21*b725ae77Skettenis d = (2 * a + 1) * (3 * b + 2);
22*b725ae77Skettenis e = (2 * a + 1) * (3 * b + 2);
23*b725ae77Skettenis
24*b725ae77Skettenis /* Create dead stores--do lines still exist?
25*b725ae77Skettenis */
26*b725ae77Skettenis d = (2 * a + 1) * (3 * b + 2);
27*b725ae77Skettenis e = (2 * a + 1) * (3 * b + 2);
28*b725ae77Skettenis d = (2 * a + 1) * (3 * b + 2);
29*b725ae77Skettenis e = (2 * a + 1) * (3 * b + 2);
30*b725ae77Skettenis
31*b725ae77Skettenis /* Alpha and psi motion
32*b725ae77Skettenis */
33*b725ae77Skettenis if( test_opt ) {
34*b725ae77Skettenis f = e - d;
35*b725ae77Skettenis f = f--;
36*b725ae77Skettenis }
37*b725ae77Skettenis else {
38*b725ae77Skettenis f = e - d;
39*b725ae77Skettenis f = f + d * e;
40*b725ae77Skettenis }
41*b725ae77Skettenis
42*b725ae77Skettenis /* Chi and Rho motion
43*b725ae77Skettenis */
44*b725ae77Skettenis h = 0;
45*b725ae77Skettenis do {
46*b725ae77Skettenis h++;
47*b725ae77Skettenis a = b * c + d * e; /* Chi */
48*b725ae77Skettenis f = f + d * e;
49*b725ae77Skettenis g = f + d * e; /* Rho */
50*b725ae77Skettenis callee( g+1 );
51*b725ae77Skettenis test_opt = (test_opt != 1); /* Cycles */
52*b725ae77Skettenis } while( g && h < 10);
53*b725ae77Skettenis
54*b725ae77Skettenis /* Opps for tail recursion, unrolling,
55*b725ae77Skettenis * folding, evaporating
56*b725ae77Skettenis */
57*b725ae77Skettenis for( a = 0; a < 100; a++ ) {
58*b725ae77Skettenis callee( callee ( callee( a )));
59*b725ae77Skettenis callee( callee ( callee( a )));
60*b725ae77Skettenis callee( callee ( callee( a )));
61*b725ae77Skettenis }
62*b725ae77Skettenis
63*b725ae77Skettenis return callee( test_opt );
64*b725ae77Skettenis }
65*b725ae77Skettenis
66*b725ae77Skettenis /* defined late to keep line numbers the same
67*b725ae77Skettenis */
callee(x)68*b725ae77Skettenis int callee( x )
69*b725ae77Skettenis int x; /* not used! */
70*b725ae77Skettenis {
71*b725ae77Skettenis test_opt++; /* side effect */
72*b725ae77Skettenis
73*b725ae77Skettenis return test_opt;
74*b725ae77Skettenis }
75*b725ae77Skettenis
76*b725ae77Skettenis /* end */