On 04/07/2011 01:30 PM, Alexander Monakov wrote:
Hi,

Selective scheduler does not explicitly forbid creating bookkeeping copies of
CALLs, but an assert in create_copy_of_insn_rtx does not expect a CALL.  Since
there's little benefit from aggressive scheduling of CALLs, it makes sense to
restrict it so that CALLs cannot be duplicated.

This patch makes CALLs non-clonable by adding an explicit check in additional
to other non-clonable insns (ASMs, instructions that are a part of
SCHED_GROUPs, etc.).  We also need to forbid pipelining of loops that have no
exit edges, since our check for whether a motion would create bookkeeping does
not work in that case (it's one of the solutions; the other is to fixup
remove_insns_that_need_bookkeeping function, but this one is simpler and
faster).


        PR target/48273
        * cfgloop.h (loop_has_exit_edges): New helper.
        * sel-sched-ir.c (init_global_and_expr_for_insn): Make CALLs
        non-clonable.
        (sel_setup_region_sched_flags): Don't pipeline loops that have no
        exit edges.

testsuite:
        * g++.dg/opt/pr48273.C: New.

Ok, thanks.


Reply via email to