/*
 * Tests the effectiveness of common-subexpression elimination. 
 */

void print_int(int i) {}
void print_space(int i) {}
void print_newline(void) {}

#define LOOP 7500

void main(void) {
    int a, b, c, d, e, f, g, h, i, j;
    int w, x, y, z;

    for (i=0; i<LOOP; i+=1) {
	for (j=0; j<LOOP; j+=1) {
	    a = 8;
	    b = 16;
	    c = 32;
	    d = 64;
	    
	    // simple expressions to use later
	    e = a * c / b;
	    f = a + c + 1;
	    g = 1 + 2*d;
	    h = 5*6 + b;
	    
	    // basic expression elimination
	    w = a * c / b;
	    x = a * c;
	    y = a + c + 1 + 2*d;
	    z = a + c + 5*6 + 2*d + b;
	    
	    if (a < 0) {
		e = a * c / b + i*(d + a * c);
		f = (d - a) / (b + c) + (a - b) * j;
	    } else {
		g = d * d * d * d + c * c * c * c - d - a;
		h = j + (d * b) / a + (j * (a - b)) / (d + a * c);
	    }
	    
	    // elimation of expressions available through both paths
	    w = a * c * (a - b);
	    x = d - a + (a + b)*c;
	    y = (d + a * c)*(d - a) + c * a;
	    z = (a - b) * j + (a - b)*(d - a) + d + a;
	} // for
    } // for

    print_int(w);
    print_space(1);
    print_int(x);
    print_space(1);
    print_int(y);
    print_space(1);
    print_int(z);
    print_newline();
} // main
