https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112659

            Bug ID: 112659
           Summary: missed-optimization: if (exp) return exp; else return
                    0;
           Product: gcc
           Version: 13.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: goon.pri.low at gmail dot com
  Target Milestone: ---

This code here:

int unopt(int v) {
    if (v + 8)
        return v + 8;
    else
        return 0;
}

unopt:
        xor     edx, edx
        lea     eax, [rdi+8]
        cmp     edi, -8
        cmove   eax, edx
        ret

Could be optimized to:

int opt(int v) {
    return v + 8;
}

opt:
        lea     eax, [rdi+8]
        ret

Note: this happens for all operators, not just addition!
Also, have any suggestions for a better bug name? I am better at spotting
optimizations, not naming them.

Reply via email to