xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.hp/gdb.aCC/optimize.c (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
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 */