On 4-Jun-14, at 3:38 AM, Jeff Law wrote:
On 05/24/14 12:39, John David Anglin wrote:
The insns are being deleted in "final" after the assembly output has
being done. So, for example, pa_output_call is
never called with a delayed branch sequence containing a
NOTE_INSN_DELETED.
OK. That's good to know. I scanned final and final_scan_insn and
see a couple places where we delete insns, but if I'm reading the
code correctly, they would result in seeing the NOTE_INSN_DELETED
rather than a real insn in the output routines.
So what code during final is deleting these insns?
It's the PA backend. For example,
/* If this isn't a sibcall, we put the load of %r27 into the
delay slot. We can't do this in a sibcall as we don't
have a second call-clobbered scratch register available.
*/
if (seq_length != 0
&& ! JUMP_P (NEXT_INSN (insn))
&& !sibcall)
{
final_scan_insn (NEXT_INSN (insn), asm_out_file,
optimize, 0, NULL);
/* Now delete the delay insn. */
SET_INSN_DELETED (NEXT_INSN (insn));
delay_insn_deleted = 1;
}
The insn is deleted so that it won't be emitted again. This is done
in a bunch
of places.
What's new is the verification after assembly output.
Dave
--
John David Anglin dave.ang...@bell.net