Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CAR] Improve Finding Missing Cases in Conditions #396

Merged
merged 2 commits into from
Mar 28, 2024

Conversation

ebehner
Copy link
Collaborator

@ebehner ebehner commented Mar 13, 2024

We currently only consider missing-cases in condition-nodes with one branch is a switch-node. However, this can be extended to when a branch is a sequence node whose first or last child is a switch node.

For example, the function mpn_base_power_of_two_p in expr (coreutils) currently leads to the following output

unsigned int mpn_base_power_of_two_p(unsigned int b) {
    long var_0;
    if (b <= 1) {
        var_0 = 0L;
    }
    if ((b > 1) && (b <= 32)) {
        switch(b) {
        case 0x2:
            return 1L;
        case 0x4:
            return 2L;
        case 0x8:
            return 3L;
        case 0x10:
            return 4L;
        case 0x20:
            return 5L;
        default:
            return 0L;
        }
    }
    if (b > 32) {
        if (b == 128) { // <--- missing case, we currently do not find
            var_0 = 7L; 
        }
        else {
            switch(b) {
            case 64:
                var_0 = 6L;
                break;
            case 256:
                var_0 = 8L;
                break;
            default:
                var_0 = 0L;
            }
            if (b != 256) {
                return var_0;
            }
        }
    }
    return var_0;
}

A better output would be:

unsigned int mpn_base_power_of_two_p(unsigned int b) {
    long var_0;
    if (b <= 1) {
        var_0 = 0L;
    }
    if ((b > 1) && (b <= 32)) {
        switch(b) {
        case 0x2:
            return 1L;
        case 0x4:
            return 2L;
        case 0x8:
            return 3L;
        case 0x10:
            return 4L;
        case 0x20:
            return 5L;
        default:
            return 0L;
        }
    }
    if (b > 32) {
        switch(b) {
        case 64:
            var_0 = 6L;
            break;
        case 128:
            var_0 = 7L;
            break;
        case 256:
            var_0 = 8L;
            break;
        default:
            var_0 = 0L;
        }
        if ((b != 128) && (b != 256)) {
            return var_0;
        }
    }
    return var_0;
}

@ebehner ebehner self-assigned this Mar 13, 2024
@steffenenders
Copy link
Member

Looks good. Can be merged once the pipeline is succeeding again.

@steffenenders steffenenders enabled auto-merge (squash) March 13, 2024 12:05
@steffenenders steffenenders merged commit d9b8337 into main Mar 28, 2024
1 check passed
@steffenenders steffenenders deleted the improve_insert_missing_cases branch March 28, 2024 09:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants