From: Eric Botcazou Date: Fri, 23 Oct 2020 07:51:46 +0000 (+0200) Subject: Do not use doloop pattern with pragma Unroll X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5f966d689710cbb03a0592504102119ab99978d4;p=gcc.git 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. --- 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;