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

            Bug ID: 125706
           Summary: Possible missed optimization at O3
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: apowenq at gmail dot com
  Target Milestone: ---

cat prog.c
#include <stdint.h>

int8_t src(uint8_t v2_u8, int8_t v4_i8, int8_t v5_i8) {
  if (!(((uint8_t)6 <= v2_u8) && (v2_u8 <= (uint8_t)7)))
__builtin_unreachable();
  if (!(((int8_t)65 <= v4_i8) && (v4_i8 <= (int8_t)80)))
__builtin_unreachable();
  if (!(((int8_t)100 <= v5_i8) && (v5_i8 <= (int8_t)101)))
__builtin_unreachable();
  int8_t i0_i8 = (int8_t)(v5_i8 % v4_i8);
  int8_t i1_i8 = (int8_t)((int8_t)i0_i8 >> (uint8_t)v2_u8);
  return i1_i8;
}

Clang truck at O3 can optimize the C code, but GCC truck at O3 cannot.
Reproduer: https://godbolt.org/z/veTrK37sv

GCC truck at O3:
src:
        xor     eax, eax
        ret

Clang truck at O3:
src:
        movsx   eax, dl
        movsx   esi, sil
        mov     ecx, edi
        cdq
        idiv    esi
        sar     edx, cl
        mov     eax, edx
        ret

Reply via email to