On 07/10/2013 03:37 AM, Eric Botcazou wrote:
Hi,

I was a little surprised to find out that dbr can silently drop the alignment
information for labels computed when the CFG is valid (in compute_alignments).
The pessimization can be significant for loops when the top label needs to be
overaligned, as seen on a private port.  Hence the attached patch.

Tested on SPARC/Solaris and SPARC64/Solaris, any objections?


2013-07-10  Eric Botcazou  <ebotca...@adacore.com>

        * rtl.h (update_alignments): Declare.
        * final.c (grow_label_align): New function extracted from...
        (shorten_branches): ...here.  Call it.
        (update_alignments): New function.
        * reorg.c (sibling_labels): New variable.
        (get_label_before): Add SIBLING parameter.  If it is non-zero, push
        the new label along with it onto the sibling_labels vector.
        (fill_simple_delay_slots): Adjust call to get_label_before.
        (fill_slots_from_thread): Likewise.
        (relax_delay_slots): Likewise.
        (make_return_insns): Likewise.
        (dbr_schedule): Invoke update_alignment on the sibling_labels vector.


Looks good to me.

jeff

Reply via email to