https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125707
Bug ID: 125707
Summary: Possible missed optimization at O3 (also O2 and O1)
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(int8_t v3_i8) {
if (!(((int8_t)0 <= v3_i8) && (v3_i8 <= (int8_t)2))) __builtin_unreachable();
int8_t i0_i8 = (int8_t)((uint8_t)(int8_t)-1 - (uint8_t)v3_i8);
int8_t i1_i8 = (int8_t)((int8_t)i0_i8 >> (uint8_t)v3_i8);
return i1_i8;
}
GCC truck at O3 cannot optimize the C program, but Clang truck at O3 can.
Reproducer: https://godbolt.org/z/zn1ozPW61
GCC truck at O3:
src:
mov eax, edi
mov ecx, edi
not eax
movsx eax, al
sar eax, cl
ret
Clang truck at O3:
src:
mov al, -1
ret