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