summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2020-10-23 09:51:46 +0200
committerEric Botcazou <ebotcazou@adacore.com>2020-10-23 09:58:33 +0200
commit5f966d689710cbb03a0592504102119ab99978d4 (patch)
treef796ec4c2480a6456aaeee7fc8ca08a3db785f5b
parent98161c248c88f873bbffba23664c540f551d89d5 (diff)
downloadgcc-5f966d689710cbb03a0592504102119ab99978d4.tar.gz
Do not use doloop pattern with pragma Unroll
This fixes the following Ada failure on 64-bit PowerPC: -FAIL: gnat.dg/unroll4.adb scan-rtl-dump-times loop2_unroll "optimized: loop unrolled 7 times" 2 The IVOPTS pass detects a doloop pattern and consequently discombobulates the loop sufficiently as to make it hard for the RTL unrolling pass to compute the best number of iterations. gcc/ChangeLog: * tree-ssa-loop-ivopts.c (analyze_and_mark_doloop_use): Bail out if the loop is subject to a pragma Unroll with no specific count.
-rw-r--r--gcc/tree-ssa-loop-ivopts.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 5acf044161c..da04dd5ba0a 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -7947,6 +7947,9 @@ analyze_and_mark_doloop_use (struct ivopts_data *data)
if (!flag_branch_on_count_reg)
return;
+ if (data->current_loop->unroll == USHRT_MAX)
+ return;
+
if (!generic_predict_doloop_p (data))
return;