https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71389
--- Comment #3 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Uroš Bizjak from comment #2) > (gdb) p debug_rtx (insn) > (insn 198 206 199 11 (set (mem/c:V16QI (plus:DI (reg/f:DI 20 frame) > (const_int -664 [0xfffffffffffffd68])) [7 MEM[(value_type > &)&v13 + 344]+16 S16 A64]) > (vec_select:V16QI (subreg:V32QI (reg:V8SI 175) 0) > (parallel [ > (const_int 16 [0x10]) > (const_int 17 [0x11]) > (const_int 18 [0x12]) > (const_int 19 [0x13]) > (const_int 20 [0x14]) > (const_int 21 [0x15]) > (const_int 22 [0x16]) > (const_int 23 [0x17]) > (const_int 24 [0x18]) > (const_int 25 [0x19]) > (const_int 26 [0x1a]) > (const_int 27 [0x1b]) > (const_int 28 [0x1c]) > (const_int 29 [0x1d]) > (const_int 30 [0x1e]) > (const_int 31 [0x1f]) > ]))) -1 > (expr_list:REG_DEAD (reg:V8SI 175) > (nil))) I can't see the reason why the above pattern is not recognized as: (define_insn "vec_extract_hi_v32qi" [(set (match_operand:V16QI 0 "nonimmediate_operand" "=x,m,v,m,v,m") (vec_select:V16QI (match_operand:V32QI 1 "register_operand" "x,x,v,v,v,v") (parallel [(const_int 16) (const_int 17) (const_int 18) (const_int 19) (const_int 20) (const_int 21) (const_int 22) (const_int 23) (const_int 24) (const_int 25) (const_int 26) (const_int 27) (const_int 28) (const_int 29) (const_int 30) (const_int 31)])))] "TARGET_AVX" "@ vextract%~128\t{$0x1, %1, %0|%0, %1, 0x1} vextract%~128\t{$0x1, %1, %0|%0, %1, 0x1} vextracti32x4\t{$0x1, %1, %0|%0, %1, 0x1} vextracti32x4\t{$0x1, %1, %0|%0, %1, 0x1} vextracti32x4\t{$0x1, %g1, %0|%0, %g1, 0x1} vextracti32x4\t{$0x1, %g1, %0|%0, %g1, 0x1}" [(set_attr "type" "sselog") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "isa" "*,*,avx512dq,avx512dq,avx512f,avx512f") (set_attr "memory" "none,store,none,store,none,store") (set_attr "prefix" "vex,vex,evex,evex,evex,evex") (set_attr "mode" "OI")])