https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69671
--- Comment #5 from Kirill Yukhin <kyukhin at gcc dot gnu.org> --- (In reply to ktkachov from comment #3) > CC'ing Kirill for AVX512 opinion I suppose that there's something wrong w/ MD patterns. E.g. for example provided pattern is: ;; /export/users/kyukhin/gcc/git/gcc/gcc/config/i386/sse.md: 9199 (define_insn ("avx512vl_truncatev4siv4qi2_mask") [ (set (match_operand:V16QI 0 ("register_operand") ("=v")) (vec_concat:V16QI (vec_merge:V4QI (truncate:V4QI (match_operand:V4SI 1 ("register_operand") ("v"))) (vec_select:V4QI (match_operand:V16QI 2 ("vector_move_operand") ("0C")) (parallel [ (const_int 0 [0]) (const_int 1 [0x1]) (const_int 2 [0x2]) (const_int 3 [0x3]) ])) (match_operand:QI 3 ("register_operand") ("Yk"))) (const_vector:V12QI [ (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) (const_int 0 [0]) Right now I think that 2nd operand predicate is not correct. It should be const0_rtx (of corresponding mode) or duplicate of operand 0 (result actually) This is whats contstraint tells. However predicate says simply that operand is either const0_rtx or nonimmediate: no connection with operand 0.