]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Improve autoprefetcher heuristic (partly fix regression in PR91598)
authorMaxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
Thu, 29 Aug 2019 15:21:36 +0000 (15:21 +0000)
committerMaxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
Tue, 17 Aug 2021 09:51:52 +0000 (09:51 +0000)
PR rtl-optimization/91598
* haifa-sched.c (autopref_rank_for_schedule): Prioritize "irrelevant"
insns after memory reads and before memory writes.

gcc/haifa-sched.c

index 26d112795511b5b71d6107f371abd8fdb7daab0e..5048dd4a5a32c1432ad84772b627b51fa5a2989e 100644 (file)
@@ -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;