diff options
author | abel <abel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-14 11:07:39 +0000 |
---|---|---|
committer | abel <abel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-14 11:07:39 +0000 |
commit | abb9c563a3f38041f2907a9c8c0ec14e71a34039 (patch) | |
tree | 417364ab83b0b9a615900c90101e61adef6bf7cb /gcc/sel-sched.c | |
parent | 61e213e2de2a03df34ab718451239282eac431f8 (diff) | |
download | gcc-abb9c563a3f38041f2907a9c8c0ec14e71a34039.tar.gz |
PR rtl-optimization/42389
* sel-sched.c (advance_one_cycle): Set FENCE_ISSUE_MORE
to can_issue_more.
(advance_state_on_fence): Likewise.
(sel_target_adjust_priority): Print debug output only when
sched_verbose >= 4, not 2.
(get_expr_cost): Do not issue all unique insns on the next cycle.
(fill_insns): Initialize can_issue_more from the value saved
with the fence.
* sel-sched-ir.c (flist_add): New parameter issue_more.
Init FENCE_ISSUE_MORE with it.
(merge_fences): Likewise.
(init_fences): Update call to flist_add.
(add_to_fences, add_clean_fence_to_fences)
(add_dirty_fence_to_fences): Likewise.
(move_fence_to_fences): Update call to merge_fences.
(invoke_reorder_hooks): Do not reset can_issue_more on insns from
sched groups.
* sel-sched-ir.h (struct _fence): New field issue_more.
(FENCE_ISSUE_MORE): New accessor macro.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155895 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sel-sched.c')
-rw-r--r-- | gcc/sel-sched.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c index 1ec2eeb292d..1b8f47187a9 100644 --- a/gcc/sel-sched.c +++ b/gcc/sel-sched.c @@ -588,6 +588,7 @@ advance_one_cycle (fence_t fence) FENCE_ISSUED_INSNS (fence) = 0; FENCE_STARTS_CYCLE_P (fence) = 1; can_issue_more = issue_rate; + FENCE_ISSUE_MORE (fence) = can_issue_more; for (i = 0; VEC_iterate (rtx, FENCE_EXECUTING_INSNS (fence), i, insn); ) { @@ -3301,8 +3302,8 @@ sel_target_adjust_priority (expr_t expr) gcc_assert (EXPR_PRIORITY_ADJ (expr) >= 0); - if (sched_verbose >= 2) - sel_print ("sel_target_adjust_priority: insn %d, %d +%d = %d.\n", + if (sched_verbose >= 4) + sel_print ("sel_target_adjust_priority: insn %d, %d+%d = %d.\n", INSN_UID (EXPR_INSN_RTX (expr)), EXPR_PRIORITY (expr), EXPR_PRIORITY_ADJ (expr), new_priority); @@ -4103,7 +4104,7 @@ invoke_reorder_hooks (fence_t fence) ran_hook = true; } else - issue_more = issue_rate; + issue_more = FENCE_ISSUE_MORE (fence); /* Ensure that ready list and vec_av_set are in line with each other, i.e. vec_av_set[i] == ready_element (&ready, i). */ @@ -4294,8 +4295,6 @@ get_expr_cost (expr_t expr, fence_t fence) if (recog_memoized (insn) < 0) { if (!FENCE_STARTS_CYCLE_P (fence) - /* FIXME: Is this condition necessary? */ - && VINSN_UNIQUE_P (EXPR_VINSN (expr)) && INSN_ASM_P (insn)) /* This is asm insn which is tryed to be issued on the cycle not first. Issue it on the next cycle. */ @@ -5283,6 +5282,7 @@ advance_state_on_fence (fence_t fence, insn_t insn) debug_state (FENCE_STATE (fence)); if (!DEBUG_INSN_P (insn)) FENCE_STARTS_CYCLE_P (fence) = 0; + FENCE_ISSUE_MORE (fence) = can_issue_more; return asm_p; } @@ -5480,6 +5480,7 @@ fill_insns (fence_t fence, int seqno, ilist_t **scheduled_insns_tailpp) blist_add (&bnds, insn, NULL, FENCE_DC (fence)); bnds_tailp = &BLIST_NEXT (bnds); set_target_context (FENCE_TC (fence)); + can_issue_more = FENCE_ISSUE_MORE (fence); target_bb = INSN_BB (insn); /* Do while we can add any operation to the current group. */ |