diff options
Diffstat (limited to 'contrib/gcc/sched-deps.c')
-rw-r--r-- | contrib/gcc/sched-deps.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/contrib/gcc/sched-deps.c b/contrib/gcc/sched-deps.c index 98b0732..e261608 100644 --- a/contrib/gcc/sched-deps.c +++ b/contrib/gcc/sched-deps.c @@ -977,12 +977,17 @@ sched_analyze_insn (deps, x, insn, loop_notes) else { rtx pending, pending_mem; - regset_head tmp; - INIT_REG_SET (&tmp); + regset_head tmp_uses, tmp_sets; + INIT_REG_SET (&tmp_uses); + INIT_REG_SET (&tmp_sets); - (*current_sched_info->compute_jump_reg_dependencies) (insn, &tmp); - IOR_REG_SET (reg_pending_uses, &tmp); - CLEAR_REG_SET (&tmp); + (*current_sched_info->compute_jump_reg_dependencies) + (insn, &deps->reg_conditional_sets, &tmp_uses, &tmp_sets); + IOR_REG_SET (reg_pending_uses, &tmp_uses); + IOR_REG_SET (reg_pending_sets, &tmp_sets); + + CLEAR_REG_SET (&tmp_uses); + CLEAR_REG_SET (&tmp_sets); /* All memory writes and volatile reads must happen before the jump. Non-volatile reads must happen before the jump iff @@ -1079,6 +1084,7 @@ sched_analyze_insn (deps, x, insn, loop_notes) } flush_pending_lists (deps, insn, true, true); + CLEAR_REG_SET (&deps->reg_conditional_sets); reg_pending_barrier = false; } else @@ -1110,6 +1116,7 @@ sched_analyze_insn (deps, x, insn, loop_notes) add_dependence_list (insn, reg_last->clobbers, REG_DEP_OUTPUT); add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); + SET_REGNO_REG_SET (&deps->reg_conditional_sets, i); }); } else @@ -1158,6 +1165,7 @@ sched_analyze_insn (deps, x, insn, loop_notes) reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); reg_last->uses_length = 0; reg_last->clobbers_length = 0; + CLEAR_REGNO_REG_SET (&deps->reg_conditional_sets, i); }); } @@ -1484,6 +1492,7 @@ init_deps (deps) deps->reg_last = (struct deps_reg *) xcalloc (max_reg, sizeof (struct deps_reg)); INIT_REG_SET (&deps->reg_last_in_use); + INIT_REG_SET (&deps->reg_conditional_sets); deps->pending_read_insns = 0; deps->pending_read_mems = 0; @@ -1526,6 +1535,7 @@ free_deps (deps) free_INSN_LIST_list (®_last->clobbers); }); CLEAR_REG_SET (&deps->reg_last_in_use); + CLEAR_REG_SET (&deps->reg_conditional_sets); free (deps->reg_last); } |