diff options
author | Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org> | 2019-08-29 15:21:36 +0000 |
---|---|---|
committer | Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org> | 2020-03-06 16:36:54 +0000 |
commit | dfad02ea7335edcb87b1b51aa3f4df54806e1bc8 (patch) | |
tree | 9c81ad66602ea33d8aa69422a26e31a96cd1cddd | |
parent | e6ce69cae5059dfd715edd4e26653c23baf4cb0f (diff) |
Improve autoprefetcher heuristic (partly fix regression in PR91598)
PR rtl-optimization/91598
* haifa-sched.c (autopref_rank_for_schedule): Prioritize "irrelevant"
insns after memory reads and before memory writes.
Change-Id: Ie9dd3664c652760ca605fcb3fe53190429870ded
-rw-r--r-- | gcc/haifa-sched.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 80687fb5359..fbaa0470bba 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -5683,9 +5683,16 @@ autopref_rank_for_schedule (const rtx_insn *insn1, const rtx_insn *insn2) int irrel2 = data2->status == AUTOPREF_MULTIPASS_DATA_IRRELEVANT; if (!irrel1 && !irrel2) + /* Sort memory references from lowest offset to the largest. */ r = data1->offset - data2->offset; - else + else if (write) + /* Schedule "irrelevant" insns before memory stores to resolve + as many producer dependencies of stores as possible. */ r = irrel2 - irrel1; + else + /* Schedule "irrelevant" insns after memory reads to avoid breaking + memory read sequences. */ + r = irrel1 - irrel2; } return r; |