From 5f966d689710cbb03a0592504102119ab99978d4 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 23 Oct 2020 09:51:46 +0200 Subject: [PATCH] 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. --- gcc/tree-ssa-loop-ivopts.c | 3 +++ 1 file changed, 3 insertions(+) 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; -- 2.30.2