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")])

Reply via email to