https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119103
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Very suboptimal AVX2 code |shift not demotated when |generation of simple shift |shift amount range is known |loop | --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- RTL handles &0xf but if the range is there we don't optimize it: E.g. it can be shown by: ``` #include <stdint.h> void lshift(uint16_t *x, uint8_t amount) { x[0] = x[0] << (amount&0xF); } void lshift1(uint16_t *x, uint8_t amount) { if (amount >= 16) __builtin_unreachable(); x[0] = x[0] << (amount&0xF); } ```