This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: RFA: patch adding priority coloring for m32c and other ports
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: "Vladimir Makarov" <vmakarov at redhat dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, "Jeff Law" <law at redhat dot com>, "Kenneth Zadeck" <zadeck at naturalbridge dot com>
- Date: Thu, 4 Dec 2008 14:11:08 -0800
- Subject: Re: RFA: patch adding priority coloring for m32c and other ports
- References: <493096F8.3000408@redhat.com> <49381552.8080107@redhat.com>
On Thu, Dec 4, 2008 at 9:37 AM, Vladimir Makarov <vmakarov@redhat.com> wrote:
> Jeff, DJ pointed me some gcc crashes of m32c port with the priority coloring
> patch on newlib and libstdc++. I fixed them. Here the two additional
> patches to review (I decided to sent them instead of full updated patch for
> clarity).
>
> The 1st patch fixes a typo missing allocno_conflict_hard_regs update to
> prohibit usage of callee-saved likely spilled base registers for allocnos
> crossing calls. As I wrote m32c has 2 registers of class A_REGS which are
> used for addressing. If a code for save/restore of such register is
> generated, reload pass dies because we need one A_REG for addressing in
> save/restore code for saving A_REG register, and one A_REG register can be
> used explicitly in a call.
>
> The 2nd patch adds a new register class R02A_REGS (in many cases both
> R02_REGS and A_REGS is more profitable than memory) which permits to assign
> wider classes for allocnos in IRA and prevent some reload crashes
> (insufficient R02_REGS). The patch also fixing a latent reload bug in
> reload inheritance optimization. The compiler crashes in
> smallest_mode_for_size because can not find PARTIAL_INT_MODE of size 8 bytes
> (that is because DImode was used earlier for the pseudo and we are reloading
> (subreg:PSI (reg:DI x) 4)). I have some doubts about the original code but
> I used the simplest fix on this stage. And finally the patch fixes a reload
> crash because jump insn code was set up to -1 by CFG (commit_edge_insertion
> call) and reload can not set it up again because some insn pattern guard.
> So I used the simplest fix which is to reset the code at the end of
> ira-emit.c if it is negative.
>
Hi Vladimir,
I checked your patches into ira-merge branch. I had to apply the first patch
by handle since spaces don't match.
--
H.J.