/*
 * Tests the effectiveness of dead-code elimination. 
 */

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

#define LOOP 8000

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

    for (j=0; j<LOOP; j+=1) {
	for (i=0; i<LOOP; i+=1) {
	    a = 8;
	    b = 16;
	    c = 32;
	    d = 64;

	    // eliminated by being redefined
	    e = a * c / b + i*(d + a * c);

	    // eliminated by not reappearing
	    f = (d - a) / (b + c) + (a - b) * i;

	    // eliminated in all paths
	    g = d * d * d * d + c * c * c * c;

	    // eliminated in some paths, but not all
	    h = i + (d * b) / a + (c + a * b + a) / (a - b);

	    // previous e eliminated
	    e = 0;

	    if (a < 0) {
		// g not used here
		// previous h not used here
		h = 0;
	    } else {
		// previous g eliminated
		g = 0;

		// previous h used here
		if (b > 0)
		    h += 1;
	    }
	} // for
    } // for
	
    print_int(h);
    print_newline();
} // main
