https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114544

--- Comment #1 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
20590;; Turn SImode or DImode extraction from arbitrary SSE/AVX/AVX512F
20591;; vector modes into vec_extract*.
20592(define_split
20593  [(set (match_operand:SWI48x 0 "nonimmediate_operand")
20594        (subreg:SWI48x (match_operand 1 "register_operand") 0))]
20595  "can_create_pseudo_p ()
20596   && REG_P (operands[1])
20597   && VECTOR_MODE_P (GET_MODE (operands[1]))
20598   && ((TARGET_SSE && GET_MODE_SIZE (GET_MODE (operands[1])) == 16)
20599       || (TARGET_AVX && GET_MODE_SIZE (GET_MODE (operands[1])) == 32)
20600       || (TARGET_AVX512F && TARGET_EVEX512
20601           && GET_MODE_SIZE (GET_MODE (operands[1])) == 64))
20602   && (<MODE>mode == SImode || TARGET_64BIT || MEM_P (operands[0]))"
20603  [(set (match_dup 0) (vec_select:SWI48x (match_dup 1)
20604                                         (parallel [(const_int 0)])))]
20605{
20606  rtx tmp;

We need to do something similar.

Reply via email to