From: Maxim Kuvyrkov Date: Thu, 29 Aug 2019 15:21:36 +0000 (+0000) Subject: Improve autoprefetcher heuristic (partly fix regression in PR91598) X-Git-Tag: basepoints/gcc-13~5367 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6d527883072ce96a33169036fca7740172223b52;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 26d112795511..5048dd4a5a32 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;