uniform half4 colorGreen, colorRed;
int scratchVar = 0;

bool test_flat() {
    return true;
    ++scratchVar; // should be eliminated
    return false; // should be eliminated
}

bool test_if() {
    if (colorGreen.g > 0) {
        return true;
    } else {
        ++scratchVar;
    }
    ++scratchVar;
    return false;
}

bool test_else() {
    if (colorGreen.g == 0) {
        return false;
    } else {
        return true;
    }
    ++scratchVar; // should be eliminated
    return false; // should be eliminated
}

bool test_loop_if() {
    for (int x=0; x<=1; ++x) {
        if (colorGreen.g == 0) {
            return false;
        } else {
            return true;
        }
        ++scratchVar; // should be eliminated
    }
    ++scratchVar;
    return true;
}

half4 main(float2 xy) {
    return test_flat() && test_if() && test_else() && test_loop_if()
            ? colorGreen
            : colorRed;
}
