https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118662
--- Comment #10 from Uroš Bizjak <ubizjak at gmail dot com> --- Before combine pass we have (_.297r.ud_dce): (insn 7 4 9 2 (set (reg:V4QI 106 [ MEM <vector(4) signed char> [(type1 *)num_13(D)] ]) (mem:V4QI (reg/v/f:DI 105 [ num ]) [0 MEM <vector(4) signed char> [(type1 *)num_13(D)]+0 S4 A8])) "pr118662.c":9:39 1668 {*movv4qi_internal} (expr_list:REG_DEAD (reg/v/f:DI 105 [ num ]) (nil))) ... (insn 19 17 38 2 (set (reg:SI 116) (zero_extend:SI (vec_select:QI (reg:V4QI 106 [ MEM <vector(4) signed char> [(type1 *)num_13(D)] ]) (parallel [ (const_int 3 [0x3]) ])))) "pr118662.c":12:8 1990 {*pextrb_zext} (expr_list:REG_DEAD (reg:V4QI 106 [ MEM <vector(4) signed char> [(type1 *)num_13(D)] ]) (nil))) but combine changes this to (_.298r.combine): (insn 9 7 10 2 (set (reg:V4SI 108 [ vect_patt_34.8_47 ]) (sign_extend:V4SI (mem:V4QI (reg:DI 118) [0 MEM <vector(4) signed char> [(type1 *)num_13(D)]+0 S4 A8]))) 7795 {*sse4_1_sign_extendv4qiv4si2_1} (expr_list:REG_DEAD (reg:DI 118) (nil))) (insn 10 9 11 2 (set (reg:V4QI 106 [ MEM <vector(4) signed char> [(type1 *)num_13(D)] ]) (subreg:V4QI (reg:V4SI 108 [ vect_patt_34.8_47 ]) 0)) 1668 {*movv4qi_internal} (nil)) ... (insn 19 17 38 2 (set (reg:SI 116) (zero_extend:SI (vec_select:QI (reg:V4QI 106 [ MEM <vector(4) signed char> [(type1 *)num_13(D)] ]) (parallel [ (const_int 3 [0x3]) ])))) "pr118662.c":12:8 1990 {*pextrb_zext} (expr_list:REG_DEAD (reg:V4QI 106 [ MEM <vector(4) signed char> [(type1 *)num_13(D)] ]) (nil))) It is not correct to make a V4QImode lowpart of V4SImode register that holds SImode sign-extended original QImode values.