https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102178
--- Comment #24 from Hongtao.liu <crazylht at gmail dot com> --- for vmovq %rdi, %xmm7 # 503 [c=4 l=4] *movdf_internal/21 .. vmulsd %xmm7, %xmm4, %xmm5 # 320 [c=12 l=4] *fop_df_comm/2 .. movabsq $0x3fef85af6c69b5a6, %rdi # 409 [c=5 l=10] *movdf_internal/11 and 7806(insn 320 319 322 8 (set (reg:DF 441) 7807 (mult:DF (reg:DF 166 [ _323 ]) 7808 (reg:DF 249 [ _900 ]))) "../test.c":87:218 1072 {*fop_df_comm} 7809 (expr_list:REG_DEAD (reg:DF 249 [ _900 ]) 7810 (nil))) RA allocate rdi for 249 because cost of general reg is cheaper than mem. a66(r249,l1) costs: AREG:5964,5964 DREG:5964,5964 CREG:5964,5964 BREG:5964,5964 SIREG:5964,5964 DIREG:5964,5964 AD_REGS:5964,5964 CLOBBERED_REGS:5964,5964 Q_REGS:5964,5964 NON_Q_REGS:5964,5964 TLS_GOTBASE_REGS:5964,5964 GENERAL_REGS:5964,5964 FP_TOP_REG:19546,19546 FP_SECOND_REG:19546,19546 FLOAT_REGS:19546,19546 SSE_FIRST_REG:0,0 NO_REX_SSE_REGS:0,0 SSE_REGS:0,0 FLOAT_SSE_REGS:19546,19546 FLOAT_INT_REGS:19546,19546 INT_SSE_REGS:19546,19546 FLOAT_INT_SSE_REGS:19546,19546 MEM:6294,6294 950 r249: preferred SSE_REGS, alternative GENERAL_REGS, allocno INT_SSE_REGS Disposition: 66:r249 l1 5 with -mtune=aldlake, for r249 cost of general regs is expensive than mem, and RA will allocate mem for it, then no more movabsq/vmovq is needed. 655 a66(r249,l1) costs: AREG:5964,5964 DREG:5964,5964 CREG:5964,5964 BREG:5964,5964 SIREG:5964,5964 DIREG:5964,5964 AD_REGS:5964,5964 CLOBBERED_REGS:5964,5964 Q_REGS:5964,5964 NO\ N_Q_REGS:5964,5964 TLS_GOTBASE_REGS:5964,5964 GENERAL_REGS:5964,5964 FP_TOP_REG:14908,14908 FP_SECOND_REG:14908,14908 FLOAT_REGS:14908,14908 SSE_FIRST_REG:0,0 NO_REX_SSE_REGS:0\ ,0 SSE_REGS:0,0 FLOAT_SSE_REGS:14908,14908 FLOAT_INT_REGS:14908,14908 INT_SSE_REGS:14908,14908 FLOAT_INT_SSE_REGS:14908,14908 MEM:5632,5632 950 r249: preferred SSE_REGS, alternative NO_REGS, allocno SSE_REGS 66:r249 l1 mem vmulsd -80(%rsp), %xmm2, %xmm3 # 320 [c=29 l=6] *fop_df_comm/2 Guess we need to let RA know mem cost is cheaper than GPR for r249.