On 12/06/09 20:10, daniel tian wrote:
You might start by monitoring emit_reload_insns's behavior when it handles
your insn.
I just debug the source code with your advice. Check the function
emit_reload_insns.

That insn was deleted before entering funcion emit_reload_insns. It
was deleted in reload(...) in reload1.c file just before calling
function reload_as_needed(this function will call emit_reload_insns).
It is sure that the insn is generated, but deleted after reload.

insn was deleted in following code.
/* If a pseudo has no hard reg, delete the insns that made the equivalence.
      If that insn didn't set the register (i.e., it copied the register to
      memory), just delete that insn instead of the equivalencing insn plus
      anything now dead.  If we call delete_dead_insn on that insn, we may
      delete the insn that actually sets the register if the register dies
      there and that is incorrect.  */
No. I'm not referring to why the original insn was deleted. I'm referring to why the reload insn was deleted (or never emitted in the first place).

Start by looking at the insns created by emit_reload_insns for the insn with the call. One of those should be loading a hard register with the function address.


jeff

Reply via email to