diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2020-10-23 09:51:46 +0200 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2020-10-23 09:58:33 +0200 |
commit | 5f966d689710cbb03a0592504102119ab99978d4 (patch) | |
tree | f796ec4c2480a6456aaeee7fc8ca08a3db785f5b | |
parent | 98161c248c88f873bbffba23664c540f551d89d5 (diff) | |
download | gcc-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.c | 3 |
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; |