On Thu, Sep 10, 2026 at 2:28 PM xiezhiheng <[email protected]> wrote:
>
> > -----Original Message-----
> > From: Richard Biener <[email protected]>
> > Sent: Thursday, September 10, 2026 5:51 PM
> > To: xiezhiheng <[email protected]>
> > Cc: [email protected]
> > Subject: Re: [PATCH] sched: Cap max_lookahead_tries
> >
> > On Thu, Sep 10, 2026 at 10:22 AM xiezhiheng <[email protected]> wrote:
> > >
> > > In the AArch64 backend, dfa_lookahead generally returns issue_rate,
> > > so max_lookahead_tries is set to 100 * issue_rate ** issue_rate.
> > > As issue_rate values for modern AArch64 cores increase, this can become
> > > very large. For example, the hip12 core has an issue_rate of 8, which
> > > makes max_lookahead_tries 1,677,721,600 and causes very long compile
> > > times.
> > > Another example is Cortex-X925, whose issue_rate is 10,
> > > this causes an overflow in the computation, and max_lookahead_tries ends
> > > up
> > > being 0. Therefore, this patch caps max_lookahead_tries at 1,000,000.
> > > Not sure whether this value is appropriate, any comments?
> > >
> > >
> > >
> > > With issue_rate values on modern cores continuing to increase,
> > > max_lookahead_tries grows exponentially. Cap max_lookahead_tries
> > > to avoid excessively long compile times.
> > >
> > > Bootstrapped and tested on aarch64-linux-gnu and x86_64-linux-gnu, no
> > > regression.
> >
> > ISTR seeing similar things in a bugzilla when x86 bumped issue_rate
> > for some cores.
> > There's some analysis in the bug:
> >
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119010
>
> Thanks for the info! So maybe the root cause is that some instructions are
> missing reservations? I'll continue investigating in that direction.
I think so.
> Also, the overflow in the max_lookahead_tries calculation is still there.
> Maybe I should send a separate patch to change its type from int to int64_t?
Yes, I think that makes sense.
Richard.
>
>
> >
> > > gcc/ChangeLog:
> > >
> > > * haifa-sched.cc (max_issue): cap max_lookahead_tries
> > > ---
> > > gcc/haifa-sched.cc | 5 +++--
> > > 1 file changed, 3 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/gcc/haifa-sched.cc b/gcc/haifa-sched.cc
> > > index 879749e9785..7f3fd5b496a 100644
> > > --- a/gcc/haifa-sched.cc
> > > +++ b/gcc/haifa-sched.cc
> > > @@ -5956,9 +5956,10 @@ max_issue (struct ready_list *ready, int
> > > privileged_n, state_t state,
> > > /* Init MAX_LOOKAHEAD_TRIES. */
> > > if (max_lookahead_tries == 0)
> > > {
> > > - max_lookahead_tries = 100;
> > > + int64_t max_tries = 100;
> > > for (i = 0; i < issue_rate; i++)
> > > - max_lookahead_tries *= dfa_lookahead;
> > > + max_tries *= dfa_lookahead;
> > > + max_lookahead_tries = MIN (max_tries, (int64_t) 1000000);
> > > }
> > >
> > > /* Init max_points. */