On 06/08/14 12:06, John David Anglin wrote:
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.
Right.  Thanks for the analysis.  I know it takes significant time.

The original patch is fine and I've installed it on your behalf.

Thanks again,
Jeff

Reply via email to