Commit 43722f9f by Bin Cheng Committed by Bin Cheng

sched-deps.c (sched_analyze_1): Check pending list if it is not less than MAX_PENDING_LIST_LENGTH.


	* sched-deps.c (sched_analyze_1): Check pending list if it is not
	less than MAX_PENDING_LIST_LENGTH.
	(sched_analyze_2, sched_analyze_insn, deps_analyze_insn): Ditto.

From-SVN: r217331
parent f93f644e
2014-11-11 Bin Cheng <bin.cheng@arm.com>
* sched-deps.c (sched_analyze_1): Check pending list if it is not
less than MAX_PENDING_LIST_LENGTH.
(sched_analyze_2, sched_analyze_insn, deps_analyze_insn): Ditto.
2014-11-11 Uros Bizjak <ubizjak@gmail.com> 2014-11-11 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.c (ix86_decompose_address): Replace open-coded * config/i386/i386.c (ix86_decompose_address): Replace open-coded
...@@ -2504,7 +2504,7 @@ sched_analyze_1 (struct deps_desc *deps, rtx x, rtx_insn *insn) ...@@ -2504,7 +2504,7 @@ sched_analyze_1 (struct deps_desc *deps, rtx x, rtx_insn *insn)
/* Pending lists can't get larger with a readonly context. */ /* Pending lists can't get larger with a readonly context. */
if (!deps->readonly if (!deps->readonly
&& ((deps->pending_read_list_length + deps->pending_write_list_length) && ((deps->pending_read_list_length + deps->pending_write_list_length)
> MAX_PENDING_LIST_LENGTH)) >= MAX_PENDING_LIST_LENGTH))
{ {
/* Flush all pending reads and writes to prevent the pending lists /* Flush all pending reads and writes to prevent the pending lists
from getting any larger. Insn scheduling runs too slowly when from getting any larger. Insn scheduling runs too slowly when
...@@ -2722,7 +2722,7 @@ sched_analyze_2 (struct deps_desc *deps, rtx x, rtx_insn *insn) ...@@ -2722,7 +2722,7 @@ sched_analyze_2 (struct deps_desc *deps, rtx x, rtx_insn *insn)
{ {
if ((deps->pending_read_list_length if ((deps->pending_read_list_length
+ deps->pending_write_list_length) + deps->pending_write_list_length)
> MAX_PENDING_LIST_LENGTH >= MAX_PENDING_LIST_LENGTH
&& !DEBUG_INSN_P (insn)) && !DEBUG_INSN_P (insn))
flush_pending_lists (deps, insn, true, true); flush_pending_lists (deps, insn, true, true);
add_insn_mem_dependence (deps, true, insn, x); add_insn_mem_dependence (deps, true, insn, x);
...@@ -3227,8 +3227,8 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn) ...@@ -3227,8 +3227,8 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i, rsi) EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i, rsi)
{ {
struct deps_reg *reg_last = &deps->reg_last[i]; struct deps_reg *reg_last = &deps->reg_last[i];
if (reg_last->uses_length > MAX_PENDING_LIST_LENGTH if (reg_last->uses_length >= MAX_PENDING_LIST_LENGTH
|| reg_last->clobbers_length > MAX_PENDING_LIST_LENGTH) || reg_last->clobbers_length >= MAX_PENDING_LIST_LENGTH)
{ {
add_dependence_list_and_free (deps, insn, &reg_last->sets, 0, add_dependence_list_and_free (deps, insn, &reg_last->sets, 0,
REG_DEP_OUTPUT, false); REG_DEP_OUTPUT, false);
...@@ -3661,7 +3661,7 @@ deps_analyze_insn (struct deps_desc *deps, rtx_insn *insn) ...@@ -3661,7 +3661,7 @@ deps_analyze_insn (struct deps_desc *deps, rtx_insn *insn)
&& sel_insn_is_speculation_check (insn))) && sel_insn_is_speculation_check (insn)))
{ {
/* Keep the list a reasonable size. */ /* Keep the list a reasonable size. */
if (deps->pending_flush_length++ > MAX_PENDING_LIST_LENGTH) if (deps->pending_flush_length++ >= MAX_PENDING_LIST_LENGTH)
flush_pending_lists (deps, insn, true, true); flush_pending_lists (deps, insn, true, true);
else else
deps->pending_jump_insns deps->pending_jump_insns
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment