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.