sched: Do not move expensive insns speculatively (PR68664)
authorSegher Boessenkool <segher@kernel.crashing.org>
Mon, 6 Feb 2017 19:19:49 +0000 (20:19 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Mon, 6 Feb 2017 19:19:49 +0000 (20:19 +0100)
commit176274c9bf515f3b71f00b2be71a9ee4771b271f
treeeebb74792325dc6a931fd34554fc77bf0e7a321a
parent2568d8a1f6d3912e53c457a1ea080050a834cf32
sched: Do not move expensive insns speculatively (PR68664)

Scheduling should never move very expensive instructions to places they
are executed more frequently.  This patch fixes that, reducing the
execution time of c-ray by over 40% (I tested on a BE Power7 system).

This introduces a new target hook sched.can_speculate_insn which returns
whether the scheduler is allowed to speculate a given instruction.  The
rs6000 implementation disallows all divide and square root instructions.

PR rtl-optimization/68664
* target.def (can_speculate_insn): New hook.
* doc/tm.texi.in (TARGET_SCHED_CAN_SPECULATE_INSN): New hook.
* doc/tm.texi: Regenerate.
* sched-rgn.c (can_schedule_ready_p): Use the new hook.
* config/rs6000/rs6000.c (TARGET_SCHED_CAN_SPECULATE_INSN): New macro.
(rs6000_sched_can_speculate_insn): New function.

From-SVN: r245215
gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/sched-rgn.c
gcc/target.def