haifa-sched.c (recompute_todo_spec): Simplify and correct the code checking for a clobber of a condition register...
* haifa-sched.c (recompute_todo_spec): Simplify and correct the code checking for a clobber of a condition register when deciding whether to predicate. From-SVN: r181806
This commit is contained in:
parent
4d5ae4eadc
commit
89ff14c265
|
@ -1,3 +1,9 @@
|
|||
2011-11-29 Bernd Schmidt <bernds@codesourcery.com>
|
||||
|
||||
* haifa-sched.c (recompute_todo_spec): Simplify and correct the
|
||||
code checking for a clobber of a condition register when deciding
|
||||
whether to predicate.
|
||||
|
||||
2011-11-29 Diego Novillo <dnovillo@google.com>
|
||||
|
||||
* gimple.c (gimple_call_set_cannot_inline): Move from gimple.h.
|
||||
|
|
|
@ -1178,33 +1178,20 @@ recompute_todo_spec (rtx next)
|
|||
regno = REGNO (XEXP (cond, 0));
|
||||
|
||||
/* Find the last scheduled insn that modifies the condition register.
|
||||
If we have a true dependency on it, it sets it to the correct value,
|
||||
otherwise it must be a later insn scheduled in-between that clobbers
|
||||
the condition. */
|
||||
FOR_EACH_VEC_ELT_REVERSE (rtx, scheduled_insns, i, prev)
|
||||
{
|
||||
sd_iterator_def sd_it;
|
||||
dep_t dep;
|
||||
HARD_REG_SET t;
|
||||
bool found;
|
||||
We can stop looking once we find the insn we depend on through the
|
||||
REG_DEP_CONTROL; if the condition register isn't modified after it,
|
||||
we know that it still has the right value. */
|
||||
if (QUEUE_INDEX (pro) == QUEUE_SCHEDULED)
|
||||
FOR_EACH_VEC_ELT_REVERSE (rtx, scheduled_insns, i, prev)
|
||||
{
|
||||
HARD_REG_SET t;
|
||||
|
||||
find_all_hard_reg_sets (prev, &t);
|
||||
if (!TEST_HARD_REG_BIT (t, regno))
|
||||
continue;
|
||||
|
||||
found = false;
|
||||
FOR_EACH_DEP (next, SD_LIST_RES_BACK, sd_it, dep)
|
||||
{
|
||||
if (DEP_PRO (dep) == prev && DEP_TYPE (dep) == REG_DEP_TRUE)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
return HARD_DEP;
|
||||
break;
|
||||
}
|
||||
find_all_hard_reg_sets (prev, &t);
|
||||
if (TEST_HARD_REG_BIT (t, regno))
|
||||
return HARD_DEP;
|
||||
if (prev == pro)
|
||||
break;
|
||||
}
|
||||
if (ORIG_PAT (next) == NULL_RTX)
|
||||
{
|
||||
ORIG_PAT (next) = PATTERN (next);
|
||||
|
|
Loading…
Reference in New Issue