This is the mail archive of the
mailing list for the GCC project.
Re: Followup for reg_equiv_invariant patch: Fix PR39871
- From: Jeff Law <law at redhat dot com>
- To: Bernd Schmidt <bernds at codesourcery dot com>
- Cc: IainS <developer at sandoe-acoustics dot co dot uk>, GCC Patches <gcc-patches at gcc dot gnu dot org>, "Vladimir N. Makarov" <vmakarov at redhat dot com>
- Date: Mon, 02 Aug 2010 08:59:07 -0600
- Subject: Re: Followup for reg_equiv_invariant patch: Fix PR39871
- References: <4C16B0B4.firstname.lastname@example.org> <email@example.com> <4C1702DD.firstname.lastname@example.org> <email@example.com> <4C175C23.firstname.lastname@example.org> <4C1A9971.email@example.com> <9A4C9FCF-2527-4BCA-B217-F835012D5A57@sandoe-acoustics.co.uk> <4C54373F.firstname.lastname@example.org>
On 07/31/10 08:46, Bernd Schmidt wrote:
On 07/24/2010 03:09 PM, IainS wrote:
Strange. Why wasn't this necessary in the past?
On 17 Jun 2010, at 22:53, Bernd Schmidt wrote:
This is what I committed after retesting on ARM (with -O2 -fpic included
Hmm, there seem to be two latent problems that suddenly show up in one
In replace_pseudos_in, we have a series of if statements, which tries to
pick the correct new home from the various possible alternatives. This
seems to need a check for reg_equiv_invariant.
What I see is we've disabled wiping spilled_pseudos in the main reload
loop because its state needs to be carried across iterations, but
nothing was added to wipe spilled_pseudos at either the very beginning
or very end of reload, thus the pollution of the bitmap. I don't see
how ALLOCNO_DONT_REASSIGN_P plays into this.
The other is a crash because when compiling a function with 120 or so
registers, spilled_pseudos has bit 165 set from the previous function -
it's not cleared at the top of reload, and if I had to hazard a guess,
it wasn't cleared in ira_reassign_pseudos due to ALLOCNO_DONT_REASSIGN_P
(conflict_a) or somesuch while compiling the previous function.
One could certainly discuss why we need to accumulate the set of spills
in spilled_pseudos from one iterations of the main reload loop to the
next. It seems wrong, but there's probably some subtle reason for this
change in behavior that I'm missing. The comment certainly isn't clear
enough on this issue.