https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81532
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2017-07-24 Ever confirmed|0 |1 --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- -O2 -mavx512bw -mavx512vl is enough to reproduce. Cleaned up testcase: typedef unsigned __int128 V __attribute__ ((vector_size (64))); V foo (V c) { c >>= 0 != c; return c; } The problem is I believe that Yd/Ye constraints use wrong ISA macro. For !TARGET_64BIT ALL_SSE_REGS is equivalent to SSE_REGS, and for TARGET_64BIT Yd/Ye is only used in movti_internal. For the corresponding splitters to work, I believe we need vpextrq and vpinsrq instructions, both of which are AVX512DQ rather than AVX512BW - AVX512BW is only for vp{ext,ins}r{b,w}.