https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112824
liuhongt at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |liuhongt at gcc dot gnu.org --- Comment #4 from liuhongt at gcc dot gnu.org --- there're 2 reasons. 1. X86_TUNE_AVX512_MOVE_BY_PIECES is used for move struct but it's independent of -mprefer-vector-width=512, manully add -mtune-ctrl=-mtune-ctrl=avx512_move_by_pieces can solve most cases. 2. There's still spills for (subreg:DF (reg: V8DF) since ix86_modes_tieable_p return false for DF and V8DF. For 1, I guess when there's explicit -mprefer-vector-width=512, it should rewrite tune X86_TUNE_AVX512_MOVE_BY_PIECES and unset X86_TUNE_AVX256_OPTIMAL/X86_TUNE_AVX128_OPTIMAL For 2, according to doc, it should return false since DF can be allocated to X87 reg, but V8DF only SSE_REGS, so the fix should be using vec_select instead of subreg for that case?