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.