/* Source for debugging optimimzed code test. cc -g -O -o optimize optimize.c */ int callee(); int test_opt; int main() { int a,b,c,d,e,f,g,h; a = 10;; /* Value propagate */ b = 2 * a + 1; c = 3 * b + 2; /* Re-use expressions */ d = (2 * a + 1) * (3 * b + 2); e = (2 * a + 1) * (3 * b + 2); /* Create dead stores--do lines still exist? */ d = (2 * a + 1) * (3 * b + 2); e = (2 * a + 1) * (3 * b + 2); d = (2 * a + 1) * (3 * b + 2); e = (2 * a + 1) * (3 * b + 2); /* Alpha and psi motion */ if( test_opt ) { f = e - d; f = f--; } else { f = e - d; f = f + d * e; } /* Chi and Rho motion */ h = 0; do { h++; a = b * c + d * e; /* Chi */ f = f + d * e; g = f + d * e; /* Rho */ callee( g+1 ); test_opt = (test_opt != 1); /* Cycles */ } while( g && h < 10); /* Opps for tail recursion, unrolling, * folding, evaporating */ for( a = 0; a < 100; a++ ) { callee( callee ( callee( a ))); callee( callee ( callee( a ))); callee( callee ( callee( a ))); } return callee( test_opt ); } /* defined late to keep line numbers the same */ int callee( x ) int x; /* not used! */ { test_opt++; /* side effect */ return test_opt; } /* end */