haifa-sched.c (try_ready): Change condition to restore non-speculative pattern of the instruction.
2006-03-30 Maxim Kuvyrkov <mkuvyrkov@ispras.ru> * haifa-sched.c (try_ready): Change condition to restore non-speculative pattern of the instruction. (process_insn_depend_be_in_spec): Code to keep probability of the speculative dependence non-decreasing. From-SVN: r112537
This commit is contained in:
parent
144f831567
commit
682b6a9e8f
@ -1,3 +1,10 @@
|
|||||||
|
2006-03-30 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
|
||||||
|
|
||||||
|
* haifa-sched.c (try_ready): Change condition to restore
|
||||||
|
non-speculative pattern of the instruction.
|
||||||
|
(process_insn_depend_be_in_spec): Code to keep probability of the
|
||||||
|
speculative dependence non-decreasing.
|
||||||
|
|
||||||
2006-03-30 Jie Zhang <jie.zhang@analog.com>
|
2006-03-30 Jie Zhang <jie.zhang@analog.com>
|
||||||
|
|
||||||
* config/bfin/bfin.c (single_move_for_strmov): Renamed to...
|
* config/bfin/bfin.c (single_move_for_strmov): Renamed to...
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* Instruction scheduling pass.
|
/* Instruction scheduling pass.
|
||||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
|
Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
|
||||||
and currently maintained by, Jim Wilson (wilson@cygnus.com)
|
and currently maintained by, Jim Wilson (wilson@cygnus.com)
|
||||||
|
|
||||||
@ -3055,16 +3055,6 @@ try_ready (rtx next)
|
|||||||
|| !RECOVERY_BLOCK (next)
|
|| !RECOVERY_BLOCK (next)
|
||||||
|| RECOVERY_BLOCK (next) == EXIT_BLOCK_PTR);
|
|| RECOVERY_BLOCK (next) == EXIT_BLOCK_PTR);
|
||||||
|
|
||||||
if (*ts == 0 && ORIG_PAT (next) && !RECOVERY_BLOCK (next))
|
|
||||||
/* We should change pattern of every previously speculative
|
|
||||||
instruction - and we determine if NEXT was speculative by using
|
|
||||||
ORIG_PAT field. Except one case - simple checks have ORIG_PAT
|
|
||||||
pat too, hence we also check for the RECOVERY_BLOCK. */
|
|
||||||
{
|
|
||||||
change_pattern (next, ORIG_PAT (next));
|
|
||||||
ORIG_PAT (next) = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*ts & HARD_DEP)
|
if (*ts & HARD_DEP)
|
||||||
{
|
{
|
||||||
/* We can't assert (QUEUE_INDEX (next) == QUEUE_NOWHERE) here because
|
/* We can't assert (QUEUE_INDEX (next) == QUEUE_NOWHERE) here because
|
||||||
@ -3075,6 +3065,15 @@ try_ready (rtx next)
|
|||||||
change_queue_index (next, QUEUE_NOWHERE);
|
change_queue_index (next, QUEUE_NOWHERE);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
else if (!(*ts & BEGIN_SPEC) && ORIG_PAT (next) && !RECOVERY_BLOCK (next))
|
||||||
|
/* We should change pattern of every previously speculative
|
||||||
|
instruction - and we determine if NEXT was speculative by using
|
||||||
|
ORIG_PAT field. Except one case - simple checks have ORIG_PAT
|
||||||
|
pat too, hence we also check for the RECOVERY_BLOCK. */
|
||||||
|
{
|
||||||
|
change_pattern (next, ORIG_PAT (next));
|
||||||
|
ORIG_PAT (next) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (sched_verbose >= 2)
|
if (sched_verbose >= 2)
|
||||||
{
|
{
|
||||||
@ -3312,8 +3311,30 @@ process_insn_depend_be_in_spec (rtx link, rtx twin, ds_t fs)
|
|||||||
|
|
||||||
ds = DEP_STATUS (link);
|
ds = DEP_STATUS (link);
|
||||||
|
|
||||||
if (fs && (ds & DEP_TYPES) == DEP_TRUE)
|
if (/* If we want to create speculative dep. */
|
||||||
|
fs
|
||||||
|
/* And we can do that because this is a true dep. */
|
||||||
|
&& (ds & DEP_TYPES) == DEP_TRUE)
|
||||||
|
{
|
||||||
|
gcc_assert (!(ds & BE_IN_SPEC));
|
||||||
|
|
||||||
|
if (/* If this dep can be overcomed with 'begin speculation'. */
|
||||||
|
ds & BEGIN_SPEC)
|
||||||
|
/* Then we have a choice: keep the dep 'begin speculative'
|
||||||
|
or transform it into 'be in speculative'. */
|
||||||
|
{
|
||||||
|
if (/* In try_ready we assert that if insn once became ready
|
||||||
|
it can be removed from the ready (or queue) list only
|
||||||
|
due to backend decision. Hence we can't let the
|
||||||
|
probability of the speculative dep to decrease. */
|
||||||
|
dep_weak (ds) <= dep_weak (fs))
|
||||||
|
/* Transform it to be in speculative. */
|
||||||
ds = (ds & ~BEGIN_SPEC) | fs;
|
ds = (ds & ~BEGIN_SPEC) | fs;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* Mark the dep as 'be in speculative'. */
|
||||||
|
ds |= fs;
|
||||||
|
}
|
||||||
|
|
||||||
add_back_forw_dep (consumer, twin, REG_NOTE_KIND (link), ds);
|
add_back_forw_dep (consumer, twin, REG_NOTE_KIND (link), ds);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user