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

            Bug ID: 112398
           Summary: Suboptimal code generation for xor pattern on subword
                    data
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lis8215 at gmail dot com
  Target Milestone: ---

These minimal examples showcase the issue:

uint8_t neg8 (const uint8_t *src)
{
    return ~*src;
    // or return *src ^ 0xff;
}

uint16_t neg16 (const uint16_t *src)
{
    return ~*src;
    // or return *src ^ 0xffff;
}

GCC transforms xor here to not + zero_extend, which isn't the best choice.
I guess combiner have to try xor pattern instead of not + zero_extend as it
might be cheaper.

Reply via email to