https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106069
--- Comment #5 from luoxhu at gcc dot gnu.org --- Seems combine wrongly merged two vec_select instructions: Trying 188 -> 199: 188: r343:V4SI=vec_select(vec_concat(r168:V4SI,r338:V4SI),parallel) REG_DEAD r338:V4SI REG_DEAD r168:V4SI 199: {r353:SI=vec_select(r343:V4SI,parallel);clobber scratch;} Failed to match this instruction: (parallel [ (set (reg:SI 353) (vec_select:SI (reg:V4SI 338) (parallel [ (const_int 3 [0x3]) ]))) (clobber (scratch:V4SI)) (set (reg:V4SI 343) (vec_select:V4SI (vec_concat:V8SI (reg/v:V4SI 168 [ R02$m_simd ]) (reg:V4SI 338)) (parallel [ (const_int 2 [0x2]) (const_int 6 [0x6]) (const_int 3 [0x3]) (const_int 7 [0x7]) ]))) ]) Failed to match this instruction: (parallel [ (set (reg:SI 353) (vec_select:SI (reg:V4SI 338) (parallel [ (const_int 3 [0x3]) ]))) (set (reg:V4SI 343) (vec_select:V4SI (vec_concat:V8SI (reg/v:V4SI 168 [ R02$m_simd ]) (reg:V4SI 338)) (parallel [ (const_int 2 [0x2]) (const_int 6 [0x6]) (const_int 3 [0x3]) (const_int 7 [0x7]) ]))) ]) Successfully matched this instruction: (set (reg:V4SI 343) (vec_select:V4SI (vec_concat:V8SI (reg/v:V4SI 168 [ R02$m_simd ]) (reg:V4SI 338)) (parallel [ (const_int 2 [0x2]) (const_int 6 [0x6]) (const_int 3 [0x3]) (const_int 7 [0x7]) ]))) Successfully matched this instruction: (set (reg:SI 353) (vec_select:SI (reg:V4SI 338) (parallel [ (const_int 3 [0x3]) ]))) allowing combination of insns 188 and 199 original costs 4 + 8 = 12 replacement costs 4 + 8 = 12 modifying insn i2 188: r343:V4SI=vec_select(vec_concat(r168:V4SI,r338:V4SI),parallel) REG_DEAD r168:V4SI deferring rescan insn with uid = 188. modifying insn i3 199: {r353:SI=vec_select(r338:V4SI,parallel);clobber scratch;} REG_DEAD r338:V4SI deferring rescan insn with uid = 199.