aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched-rgn.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2003-07-15 15:02:21 +0200
committerEric Botcazou <ebotcazou@gcc.gnu.org>2003-07-15 13:02:21 +0000
commit5a257872da307ca14edb7f1090a8da96f4010de6 (patch)
treef85f39b6c5e76b8a6d89255e1b1725f9a067548d /gcc/sched-rgn.c
parent9fa0903819a6687830aa1e7e70f631ca3eeb3a78 (diff)
downloadgcc-5a257872da307ca14edb7f1090a8da96f4010de6.zip
gcc-5a257872da307ca14edb7f1090a8da96f4010de6.tar.gz
gcc-5a257872da307ca14edb7f1090a8da96f4010de6.tar.bz2
re PR rtl-optimization/11320 (Scheduler bug)
PR optimization/11320 * sched-int.h (struct deps) [reg_conditional_sets]: New field. (struct sched_info) [compute_jump_reg_dependencies]: New prototype. * sched-deps.c (sched_analyze_insn) [JUMP_INSN]: Update call to current_sched_info->compute_jump_reg_dependencies. Record which registers are used and which registers are set by the jump. Clear deps->reg_conditional_sets after a barrier. Set deps->reg_conditional_sets if the insn is a COND_EXEC. Clear deps->reg_conditional_sets if the insn is not a COND_EXEC. (init_deps): Initialize reg_conditional_sets. (free_deps): Clear reg_conditional_sets. * sched-ebb.c (compute_jump_reg_dependencies): New prototype. Mark registers live on entry of the fallthrough block and conditionally set as set by the jump. Mark registers live on entry of non-fallthrough blocks as used by the jump. * sched-rgn.c (compute_jump_reg_dependencies): New prototype. Mark new parameters as unused. From-SVN: r69401
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r--gcc/sched-rgn.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index cebb389..61ab056 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -1701,7 +1701,7 @@ static int schedule_more_p (void);
static const char *rgn_print_insn (rtx, int);
static int rgn_rank (rtx, rtx);
static int contributes_to_priority (rtx, rtx);
-static void compute_jump_reg_dependencies (rtx, regset);
+static void compute_jump_reg_dependencies (rtx, regset, regset, regset);
/* Return nonzero if there are more insns that should be scheduled. */
@@ -1951,11 +1951,15 @@ contributes_to_priority (rtx next, rtx insn)
return BLOCK_NUM (next) == BLOCK_NUM (insn);
}
-/* INSN is a JUMP_INSN. Store the set of registers that must be considered
- to be set by this jump in SET. */
+/* INSN is a JUMP_INSN, COND_SET is the set of registers that are
+ conditionally set before INSN. Store the set of registers that
+ must be considered as used by this jump in USED and that of
+ registers that must be considered as set in SET. */
static void
compute_jump_reg_dependencies (rtx insn ATTRIBUTE_UNUSED,
+ regset cond_exec ATTRIBUTE_UNUSED,
+ regset used ATTRIBUTE_UNUSED,
regset set ATTRIBUTE_UNUSED)
{
/* Nothing to do here, since we postprocess jumps in