https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70873
--- Comment #17 from H.J. Lu <hjl.tools at gmail dot com> --- There are ;; %%% Kill these when call knows how to work out a DFmode push earlier. (define_split [(set (match_operand:DF 0 "push_operand") (float_extend:DF (match_operand:SF 1 "fp_register_operand")))] "reload_completed" [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (const_int -8))) (set (mem:DF (reg:P SP_REG)) (float_extend:DF (match_dup 1)))]) define_split [(set (match_operand:DF 0 "register_operand") (float_extend:DF (match_operand:SF 1 "nonimmediate_operand")))] "TARGET_USE_VECTOR_FP_CONVERTS && optimize_insn_for_speed_p () && reload_completed && SSE_REG_P (operands[0]) && (!EXT_REX_SSE_REG_P (operands[0]) || TARGET_AVX512VL)" ;; It's more profitable to split and then extend in the same register. (define_peephole2 [(set (match_operand:DF 0 "register_operand") (float_extend:DF (match_operand:SF 1 "memory_operand")))] "TARGET_SPLIT_MEM_OPND_FOR_FP_CONVERTS && optimize_insn_for_speed_p () && SSE_REG_P (operands[0])" [(set (match_dup 2) (match_dup 1)) (set (match_dup 0) (float_extend:DF (match_dup 2)))] "operands[2] = gen_rtx_REG (SFmode, REGNO (operands[0]));")