[Issue 8091] Optimizer generates wrong code when reducing comparisons.

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed May 16 12:15:56 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=8091



--- Comment #2 from Don <clugdbug at yahoo.com.au> 2012-05-16 12:17:27 PDT ---
Marginally reduced (this is what the early optimizer passes turn this into):

int solve(int n) {
    int a = n ? (n>=1u) : 1;
    return a ? a : 0;
}

void main() {
    assert(solve(1) ==  1);
}

It looks as after common subexpression elimination of a, the branch address
from the >= is out by 1. The generated code is:

        push    EAX
        cmp    dword ptr -4[EBP],0
        je    L1C
        mov    ECX,1
        cmp    dword ptr -4[EBP],1
        jae    L1F
        mov    ECX,0
        jmp short    L1F <--- wrong address
L1C:        xor    ECX,ECX
        inc    ECX
L1F:        je    L25        <---- shouldn't jump here
        mov    EAX,ECX    <---- should jump here instead
        jmp short    L27
L25:        xor    EAX,EAX
L27:        mov    ESP,EBP

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list