https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103616
--- Comment #8 from Vladimir Makarov <vmakarov at gcc dot gnu.org> --- I looked at the generated code and I see only one issue with func foo: void foo (void) { double d = 0.0, e = 7.8; __asm ("# %0 %1" : : "m" (d), "m" (e)); } for which GCC generates: movq $0x000000000, -16(%rsp) movq .LC1(%rip), %rax movq %rax, -8(%rsp) #APP # 5 "b.i" 1 # -16(%rsp) -8(%rsp) # ! .LC1(%rip) could be used instead -8(%rsp) # 0 "" 2 #NO_APP ret I believe it is not a RA issue. We have the following after expand: 7: r99:DF=[`*.LC1'] 8: [r93:DI-0x8]=r99:DF 9: {asm_operands;clobber flags:CC;} after vreg (changing r93 to frame): 7: r99:DF=[`*.LC1'] 8: [frame:DI-0x8]=r99:DF 9: {asm_operands;clobber flags:CC;} after combine1 (constant propagation of r99): 7: NOTE_INSN_DELETED 8: [frame:DI-0x8]=7.79999999999999982236431605997495353221893310546875e+0 9: {asm_operands;clobber flags:CC;} after reload (generation of reload insn 15 for insn 8): 7: NOTE_INSN_DELETED 15: ax:DF=[`*.LC1'] REG_EQUAL 7.79999999999999982236431605997495353221893310546875e+0 8: [sp:DI-0x8]=ax:DF 9: {asm_operands;clobber flags:CC;} Theoretically we could do constant propagation of memory value in, before, or after RA but it is too complicated. Therefore I think it should be fixed before or in expand pass.